Yükleniyor
Projelerimi canlıya alırken kullanıcıya hızlı, güvenilir bir deneyim sunmak için Nginx’i ters proxy olarak, Gunicorn’u WSGI sunucusu olarak ve Uvicorn’u ASGI sunucusu olarak kullanıyorum. Ayrıca WSGI ile ASGI arasındaki farkları ve hangi senaryoda hangisini tercih ettiğimi kendi deneyimlerim üzerinden anlatmak istiyorum.
Nginx’i genellikle şöyle kullanıyorum:
server {
listen 80;
server_name example.com www.example.com;
location /static/ {
alias /home/metin/myproject/static/;
}
location /media/ {
alias /home/metin/myproject/media/;
}
location / {
proxy_pass http://unix:/run/myproject.sock;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
WSGI protokolü ile senkron Django uygulamalarını çalıştırmak için:
pip install gunicorn
gunicorn myproject.wsgi:application \
--bind unix:/run/myproject.sock \
--workers 3 \
--timeout 30
Burada --workers
isteğe göre ayarlanır; CPU çekirdeği sayısının 2–4 katı genellikle iyi bir başlangıç.
ASGI protokolünü destekleyen (örn. Django Channels, Starlette, FastAPI) uygulamalar için:
pip install uvicorn
uvicorn myproject.asgi:application \
--uds /run/myproject_asgi.sock \
--workers 3 \
--loop uvloop \
--http httptools
ASGI ile WebSocket, long-polling gibi asenkron özellikleri rahatça kullanabiliyorum.
Üretimde bu sunucuları daima systemd ile daemon olarak çalıştırıyorum. Örnek Gunicorn servisi:
[Unit]
Description=gunicorn daemon for myproject
After=network.target
[Service]
User=metin
Group=www-data
WorkingDirectory=/home/metin/myproject
ExecStart=/home/metin/.venv/bin/gunicorn \
--workers 3 \
--bind unix:/run/myproject.sock \
myproject.wsgi:application
[Install]
WantedBy=multi-user.target
Bu kombinasyonla, Nginx’in yetenekli statik dosya ve proxy yönetimini, Gunicorn’un stabil WSGI desteğini ve Uvicorn’un modern ASGI performansını bir araya getirmiş oluyorum. Hangi protokolün projenize uygun olduğuna göre WSGI veya ASGI sunucusunu seçip, arkasına Nginx’i yerleştirerek hem hız hem ölçeklenebilirlik kazanıyorum.
— Metin Oktay Deniz