使用Fabric部署网站应用
以前一直用git同步代码到服务器,这种方法一台机器还行,如果多台机器就不急麻烦了,后来用pssh处理多台,也不方便后来发现了Fabric,发现这个东西部署起来简直太爽了创建一下脚本fabfile.py#!/usr/bin/env python# encoding: utf-8import osfrom fabric.api import settings, cd, run, env#需要部署
·
以前一直用git同步代码到服务器,这种方法一台机器还行,如果多台机器就不急麻烦了,后来用pssh处理多台,也不方便
后来发现了Fabric,发现这个东西部署起来简直太爽了
创建一下脚本fabfile.py
#!/usr/bin/env python
# encoding: utf-8
import os
from fabric.api import settings, cd, run, env
#需要部署的机器,都是免密码登录的
env.hosts = ['root@RealserverNet1', 'root@RealserverNet2']
#如果需要输入密码
#env.password = 'pwd'
project = "my_flask"
project_path = os.path.join("/var/www", project)
def clone():
"""
clone项目
"""
with cd("/var/www"):
run("rm -fr %s" % project)
run("sudo -u www-data git clone git@10.10.100.52:/home/git/%s" % project)
def pull():
"""
更新代码
"""
with cd(project_path):
run("sudo -u www-data git pull")
def uwsgi_init():
"""
初始化uwsgi
"""
with settings(warn_only=True):
run("uwsgi --stop /tmp/%s.pid"%project)
run("sleep 1")
run("sudo -u www-data uwsgi --ini %s"%(os.path.join(project_path, "uwsgi.ini")))
run("sleep 1")
run("ps -aux|grep %s||grep -v grep"%(os.path.join(project_path, "uwsgi.ini")))
def uwsgi_reload():
"""
更新代码并且重新加载uwsgi
"""
run("sudo -u www-data uwsgi --reload /tmp/%s.pid"%project)
def update():
"""
更新代码并且重新加载uwsgi
"""
pull()
uwsgi_reload()
执行
fab clone
fab uwsgi_init
每台机器上都克隆并且启动服务了
脚本默认为fabfile.py, 如果修改脚本名 必须加-f参数
fab -f a1.py clone
每次代码提交后更新
fab update
Fabric最常用的是local()和run(),分别在本地和远程执行命令,put()可以把本地文件上传到远程,当需要在远程指定当前目录时,只需用with cd(‘/path/to/dir/’):即可。
默认情况下,当命令执行失败时,Fabric会停止执行后续命令。有时,我们允许忽略失败的命令继续执行,
比如run(“uwsgi –stop /tmp/%s.pid”%project) 在pid文件不存在的时候有可能失败,这时可以用with settings(warn_only=True):执行命令,这样Fabric只会打出警告信息而不会中断执行。
更多推荐
已为社区贡献1条内容
所有评论(0)