【问题标题】:Tornado code deploymentTornado 代码部署
【发布时间】:2011-08-18 07:40:39
【问题描述】:

对于基于 Tornado 的 Web 应用程序部署,是否有规范的代码部署策略。我们当前的配置是 4 个 Tornado 进程在 NginX 后面运行? (我们的具体用例在 EC2 之后。)

我们目前有一个运行良好的解决方案,我们启动四个龙卷风进程并将 PID 保存到 /tmp/ 中的文件中。部署新代码后,我们通过结构运行以下序列:

  1. 从 prod 分支执行 git pull。
  2. 从负载平衡器中删除机器。
  3. 等待所有飞行中的连接以睡眠结束。
  4. 杀死pid文件中的所有tornadoes并删除所有*.pyc文件。
  5. 重启龙卷风。
  6. 将机器重新连接到负载平衡器。

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

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

【问题讨论】:

    标签: python deployment tornado fabric


    【解决方案1】:

    我们以 supervisord 作为主管运行 Tornado+Nginx。

    示例配置(名称已更改)

    [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 有一个“活动”文件,该文件已更新,让 HAProxy 知道我们正在搞乱配置,然后等待位,交换东西,然后重新启用一切。

    我们正在使用 Capistrano(我们有一个积压任务要迁移到 Fabric),但我们不处理删除 *.pyc 文件,而是将 /opt/current 符号链接到发布标识符。

    【讨论】:

      【解决方案2】:

      我还没有在生产环境中部署 Tornado,但是我一直在使用 Gevent + Nginx 并且一直在使用 Supervisord 进行进程管理 - 启动/停止/重启、日志记录、监控 - supervisorctl 对此非常方便。就像我说的,不是部署解决方案,但也许是值得使用的工具。

      【讨论】:

        猜你喜欢
        • 2014-09-12
        • 2018-06-12
        • 2016-07-10
        • 2016-04-08
        • 1970-01-01
        • 1970-01-01
        • 2014-08-19
        • 1970-01-01
        • 2016-09-29
        相关资源
        最近更新 更多