sunucuhataları
teknik çözüm merkezi
Ara Giriş Yap Üye Ol
🏠 Ana Sayfa 📚 Kurulum Rehberleri
Kategoriler
🌐 Web Sunucuları 🐧 İşletim Sistemleri 📦 Sanallaştırma & VPS 🖥️ Kontrol Panelleri 🔒 SSL & Güvenlik 📝 CMS & Uygulamalar 🗄️ Veritabanı 📧 Mail Sunucusu 🗨️ Forum ℹ️ Hakkımızda 📧 İletişim
Giriş Yap Üye Ol
Ana Sayfa İşletim Sistemleri Python Flask/Django Ubuntu VPS'e Deploy Rehberi
🐧 İşletim Sistemleri

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.

📅 3 Mayıs 2025 👁 11 görüntülenme ⏱ 4 dk okuma
𝕏 Paylaş
📋 İçindekiler göster/gizle

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.

🤔 Bu kurulumda sorun mu yaşıyorsunuz?

Hata mesajınızı kopyalayıp foruma konu açın. Topluluğumuz size özel durumunuza göre yardımcı olacaktır.

🗨️ Foruma Katıl & Yardım Al

Yorumlar

Henüz yorum yok. İlk yorumu siz yapın!

Yorum Yap

Yorumunuz onaylandıktan sonra yayınlanır.