2013-02-07 11 views
10

ho sviluppato un servizio web in tornado negli ultimi mesi invertire, nel mio ambiente di test per eseguire il servizio che uso:Impostazione di un servizio web tornado in produzione con nginx delega

python index.py 

indice. py è il mio gestore di applicazioni di tornado che ascolta sulla porta 8001. Richiedo quindi dal servizio web utilizzando http://localhost:8001. Ora sto distribuendo il mio ambiente di test in un ambiente di gestione temporanea che dovrebbe rispecchiare la produzione. Come faccio a correre il tornado nella produzione? Sto indovinando che ho bisogno di creare una sorta di demone per l'applicazione, ma non ho idea da dove iniziare!

risposta

28

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

+1

È nginx o supervisord che gestisce quale processo viene utilizzato quando si accede all'URL? O ho bisogno di più software per gestirlo. –

+0

e potresti spiegare perché stai iniziando il processo su 14000? –

+2

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 –

Problemi correlati