Istnieje kilka narzędzi, z których można korzystać.
Najpierw Supervisord
Supervisord jest „System kontroli procesu”, skonfigurować swoje procesy i pozwól Supervisor zarządzać nimi, to będzie je ponownie uruchomić jeśli nie sprawiają, że łatwiej jest nimi zarządzać i utrzymać ich działanie w tle
Oto przykładowy plik konfiguracyjny nadzorca
[program:myprogram]
process_name=MYPROGRAM%(process_num)s
directory=/var/www/apps/myapp
command=/var/www/apps/myapp/virtualenv/bin/python index.py --PORT=%(process_num)s
startsecs=2
user=youruser
stdout_logfile=/var/log/myapp/out-%(process_num)s.log
stderr_logfile=/var/log/myapp/err-%(process_num)s.log
numprocs=4
numprocs_start=14000
Dzięki tej konfiguracji, Inspektor rozpocznie 4 (numprocs
) wystąpień index.py na porty 14001-14004 (numprocs_start
). Przekazujemy --PORT=%(process_num)s
, aby każdy proces rozpoczął się na innym porcie. Należy zmienić numprocs
i numprocs_start
, aby dostosować je do swojego środowiska/sprzętu. Zasadniczo uruchamiamy procesory 2xCPU (tak, że procesor czterordzeniowy ma 8 procesów), ale może się bardzo różnić w zależności od tego, co robią twoje procesy i ile blokuje w twoim kodzie.
Następnie należy skonfigurować nginx do przekazania żądania do witryny
upstream myappbackend {
server 127.0.0.1:14001 max_fails=3 fail_timeout=1s;
server 127.0.0.1:14002 max_fails=3 fail_timeout=1s;
server 127.0.0.1:14003 max_fails=3 fail_timeout=1s;
server 127.0.0.1:14004 max_fails=3 fail_timeout=1s;
}
server {
listen 4.5.6.7:80;
server_name example.com;
access_log /var/log/nginx/myapp.log main;
location/{
proxy_set_header Host $host;
proxy_set_header X-Real-Ip $remote_addr;
proxy_pass http://myappbackend/;
}
}
To config powinien być modyfikowany zależy od zastosowania i sposobu działania, który jest bardzo minimalna konfiguracja i prawie na pewno trzeba rozszerza się, ale to powinno wystarczyć, abyś zaczął.
Czy to nginx czy supervisord obsługuje proces, który jest używany, gdy adres URL jest dostępny? Czy potrzebuję więcej oprogramowania do zarządzania tym. –
i czy możesz wyjaśnić, dlaczego rozpoczynasz proces od 14000? –
nginx przekazuje żądanie do jednego z backendów. Nadzorca zajmuje się jedynie zarządzaniem procesem (live/dead/restart). W przypadku portu możesz wybrać dowolną opcję, chyba że koliduje ona z inną aplikacją, która nasłuchuje jednego z portów –