🔒 Repository is read-only – file editing is disabled.
123456789101112131415161718192021222324252627282930313233343536373839404142434445
; PaganOS Web v2 – konfiguracja uWSGI (produkcja)
;
; PO CO uWSGI, a nie serwer deweloperski Flaska: dev-server nie jest do produkcji
; (brak zarządzania workerami, słaba odporność na błędy, ostrzeżenie w logach).
; PO CO HTTP na 127.0.0.1:8000, a nie gniazdo unix: nginx ma WSPÓLNY upstream
; `pagan_web` (127.0.0.1:8000) używany przez wiele vhostów (paganlinux.eu, git.,
; repo., build., docs.). Dzięki temu podmiana serwera nie rusza ani jednej linii
; konfiguracji nginx — mniejsze ryzyko, zero downtime.
[uwsgi]
plugins = python3
chdir = /opt/pagan-web-v2
module = app:app
; JEDEN proces: aplikacja przy imporcie odpala wątek w tle (jednorazowy test
; aktualizacji pakietów) — nie chcemy go mnożyć. Równoległość dają wątki
; (tak było w dev-serwerze Flaska), a dzięki nim działają strumienie SSE
; (/build/api/stream, /admin/terminal/stream/).
master = true
processes = 1
threads = 32
enable-threads = true
single-interpreter = true
; Nasłuch HTTP na pętli zwrotnej (upstream nginx).
http-socket = 127.0.0.1:8000
buffer-size = 32768
; Harakiri celowo wyłączone (domyślnie 0): długo żyjące strumienie SSE nie mogą
; być zabijane przez limity czasu.
need-app = true
die-on-term = true
vacuum = true
; ── Reload bez 60-sekundowej przerwy ──
; Domyślnie uWSGI czeka 60 s, aż workery „grzecznie" skończą obsługę — a otwarte
; strumienie SSE żyją długo, więc `systemctl reload` zamrażałby ruch na minutę.
; `no-threads-wait` nie czeka na zamknięcie wątków, a mercy ograniczamy do 5 s.
no-threads-wait = true
reload-mercy = 5
worker-reload-mercy = 5
; Logi: celowo BEZ `logto` — uWSGI pisze wtedy wprost na fd stdout/stderr,
; które systemd kieruje do journald (journalctl -u pagan-web).
; UWAGA: `logto = /dev/stdout` NIE działa pod systemd — uWSGI próbuje
; `open()`-ować /dev/stdout i dostaje "No such device or address".