所谓自动部署就是说,如果用10台机器跑tornado程序提供Web服务,它们上面的代码都是一样的,这也叫生产环境。在公司写新代码,写好了,测试通过,这叫开发环境。然后执行自动部署程序,它把新代码提交到版本管理服务器,然后连上生产环境的10台服务器,让它们更新代码,再重启tornado程序,新代码就上线了,用户看到的就是新发布的网站。
自动部署的关键是两个东西,一个是版本服务器,一个是远程操作。
推荐用git版本服务器,推荐寥雪峰的git教程,写得非常清晰,是目前为止我见到的最容易入手的,链接在这里http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000。
推荐用python fabric远程操作,http://www.fabfile.org/。
做自动化部署,第一步是创建一个公网IP的git版本服务器,这样10台web server能访问git服务器。然后在开发环境把代码提交到git版本服务器。这个过程请参考寥同学的教程,这里就不重复了。
第二步,ssh登录到任意一台web server,手动执行命令,从git服务器更新代码,然后把tornado程序开起来,记下这个过程的所有步骤。
第三部,用fabric把第二步的步骤写一遍,填上10台web server的ip地址,将来就可以一次性更新10台机器了。
zuijiacanting.com的自动化部署脚本类似如下,remote_deploy.py:
#!/usr/bin/env python
#! -*- coding:utf-8 -*-
from __future__ import with_statement
import os
from fabric.api import *
#ip of web server
env.hosts=[‘106.111.111.111‘]
def commit_to_remote():
d = os.path.abspath("xx/yy")
local("cd %s;git push origin master" % d)
def deploy_zjct():
code_dir="/home/xxx/yyy"
with cd(code_dir):
run("sudo git pull origin master")
run("sudo reboot")
在开发环境下,如果新代码已经准备好了,执行命令"fab -f remote_deploy.py commit_to_remote",把新代码提交到git版本服务器,然后再执行"fab -f remote_deploy.py deploy_zjct",fabric以ssh的方式登录到web server,更新代码,然后重启。重启运行新代码。不重启也可以,kill掉tornado进程,自动监控会重启tornado进程,重启后也是运行新代码。如果要更新多台机器,在env.hosts把ip地址加进去就可以了。
fabric能做的事情非常多,不仅仅是上面这么简单,可以实现各种酷炫的特效。
一个网站的诞生10--自动化部署