2013-02-07 7 views
10

Mam rozwija usługę internetową w tornado w ciągu ostatnich kilku miesięcy, w moim środowisku testowym, aby uruchomić usługę używać:Konfiguracja usługi internetowej tornado w produkcji z nginx reverse proxy

python index.py 

indeksu. py to moja aplikacja do obsługi tornada, która nasłuchuje na porcie 8001. Następnie żądam od usługi internetowej, używając http://localhost:8001. Obecnie wdrażam środowisko testowe do środowiska pomostowego, które powinno odzwierciedlać produkcję. Jak zabrać się za prowadzenie tornada w produkcji? Zgaduję, że muszę stworzyć jakiegoś demona dla aplikacji, ale nie mam pojęcia, od czego zacząć!

Odpowiedz

28

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ął.

+1

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. –

+0

i czy możesz wyjaśnić, dlaczego rozpoczynasz proces od 14000? –

+2

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 –