Python Flask/Django Ubuntu VPS'e Deploy Rehberi
Ubuntu VPS'te Python Flask ve Django uygulamalarını Gunicorn WSGI sunucusu, Nginx reverse proxy ve systemd ile deploy etme rehberi.
Python Web Uygulaması Deploy Nedir?
Python'un en popüler web çerçeveleri olan Flask ve Django, üretim ortamında doğrudan çalıştırılmaz; bunun yerine WSGI (Web Server Gateway Interface) uyumlu bir uygulama sunucusu üzerinden çalıştırılırlar. Bu rehberde Gunicorn WSGI sunucusu, Nginx reverse proxy ve systemd servis yönetimi ile Python uygulamanızı Ubuntu VPS'e nasıl deploy edeceğinizi öğreneceksiniz.
Gunicorn (Green Unicorn), Python WSGI uygulamaları için üretim kalitesinde bir HTTP sunucusudur. Birden fazla worker process ile istekleri paralel olarak işler. Nginx ise gelen trafiği Gunicorn'a yönlendirirken SSL, statik dosyalar ve önbellekleme gibi işlemleri üstlenir.
Ön Gereksinimler
- Ubuntu 22.04 LTS sunucu
- Python 3.10+ kurulu
- Sudo yetkisi
- Alan adı veya IP adresi
Adım 1: Python ve Gerekli Paketlerin Kurulumu
sudo apt update
sudo apt install -y python3 python3-pip python3-venv python3-dev
sudo apt install -y build-essential libpq-dev libmysqlclient-dev
python3 --version
pip3 --version
Adım 2: Uygulama Dizini ve Virtual Environment
sudo mkdir -p /var/www/pyapp
sudo chown -R $USER:$USER /var/www/pyapp
cd /var/www/pyapp
# Virtual environment oluştur
python3 -m venv venv
source venv/bin/activate
# Gereksinimleri kur
pip install flask gunicorn # Flask için
# veya
pip install django gunicorn # Django için
Adım 3: Örnek Flask Uygulaması
nano /var/www/pyapp/app.py
from flask import Flask, jsonify
import os
app = Flask(__name__)
@app.route('/')
def index():
return jsonify({'message': 'Flask uygulaması çalışıyor!', 'status': 'ok'})
@app.route('/health')
def health():
return jsonify({'status': 'healthy'})
if __name__ == '__main__':
app.run(debug=False, host='0.0.0.0', port=5000)
Django için wsgi.py Kontrolü
cat myproject/wsgi.py
import os
from django.core.wsgi import get_wsgi_application
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'myproject.settings')
application = get_wsgi_application()
Adım 4: Gunicorn Yapılandırması
nano /var/www/pyapp/gunicorn.conf.py
import multiprocessing
bind = "unix:/run/gunicorn/gunicorn.sock"
workers = multiprocessing.cpu_count() * 2 + 1
worker_class = "sync"
worker_connections = 1000
timeout = 120
keepalive = 5
max_requests = 1000
max_requests_jitter = 50
preload_app = True
accesslog = "/var/log/gunicorn/access.log"
errorlog = "/var/log/gunicorn/error.log"
loglevel = "warning"
Gunicorn Log Dizini Oluşturma
sudo mkdir -p /run/gunicorn /var/log/gunicorn
sudo chown www-data:www-data /run/gunicorn /var/log/gunicorn
Adım 5: Systemd Servis Dosyası
sudo nano /etc/systemd/system/gunicorn.service
[Unit]
Description=Gunicorn WSGI Daemon for Flask/Django App
After=network.target
[Service]
User=www-data
Group=www-data
WorkingDirectory=/var/www/pyapp
ExecStart=/var/www/pyapp/venv/bin/gunicorn \
--config /var/www/pyapp/gunicorn.conf.py \
app:app
ExecReload=/bin/kill -s HUP $MAINPID
KillMode=mixed
TimeoutStopSec=5
PrivateTmp=true
Restart=on-failure
RestartSec=5s
[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl start gunicorn
sudo systemctl enable gunicorn
sudo systemctl status gunicorn
Adım 6: Nginx Reverse Proxy Yapılandırması
sudo apt install nginx -y
sudo nano /etc/nginx/sites-available/pyapp
server {
listen 80;
server_name example.com www.example.com;
location = /favicon.ico { access_log off; log_not_found off; }
location /static/ {
root /var/www/pyapp;
expires 30d;
}
location /media/ {
root /var/www/pyapp;
}
location / {
include proxy_params;
proxy_pass http://unix:/run/gunicorn/gunicorn.sock;
proxy_read_timeout 120;
proxy_connect_timeout 120;
}
access_log /var/log/nginx/pyapp_access.log;
error_log /var/log/nginx/pyapp_error.log;
}
sudo ln -s /etc/nginx/sites-available/pyapp /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx
Adım 7: SSL Kurulumu
sudo apt install certbot python3-certbot-nginx -y
sudo certbot --nginx -d example.com -d www.example.com
sudo systemctl reload nginx
Django için Ek Ayarlar
settings.py Production Ayarları
DEBUG = False
ALLOWED_HOSTS = ['example.com', 'www.example.com']
STATIC_ROOT = '/var/www/pyapp/staticfiles'
MEDIA_ROOT = '/var/www/pyapp/media'
Static Dosyaları Toplama
cd /var/www/pyapp
source venv/bin/activate
python manage.py collectstatic --noinput
python manage.py migrate
Sık Karşılaşılan Sorunlar
502 Bad Gateway
sudo systemctl status gunicorn
sudo journalctl -u gunicorn -n 50
ls -la /run/gunicorn/
Static Dosyalar 404 Döndürüyor
python manage.py collectstatic
sudo chown -R www-data:www-data /var/www/pyapp/staticfiles
Sonuç
Python Flask veya Django uygulamanızı Ubuntu VPS'e Gunicorn + Nginx + systemd üçlüsüyle başarıyla deploy ettiniz. Systemd sayesinde sunucu yeniden başladığında uygulama otomatik olarak devreye girer, Gunicorn'un çoklu worker yapısı eşzamanlı istekleri verimli işler ve Nginx SSL ile statik dosya yönetimini üstlenir.
Yorumlar
Henüz yorum yok. İlk yorumu siz yapın!