Ci sono alcuni strumenti che è possibile utilizzare.
In primo luogo, Supervisord
Supervisord è un "sistema di controllo di processo", si configurano i processi e far Supervisore gestirli, sarà riavviare loro se non riescono, rendere la gestione più facile e tenerli in esecuzione in background
Ecco un file di configurazione di esempio supervisore
[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
Con questo config, supervisore inizierà 4 (numprocs
) istanze di index.py sulle porte 14001-14004 (numprocs_start
). Passiamo allo --PORT=%(process_num)s
per avviare ogni processo su una porta diversa. È necessario modificare numprocs
e numprocs_start
per adattarsi al proprio ambiente/attrezzatura. Generalmente eseguiamo processi di core 2xCPU (quindi un processore quad core dovrebbe avere 8 processi), ma questo può variare enormemente in base a ciò che fanno i processi e a quanto blocco c'è nel codice.
Avanti, configurare Nginx di trasmettere le richieste al tuo sito
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/;
}
}
Che config dovrebbe essere modificata dipende dalla vostra applicazione e il modo in cui funziona, che è una configurazione molto minimale e sarà quasi certamente bisogno ampliando ma che dovrebbe essere sufficiente per iniziare
È nginx o supervisord che gestisce quale processo viene utilizzato quando si accede all'URL? O ho bisogno di più software per gestirlo. –
e potresti spiegare perché stai iniziando il processo su 14000? –
nginx passa la richiesta a uno dei backend. Supervisor si occupa solo della gestione dei processi (live/dead/restart). Per la porta, puoi scegliere qualsiasi cosa desideri, a meno che non entri in collisione con altre app che ascoltano una delle porte –