龙卷风代码部署

7 投票
2 回答
2281 浏览
提问于 2025-04-16 23:51

有没有一种标准的代码部署方法,适用于基于Tornado的网页应用?我们现在的配置是4个Tornado进程在NginX后面运行。(我们的具体情况是在EC2上。)

我们目前有一个还算不错的解决方案,方法是启动四个Tornado进程,并把它们的进程ID(PID)保存到/tmp/目录下的一个文件里。在部署新代码时,我们通过fabric执行以下步骤:

  1. 从生产分支做一次git pull,更新代码。
  2. 把机器从负载均衡器中移除。
  3. 等所有正在进行的连接完成,期间可以稍微等待一下。
  4. 杀掉PID文件中的所有Tornado进程,并删除所有的*.pyc文件。
  5. 重新启动Tornado进程。
  6. 把机器重新连接到负载均衡器。

我们从这个链接中获得了一些灵感:http://agiletesting.blogspot.com/2009/12/deploying-tornado-in-production.html

还有其他完整的解决方案吗?

2 个回答

0

我还没有在生产环境中使用Tornado,但我一直在尝试Gevent和Nginx的组合,并且使用Supervisord来管理进程,比如启动、停止、重启,还有记录日志和监控。用supervisorctl来操作这些非常方便。就像我说的,这不是一个完整的部署解决方案,但可能是一个值得使用的工具。

1

我们使用Tornado和Nginx,并通过supervisord来管理它们。

下面是一个示例配置(名字已更改)

[program:server]
process_name = server-%(process_num)s
command=/opt/current/vrun.sh /opt/current/app.py --port=%(process_num)s
stdout_logfile=/var/log/server/server.log
stderr_logfile=/var/log/server/server.err
numprocs = 6
numprocs_start = 7000

我还没找到“最佳”的重启方法,我可能最终会让Nginx有一个“active”文件,这个文件会被更新,以便让HAProxy知道我们正在调整配置,然后等一会儿,调整一下设置,最后再重新启用所有功能。

我们使用Capistrano(我们有一个计划要转到Fabric),但我们不处理删除*.pyc文件,而是将/opt/current链接到当前的发布标识。

撰写回答