feat(dağıtım): Docker imajı ve Axum'un arayüzü sunması
- Çok aşamalı Dockerfile: Node (arayüz) → Rust (release) → debian-slim, root olmayan kullanıcı - Axum, STATIC_DIR tanımlıysa derlenmiş arayüzü sunar (SPA yönlendirmesi) - Önbellek başlıkları (HTML no-cache, /assets 1 yıl), gzip/brotli sıkıştırma, istek logları - Bilinmeyen /api/... → JSON 404; SIGTERM'de düzgün kapanış - HEALTHCHECK (/api/health), .dockerignore, docs/DEPLOY.md Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,56 @@
|
||||
# 🚀 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ı yoksa `503`.
|
||||
- Kapanış: `SIGTERM` gelince 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
|
||||
|
||||
```bash
|
||||
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ı):
|
||||
- [x] `/` ve `/defter` → `index.html` (`Cache-Control: no-cache`)
|
||||
- [x] `/assets/*.js` → brotli/gzip, `max-age=31536000, immutable`
|
||||
- [x] `/api/health` → `db: ok`; bilinmeyen `/api/...` → JSON 404
|
||||
- [x] Docker `HEALTHCHECK` → healthy; süreç `kakeibo` kullanıcısıyla çalışır
|
||||
- [x] `docker stop` → düzgün kapanış logu
|
||||
|
||||
## 4. Canlı MongoDB
|
||||
|
||||
> Faz 3 – Adım 2'de birlikte doldurulacak (KAKEIBO_PROMPT §12.3).
|
||||
|
||||
## 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).
|
||||
Reference in New Issue
Block a user