在小公司的一个不同就是啥活都需要会点,服务部署上线之类的事情也交由开发处理了,因为没有专门的运维同学..
之前上线的步骤如下,
- ssh remote server
- cd project_folder
- svn up
- django collectstatic (optional)
- django schemamigration (optional)
- django migrate (optional)
- restart uwsgi
后台服务构建在django之上,所以上面包含了collectstatic、schemamigration、migrate三步。collectstatic在有静态资源变动下才需要执行,schemamigration、migrate则是在django model有变化时需要执行。
正式接手上线操作这活一周多,反复上线多次后就觉得有点繁琐了,特别是上线之后还需要上线备份服务,于是自动化自然而然成了诉求。
fabric是之前在google reader上偶然看到的,花了一两个小时看了下其文档,写了个自动化的部署脚本,可以指定部署测试服务、备份服务、线上服务。
fabric需要实现一个fabfile.py,在其中定义具体的task。task的写法还是它的文档说得详细,几个小时实现的脚本还是很糙的,不过目前也够用了,
@host(hostname)
def deploy():
cd(project_folder):
svn_up_output = sudo('svn up')
_do_collect_static(svn_up_output)
_do_migration(svn_up_output)
_do_restart_server()
fabfile.py是纯粹的python代码,所以写起来相对顺手。上面的deploy函数就定义了整个流程,具体每一步比如collectstatic是否执行就是通过解析svn up的输出来判定的,具体执行命令则是调用sudo、run函数。
fabric的好处就是能够远程执行对应的命令,同时在有命令行提示时,可以直接在本地console进行交互。
一旦自动化后就再也不想手动一个一个命令敲了,人是何其懒啊。