10

在过去的几个月里,我一直在 Tornado 中开发一个 Web 服务,在我的测试环境中运行我使用的服务:

python index.py

index.py 是我的 tornado 应用程序处理程序,它侦听端口 8001。然后我使用http://localhost:8001. 我现在正在将我的测试环境部署到应该反映生产的暂存环境。如何在生产中运行龙卷风?我猜我需要为应用程序创建某种守护进程,但我不知道从哪里开始!

4

1 回答 1

30

您可以使用一些工具。

一、主管

Supervisord 是一个“流程控制系统”,您可以配置您的流程并让 Supervisor 管理它们,如果它们失败,它将重新启动它们,使管理它们更容易并让它们在后台运行

这是一个示例主管配置文件

[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

使用该配置,Supervisor 将numprocs在端口 14001-14004 ( numprocs_start) 上启动 4 ( ) 个 index.py 实例。我们通过--PORT=%(process_num)s让每个进程在不同的端口上启动。您应该改变numprocsnumprocs_start适应您的环境/设备。通常我们运行 2xCPU 内核进程(因此四核处理器将有 8 个进程),但这可能会根据您的进程所做的事情以及代码中的阻塞程度而有很大差异。

接下来,配置 NGINX 以将请求转发到您的站点

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

该配置应根据您的应用程序及其工作方式进行修改,这是一个非常小的配置,几乎肯定需要扩展,但这应该足以让您开始

于 2013-02-07T13:42:20.150 回答