Menu
Szybki wybór
Hosting Domeny VPS SSL Kalkulator Porównania FAQ
Aktywne kody
Wszystkie kody rabatowe

Supervisor na VPS — zarządzanie procesami Python, Node.js i Celery

Opublikowano: 9 kwietnia 2026 · Kategoria: VPS

Uruchamiasz aplikację Python z Gunicornem lub workery Celery i chcesz, żeby automatycznie startowały po restarcie VPS i wznawiały pracę po awarii? Supervisor (supervisord) to sprawdzone narzędzie do zarządzania procesami w tle — prostsze niż systemd dla aplikacji użytkownika i bardziej elastyczne niż screen/tmux.

Instalacja Supervisora

# Ubuntu / Debian
sudo apt update && sudo apt install supervisor -y

# CentOS / Rocky Linux
sudo dnf install supervisor -y

# Python pip (najnowsza wersja)
pip install supervisor

# Uruchom i włącz przy starcie
sudo systemctl enable --now supervisor

# Sprawdź status
sudo systemctl status supervisor

Konfiguracja — Gunicorn + Django/Flask

Utwórz plik konfiguracyjny /etc/supervisor/conf.d/myapp.conf:

[program:myapp]
; Komenda startowa — ścieżka do venv + Gunicorn
command=/var/www/myapp/venv/bin/gunicorn myapp.wsgi:application
    --workers 3
    --bind 127.0.0.1:8000
    --timeout 120
    --log-level info

; Katalog roboczy aplikacji
directory=/var/www/myapp

; Użytkownik (nie root!)
user=www-data

; Automatyczny start i restart
autostart=true
autorestart=true
stopasgroup=true
killasgroup=true

; Logi
stdout_logfile=/var/log/supervisor/myapp.log
stderr_logfile=/var/log/supervisor/myapp.err.log
stdout_logfile_maxbytes=10MB
stdout_logfile_backups=5

; Zmienne środowiskowe
environment=DJANGO_SETTINGS_MODULE="myapp.settings.production",
    DATABASE_URL="postgresql://user:pass@localhost/myapp"

Po każdej zmianie pliku .conf: sudo supervisorctl reread && sudo supervisorctl update.

Konfiguracja — Celery worker

[program:celery-worker]
command=/var/www/myapp/venv/bin/celery
    -A myapp
    worker
    --loglevel=info
    --concurrency=4
    -n worker1@%%h

directory=/var/www/myapp
user=www-data
autostart=true
autorestart=true
stopwaitsecs=600
stopasgroup=true
killasgroup=true

stdout_logfile=/var/log/supervisor/celery-worker.log
stderr_logfile=/var/log/supervisor/celery-worker.err.log

[program:celery-beat]
command=/var/www/myapp/venv/bin/celery
    -A myapp
    beat
    --loglevel=info
    --scheduler django_celery_beat.schedulers:DatabaseScheduler

directory=/var/www/myapp
user=www-data
autostart=true
autorestart=true

stdout_logfile=/var/log/supervisor/celery-beat.log
stderr_logfile=/var/log/supervisor/celery-beat.err.log

Konfiguracja — Node.js / Next.js

[program:nextjs-app]
command=/usr/bin/node /var/www/nextapp/.next/standalone/server.js

directory=/var/www/nextapp
user=nodeuser
autostart=true
autorestart=true

environment=NODE_ENV="production",PORT="3000",HOST="127.0.0.1"

stdout_logfile=/var/log/supervisor/nextjs.log
stderr_logfile=/var/log/supervisor/nextjs.err.log

Dla Node.js rozważ też PM2 — ma dedykowane funkcje jak cluster mode i reload bez downtime. Supervisor jest lepszy gdy zarządzasz mieszanką technologii (Python + Node).

supervisorctl — zarządzanie procesami

# Status wszystkich procesów
sudo supervisorctl status

# Start / stop / restart konkretnego procesu
sudo supervisorctl start myapp
sudo supervisorctl stop myapp
sudo supervisorctl restart myapp

# Przeładuj konfigurację (po dodaniu nowego .conf)
sudo supervisorctl reread
sudo supervisorctl update

# Logi w czasie rzeczywistym
sudo supervisorctl tail -f myapp
sudo supervisorctl tail -f myapp stderr

# Interaktywny shell
sudo supervisorctl

Porównanie: Supervisor vs systemd vs PM2

Cecha Supervisor systemd PM2
Uprawnienia Root lub user Root (systemctl) User (bez root)
Języki/frameworki Dowolne Dowolne (OS-level) Node.js (głównie)
Cluster mode Przez grupy Przez instancje Wbudowany
Reload bez downtime Nie wprost Tak (ExecReload) Tak (pm2 reload)
Web interface supervisord web UI Brak (cockpit extra) PM2 Plus (płatny)
Najlepszy dla Python, mieszane stosy Usługi systemowe Node.js production

Grupy procesów

Supervisor pozwala grupować procesy i zarządzać nimi jednym poleceniem:

[group:myapp-stack]
programs=myapp,celery-worker,celery-beat

; Zarządzanie całą grupą:
; sudo supervisorctl start myapp-stack:*
; sudo supervisorctl stop myapp-stack:*
; sudo supervisorctl restart myapp-stack:*

Dobre praktyki

  • Nigdy nie uruchamiaj jako root — ustaw user=www-data lub dedykowany user aplikacji
  • Używaj stopasgroup=true dla procesów z subprocess (Gunicorn, Celery) — Supervisor zabije cały drzewo procesów
  • Rotacja logów — ustaw stdout_logfile_maxbytes i stdout_logfile_backups żeby logi nie zapchały dysku
  • Zmienne środowiskowe przez environment= — nie w .env (Supervisor go nie wczytuje automatycznie)
  • Testuj konfigurację przed dodaniem — uruchom komendę ręcznie jako docelowy user, żeby upewnić się że działa przed wpisaniem do Supervisora

Najczęstsze pytania

Co to jest Supervisor i do czego służy? +
Supervisor (supervisord) to system zarządzania procesami dla Linuksa. Uruchamia i monitoruje procesy w tle (Python, Node.js, Celery, Gunicorn), automatycznie restartuje je po awarii i przechowuje logi. Alternatywa dla systemd dla aplikacji użytkownika, szczególnie przydatna gdy nie masz uprawnień roota do tworzenia usług systemd.
Jaka jest różnica między Supervisor a systemd? +
systemd to system init OS (root-only), Supervisor to zarządca procesów użytkownika. systemd jest lepszy dla usług systemowych (nginx, PostgreSQL). Supervisor jest lepszy dla aplikacji Python/Node.js, kolejek (Celery), workerów — szczególnie gdy chcesz zarządzać procesami bez sudo. PM2 to odpowiednik Supervisora specyficznie dla Node.js.
Jak uruchomić aplikację Django/Flask z Gunicornem przez Supervisor? +
Utwórz plik /etc/supervisor/conf.d/myapp.conf z sekcją [program:myapp]. Ustaw command=/path/to/venv/bin/gunicorn myapp.wsgi:application --workers 3 --bind 127.0.0.1:8000, directory=/var/www/myapp, user=www-data. Potem: supervisorctl reread && supervisorctl update && supervisorctl start myapp.
Jak sprawdzić logi aplikacji w Supervisor? +
supervisorctl tail -f myapp — podgląd stdout w czasie rzeczywistym. supervisorctl tail -f myapp stderr — logi błędów. Pliki logów: /var/log/supervisor/myapp.log (stdout) i /var/log/supervisor/myapp.err.log (stderr). Status wszystkich procesów: supervisorctl status.

Sprawdź oferty pasujące do tego scenariusza

Poniżej masz szybkie przejścia do ofert i stron z kodami rabatowymi tam, gdzie są dostępne.