8.0 KiB
8.0 KiB
🚀 GAuth-Central Deployment Rehberi
📋 Deployment Senaryoları
Senaryo 1: Standalone Deployment (Mevcut Sunucularla)
Bu senaryoda mevcut PostgreSQL ve Redis sunucularınızı kullanıyorsunuz.
Ön Gereksinimler
- ✅ PostgreSQL 17+ sunucusu çalışıyor
- ✅ Redis 7+ sunucusu çalışıyor
- ✅ Go 1.23+ yüklü
- ✅ Sunuculara network erişimi var
Adımlar
- Repository'yi klonlayın
git clone <repository-url>
cd AuthCentral
- .env dosyasını yapılandırın
# .env dosyasını oluşturun
cp .env.example .env
# Düzenleyin
nano .env
.env içeriği:
PORT=8080
# Mevcut PostgreSQL sunucunuz
DB_URL="host=10.80.80.70 user=cloud password=xxx dbname=go_gauth port=5432 sslmode=disable TimeZone=Europe/Istanbul"
DB_USER=cloud
DB_PASSWORD=xxx
DB_NAME=go_gauth
DB_PORT=5432
DB_HOST=10.80.80.70
# Mevcut Redis sunucunuz
REDIS_HOST=10.80.80.70
REDIS_PORT=6379
REDIS_USER=default
REDIS_PASSWORD=xxx
REDIS_URL=redis://default:xxx@10.80.80.70:6379/0
# JWT Secret (production için güçlü bir değer)
JWT_SECRET=super_secure_production_secret_key_change_this
# OAuth Credentials
GOOGLE_CLIENT_ID=your_client_id
GOOGLE_CLIENT_SECRET=your_client_secret
GITHUB_CLIENT_ID=your_client_id
GITHUB_CLIENT_SECRET=your_client_secret
CLIENT_CALLBACK_URL=http://your-domain.com/v1/auth
APP_URL=http://your-domain.com
- Bağımlılıkları yükleyin
go mod download
- Bağlantıları test edin
# PostgreSQL bağlantısı
PGPASSWORD=xxx psql -h 10.80.80.70 -U cloud -d go_gauth -c "SELECT version();"
# Redis bağlantısı
redis-cli -h 10.80.80.70 -p 6379 -a xxx --no-auth-warning PING
- Uygulamayı başlatın
# Quick start script ile
./start.sh
# veya systemd service olarak (aşağıya bakın)
Senaryo 2: Docker Compose Deployment
Tüm servisleri (PostgreSQL, Redis, App) Docker ile çalıştırma.
Adımlar
- Repository'yi klonlayın
git clone <repository-url>
cd AuthCentral
- .env dosyasını yapılandırın
cp .env.example .env
nano .env
- Docker Compose ile başlatın
docker-compose up -d
- Logları kontrol edin
docker-compose logs -f app
- Durum kontrolü
docker-compose ps
curl http://localhost:8080/
Senaryo 3: Production Deployment (Systemd)
Production ortamında systemd ile çalıştırma.
1. Systemd Service Dosyası Oluşturun
sudo nano /etc/systemd/system/gauth-central.service
gauth-central.service:
[Unit]
Description=GAuth-Central Authentication Service
After=network.target
[Service]
Type=simple
User=www-data
Group=www-data
WorkingDirectory=/opt/gauth-central
EnvironmentFile=/opt/gauth-central/.env
ExecStart=/opt/gauth-central/main
Restart=always
RestartSec=5
StandardOutput=append:/var/log/gauth-central/app.log
StandardError=append:/var/log/gauth-central/error.log
# Security
NoNewPrivileges=true
PrivateTmp=true
[Install]
WantedBy=multi-user.target
2. Log Dizinini Oluşturun
sudo mkdir -p /var/log/gauth-central
sudo chown www-data:www-data /var/log/gauth-central
3. Uygulamayı Deploy Edin
# Deployment dizinine kopyalayın
sudo mkdir -p /opt/gauth-central
sudo cp -r . /opt/gauth-central/
cd /opt/gauth-central
# Build edin
go build -o main .
# İzinleri ayarlayın
sudo chown -R www-data:www-data /opt/gauth-central
sudo chmod +x /opt/gauth-central/main
4. Service'i Başlatın
sudo systemctl daemon-reload
sudo systemctl enable gauth-central
sudo systemctl start gauth-central
sudo systemctl status gauth-central
5. Logları İzleyin
# Real-time logs
sudo journalctl -u gauth-central -f
# Son 100 satır
sudo journalctl -u gauth-central -n 100
# Application logs
tail -f /var/log/gauth-central/app.log
🔒 Production Checklist
Güvenlik
- JWT_SECRET güçlü bir değer olarak ayarlandı
- PostgreSQL şifreleri güçlü
- Redis şifre koruması aktif
- SSL/TLS sertifikaları yapılandırıldı (Nginx/Caddy ile)
- CORS AllowOrigins production domain'lere güncellendi
- Firewall kuralları ayarlandı
- PostgreSQL sslmode=require (production)
- Rate limiting limitleri gözden geçirildi
Performance
- PostgreSQL connection pooling ayarları
- Redis max memory policy ayarlandı
- Log rotation yapılandırıldı
- Monitoring kuruldu (Prometheus/Grafana)
- Health check endpoint'i aktif
Backup
- PostgreSQL otomatik backup
- Redis persistence yapılandırması
- Backup restore testi yapıldı
Monitoring
- Application logs toplanıyor
- Error tracking (Sentry vb.)
- Uptime monitoring
- Resource monitoring (CPU, RAM, Disk)
🌐 Nginx Reverse Proxy
Production'da Nginx kullanarak SSL termination:
server {
listen 80;
server_name api.yourdomain.com;
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl http2;
server_name api.yourdomain.com;
ssl_certificate /etc/letsencrypt/live/api.yourdomain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/api.yourdomain.com/privkey.pem;
# Security headers
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-Content-Type-Options "nosniff" always;
add_header X-XSS-Protection "1; mode=block" always;
location / {
proxy_pass http://localhost:8080;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_cache_bypass $http_upgrade;
}
}
📊 Health Checks
Application Health Check
curl http://localhost:8080/
PostgreSQL Health
PGPASSWORD=xxx psql -h 10.80.80.70 -U cloud -d go_gauth -c "SELECT 1;"
Redis Health
redis-cli -h 10.80.80.70 -p 6379 -a xxx --no-auth-warning PING
🔄 Update/Rollback Prosedürü
Update
cd /opt/gauth-central
# Backup
sudo cp main main.backup
# Pull updates
git pull
# Build
go build -o main .
# Restart service
sudo systemctl restart gauth-central
# Check status
sudo systemctl status gauth-central
# Check logs
sudo journalctl -u gauth-central -f
Rollback
cd /opt/gauth-central
# Restore backup
sudo cp main.backup main
# Restart
sudo systemctl restart gauth-central
🐛 Troubleshooting
Service başlamıyor
# Logs kontrol
sudo journalctl -u gauth-central -n 50
# Config kontrol
cat /opt/gauth-central/.env
# Permissions kontrol
ls -la /opt/gauth-central/main
PostgreSQL bağlantı hatası
# Bağlantı testi
PGPASSWORD=xxx psql -h HOST -U USER -d DB -c "SELECT 1;"
# Network kontrolü
telnet HOST 5432
Redis bağlantı hatası
# Redis testi
redis-cli -h HOST -p PORT -a PASSWORD PING
# Network kontrolü
telnet HOST 6379
📝 Environment Variables Reference
| Variable | Required | Example | Description |
|---|---|---|---|
PORT |
Yes | 8080 |
Application port |
DB_URL |
Yes | host=... |
PostgreSQL connection string |
REDIS_URL |
Yes | redis://... |
Redis connection URL |
JWT_SECRET |
Yes | secret123 |
JWT signing key |
GOOGLE_CLIENT_ID |
No | xxx.apps.googleusercontent.com |
Google OAuth |
GITHUB_CLIENT_ID |
No | Ov23li... |
GitHub OAuth |
CLIENT_CALLBACK_URL |
Yes | http://localhost:8080/v1/auth |
OAuth callback base URL |
APP_URL |
Yes | http://localhost:8080 |
Application URL |
🎯 Next Steps
- Setup monitoring (Prometheus + Grafana)
- Configure log aggregation (ELK Stack)
- Setup automated backups
- Configure CI/CD pipeline
- Setup staging environment
- Configure load balancing (if needed)
💡 Pro Tip: Her deployment öncesi staging ortamında test edin!