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
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
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. –
ve neden 14000'de işlem başlattığınızı açıklayabilir misiniz? –
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. –