6.1 KiB
6.1 KiB
🔐 Otomatik SESSION_SECRET Yönetimi
Docker Entrypoint ile Otomatik Secret Oluşturma
Bu proje, Docker ile çalıştırıldığında SESSION_SECRET'ı otomatik olarak oluşturur ve yönetir.
🎯 Nasıl Çalışır?
1. Entrypoint Script
backend/docker-entrypoint.sh container başlatıldığında çalışır ve:
-
✅ SESSION_SECRET Kontrolü
- Ortam değişkeninde SESSION_SECRET var mı?
- Varsa varsayılan değer mi?
-
🔍 .env Dosyası Kontrolü
- Volume'de
.envdosyası var mı? - Varsa içinde geçerli SESSION_SECRET var mı?
- Volume'de
-
🔑 Otomatik Oluşturma
- Hiçbir yerde geçerli secret yoksa:
- Node.js crypto modülü ile 64 byte rastgele hex oluşturur
- Backend volume'üne kaydeder
- Ortam değişkenine export eder
-
💾 Persistence
- Secret, Docker volume'de saklanır
- Container restart olsa bile aynı secret kullanılır
- Session'lar korunur
🚀 Kullanım Senaryoları
Senaryo 1: Hiç .env Dosyası Yok
# Sadece GMAIL ve TELEGRAM ayarları ile başlat
docker compose up -d
Sonuç:
- ✅ SESSION_SECRET otomatik oluşturulur
- ✅ Backend volume'e kaydedilir
- ✅ Log'larda görebilirsiniz:
🔑 Yeni SESSION_SECRET otomatik oluşturuluyor... ✅ Yeni SESSION_SECRET oluşturuldu ve .env dosyasına kaydedildi
Senaryo 2: .env Var Ama SESSION_SECRET Yok
# .env dosyası var ama SESSION_SECRET yok
cat > .env << EOF
GMAIL_USER=test@gmail.com
GMAIL_APP_PASSWORD=xxxx
EOF
docker compose up -d
Sonuç:
- ✅ SESSION_SECRET otomatik oluşturulur
- ✅ Mevcut .env'e eklenir
- ✅ Diğer ayarlar korunur
Senaryo 3: .env'de SESSION_SECRET Var
# .env'de SESSION_SECRET zaten var
cat > .env << EOF
SESSION_SECRET=my-manual-secret-here
GMAIL_USER=test@gmail.com
GMAIL_APP_PASSWORD=xxxx
EOF
docker compose up -d
Sonuç:
- ✅ Mevcut SESSION_SECRET kullanılır
- ✅ Değiştirilmez
- ✅ Log'da: "SESSION_SECRET zaten ayarlanmış"
Senaryo 4: docker-compose.yml'de Belirtilmiş
# .env dosyası
SESSION_SECRET=production-secret-here
# docker-compose.yml
environment:
- SESSION_SECRET=${SESSION_SECRET}
docker compose up -d
Sonuç:
- ✅ docker-compose.yml'deki değer önceliklidir
- ✅ Entrypoint script, ortam değişkenini kontrol eder
- ✅ Geçerliyse kullanır, değilse oluşturur
🔒 Güvenlik
Otomatik Oluşturma Güvenli mi?
✅ EVET, çünkü:
-
Kriptografik Rastgelelik
crypto.randomBytes(64).toString('hex')- Node.js'in crypto modülü kullanılır
- 64 byte = 128 hex karakter
- Tahmin edilemez
-
Persistence
- Volume'de saklanır
- Her restart'ta aynı secret kullanılır
- Session'lar geçersiz olmaz
-
Görünürlük
- Log'larda sadece ilk 20 karakter gösterilir
- Tam secret log'lanmaz
Otomatik vs Manuel: Hangisi Daha İyi?
| Özellik | Otomatik | Manuel |
|---|---|---|
| Kolaylık | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ |
| Güvenlik | ⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ |
| Kontrol | ⭐⭐⭐ | ⭐⭐⭐⭐⭐ |
| Production | ✅ Uygun | ✅ Önerilen |
Öneriler:
- 🧪 Development/Test: Otomatik (hızlı setup)
- 🏭 Production: Manuel (daha fazla kontrol)
- 🔄 CI/CD: Ortam değişkeni olarak enjekte et
📊 Entrypoint Script Akışı
Container Başlatılıyor
↓
[docker-entrypoint.sh]
↓
SESSION_SECRET var mı?
├─ Evet → Geçerli mi?
│ ├─ Evet → Kullan ✅
│ └─ Hayır → Oluştur 🔑
└─ Hayır → .env'de var mı?
├─ Evet → Yükle ✅
└─ Hayır → Oluştur 🔑
↓
.env'e Kaydet 💾
↓
Export SESSION_SECRET
↓
Database Kontrol 🗄️
↓
Migration (ilk kurulum)
↓
Seed Data (AUTO_SEED=true ise)
↓
Uygulama Başlat 🚀
🛠️ Özelleştirme
SESSION_SECRET'ı Manuel Değiştirme
Container çalışırken:
# 1. Yeni secret oluştur
NEW_SECRET=$(node -e "console.log(require('crypto').randomBytes(64).toString('hex'))")
# 2. Container'a bağlan
docker compose exec backend sh
# 3. .env'i güncelle
echo "SESSION_SECRET=$NEW_SECRET" > .env
# 4. Container'ı yeniden başlat
exit
docker compose restart backend
Otomatik Oluşturmayı Devre Dışı Bırakma
Eğer otomatik oluşturma istemiyorsanız:
# .env'e dummy değer ekle (entrypoint script bu değeri değiştirmez)
echo "SESSION_SECRET=DO-NOT-AUTO-GENERATE" > .env
# Veya docker-compose.yml'de:
environment:
- SESSION_SECRET=your-fixed-secret-here
🐛 Troubleshooting
Problem: Her restart'ta yeni secret oluşuyor
Sebep: Volume mount edilmemiş veya .env dosyası kaydedilemiyor.
Çözüm:
# Volume'leri kontrol et
docker compose down
docker volume ls
docker volume inspect oltalama_backend-data
# Yeniden başlat
docker compose up -d
Problem: SESSION_SECRET oluşturulmadı
Kontrol:
# Log'ları incele
docker compose logs backend | grep SESSION
# Container'a bağlan ve kontrol et
docker compose exec backend cat .env
Problem: Session'lar sürekli sona eriyor
Sebep: SESSION_SECRET her restart'ta değişiyor.
Çözüm:
# Volume'ü kontrol et
docker compose exec backend ls -la /app/.env
# Manuel secret ata
docker compose exec backend sh -c 'echo "SESSION_SECRET=fixed-secret-here" > /app/.env'
docker compose restart backend
📚 İlgili Dosyalar
backend/docker-entrypoint.sh- Ana entrypoint scriptbackend/Dockerfile- Production Dockerfilebackend/Dockerfile.dev- Development Dockerfiledocker-compose.yml- Production composedocker-compose.dev.yml- Development compose
🎓 Daha Fazla Bilgi
🎉 Artık SESSION_SECRET'ı manuel oluşturmak zorunda değilsiniz!