Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
12 KiB
Canlıya alma (Dokploy + Gitea)
BÜTÇEM'i Atlas sunucusunda Dokploy ile https://butcem.ta1sph.website adresinde yayınlamak,
güncellemek, yedeklemek ve geri yüklemek için adım adım kılavuz.
Mimari: Gitea (main dalı) → webhook → Dokploy, Dockerfile ile imaj build eder → konteyner
başlarken veritabanını hazırlar (replica set kontrolü, migration'lar, ilk admin) → Next.js
uygulaması 3000 portunda → Traefik HTTPS ile dışarı açar. MongoDB aynı Dokploy ağında, dışa portsuz.
Yüklenen dosyalar /app/uploads volume'unda.
Sunucu komutları Atlas'ta çalıştırılır. Her komutun altında ne yaptığı yazıyor.
<…>ile gösterilen yerleri kendi değerlerinizle değiştirin.
1. Ön koşullar
- MongoDB servisi replica set olarak çalışıyor ve
butcem_appkullanıcısı hazır →MONGODB-KURULUM.md(1–5. adımlar). - Gitea'da BÜTÇEM reposu (
maindalı güncel;git push origin main). - DNS:
butcem.ta1sph.websiteiçin Atlas'ın genel IP'sine A kaydı (ve gerekiyorsa modemde 80/443 yönlendirmesi Traefik'e).
dig +short butcem.ta1sph.website
Alan adının çözüldüğü IP'yi gösterir; Atlas'ın genel IP'si olmalı.
2. Dokploy'da uygulama
Dokploy › proje › Create Service › Application, ad: butcem.
2.1 Kaynak (General)
- Provider: Gitea (Dokploy › Settings › Git'te Gitea bağlantısı tanımlıysa) ya da Git (repo URL'si + Dokploy'un SSH anahtarı Gitea'da deploy key olarak ekli).
- Repository / Branch: BÜTÇEM reposu,
main. - Build Type:
Dockerfile(yol:Dockerfile, context:.). - Build Args (isteğe bağlı):
APP_COMMIT=<kısa-commit>— sağlık kontrolünde görünür; boşsaunknownyazar. Sürümpackage.json'dan otomatik gelir.
2.2 Ortam değişkenleri (Environment)
| Değişken | Değer | Not |
|---|---|---|
MONGODB_URI |
mongodb://butcem_app:<parola>@<iç-host>:27017/butcem?authSource=<admin|butcem>&replicaSet=rs0&directConnection=true |
Ayrıntı: MONGODB-KURULUM.md › 5 |
BETTER_AUTH_SECRET |
32+ karakter rastgele | Aşağıdaki komutla üretin; değiştirirseniz tüm oturumlar kapanır |
BETTER_AUTH_URL |
https://butcem.ta1sph.website |
Sonunda / yok |
SEED_ADMIN_EMAIL |
yönetici e-postası | İlk açılışta admin oluşturulur |
SEED_ADMIN_PASSWORD |
güçlü parola (8+) | İlk girişten sonra parolayı değiştirip bu değişkeni silebilirsiniz |
MAX_UPLOAD_MB |
10 |
İsteğe bağlı |
NODE_ENV=production, PORT=3000 ve UPLOAD_DIR=/app/uploads imajda tanımlıdır; eklemeyin.
SEED_USER_PASSWORD canlıda kullanılmaz (örnek kullanıcı oluşturulmaz).
openssl rand -base64 32
BETTER_AUTH_SECRET için 32 baytlık rastgele bir değer üretir.
2.3 Volume (Advanced › Volumes / Mounts)
- Volume Mount · ad:
butcem-uploads· bağlama yolu:/app/uploads. Fiş, ürün görseli ve ek dosyalar burada tutulur; imaj yeniden oluşturulduğunda kaybolmaz. (Bind mount yerine adlandırılmış volume kullanın; imajdaki dizin izinleri — uid 1001 — volume'a ilk oluşturulurken aktarılır.)
2.4 Domain (Domains)
- Host:
butcem.ta1sph.website· Path:/· Container Port:3000 - HTTPS: açık · Certificate: Let's Encrypt
2.5 İlk deploy
Deploy'a basın ve Logs'ta şu satırları bekleyin:
• MongoDB rs0 PRIMARY
✓ Migration: 001-initial-indexes — … (ilk kurulumda 15 migration)
✓ Admin oluşturuldu: <e-posta> (kullanıcı adı: admin)
✓ Ready in …
"MongoDB replica set olarak çalışmıyor" hatası görürseniz MONGODB-KURULUM.md › 3'ü uygulayın.
Konteynerin Docker sağlık durumu birkaç saniye içinde healthy olur (/api/health).
2.6 İlk giriş
https://butcem.ta1sph.website › kullanıcı adı admin ve SEED_ADMIN_PASSWORD.
- Yönetim › Kullanıcılar'dan aile üyelerini oluşturun.
- Yönetim › Haneler'den haneyi açıp üyeleri ve rollerini ekleyin.
- (Önerilir) Admin parolasını Yönetim › Kullanıcılar › kendi satırınız › Şifre sıfırla ile
değiştirip Dokploy'da
SEED_ADMIN_PASSWORD'u silin ve yeniden deploy edin; başlatma artık yalnızca migration'ları çalıştırır. (Admin hesabı varken bu değişken parolayı değiştirmez.)
3. Duman testi (smoke test)
Kendi bilgisayarınızda, repo klasöründe:
scripts/smoke-test.sh https://butcem.ta1sph.website 1.0.0
Sağlık (veritabanı, replica set, sürüm), güvenlik başlıkları, HTTP→HTTPS yönlendirmesi ve oturumsuz erişimin engellendiğini kontrol eder; veri değiştirmez. Tümü ✓ olmalı.
SMOKE_USER=admin SMOKE_PASSWORD='<parola>' scripts/smoke-test.sh https://butcem.ta1sph.website 1.0.0
Ayrıca giriş yapıp ana sayfanın açıldığını dener (parola komut geçmişine düşer; sonra
history -d ile silebilir ya da satırı boşlukla başlatabilirsiniz).
Elle kontrol listesi (bir kez, tarayıcıdan):
- Giriş / çıkış, telefondan PWA olarak ana ekrana ekleme.
- Bir hesap ve bir gider işlemi oluşturma (transaction'lı yazma).
- İşleme fiş fotoğrafı ekleyip görüntüleme (uploads volume).
- Bir transfer (iki hesap birden; transaction).
- Dokploy'da uygulamayı Restart edip fişin hâlâ açıldığını görme (volume kalıcılığı).
4. Otomatik deploy (Gitea webhook)
Dokploy › butcem › Deployments › Webhook URL'yi kopyalayın (Auto Deploy açık olmalı).
Gitea › repo › Settings › Webhooks › Add Webhook › Gitea:
- Target URL: kopyaladığınız Dokploy URL'si · HTTP Method: POST · Content type: JSON
- Trigger On: Push Events · Branch filter:
main - Kaydedip Test Delivery ile deneyin; Dokploy'da yeni bir deployment başlamalı.
Bundan sonra git push origin main → otomatik build ve yayın. Her deploy'da bekleyen
migration'lar uygulama açılmadan önce çalışır.
5. Güncelleme ve geri alma
- Normal güncelleme:
main'e push (webhook) ya da Dokploy'da Deploy. - Büyük güncellemeden önce elle yedek alın:
sudo /opt/butcem/butcem-backup.sh(bkz. 6). - Geri alma: Dokploy › Deployments › önceki başarılı deployment › Rollback (ya da Gitea'da önceki commit'e dönüp push). Migration'lar yalnızca ileri yönlüdür; yeni sürümün eklediği index/alanlar eski sürümü bozmaz. Veri bozulduysa 7'deki geri yüklemeyi kullanın.
- Acil durum: başlatma adımı (migration) hata verip uygulama açılmıyorsa geçici olarak
SKIP_BOOTSTRAP=1ortam değişkeniyle açabilirsiniz; sorunu giderince kaldırın.
6. Yedekleme
Günlük: butcem veritabanı (mongodump) + uploads volume arşivi + SHA-256 özetleri,
7 gün saklama, /var/backups/butcem altında. Betik: scripts/backup/butcem-backup.sh.
⚠️ Şimdilik yedekler yalnızca sunucuda. Disk arızasında yedekler de gider; bir sonraki adım olarak sunucu dışına kopya (NAS'a
rsyncya da S3 uyumlu depolama) eklenmeli.
6.1 Kurulum (bir kez)
sudo install -d -m 755 /opt/butcem
Betikler için /opt/butcem klasörünü oluşturur.
sudo install -m 750 scripts/backup/butcem-backup.sh scripts/backup/butcem-restore.sh /opt/butcem/
Yedek ve geri yükleme betiklerini (repo klasöründen; sunucuya scp ile de kopyalayabilirsiniz)
/opt/butcem'e yalnızca root'un çalıştırabileceği izinle kopyalar.
sudo install -m 600 scripts/backup/butcem-backup.env.example /etc/butcem-backup.env
sudo nano /etc/butcem-backup.env
Ayar dosyasını yalnızca root'un okuyabileceği izinle oluşturur ve düzenlemek için açar. Doldurun:
MONGO_CONTAINER: MongoDB konteyner adının ayırt edici kısmı (docker ps --format '{{.Names}}').MONGO_ROOT_USER/MONGO_ROOT_PASSWORD:butcem_rootbilgileri.UPLOADS_VOLUME: uygulamanın volume adı.Volume adlarını listeler (Dokploy'da verdiğinizdocker volume ls | grep -i uploadsbutcem-uploadsadını doğrulayın).
6.2 İlk çalıştırma
sudo /opt/butcem/butcem-backup.sh
Yedeği hemen alır; sonunda Tamam: … veritabanı, … dosya yazmalı.
sudo ls -lh /var/backups/butcem && sudo sh -c 'cd /var/backups/butcem && sha256sum -c SHA256SUMS-*'
Yedek dosyalarını listeler ve bütünlüklerini doğrular (OK).
6.3 Günlük zamanlama
sudo crontab -e
root'un zamanlanmış görevlerini açar. Şu satırı ekleyin (her gece 03:30):
30 3 * * * /opt/butcem/butcem-backup.sh >> /var/log/butcem-backup.log 2>&1
sudo tail -n 20 /var/log/butcem-backup.log
Ertesi gün son yedeğin günlüğünü gösterir.
7. Geri yükleme
sudo ls -1 /var/backups/butcem
Mevcut yedekleri listeler; dönülecek tarih damgasını seçin.
- Dokploy ›
butcem› Stop (yazma olmasın). - Geri yükleyin:
Bütünlüğü kontrol eder, onay ister (
sudo /opt/butcem/butcem-restore.sh /var/backups/butcem/mongo-<damga>.archive.gz /var/backups/butcem/uploads-<damga>.tar.gzevet),butcemveritabanını yedektekiyle değiştirir ve uploads volume'unu arşivden yeniden yazar. Yalnızca veritabanı için ikinci dosyayı vermeyin. - Dokploy › Start, ardından duman testi (3).
Tatbikat: Ayda bir, en son yedeği bu adımlarla deneme amaçlı bir Dokploy kopyasına ya da
lokale (docker compose mongo'su) yükleyip açılıp açılmadığını kontrol edin. Yedeği hiç denenmemiş
bir yedek, yedek değildir.
8. Sorun giderme
| Belirti | Neden / çözüm |
|---|---|
Logs: MongoDB replica set olarak çalışmıyor |
MONGODB-KURULUM.md › 3 |
Logs: Authentication failed |
MONGODB_URI kullanıcı/parola/authSource; parola URL kodlu mu? |
Logs: Geçersiz ortam değişkenleri |
Listelenen değişkeni düzeltin (ör. BETTER_AUTH_SECRET < 32 karakter) |
Konteyner unhealthy |
curl -s https://butcem.ta1sph.website/api/health → db alanı; MongoDB servisi çalışıyor mu? |
| Giriş sonrası tekrar giriş sayfası | BETTER_AUTH_URL alan adıyla birebir aynı mı (https, sonda / yok)? |
| Yüklenen dosya açılmıyor / yükleme hatası | Volume /app/uploads'a bağlı mı? docker exec <app> ls -ln /app/uploads sahibi 1001 olmalı |
| Sertifika alınamadı | DNS A kaydı ve 80 portu Traefik'e ulaşıyor mu? |
docker logs --tail 100 $(docker ps -q --filter name=<butcem-uygulama-adı> | head -n1)
Uygulama konteynerinin son 100 log satırını gösterir (Dokploy › Logs ile aynı).