Ana içeriğe geç

Sword Backend Yerel Dağıtım Rehberi (HTTPS)

Bu rehber, alan adı gerektirmeden, self-signed sertifikalar kullanarak Sword Backend uygulamasını HTTPS ile bir Linux sunucuya nasıl dağıtacağınızı açıklar.

Gereksinimler

  • Ubuntu/Debian önerilen bir Linux sunucu
  • Root veya sudo erişimi

Dağıtım Adımları

1. Depoyu Klonlayın

Önce depoyu yerel makinenize veya doğrudan sunucuya klonlayın.

git clone <repository-url> sword-backend
cd sword-backend

2. Veritabanı Parolasını Güncelleyin

scripts/shell/master_deploy_local.sh dosyasını açın ve veritabanı parolasını güncelleyin:

# Dosyayı aç
nano scripts/shell/master_deploy_local.sh

# Bu satırı güncelle
DB_PASSWORD="your_secure_password"  # Bunu güçlü bir parola ile değiştirin

3. Betikleri Çalıştırılabilir Yapın

chmod +x scripts/shell/master_deploy_local.sh scripts/shell/deploy_https_local.sh scripts/shell/setup_database.sh scripts/shell/run_migrations.sh

4. Ana Dağıtım Betiğini Çalıştırın

sudo ./scripts/shell/master_deploy_local.sh

Betik şunları yapar: - PostgreSQL veritabanı kurar - Gerekli bağımlılıkları kurar - Python sanal ortamı oluşturur - Self-signed SSL sertifikaları üretir - Nginx'i HTTPS reverse proxy olarak yapılandırır - Uygulamayı systemd servisi olarak kurar - Tüm servisleri başlatır - Veritabanı migration'larını çalıştırır

5. Dağıtımı Doğrulayın

Kurulum tamamlandıktan sonra uygulamanın çalıştığını doğrulayın:

# Uygulama servis durumu
sudo systemctl status sword-backend

# Nginx durumu
sudo systemctl status nginx

# API testi (SERVER_IP yerine sunucunuzun IP adresini yazın)
curl -k https://SERVER_IP/docs

Ortam Değişkenleri

Dağıtım betiği varsayılan değerlerle bir .env dosyası oluşturacaktır. Kurulumdan sonra bunların bir kısmını güncellemek isteyebilirsiniz:

# .env dosyasını aç
nano /home/projects/sword-backend/.env

Aşağıdaki değişkenlerin bulunduğundan emin olun:

DATABASE_URL=postgresql://sword_user:your_secure_password@localhost:5432/sword_db
SECRET_KEY=your-secret-key
ALGORITHM=HS256
ACCESS_TOKEN_EXPIRE_MINUTES=30
MAIL_USERNAME=your-email@example.com
MAIL_PASSWORD=your-password
MAIL_FROM=your-email@example.com
MAIL_PORT=587
MAIL_SERVER=smtp.gmail.com

Uygulamaya Erişim

Uygulamaya sunucunun IP adresi ile erişebilirsiniz:

https://SERVER_IP

Self-signed sertifika kullandığınız için tarayıcı güvenlik uyarısı gösterecektir. Devam etmek için güvenlik istisnası eklemeniz gerekir.

Sorun Giderme

Logları Kontrol Edin

Sorun yaşarsanız logları kontrol edin:

# Uygulama logları
sudo journalctl -u sword-backend

# Nginx logları
sudo tail -f /var/log/nginx/error.log
sudo tail -f /var/log/nginx/access.log

SSL Sertifikası Sorunları

Self-signed sertifika ile ilgili sorun varsa:

# Sertifikayı yeniden üret
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
    -keyout /home/projects/sword-backend/ssl/nginx-selfsigned.key \
    -out /home/projects/sword-backend/ssl/nginx-selfsigned.crt \
    -subj "/C=US/ST=State/L=City/O=Organization/CN=SERVER_IP"

# Nginx'i yeniden başlat
sudo systemctl restart nginx

Güvenlik Duvarı Yapılandırması

Güvenlik duvarınızın HTTP (80) ve HTTPS (443) trafiğine izin verdiğinden emin olun:

sudo ufw allow 80/tcp
sudo ufw allow 443/tcp

Bakım

Uygulamayı Güncelleme

Uygulamayı güncellemek için:

  1. Depodaki son değişiklikleri alın
  2. Güncellenen dosyaları dağıtım dizinine kopyalayın
  3. Servisi yeniden başlatın
cd /path/to/local/repository
git pull
rsync -av --exclude 'venv' --exclude '__pycache__' --exclude '.git' ./ /home/projects/sword-backend/
sudo systemctl restart sword-backend

Veritabanı Yedekleri

Düzenli veritabanı yedeği alınması önerilir:

# PostgreSQL yedek örneği
pg_dump -U postgres sword_db > /path/to/backup/sword_db_$(date +%Y%m%d).sql

SSL Sertifikasını Yenileme

Self-signed sertifikalar, oluşturulurken belirlenen süre sonunda (varsayılan 365 gün) geçerliliğini yitirir. Yenilemek için:

sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
    -keyout /home/projects/sword-backend/ssl/nginx-selfsigned.key \
    -out /home/projects/sword-backend/ssl/nginx-selfsigned.crt \
    -subj "/C=US/ST=State/L=City/O=Organization/CN=SERVER_IP"

sudo systemctl restart nginx