Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
4.4 KiB
🚀 Canlıya Alma (Atlas Homeserver + Dokploy)
Durum: Faz 3 — Adım 1 ✅ (Docker imajı) · Adım 2–5 devam ediyor
1. Mimari
İnternet ──HTTPS──▶ Traefik (Dokploy) ──▶ kakeibo konteyneri :8080 ──▶ MongoDB (rs0)
├─ /api/* → Rust (Axum) API
└─ diğer → derlenmiş arayüz (React)
- Tek imaj, tek servis, tek alan adı → CORS yok, cookie aynı origin'de.
- İmaj: çok aşamalı
Dockerfile(Node → arayüz derlemesi, Rust → release derleme,debian:trixie-slimçalışma imajı, root olmayan kullanıcıkakeibo, ~175 MB). - Sağlık kontrolü:
GET /api/health→200 {"status":"ok","db":"ok"}; veritabanı yoksa503. - Kapanış:
SIGTERMgelince süren istekler bitirilir, sonra kapanır.
2. Ortam değişkenleri
| Değişken | Zorunlu | Örnek / varsayılan | Açıklama |
|---|---|---|---|
MONGODB_URI |
✅ | mongodb://kakeibo_app:<şifre>@<host>:27017/kakeibo?authSource=kakeibo&replicaSet=rs0 |
Ayrı, yalnızca kakeibo DB'sinde readWrite yetkili kullanıcı |
JWT_SECRET |
✅ | openssl rand -hex 32 çıktısı |
En az 32 karakter. Değişirse tüm oturumlar kapanır |
APP_URL |
✅ | https://kakeibo.<alan-adı> |
https:// ile başlarsa cookie Secure olur |
REGISTRATION |
– | invite_only |
invite_only: ilk hane serbest, sonra yalnızca davet · open: herkes |
RUST_LOG |
– | kakeibo=info,tower_http=info |
Log seviyesi |
PORT |
– | 8080 |
İmajda ayarlı, değiştirmeyin |
STATIC_DIR |
– | /app/static |
İmajda ayarlı, değiştirmeyin |
3. Yerelde imajı deneme
docker build -t kakeibo .
# Yerel MongoDB (27020) ile, geliştirme sunucusuyla çakışmasın diye 8090'da:
docker run --rm --network host --env-file .env -e PORT=8090 kakeibo
# → http://localhost:8090
Kontrol listesi (Faz 3 – Adım 1'de doğrulandı):
/ve/defter→index.html(Cache-Control: no-cache)/assets/*.js→ brotli/gzip,max-age=31536000, immutable/api/health→db: ok; bilinmeyen/api/...→ JSON 404- Docker
HEALTHCHECK→ healthy; süreçkakeibokullanıcısıyla çalışır docker stop→ düzgün kapanış logu
4. Canlı MongoDB
- Dokploy'da ayrı MongoDB servisi (Bütçem'in veritabanı paylaşılmaz): proje
Kakeibo→ Database → MongoDBkakeibo-mongo. - Servis (iç ağ) adı:
kakeibo-kakeibomongo-fibzhc, imajmongo:7, ağdokploy-network, volumekakeibo-kakeibomongo-fibzhc-data → /data/db. - Replica set:
rs0, üyekakeibo-kakeibomongo-fibzhc:27017(Dokploy "Replica Sets" açık). - Kullanıcılar:
kakeibo_root(admin,root) ·kakeibo_app(kakeiboDB, yalnızcareadWrite). Şifreler 2026-11-12'de yenilendi (eskileri açığa çıkmıştı). - Dış erişim:
docker service inspect … .Endpoint.Ports→null(port yayınlanmıyor) ✅. External Port alanı boş kalmalı. - Bağlantı:
mongodb://kakeibo_app:<APP_ŞİFRESİ>@kakeibo-kakeibomongo-fibzhc:27017/kakeibo?authSource=kakeibo&replicaSet=rs0
⚠️ Açık konu: MongoDB kimlik doğrulaması kapalı
Dokploy'un replica set betiği mongod --replSet rs0 --bind_ip_all ile başlatıyor (--keyFile yok) ve her deploy'da
Advanced → Command/Args'ı yok sayıp kendi betiğini yazıyor. Sonuç: kullanıcılar tanımlı ama şifre zorunlu değil;
dokploy-network'teki herhangi bir konteyner erişebilir. İnternetten erişim yok.
Çözüm adayları (ileride): Dokploy'un MongoDB'si yerine Compose servisi (kendi komutumuzla --keyFile) ya da Dokploy'da keyFile desteği.
Uygulama zaten kullanıcı/şifreyle bağlandığı için auth açıldığında uygulamada değişiklik gerekmez.
Şifre girerken dikkat
mongoshiçindepasswordPrompt()'a yapıştırmayın (terminal görünmez karakter ekleyebiliyor →U_STRINGPREP_PROHIBITED_ERROR). Bunun yerine:const p = require('crypto').randomBytes(24).toString('hex'); db.changeUserPassword("kakeibo_app", p); print(p)- Şifreyi komuta düz yazmayın; sonra
rm -f /root/.mongodb/mongosh/mongosh_repl_history. - "Rebuild Database" veriyi siler ve Dokploy betiği yeni root şifresini servis ayarına düz metin yazar.
5. Dokploy kurulumu
Faz 3 – Adım 3'te birlikte doldurulacak.
6. Yedekleme ve geri yükleme
Faz 3 – Adım 5'te doldurulacak (günlük
mongodump, son 14 yedek).