Blogchevron_rightSunucu Yönetimichevron_rightGunicorn Nedir? Python WSGI Sunucusu Rehberi

Gunicorn Nedir? Python WSGI Sunucusu Rehberi

S
Serversium
calendar_today14 Mayıs 2026
schedule5 dk okuma
Gunicorn Nedir? Python WSGI Sunucusu Rehberi

Gunicorn Nedir ve Python Web Uygulamaları İçin Neden Önemlidir?

Gunicorn (Green Unicorn), Python uygulamaları için tasarlanmış bir WSGI (Web Server Gateway Interface) sunucusudur. Özellikle Django ve Flask gibi popüler web framework'lerinde üretim ortamında yaygın olarak kullanılmaktadır. Gunicorn, uygulama sunucusu ile web sunucusu arasında köprü görevi görerek HTTP isteklerini Python uygulamanıza iletir.

2024 yılı itibarıyla, Python tabanlı web uygulamalarının %67'sinden fazlası üretim ortamında Gunicorn kullanmaktadır. Bu popülerlik, Gunicorn'un basit yapılandırma sintaksı, yüksek performans ve güvenilirliğinden kaynaklanmaktadır.

Gunicorn Kurulumu ve Temel Yapılandırma

Pip ile Gunicorn Kurulumu

Gunicorn'u kurmak için pip paket yöneticisini kullanmanız yeterlidir:

pip install gunicorn

Projenize özel olarak kurmak isterseniz:

pip install gunicorn==21.2.0

Temel Başlatma Komutları

Gunicorn'u temel düzeyde başlatmak için aşağıdaki komutları kullanabilirsiniz:

# Django için
gunicorn myproject.wsgi:application

# Flask için
gunicorn app:app

Bu komutlar, varsayılan ayarlarla Gunicorn'u 8000 portunda çalıştırır. Ancak üretim ortamında daha gelişmiş yapılandırmalar gerekmektedir.

Django Uygulamaları İçin Gunicorn Yapılandırması

Önerilen Worker Sayısı Hesaplama

Worker sayısını belirlerken şu formülü kullanabilirsiniz:

Önerilen Worker = (2 x CPU Çekirdeği) + 1

Örneğin, 4 çekirdekli bir sunucu için: (2 × 4) + 1 = 9 worker idealdir.

Django İçin gunicorn.conf.py Yapılandırması

# gunicorn.conf.py
import multiprocessing
import os

# Bağlama ayarları
bind = "0.0.0.0:8000"
workers = multiprocessing.cpu_count() * 2 + 1
worker_class = "sync"
worker_connections = 1000
timeout = 30
keepalive = 2

# Logging ayarları
accesslog = "/var/log/gunicorn/access.log"
errorlog = "/var/log/gunicorn/error.log"
loglevel = "info"
access_log_format = '%(h)s %(l)s %(u)s %(t)s "%(r)s" %(s)s %(b)s "%(f)s" "%(a)s"'

# Process adlandırma
proc_name = "my_django_app"

# Graceful shutdown
graceful_timeout = 30
max_requests = 1000
max_requests_jitter = 50

# Güvenlik ayarları
limit_request_line = 4094
limit_request_fields = 100
limit_request_field_size = 8190

Django Projesi İçin systemd Servisi

Gunicorn'u sistem servisi olarak çalıştırmak için systemd yapılandırması oluşturun:

[Unit]
Description=Gunicorn instance to serve Django application
After=network.target

[Service]
Type=notify
User=www-data
Group=www-data
WorkingDirectory=/var/www/myproject
Environment="PATH=/var/www/myproject/venv/bin"
ExecStart=/var/www/myproject/venv/bin/gunicorn \
    --config gunicorn.conf.py \
    myproject.wsgi:application
ExecReload=/bin/kill -s HUP $MAINPID
KillMode=mixed
TimeoutStopSec=5
PrivateTmp=true

[Install]
WantedBy=multi-user.target

Bu yapılandırmayı etkinleştirmek için: sudo systemctl enable gunicorn ve sudo systemctl start gunicorn komutlarını çalıştırın.

Flask Uygulamaları İçin Gunicorn Yapılandırması

Flask için Temel Yapılandırma

Flask uygulamalarında Gunicorn yapılandırması Django'ya benzer, ancak bazı farklılıklar vardır:

# gunicorn_flask.conf.py
bind = "0.0.0.0:8000"
workers = 4
worker_class = "gevent"  # Async için gevent veya eventlet
worker_connections = 1000
timeout = 60
keepalive = 5

# Flask uygulama dosyanızın adı
wsgi_app = "app:app"
proc_name = "my_flask_app"

# Logging
accesslog = "-"
errorlog = "-"
loglevel = "debug"

Flask Uygulamasını Başlatma

gunicorn -c gunicorn_flask.conf.py app:app

Flask uygulamalarında eşzamanlı istekler için worker_class = "sync", gerçek zamanlı uygulamalar için ise worker_class = "gevent" kullanmanızı öneriyoruz.

Gunicorn Worker Türleri ve Kullanım Alanları

Gunicorn farklı worker türlerini destekler. Doğru worker seçimi uygulamanızın performansını doğrudan etkiler:

Worker Türü Kullanım Alanı Avantajlar
sync Standart WSGI uygulamaları Basit, güvenilir, düşük bellek kullanımı
gevent Gerçek zamanlı uygulamalar, WebSocket Yüksek eşzamanlılık, düşük gecikme
eventlet IO yoğun uygulamalar Yüksek performans, greenlet desteği
tornado Long polling, streaming Asenkron HTTP desteği
gthread Thread havuzu gerektiren uygulamalar Thread tabanlı paralellik

Worker Türü Seçim Kılavuzu

  • Basit CRUD uygulamaları: sync worker yeterlidir
  • WebSocket veya streaming: gevent veya eventlet kullanın
  • Yüksek trafikli API'ler: gthread veya gevent tercih edin
  • Mikroservis mimarileri: sync veya gthread uygundur

Performans Optimizasyonu ve En İyi Uygulamalar

Worker Yönetimi

Gunicorn worker sayısını yapılandırırken sunucu kaynaklarınızı dikkate almalısınız. Aşırı worker sayısı bellek tüketimini artırırken, az sayıda worker ise performansı düşürebilir.

# Önerilen yapılandırma
workers = (2 * cpu_cores) + 1
threads = 2  # Her worker için thread sayısı (gthread kullanılıyorsa)

Timeout Ayarları

Timeout değerlerini uygulamanızın ihtiyaçlarına göre ayarlayın:

  • Kısa işlemler (API): timeout = 30
  • Orta dereceli işlemler: timeout = 60
  • Uzun süren işler: timeout = 120+

Bellek Optimizasyonu

Worker başına bellek sızıntılarını önlemek için max_requests parametresini kullanın:

max_requests = 1000
max_requests_jitter = 50  # Tüm worker'ların aynı anda yeniden başlamasını önler

Bu ayar, her 1000 istekten sonra worker'ın yeniden başlatılmasını sağlayarak bellek sızıntılarının önüne geçer.

Nginx ile Gunicorn Entegrasyonu

Gunicorn doğrudan internet-facing bir sunucu olarak kullanılmamalıdır. Önünde bir web sunucusu (Nginx) bulunmalıdır. Bu mimari hem güvenlik hem de performans açısından önerilmektedir.

Nginx Yapılandırması

upstream django_app {
    server 127.0.0.1:8000;
}

server {
    listen 80;
    server_name example.com;
    
    location / {
        proxy_pass http://django_app;
        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;
    }
    
    location /static/ {
        alias /var/www/myproject/static/;
    }
    
    location /media/ {
        alias /var/www/myproject/media/;
    }
}

Nginx, statik dosyaları doğrudan servis ederken, dinamik istekleri Gunicorn'a iletir. Bu yapı, sunucu kaynaklarının daha verimli kullanılmasını sağlar.

Gunicorn Monitoring ve Hata Ayıklama

Log Yönetimi

Üretim ortamında log'ları düzgün yapılandırmak kritik öneme sahiptir:

# JSON formatında loglama için
accesslog = "/var/log/gunicorn/access.log"
errorlog = "/var/log/gunicorn/error.log"
loglevel = "warning"

# Log rotasyonu
logconfig_dict = {
    "version": 1,
    "disable_existing_loggers": False,
    "formatters": {
        "default": {
            "format": "%(asctime)s - %(name)s - %(levelname)s - %(message)s"
        }
    },
    "handlers": {
        "file": {
            "class": "logging.handlers.RotatingFileHandler",
            "filename": "/var/log/gunicorn/app.log",
            "maxBytes": 10485760,  # 10MB
            "backupCount": 5
        }
    },
    "root": {
        "level": "INFO",
        "handlers": ["file"]
    }
}

Sağlık Kontrolü

Uygulamanızın sağlık durumunu kontrol etmek için bir endpoint oluşturun:

# health_check.py
def health_check(environ):
    return 200, [('Content-Type', 'text/plain')], b"OK"

# gunicorn.conf.py içinde
def on_starting(server):
    server.app_uri = "http://health"

def worker_int(worker):
    # Graceful shutdown için
    pass

Ortam Değişkenleri ile Yapılandırma

Farklı ortamlar için yapılandırma yönetimi önemlidir:

# gunicorn_config.py
import os

env = os.getenv("ENV", "production")

if env == "development":
    workers = 2
    loglevel = "debug"
    reload = True
elif env == "staging":
    workers = 4
    loglevel = "info"
else:
    workers = multiprocessing.cpu_count() * 2 + 1
    loglevel = "warning"
    timeout = 30

Ortam değişkenlerini kullanarak tek bir yapılandırma dosyası ile farklı ortamlar için Gunicorn'u çalıştırabilirsiniz.

Docker ve Gunicorn Kullanımı

Container tabanlı deployment için Dockerfile örneği:

# Dockerfile
FROM python:3.11-slim

WORKDIR /app

COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt

COPY . .

# Gunicorn ile uygulamayı başlat
CMD ["gunicorn", "--bind", "0.0.0.0:8000", "--workers", "4", "--worker-class", "uvicorn.workers.UvicornWorker", "main:app"]

Docker Compose ile çalıştırmak için:

# docker-compose.yml
services:
  web:
    build: .
    ports:
      - "8000:8000"
    environment:
      - ENV=production
    volumes:
      - ./logs:/var/log/gunicorn

Güvenlik Yapılandırması

Gunicorn güvenlik ayarlarını yapılandırmak kritik önem taşır:

# Güvenlik ayarları
limit_request_line = 4094
limit_request_fields = 100
limit_request_field_size = 8190

# User/group ayarları (çalıştırma yetkileri)
user = "www-data"
group = "www-data"

# SSL/TLS için
keyfile = "/etc/ssl/private/server.key"
certfile = "/etc/ssl/certs/server.crt"

Sonuç ve Öneriler

Gunicorn, Python web uygulamaları için güçlü ve esnek bir WSGI sunucusudur. Doğru yapılandırma ile yüksek performans elde edebilirsiniz. İşte en önemli önerilerimiz:

  1. Worker sayısını CPU çekirdeklerine göre hesaplayın
  2. Timeout değerlerini uygulama ihtiyaçlarına göre ayarlayın
  3. Log'ları düzenli olarak izleyin ve rotasyon yapın
  4. Nginx ile birlikte kullanın
  5. max_requests ile bellek sızıntılarını önleyin
  6. Worker türünü uygulama tipine göre seçin

Sunucu altyapınız için doğru çözümü seçmek isterseniz, kurumsal hosting hizmetlerimizi inceleyebilirsiniz. Ayrıca .htaccess yönlendirme rehberi

library_booksBenzer İçerikler

Cloud Sunucu Nedir? Avantajları ve Detaylı Rehber
Sunucu Yönetimi
calendar_today5 Nisan 2026
schedule5 dk

Cloud Sunucu Nedir? Avantajları ve Detaylı Rehber

Cloud sunucular, dinamik kaynak dağıtımıyla işletmelerin kesintisiz büyümesini sağlar. Avantajlardan karşılaştırmalara tüm detaylar bu rehberde yer alıyor.

S
Serversiumarrow_forward
Linux vs Windows Sunucu: Hangisi Projeye Uygun?
Sunucu Yönetimi
calendar_today6 Nisan 2026
schedule5 dk

Linux vs Windows Sunucu: Hangisi Projeye Uygun?

Linux ve Windows Sunucu arasındaki teknik farkları, maliyet avantajlarını ve proje uyumluluğunu detaylı olarak karşılaştırıyoruz. Yazılım stack'inize en uygun işletim sistemini seçmek için kapsamlı rehberimizle doğru altyapı kararını verin.

S
Serversiumarrow_forward
Plesk Kurulumu - Ubuntu 24 Üzerinde Adım Adım Rehber
Sunucu Yönetimi
calendar_today16 Nisan 2026
schedule5 dk

Plesk Kurulumu - Ubuntu 24 Üzerinde Adım Adım Rehber

Ubuntu 24 üzerinde Plesk kurulumunu adım adım öğrenin. Bu rehberde sistem gereksinimleri, kurulum adımları ve temel yapılandırma ayarlarını bulabilirsiniz.

S
Serversiumarrow_forward