使用Fabric部署网站应用

21 篇文章 0 订阅
8 篇文章 0 订阅

以前一直用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只会打出警告信息而不会中断执行。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值