setup script
This commit is contained in:
75
DOCKER.md
75
DOCKER.md
@@ -67,30 +67,72 @@ cd oltalama
|
|||||||
|
|
||||||
### 2. Environment Dosyasını Hazırlayın
|
### 2. Environment Dosyasını Hazırlayın
|
||||||
|
|
||||||
|
**🎉 Yeni: SESSION_SECRET Artık Otomatik Oluşuyor!**
|
||||||
|
|
||||||
|
Docker entrypoint scripti sayesinde SESSION_SECRET'ı belirtmeseniz bile **otomatik oluşturulur** ve kaydedilir.
|
||||||
|
|
||||||
|
#### Seçenek 1: Minimal (Otomatik SESSION_SECRET)
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Örnek dosyadan kopyalayın
|
# Sadece zorunlu ayarları girin, SESSION_SECRET otomatik!
|
||||||
cat > .env << 'EOF'
|
cat > .env << 'EOF'
|
||||||
SESSION_SECRET=your-strong-random-secret-here
|
# SESSION_SECRET boş bırakılırsa otomatik oluşturulur!
|
||||||
|
|
||||||
|
# Gmail ayarları (ZORUNLU)
|
||||||
GMAIL_USER=your-email@gmail.com
|
GMAIL_USER=your-email@gmail.com
|
||||||
GMAIL_APP_PASSWORD=your-gmail-app-password
|
GMAIL_APP_PASSWORD=your-gmail-app-password
|
||||||
|
|
||||||
|
# Telegram ayarları (ZORUNLU)
|
||||||
TELEGRAM_BOT_TOKEN=your-bot-token
|
TELEGRAM_BOT_TOKEN=your-bot-token
|
||||||
TELEGRAM_CHAT_ID=your-chat-id
|
TELEGRAM_CHAT_ID=your-chat-id
|
||||||
|
|
||||||
|
# Opsiyonel: Ollama AI
|
||||||
OLLAMA_SERVER_URL=http://host.docker.internal:11434
|
OLLAMA_SERVER_URL=http://host.docker.internal:11434
|
||||||
OLLAMA_MODEL=llama3.2:latest
|
OLLAMA_MODEL=llama3.2:latest
|
||||||
|
|
||||||
|
# Frontend API URL
|
||||||
VITE_API_URL=http://localhost:3000
|
VITE_API_URL=http://localhost:3000
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
# Editör ile açın ve konfigüre edin
|
|
||||||
nano .env
|
|
||||||
```
|
```
|
||||||
|
|
||||||
**Minimum gerekli ayarlar:**
|
#### Seçenek 2: Manuel SESSION_SECRET (Daha Güvenli)
|
||||||
```env
|
|
||||||
SESSION_SECRET=very-strong-random-secret-here
|
🔐 **Kendi SESSION_SECRET'ınızı Oluşturun:**
|
||||||
|
```bash
|
||||||
|
# Terminal'de çalıştır
|
||||||
|
node -e "console.log(require('crypto').randomBytes(64).toString('hex'))"
|
||||||
|
# VEYA
|
||||||
|
openssl rand -hex 64
|
||||||
|
```
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cat > .env << 'EOF'
|
||||||
|
# SESSION_SECRET: Oturumları şifreler (manuel oluşturduysanız buraya yapıştırın)
|
||||||
|
SESSION_SECRET=a3f8d92c7e1b4f5a9d8c7e2b1a4f5c8d9e2f1a3b4c5d6e7f8a9b0c1d2e3f4a5b
|
||||||
|
|
||||||
|
# Gmail ayarları
|
||||||
GMAIL_USER=your-email@gmail.com
|
GMAIL_USER=your-email@gmail.com
|
||||||
GMAIL_APP_PASSWORD=your-gmail-app-password
|
GMAIL_APP_PASSWORD=your-gmail-app-password
|
||||||
|
|
||||||
|
# Telegram ayarları
|
||||||
TELEGRAM_BOT_TOKEN=your-bot-token
|
TELEGRAM_BOT_TOKEN=your-bot-token
|
||||||
TELEGRAM_CHAT_ID=your-chat-id
|
TELEGRAM_CHAT_ID=your-chat-id
|
||||||
|
|
||||||
|
# Opsiyonel: Otomatik seed data (ilk kurulumda örnek veri)
|
||||||
|
AUTO_SEED=false
|
||||||
|
|
||||||
|
# Ollama AI (opsiyonel)
|
||||||
|
OLLAMA_SERVER_URL=http://host.docker.internal:11434
|
||||||
|
OLLAMA_MODEL=llama3.2:latest
|
||||||
|
|
||||||
|
# Frontend
|
||||||
|
VITE_API_URL=http://localhost:3000
|
||||||
|
EOF
|
||||||
|
```
|
||||||
|
|
||||||
|
**Editörle düzenleyin:**
|
||||||
|
```bash
|
||||||
|
nano .env
|
||||||
```
|
```
|
||||||
|
|
||||||
### 3. Production Modunda Başlatın
|
### 3. Production Modunda Başlatın
|
||||||
@@ -99,10 +141,23 @@ TELEGRAM_CHAT_ID=your-chat-id
|
|||||||
# Container'ları build edin ve başlatın
|
# Container'ları build edin ve başlatın
|
||||||
docker compose up -d
|
docker compose up -d
|
||||||
|
|
||||||
# Logları görüntüleyin
|
# Logları görüntüleyin (SESSION_SECRET otomatik oluşturuldu mu kontrol edin)
|
||||||
docker compose logs -f
|
docker compose logs backend
|
||||||
|
|
||||||
|
# Örnek çıktı:
|
||||||
|
# 🚀 Oltalama Backend başlatılıyor...
|
||||||
|
# 🔑 Yeni SESSION_SECRET otomatik oluşturuluyor...
|
||||||
|
# ✅ Yeni SESSION_SECRET oluşturuldu ve .env dosyasına kaydedildi
|
||||||
|
# 📝 SESSION_SECRET: a3f8d92c7e1b4f5a9d... (ilk 20 karakter)
|
||||||
|
# ✅ Backend hazır, uygulama başlatılıyor...
|
||||||
```
|
```
|
||||||
|
|
||||||
|
**🎉 SESSION_SECRET Otomatik Yönetimi:**
|
||||||
|
- ✅ İlk çalıştırmada otomatik oluşturulur
|
||||||
|
- ✅ Backend volume'üne kaydedilir
|
||||||
|
- ✅ Sonraki restart'larda aynı secret kullanılır
|
||||||
|
- ✅ Session'lar korunur
|
||||||
|
|
||||||
### 4. Admin Kullanıcısı Oluşturun
|
### 4. Admin Kullanıcısı Oluşturun
|
||||||
|
|
||||||
İlk çalıştırmada admin kullanıcısı oluşturmanız gerekir:
|
İlk çalıştırmada admin kullanıcısı oluşturmanız gerekir:
|
||||||
|
|||||||
@@ -32,6 +32,10 @@ COPY --from=builder /app/node_modules ./node_modules
|
|||||||
# Copy application code
|
# Copy application code
|
||||||
COPY --chown=oltalama:oltalama . .
|
COPY --chown=oltalama:oltalama . .
|
||||||
|
|
||||||
|
# Copy entrypoint script
|
||||||
|
COPY --chown=oltalama:oltalama docker-entrypoint.sh /usr/local/bin/
|
||||||
|
RUN chmod +x /usr/local/bin/docker-entrypoint.sh
|
||||||
|
|
||||||
# Create necessary directories
|
# Create necessary directories
|
||||||
RUN mkdir -p database logs && \
|
RUN mkdir -p database logs && \
|
||||||
chown -R oltalama:oltalama /app
|
chown -R oltalama:oltalama /app
|
||||||
@@ -46,8 +50,8 @@ EXPOSE 3000
|
|||||||
HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \
|
HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \
|
||||||
CMD node -e "require('http').get('http://localhost:3000/health', (r) => {process.exit(r.statusCode === 200 ? 0 : 1)})"
|
CMD node -e "require('http').get('http://localhost:3000/health', (r) => {process.exit(r.statusCode === 200 ? 0 : 1)})"
|
||||||
|
|
||||||
# Use tini as entrypoint for proper signal handling
|
# Use tini and custom entrypoint for proper signal handling and auto-config
|
||||||
ENTRYPOINT ["/sbin/tini", "--"]
|
ENTRYPOINT ["/sbin/tini", "--", "/usr/local/bin/docker-entrypoint.sh"]
|
||||||
|
|
||||||
# Start application
|
# Start application
|
||||||
CMD ["node", "src/app.js"]
|
CMD ["node", "src/app.js"]
|
||||||
|
|||||||
@@ -19,14 +19,18 @@ RUN npm install
|
|||||||
# Copy application code
|
# Copy application code
|
||||||
COPY . .
|
COPY . .
|
||||||
|
|
||||||
|
# Copy entrypoint script
|
||||||
|
COPY docker-entrypoint.sh /usr/local/bin/
|
||||||
|
RUN chmod +x /usr/local/bin/docker-entrypoint.sh
|
||||||
|
|
||||||
# Create necessary directories
|
# Create necessary directories
|
||||||
RUN mkdir -p database logs
|
RUN mkdir -p database logs
|
||||||
|
|
||||||
# Expose port
|
# Expose port
|
||||||
EXPOSE 3000
|
EXPOSE 3000
|
||||||
|
|
||||||
# Use tini as entrypoint
|
# Use tini and custom entrypoint
|
||||||
ENTRYPOINT ["/sbin/tini", "--"]
|
ENTRYPOINT ["/sbin/tini", "--", "/usr/local/bin/docker-entrypoint.sh"]
|
||||||
|
|
||||||
# Start with nodemon for hot reload
|
# Start with nodemon for hot reload
|
||||||
CMD ["npm", "run", "dev"]
|
CMD ["npm", "run", "dev"]
|
||||||
|
|||||||
82
backend/docker-entrypoint.sh
Executable file
82
backend/docker-entrypoint.sh
Executable file
@@ -0,0 +1,82 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
set -e
|
||||||
|
|
||||||
|
# Docker Entrypoint Script - Backend
|
||||||
|
# Otomatik SESSION_SECRET oluşturma ve yönetimi
|
||||||
|
|
||||||
|
echo "🚀 Oltalama Backend başlatılıyor..."
|
||||||
|
|
||||||
|
# SESSION_SECRET kontrolü ve otomatik oluşturma
|
||||||
|
if [ -z "$SESSION_SECRET" ] || [ "$SESSION_SECRET" = "change-this-to-a-very-strong-random-secret" ]; then
|
||||||
|
echo "⚠️ SESSION_SECRET boş veya varsayılan değerde!"
|
||||||
|
|
||||||
|
# .env dosyası varsa SESSION_SECRET'ı oradan al
|
||||||
|
if [ -f "/app/.env" ]; then
|
||||||
|
SESSION_SECRET_FROM_FILE=$(grep "^SESSION_SECRET=" /app/.env | cut -d'=' -f2-)
|
||||||
|
if [ -n "$SESSION_SECRET_FROM_FILE" ] && [ "$SESSION_SECRET_FROM_FILE" != "change-this-to-a-very-strong-random-secret" ]; then
|
||||||
|
export SESSION_SECRET="$SESSION_SECRET_FROM_FILE"
|
||||||
|
echo "✅ SESSION_SECRET .env dosyasından yüklendi"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Hala boşsa otomatik oluştur
|
||||||
|
if [ -z "$SESSION_SECRET" ] || [ "$SESSION_SECRET" = "change-this-to-a-very-strong-random-secret" ]; then
|
||||||
|
echo "🔑 Yeni SESSION_SECRET otomatik oluşturuluyor..."
|
||||||
|
|
||||||
|
# Node.js ile güçlü random secret oluştur
|
||||||
|
SESSION_SECRET=$(node -e "console.log(require('crypto').randomBytes(64).toString('hex'))")
|
||||||
|
export SESSION_SECRET
|
||||||
|
|
||||||
|
# Session secret'ı .env dosyasına kaydet (persist)
|
||||||
|
if [ ! -f "/app/.env" ]; then
|
||||||
|
echo "SESSION_SECRET=$SESSION_SECRET" > /app/.env
|
||||||
|
echo "✅ Yeni SESSION_SECRET oluşturuldu ve .env dosyasına kaydedildi"
|
||||||
|
echo "📝 SESSION_SECRET: ${SESSION_SECRET:0:20}... (ilk 20 karakter)"
|
||||||
|
else
|
||||||
|
# Mevcut .env dosyasını güncelle
|
||||||
|
if grep -q "^SESSION_SECRET=" /app/.env; then
|
||||||
|
sed -i "s|^SESSION_SECRET=.*|SESSION_SECRET=$SESSION_SECRET|" /app/.env
|
||||||
|
else
|
||||||
|
echo "SESSION_SECRET=$SESSION_SECRET" >> /app/.env
|
||||||
|
fi
|
||||||
|
echo "✅ SESSION_SECRET güncellendi ve .env dosyasına kaydedildi"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
echo "✅ SESSION_SECRET zaten ayarlanmış"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Database dizinini kontrol et
|
||||||
|
if [ ! -d "/app/database" ]; then
|
||||||
|
echo "📁 Database dizini oluşturuluyor..."
|
||||||
|
mkdir -p /app/database
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Logs dizinini kontrol et
|
||||||
|
if [ ! -d "/app/logs" ]; then
|
||||||
|
echo "📁 Logs dizini oluşturuluyor..."
|
||||||
|
mkdir -p /app/logs
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Database migration'ları çalıştır (ilk kurulumda)
|
||||||
|
if [ ! -f "/app/database/oltalama.db" ]; then
|
||||||
|
echo "🗄️ İlk kurulum tespit edildi, database oluşturuluyor..."
|
||||||
|
if [ -f "/app/migrations/run-migrations.js" ]; then
|
||||||
|
node /app/migrations/run-migrations.js || echo "⚠️ Migration hatası (normal olabilir)"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Seed data (opsiyonel)
|
||||||
|
if [ "${AUTO_SEED}" = "true" ] && [ -f "/app/seeders/run-seeders.js" ]; then
|
||||||
|
echo "🌱 Seed data ekleniyor..."
|
||||||
|
node /app/seeders/run-seeders.js || echo "⚠️ Seeding hatası (normal olabilir)"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
echo "✅ Database mevcut, migration atlanıyor"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "✅ Backend hazır, uygulama başlatılıyor..."
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# CMD komutunu çalıştır (exec ile PID 1'e geç)
|
||||||
|
exec "$@"
|
||||||
|
|
||||||
@@ -13,7 +13,8 @@ services:
|
|||||||
environment:
|
environment:
|
||||||
- NODE_ENV=production
|
- NODE_ENV=production
|
||||||
- PORT=3000
|
- PORT=3000
|
||||||
- SESSION_SECRET=${SESSION_SECRET:-change-this-secret-in-production}
|
- SESSION_SECRET=${SESSION_SECRET:-} # Boşsa otomatik oluşturulur
|
||||||
|
- AUTO_SEED=${AUTO_SEED:-false} # true yaparsanız örnek data eklenir
|
||||||
- GMAIL_USER=${GMAIL_USER}
|
- GMAIL_USER=${GMAIL_USER}
|
||||||
- GMAIL_APP_PASSWORD=${GMAIL_APP_PASSWORD}
|
- GMAIL_APP_PASSWORD=${GMAIL_APP_PASSWORD}
|
||||||
- TELEGRAM_BOT_TOKEN=${TELEGRAM_BOT_TOKEN}
|
- TELEGRAM_BOT_TOKEN=${TELEGRAM_BOT_TOKEN}
|
||||||
|
|||||||
277
docs/AUTO_SESSION_SECRET.md
Normal file
277
docs/AUTO_SESSION_SECRET.md
Normal file
@@ -0,0 +1,277 @@
|
|||||||
|
# 🔐 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
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 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
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# .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
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# .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ş
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# .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**
|
||||||
|
```javascript
|
||||||
|
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:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 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:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# .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:**
|
||||||
|
```bash
|
||||||
|
# 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:**
|
||||||
|
```bash
|
||||||
|
# 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:**
|
||||||
|
```bash
|
||||||
|
# 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
|
||||||
|
|
||||||
|
- [Docker Entrypoint Best Practices](https://docs.docker.com/develop/develop-images/dockerfile_best-practices/#entrypoint)
|
||||||
|
- [Node.js Crypto Module](https://nodejs.org/api/crypto.html)
|
||||||
|
- [Express Session Security](https://expressjs.com/en/advanced/best-practice-security.html)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**🎉 Artık SESSION_SECRET'ı manuel oluşturmak zorunda değilsiniz!**
|
||||||
|
|
||||||
Reference in New Issue
Block a user