Ubuntu Sunucuya Python Django/Flask Projesi Canlıya Alma (Production Deploy)

Python ile geliştirdiğiniz bir web uygulamasını canlıya almak, özellikle ilk kez yapacaklar için kafa karıştırıcı olabiliyor. Geliştirme ortamında sorunsuz çalışan proje, production'da bambaşka sorunlar çıkarabilir. Neyse ki Ubuntu sunucuda Django veya Flask projenizi canlıya almak sandığınızdan daha kolay. Bu yazıda adım adım, güvenilir bir deployment sürecini anlatacağım.

1. Sunucu Hazırlıkları

Öncelikle güncel bir Ubuntu sunucunuz olduğunu varsayıyorum. SSH ile bağlanın ve sistem paketlerini güncelleyin:

sudo apt update && sudo apt upgrade -y

Python, pip, venv ve gerekli kütüphaneleri yükleyin. Django için genellikle python3-pip, python3-venv ve nginx yeterli. Flask için de aynı şey geçerli.

2. Projenizi Sunucuya Taşıyın

Proje dosyalarınızı sunucuya kopyalamanın birkaç yolu var. En yaygını Git kullanmak. Deponuzu sunucuda clone'layın veya SCP/rsync ile dosyaları aktarın. Ben Git'i tercih ediyorum:

git clone https://github.com/kullanici/proje.git /var/www/proje

Proje dizinine gidip sanal ortam oluşturun ve bağımlılıkları yükleyin:

cd /var/www/proje
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt

Bu aşamada gizli ayarlarınızı (.env) da sunucuya eklemeyi unutmayın.

3. Gunicorn ile Uygulamayı Çalıştırın

Development sunucusu asla production'da kullanılmamalı. Bunun yerine Gunicorn gibi bir WSGI sunucusu kullanın. Django için wsgi.py dosyasını, Flask için uygulama nesnesini işaret edin:

gunicorn --workers 3 --bind unix:/var/www/proje/app.sock proje.wsgi:application

Buradaki proje.wsgi:application Django içindir. Flask için app:app şeklinde olur. Çalıştığından emin olun, ardından systemd servisi oluşturarak otomatik başlatma ve yönetim sağlayın.

4. Nginx Ters Proxy Kurulumu

Nginx, statik dosyaları sunmak ve istekleri Gunicorn'a yönlendirmek için idealdir. Aşağıdaki gibi bir konfigürasyon dosyası oluşturun:

server {
listen 80;
server_name orneklink.com;

location / {
include proxy_params;
proxy_pass http://unix:/var/www/proje/app.sock;
}

location /static/ {
alias /var/www/proje/static/;
}
}

İlgili dizinlere doğru izinleri verin ve Nginx'i yeniden başlatın:

sudo nginx -t
sudo systemctl restart nginx

5. SSL Sertifikası ile HTTPS

Günümüzde SSL zorunlu. Certbot ile Let's Encrypt ücretsiz sertifikası alın:

sudo apt install certbot python3-certbot-nginx
sudo certbot --nginx -d orneklink.com

Certbot, Nginx konfigürasyonunu otomatik günceller ve yenilemeyi de halleder.

6. Güvenlik ve Performans İpuçları

  • Gizli anahtarları, veritabanı şifrelerini asla kod içinde tutmayın; .env dosyasi veya ortam değişkenleri kullanın.
  • Statik dosyaları (CSS, JS, resimler) Nginx üzerinden doğrudan sunun, Gunicorn'a yük bindirmeyin.
  • Sunucu güvenlik duvarını (UFW) etkinleştirin ve sadece gerekli portları (22, 80, 443) açın.
  • Logları düzenli takip edin: journalctl -u gunicorn -f
Unutmayın, deployment bir kere yapılıp bırakılmaz. Güncellemeleri yapmak, hataları izlemek ve yedek almak sürecin bir parçası.

Bu adımları takip ederek Django veya Flask projenizi kısa sürede canlıya alabilirsiniz. Deneyim kazandıkça Docker, CI/CD gibi araçlarla süreci daha da otomatikleştirebilirsiniz. Sorularınız olursa yorumlarda buluşalım.

← Tüm yazılar