使用 Fabric 自动化部署

安装 Fabric

Fabric 目前仅支持 Python2,若是你的系统中只有 Python3 版本,可使用 Fabric3,可是只能安装低版本1.14.post1,高版本不支持api方法。python

接下就能够简单地经过 pip 命令安装 Fabric 了。nginx

# 若是是 python 2
pip install fabric
 
# 若是是 python 3
pip install fabric3==1.14.post1
 

部署过程回顾

在写 Fabric 脚本以前,咱们先来回顾一下当咱们在本地开发环境下更新了代码后,在服务器上的整个部署过程。git

  1. 远程链接服务器。
  2. 进入项目根目录,从远程仓库拉取最新的代码。
  3. 若是项目引入了新的依赖,须要执行 pip install -r requirement.txt 安装最新依赖。
  4. 若是修改或新增了项目静态文件,须要执行 python manage.py collectstatic 收集静态文件。
  5. 若是数据库发生了变化,须要执行 python manage.py migrate 迁移数据库。
  6. 重启 Nginx 和 Gunicorn 使改动生效。

整个过程就是这样,把每一步操做翻译成 Fabric 对应的脚本代码,这样一个自动化部署脚本就完成了。

github

编写 Fabric 脚本

Fabric 脚本一般位于 fabfile.py 文件里,所以先在项目根目录下建一个 fabfile.py 文件。数据库

根据上述过程编写的脚本代码以下:api

 
from fabric.api import env, run
from fabric.operations import sudo
 
 
env.user = '服务器用户名'
env.password = '服务器密码'
 
# 填写你本身的主机对应的域名或IP
env.hosts = ['60.205.190.158']
 
# 通常状况下为 22 端口,若是非 22 端口请查看你的主机服务提供商提供的信息
env.port = '22'
 
 
def deploy():
    source_folder = '/home/jmp/sites/blogproject'
 
    run('cd %s && git reset --hard' % source_folder)
    run('cd %s && git pull' % source_folder)
    run("""
        cd {} &&
        ../env/bin/pip install -r requirements.txt &&
        ../env/bin/python3 manage.py collectstatic --noinput &&
        ../env/bin/python3 manage.py migrate
        """.format(source_folder))
    sudo('restart gunicorn-blogproject')
    sudo('service nginx reload')
 

注意所有的脚本代码要放在 deploy 函数里,Fabric 会自动检测 fabfile.py 脚本中的 deploy 函数并运行。服务器

因为脚本中有登陆服务器的用户名和密码等敏感信息,不要把 fabfile.py 文件也上传到公开的代码托管仓库。函数

 

 

执行 Fabric 自动部署脚本

进入 fabfile.py 文件所在的目录,在 Python 的环境下用 fab 命令运行这个脚本文件(已配置环境变量)。post

好比个人是 Windows 环境,那么运行:ui

 

D:\Code\Python\Django\blogproject>fab deploy
 
这时 Fabric 会自动检测到 fabfile.py 脚本中的 deploy 函数并运行,你会看到命令行输出了一系列字符串,若是在最后看到:
Done. Disconnecting from blogproject... done.
 说明脚本运行成功。

 而若是看到
Aborting. Disconnecting from blogproject... done.
说明脚本运行中出错,检查一下命令行输入的错误信息,修复问题后从新运行脚本便可。之后当你在本地开发完相关功能后,只须要执行这一个脚本文件,就能够自动把最新代码部署到服务器了。
相关文章
相关标签/搜索