Files
balikci/docs/AUTO_SESSION_SECRET.md
salvacybersec 05bb2fc55c setup script
2025-11-11 04:36:35 +03:00

6.1 KiB
Raw Blame History

🔐 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:

  1. SESSION_SECRET Kontrolü

    • Ortam değişkeninde SESSION_SECRET var mı?
    • Varsa varsayılan değer mi?
  2. 🔍 .env Dosyası Kontrolü

    • Volume'de .env dosyası var mı?
    • Varsa içinde geçerli SESSION_SECRET var mı?
  3. 🔑 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
  4. 💾 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ü:

  1. Kriptografik Rastgelelik

    crypto.randomBytes(64).toString('hex')
    
    • Node.js'in crypto modülü kullanılır
    • 64 byte = 128 hex karakter
    • Tahmin edilemez
  2. Persistence

    • Volume'de saklanır
    • Her restart'ta aynı secret kullanılır
    • Session'lar geçersiz olmaz
  3. 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 script
  • backend/Dockerfile - Production Dockerfile
  • backend/Dockerfile.dev - Development Dockerfile
  • docker-compose.yml - Production compose
  • docker-compose.dev.yml - Development compose

🎓 Daha Fazla Bilgi


🎉 Artık SESSION_SECRET'ı manuel oluşturmak zorunda değilsiniz!