2013-02-07 18 views
10

Son birkaç aydır hortuma bir web hizmeti gelişmekte olan ters nginx ile üretimde bir kasırga web hizmeti kurma. py, 8001 numaralı bağlantı noktasını dinleyen tornado uygulama işleyicidir. Daha sonra web hizmetinden http://localhost:8001 kullanarak istekte bulunarım. Şimdi test ortamımı, üretimi yansıtması gereken bir evreleme ortamına dağıtıyorum. Tornadoyu üretimde nasıl çalıştırırım? Sanırım uygulama için bir çeşit daemon oluşturmam gerekiyor ama nereden başlayacağımı bilmiyorum!kullandığım hizmeti çalıştırmak için benim test ortamında, vekil

cevap

28

Kullanabileceğiniz birkaç araç vardır.

Öncelikle Supervisord

Supervisord bir "süreç kontrol sistemi", kendi süreçlerini yapılandırmak ve onlara daha kolay yönetmek yapmak, başarısız olurlarsa onları yeniden edeceğiz, Danışman onları yönetmesine izin ve arka planda çalışmasını sağlamak olduğunu İşte

o yapılandırmayla, örnek bir gözetmen yapılandırma dosyası

[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 

var, Danışman (portlar 14001-14004 üzerinde index.py 4 (numprocs) örneklerini başlayacak). Her işlemin farklı bir bağlantı noktasında başlaması için --PORT=%(process_num)s'u geçeriz. Ortamınıza/ekipmanınıza uygun olarak numprocs ve numprocs_start'u değiştirmelisiniz. Genellikle 2xCPU çekirdek işlemlerini çalıştırırız (bu nedenle dört çekirdekli işlemci 8 işlemden oluşur), ancak süreçlerinizin ne yaptığına ve kodunuzda ne kadar engelleme yapıldığına bağlı olarak farklılık gösterebilir.

Sonraki, nginx yapılandırma uygulamanıza ve işleyişini bağımlı modifiye edilmelidir O sitenize

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/; 
      } 
    }  

istekleri iletmek için yapılandırmak, bu çok az yapılandırma ve neredeyse kesinlikle üzerinde genişleyen gerek ama Başlamak için yeterli olmalıdır

+1

URL'ye erişildiğinde hangi işlemin kullanıldığını işleyen nginx veya süpervisord mu? Veya bunu yönetmek için daha fazla yazılıma ihtiyacım var. –

+0

ve neden 14000'de işlem başlattığınızı açıklayabilir misiniz? –

+2

nginx isteği arka uçlardan birine geçirir. Danışman sadece süreç yönetimini (canlı/ölü/yeniden başlatma) dikkate alır. Bağlantı noktası için, bağlantı noktalarından birini dinleyen başka bir uygulama ile çakışmıyorsa, istediğiniz herhangi bir şeyi seçebilirsiniz. –

İlgili konular