510 lines
11 KiB
Markdown
510 lines
11 KiB
Markdown
# 🐳 Docker Deployment Guide
|
||
|
||
## Oltalama Test Yönetim Paneli - Docker ile Kurulum
|
||
|
||
Bu dokümantasyon, projeyi Docker ve Docker Compose kullanarak nasıl çalıştıracağınızı açıklar.
|
||
|
||
---
|
||
|
||
## 📋 İçindekiler
|
||
|
||
- [Gereksinimler](#gereksinimler)
|
||
- [Hızlı Başlangıç](#hızlı-başlangıç)
|
||
- [Development Modu](#development-modu)
|
||
- [Production Modu](#production-modu)
|
||
- [Ortam Değişkenleri](#ortam-değişkenleri)
|
||
- [Veri Yedekleme](#veri-yedekleme)
|
||
- [İleri Seviye Kullanım](#ileri-seviye-kullanım)
|
||
|
||
---
|
||
|
||
## 🔧 Gereksinimler
|
||
|
||
- **Docker**: 20.10 veya üzeri
|
||
- **Docker Compose**: 2.0 veya üzeri
|
||
- **Git**: (projeyi klonlamak için)
|
||
|
||
### Docker Kurulumu
|
||
|
||
#### Ubuntu/Debian:
|
||
```bash
|
||
# Docker kurulumu
|
||
curl -fsSL https://get.docker.com -o get-docker.sh
|
||
sudo sh get-docker.sh
|
||
|
||
# Docker Compose kurulumu (eğer yoksa)
|
||
sudo apt-get install docker-compose-plugin
|
||
|
||
# Kullanıcıyı docker grubuna ekle
|
||
sudo usermod -aG docker $USER
|
||
newgrp docker
|
||
```
|
||
|
||
#### RedHat/Oracle/CentOS:
|
||
```bash
|
||
# Docker kurulumu
|
||
sudo dnf install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
|
||
|
||
# Docker'ı başlat ve aktifleştir
|
||
sudo systemctl start docker
|
||
sudo systemctl enable docker
|
||
|
||
# Kullanıcıyı docker grubuna ekle
|
||
sudo usermod -aG docker $USER
|
||
newgrp docker
|
||
```
|
||
|
||
---
|
||
|
||
## 🚀 Hızlı Başlangıç
|
||
|
||
### 1. Projeyi Klonlayın
|
||
|
||
```bash
|
||
git clone <repository-url> oltalama
|
||
cd oltalama
|
||
```
|
||
|
||
### 2. Environment Dosyasını Hazırlayın
|
||
|
||
```bash
|
||
# Örnek dosyadan kopyalayın
|
||
cat > .env << 'EOF'
|
||
SESSION_SECRET=your-strong-random-secret-here
|
||
GMAIL_USER=your-email@gmail.com
|
||
GMAIL_APP_PASSWORD=your-gmail-app-password
|
||
TELEGRAM_BOT_TOKEN=your-bot-token
|
||
TELEGRAM_CHAT_ID=your-chat-id
|
||
OLLAMA_SERVER_URL=http://host.docker.internal:11434
|
||
OLLAMA_MODEL=llama3.2:latest
|
||
VITE_API_URL=http://localhost:3000
|
||
EOF
|
||
|
||
# Editör ile açın ve konfigüre edin
|
||
nano .env
|
||
```
|
||
|
||
**Minimum gerekli ayarlar:**
|
||
```env
|
||
SESSION_SECRET=very-strong-random-secret-here
|
||
GMAIL_USER=your-email@gmail.com
|
||
GMAIL_APP_PASSWORD=your-gmail-app-password
|
||
TELEGRAM_BOT_TOKEN=your-bot-token
|
||
TELEGRAM_CHAT_ID=your-chat-id
|
||
```
|
||
|
||
### 3. Production Modunda Başlatın
|
||
|
||
```bash
|
||
# Container'ları build edin ve başlatın
|
||
docker compose up -d
|
||
|
||
# Logları görüntüleyin
|
||
docker compose logs -f
|
||
```
|
||
|
||
### 4. Admin Kullanıcısı Oluşturun
|
||
|
||
İlk çalıştırmada admin kullanıcısı oluşturmanız gerekir:
|
||
|
||
```bash
|
||
# Backend container'a bağlanın
|
||
docker compose exec backend sh
|
||
|
||
# Admin kullanıcı scripti çalıştırın
|
||
node scripts/create-admin.js
|
||
|
||
# Container'dan çıkın
|
||
exit
|
||
```
|
||
|
||
### 5. Uygulamaya Erişin
|
||
|
||
- **Frontend**: http://localhost:4173
|
||
- **Backend API**: http://localhost:3000
|
||
- **Health Check**: http://localhost:3000/health
|
||
|
||
---
|
||
|
||
## 💻 Development Modu
|
||
|
||
Development modunda hot-reload aktif olur ve kod değişiklikleri anında yansır.
|
||
|
||
### Başlatma
|
||
|
||
```bash
|
||
# Development compose ile başlat
|
||
docker compose -f docker-compose.dev.yml up
|
||
|
||
# Veya arka planda çalıştır
|
||
docker compose -f docker-compose.dev.yml up -d
|
||
```
|
||
|
||
### Özellikler
|
||
|
||
- ✅ **Hot Reload**: Kod değişiklikleri anında yansır
|
||
- ✅ **Volume Mount**: Local klasörler container'a mount edilir
|
||
- ✅ **Debug Modu**: Detaylı log çıktıları
|
||
- ✅ **Nodemon**: Backend için otomatik restart
|
||
|
||
### Development Portları
|
||
|
||
- **Frontend (Vite Dev Server)**: http://localhost:5173
|
||
- **Backend**: http://localhost:3000
|
||
|
||
---
|
||
|
||
## 🏭 Production Modu
|
||
|
||
Production modu için optimize edilmiş, multi-stage build ile küçük image boyutu.
|
||
|
||
### Başlatma
|
||
|
||
```bash
|
||
# Production compose ile başlat
|
||
docker compose up -d
|
||
|
||
# Durum kontrolü
|
||
docker compose ps
|
||
|
||
# Logları görüntüle
|
||
docker compose logs -f backend
|
||
docker compose logs -f frontend
|
||
```
|
||
|
||
### Container Yönetimi
|
||
|
||
```bash
|
||
# Tüm servisleri durdur
|
||
docker compose stop
|
||
|
||
# Tüm servisleri başlat
|
||
docker compose start
|
||
|
||
# Tüm servisleri yeniden başlat
|
||
docker compose restart
|
||
|
||
# Servisleri kaldır (veri korunur)
|
||
docker compose down
|
||
|
||
# Servisleri ve volume'leri kaldır (VERİ SİLİNİR!)
|
||
docker compose down -v
|
||
```
|
||
|
||
### Build İşlemleri
|
||
|
||
```bash
|
||
# Image'ları yeniden build et
|
||
docker compose build
|
||
|
||
# Cache kullanmadan build et
|
||
docker compose build --no-cache
|
||
|
||
# Belirli bir servisi build et
|
||
docker compose build backend
|
||
```
|
||
|
||
---
|
||
|
||
## 🔐 Ortam Değişkenleri
|
||
|
||
### Backend Değişkenleri
|
||
|
||
| Değişken | Açıklama | Varsayılan | Zorunlu |
|
||
|----------|----------|------------|---------|
|
||
| `NODE_ENV` | Çalışma ortamı | `production` | ❌ |
|
||
| `PORT` | Backend portu | `3000` | ❌ |
|
||
| `SESSION_SECRET` | Session şifreleme anahtarı | - | ✅ |
|
||
| `GMAIL_USER` | Gmail hesabı | - | ✅ |
|
||
| `GMAIL_APP_PASSWORD` | Gmail uygulama şifresi | - | ✅ |
|
||
| `TELEGRAM_BOT_TOKEN` | Telegram bot token | - | ✅ |
|
||
| `TELEGRAM_CHAT_ID` | Telegram chat ID | - | ✅ |
|
||
| `DOMAIN_URL` | Backend domain | `http://localhost:3000` | ❌ |
|
||
| `FRONTEND_URL` | Frontend domain | `http://localhost:4173` | ❌ |
|
||
| `OLLAMA_SERVER_URL` | Ollama AI server URL | `http://host.docker.internal:11434` | ❌ |
|
||
| `OLLAMA_MODEL` | Ollama model adı | `llama3.2:latest` | ❌ |
|
||
|
||
### Frontend Değişkenleri
|
||
|
||
| Değişken | Açıklama | Varsayılan | Zorunlu |
|
||
|----------|----------|------------|---------|
|
||
| `VITE_API_URL` | Backend API URL | `http://localhost:3000` | ✅ |
|
||
|
||
---
|
||
|
||
## 💾 Veri Yedekleme
|
||
|
||
### Manuel Yedekleme
|
||
|
||
```bash
|
||
# Database yedekle
|
||
docker compose exec backend sh -c "cd database && tar czf /tmp/backup.tar.gz *.db"
|
||
docker compose cp backend:/tmp/backup.tar.gz ./backup-$(date +%Y%m%d).tar.gz
|
||
|
||
# Logs yedekle
|
||
docker compose exec backend sh -c "cd logs && tar czf /tmp/logs-backup.tar.gz *.log"
|
||
docker compose cp backend:/tmp/logs-backup.tar.gz ./logs-backup-$(date +%Y%m%d).tar.gz
|
||
```
|
||
|
||
### Otomatik Yedekleme (Cron)
|
||
|
||
```bash
|
||
# Yedekleme scripti oluştur
|
||
cat > backup.sh << 'EOF'
|
||
#!/bin/bash
|
||
BACKUP_DIR="/backup/oltalama"
|
||
DATE=$(date +%Y%m%d_%H%M%S)
|
||
|
||
mkdir -p $BACKUP_DIR
|
||
|
||
# Database backup
|
||
docker compose exec -T backend sh -c "cd database && tar czf - *.db" > "$BACKUP_DIR/db-$DATE.tar.gz"
|
||
|
||
# Eski yedekleri sil (30 günden eski)
|
||
find $BACKUP_DIR -name "db-*.tar.gz" -mtime +30 -delete
|
||
|
||
echo "Backup completed: $DATE"
|
||
EOF
|
||
|
||
chmod +x backup.sh
|
||
|
||
# Crontab'a ekle (her gün 02:00'de)
|
||
(crontab -l 2>/dev/null; echo "0 2 * * * /path/to/backup.sh >> /var/log/oltalama-backup.log 2>&1") | crontab -
|
||
```
|
||
|
||
### Geri Yükleme
|
||
|
||
```bash
|
||
# Database geri yükle
|
||
docker compose cp ./backup-20250101.tar.gz backend:/tmp/
|
||
docker compose exec backend sh -c "cd database && tar xzf /tmp/backup-20250101.tar.gz"
|
||
docker compose restart backend
|
||
```
|
||
|
||
---
|
||
|
||
## 🔧 İleri Seviye Kullanım
|
||
|
||
### Nginx ile Reverse Proxy
|
||
|
||
Nginx reverse proxy eklemek için:
|
||
|
||
```bash
|
||
# Nginx profili ile başlat
|
||
docker compose --profile with-nginx up -d
|
||
```
|
||
|
||
`nginx.conf` dosyasını düzenleyin:
|
||
|
||
```nginx
|
||
# nginx/nginx.conf
|
||
server {
|
||
listen 80;
|
||
server_name yourdomain.com;
|
||
|
||
location / {
|
||
proxy_pass http://frontend:4173;
|
||
proxy_http_version 1.1;
|
||
proxy_set_header Upgrade $http_upgrade;
|
||
proxy_set_header Connection 'upgrade';
|
||
proxy_set_header Host $host;
|
||
proxy_cache_bypass $http_upgrade;
|
||
}
|
||
|
||
location /api/ {
|
||
proxy_pass http://backend:3000/api/;
|
||
proxy_http_version 1.1;
|
||
proxy_set_header Upgrade $http_upgrade;
|
||
proxy_set_header Connection 'upgrade';
|
||
proxy_set_header Host $host;
|
||
proxy_cache_bypass $http_upgrade;
|
||
}
|
||
}
|
||
```
|
||
|
||
### Resource Limits
|
||
|
||
Production ortamında resource limitleri ekleyin:
|
||
|
||
```yaml
|
||
# docker-compose.yml içine ekle
|
||
services:
|
||
backend:
|
||
# ... diğer ayarlar
|
||
deploy:
|
||
resources:
|
||
limits:
|
||
cpus: '1'
|
||
memory: 512M
|
||
reservations:
|
||
cpus: '0.5'
|
||
memory: 256M
|
||
```
|
||
|
||
### Health Check Monitoring
|
||
|
||
Container'ların sağlık durumunu izleyin:
|
||
|
||
```bash
|
||
# Health status kontrolü
|
||
docker compose ps
|
||
|
||
# Detaylı health check logları
|
||
docker inspect --format='{{json .State.Health}}' oltalama-backend | jq
|
||
```
|
||
|
||
### Ollama ile Kullanım
|
||
|
||
Eğer Ollama host makinede çalışıyorsa:
|
||
|
||
```bash
|
||
# Host'tan Ollama'ya erişim için
|
||
# .env dosyasında:
|
||
OLLAMA_SERVER_URL=http://host.docker.internal:11434
|
||
OLLAMA_MODEL=llama3.2:latest
|
||
```
|
||
|
||
Ollama'yı da Docker'da çalıştırmak için:
|
||
|
||
```yaml
|
||
# docker-compose.yml'e ekle
|
||
services:
|
||
ollama:
|
||
image: ollama/ollama:latest
|
||
container_name: oltalama-ollama
|
||
restart: unless-stopped
|
||
ports:
|
||
- "11434:11434"
|
||
volumes:
|
||
- ollama-data:/root/.ollama
|
||
networks:
|
||
- oltalama-network
|
||
|
||
volumes:
|
||
ollama-data:
|
||
driver: local
|
||
```
|
||
|
||
Sonra `.env` dosyasında:
|
||
```env
|
||
OLLAMA_SERVER_URL=http://ollama:11434
|
||
```
|
||
|
||
---
|
||
|
||
## 🐛 Troubleshooting
|
||
|
||
### Problem: Container başlamıyor
|
||
|
||
```bash
|
||
# Logları kontrol et
|
||
docker compose logs backend
|
||
docker compose logs frontend
|
||
|
||
# Container'ı interaktif başlat
|
||
docker compose run --rm backend sh
|
||
```
|
||
|
||
### Problem: Database erişim hatası
|
||
|
||
```bash
|
||
# Volume'leri kontrol et
|
||
docker volume ls
|
||
docker volume inspect oltalama_backend-data
|
||
|
||
# İzinleri düzelt
|
||
docker compose exec backend chown -R oltalama:oltalama /app/database
|
||
```
|
||
|
||
### Problem: Port conflict
|
||
|
||
```bash
|
||
# Kullanılan portları kontrol et
|
||
sudo lsof -i :3000
|
||
sudo lsof -i :4173
|
||
|
||
# Farklı port kullan
|
||
docker compose up -d --force-recreate
|
||
```
|
||
|
||
### Problem: Image boyutu çok büyük
|
||
|
||
```bash
|
||
# Kullanılmayan image'ları temizle
|
||
docker system prune -a
|
||
|
||
# Build cache'i temizle
|
||
docker builder prune
|
||
```
|
||
|
||
---
|
||
|
||
## 📊 Monitoring
|
||
|
||
### Container İstatistikleri
|
||
|
||
```bash
|
||
# Gerçek zamanlı resource kullanımı
|
||
docker stats
|
||
|
||
# Belirli container'lar için
|
||
docker stats oltalama-backend oltalama-frontend
|
||
```
|
||
|
||
### Log Yönetimi
|
||
|
||
```bash
|
||
# Son 100 satır
|
||
docker compose logs --tail=100 backend
|
||
|
||
# Gerçek zamanlı takip
|
||
docker compose logs -f
|
||
|
||
# Belirli bir zaman aralığı
|
||
docker compose logs --since="2025-01-01T00:00:00"
|
||
|
||
# Belirli bir service
|
||
docker compose logs backend
|
||
```
|
||
|
||
---
|
||
|
||
## 🚀 Production Deployment Checklist
|
||
|
||
- [ ] `.env` dosyasını production değerleri ile doldur
|
||
- [ ] `SESSION_SECRET` için güçlü random string oluştur
|
||
- [ ] Gmail App Password oluştur ve ayarla
|
||
- [ ] Telegram bot token ve chat ID ayarla
|
||
- [ ] Domain URL'lerini güncelle
|
||
- [ ] Nginx reverse proxy yapılandır (opsiyonel)
|
||
- [ ] SSL/TLS sertifikası ekle
|
||
- [ ] Firewall kurallarını ayarla
|
||
- [ ] Admin kullanıcı oluştur
|
||
- [ ] Otomatik yedekleme sistemi kur
|
||
- [ ] Health check monitoring kur
|
||
- [ ] Log rotation yapılandır
|
||
|
||
---
|
||
|
||
## 📚 Ek Kaynaklar
|
||
|
||
- [Docker Documentation](https://docs.docker.com/)
|
||
- [Docker Compose Documentation](https://docs.docker.com/compose/)
|
||
- [Best Practices for Node.js in Docker](https://github.com/nodejs/docker-node/blob/main/docs/BestPractices.md)
|
||
|
||
---
|
||
|
||
## 🆘 Destek
|
||
|
||
Sorun yaşıyorsanız:
|
||
|
||
1. Logları kontrol edin: `docker compose logs`
|
||
2. Container durumunu kontrol edin: `docker compose ps`
|
||
3. Health check durumunu kontrol edin
|
||
4. Issue açın veya dokümantasyonu inceleyin
|
||
|
||
---
|
||
|
||
**🎉 Artık Docker ile hazırsınız!**
|
||
|