Giriş
uWSGI yüzlerce konfigürasyon parametresi sunar; bu esneklik güçlü olsa da yeni başlayanlar için bunaltıcıdır. ini dosyası uWSGI'nin birincil yapılandırma formatıdır; YAML ve XML de desteklenir.
Bu rehber en sık kullanılan parametreleri kategorilere ayırarak açıklar: uygulama yükleme, process yönetimi, ağ, güvenlik ve yaşam döngüsü.
Her parametre için üretim ortamında önerilen değerler ve yaygın hatalar belirtilmiştir.
Uygulama Yükleme Parametreleri
module = myapp.wsgi:application WSGI callable'ı belirtir. chdir proje köküne geçer; virtualenv Python ortamını ayarlar. pythonpath ek modül dizinleri ekler.
lazy-apps = true her worker'ın uygulamayı bağımsız yüklemesini sağlar; global state paylaşımını önler. need-app parametresi uygulama yüklenemezse başlamayı reddeder.
[uwsgi]
chdir = /var/www/myproject
virtualenv = /var/www/myproject/venv
module = myproject.wsgi:application
pythonpath = /var/www/myproject
lazy-apps = true
need-app = trueProcess ve Thread Yönetimi
master = true master process etkinleştirir; worker crash'lerinde yeniden başlatma ve graceful reload sağlar. processes worker sayısını, threads her worker'daki thread sayısını belirler.
enable-threads Python thread desteğini açar; Django ORM ve bazı kütüphaneler için gereklidir. Tek process + çok thread I/O-bound işlerde bellek tasarrufu sağlar.
- processes: CPU sayısına göre (2*CPU)+1
- threads: I/O-bound için artırın
- master: her zaman true
- enable-threads: Django için zorunlu
[uwsgi]
master = true
processes = 4
threads = 2
enable-threads = true
single-interpreter = trueAğ ve Socket Parametreleri
socket unix domain socket oluşturur; nginx uwsgi_pass ile bağlanır. http-socket doğrudan HTTP dinler (genelde nginx arkasında socket tercih edilir).
chmod-socket ve chown-socket nginx kullanıcısının socket'e erişmesini sağlar. buffer-size büyük request header'ları için artırılabilir.
[uwsgi]
socket = /run/uwsgi/app.sock
chmod-socket = 660
chown-socket = www-data:www-data
buffer-size = 8192
listen = 128Yaşam Döngüsü ve Temizlik
vacuum = true process sonlandığında socket ve pid dosyalarını temizler. die-on-term = true SIGTERM'de düzgün kapanma sağlar.
max-requests worker'ı belirli istek sayısından sonra yeniler; bellek sızıntısına karşı etkilidir. max-worker-lifetime saniye bazlı alternatiftir.
[uwsgi]
vacuum = true
die-on-term = true
max-requests = 5000
max-requests-delta = 500
reload-on-rss = 512Güvenlik Parametreleri
uid ve gid drop privileges ile düşürülür; root olarak başlayıp www-data'ya geçiş yapılabilir. harakiri uzun süren istekleri sonlandırır.
limit-as bellek limiti koyar; aşan worker öldürülür. disable-logging hassas ortamlarda log kapatır (debug için önerilmez).
master = true, vacuum = true ve die-on-term = true üçlüsünü her üretim ini dosyasında varsayılan yapın.
Reload ve Deploy
touch-reload dosya değişikliğinde graceful reload tetikler. py-autoreload geliştirme ortamında .py değişikliklerini izler (üretimde kullanmayın).
chain-reload worker'ları tek tek yeniler; sıfır kesinti sağlar. stats unix:/run/uwsgi/stats.sock ile metrik toplama açılır.
[uwsgi]
touch-reload = /var/www/myproject/reload.touch
py-autoreload = 1 # sadece dev
stats = /run/uwsgi/stats.sock
memory-report = trueSonuç
uWSGI ini dosyası ilk bakışta karmaşık görünse de parametreler mantıksal gruplara ayrılır. Temel bir üretim ini'si 20-30 satırla başlayabilir; ihtiyaçça genişletilir.
Konfigürasyonunuzu versiyon kontrolünde tutun ve staging ortamında test edin. Parametre değişikliği sonrası uwsgi --ini dosya.ini --check-static ile doğrulama yapın.