Ответ 1
Есть несколько инструментов, которые вы можете использовать.
Сначала Supervisord
Supervisord - это "система управления процессом", вы настраиваете свои процессы и позволяете Supervisor управлять ими, они перезапускают их, если они не работают, упрощают управление ими и сохраняют их в фоновом режиме.
Вот пример конфигурационного файла диспетчера
[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
С этой конфигурацией Supervisor запустит 4 (numprocs
) экземпляры index.py на портах 14001-14004 (numprocs_start
). Мы передаем --PORT=%(process_num)s
, чтобы каждый процесс запускался на другом порту. Вы должны изменить numprocs
и numprocs_start
в соответствии с вашей средой/оборудованием. Как правило, мы запускаем процессы ядра 2xCPU (так что четырехъядерный процессор будет иметь 8 процессов), но это может сильно варьироваться в зависимости от того, что делают ваши процессы и сколько блокировки в вашем коде.
Затем настройте NGINX для пересылки запросов на ваш сайт
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/;
}
}
Этот конфиг должен быть изменен в зависимости от вашего приложения и того, как он работает, это очень минимальная конфигурация и почти наверняка потребуется расширить, но этого должно быть достаточно, чтобы вы начали