在 使用 Nginx 和 Gunicorn 部署 Django 博客 中,咱们经过手工方式将代码部署到了服务器。整个过程涉及到十几条命令,输了 N 个字符。一旦咱们本地的代码有更新,整个过程又得重复来一遍,这将变得很是繁琐。javascript
使用 Fabric 能够在服务器中自动执行命令。由于整个代码部署过程都是相同的,只要咱们用 Fabric 写好部署脚本,之后就能够经过运行脚本自动完成部署了。java
Fabric 目前仅支持 Python2,若是你的系统中只有 Python3 版本,请先安装一个 Python2 的版本,推荐安装 Python 2.7。Python3 和 Python2 能够共存于一个系统,因此不用担忧同时安装两个版本的 Python 会发生冲突。python
接下就能够简单地经过 pip 命令安装 Fabric 了。注意要使用 Python2 环境下的 pip,这样才能把 Fabric 安装到 Python2 环境下。nginx
pip install fabric复制代码
在写 Fabric 脚本以前,咱们先来回顾一下当咱们在本地开发环境下更新了代码后,在服务器上的整个部署过程。git
pip install -r requirement.txt
安装最新依赖。python manage.py collectstatic
收集静态文件。python manage.py migrate
迁移数据库。整个过程就是这样,把每一步操做翻译成 Fabric 对应的脚本代码,这样一个自动化部署脚本就完成了。github
Fabric 脚本一般位于 fabfile.py 文件里,所以先在项目根目录下建一个 fabfile.py 文件。数据库
根据上述过程编写的脚本代码以下:django
blogproject/fabfile.py
from fabric.api import env, run
from fabric.operations import sudo
GIT_REPO = "you git repository" ①
env.user = 'you host username' ②
env.password = 'you host password'
# 填写你本身的主机对应的域名
env.hosts = ['demo.zmrenwu.com']
# 通常状况下为 22 端口,若是非 22 端口请查看你的主机服务提供商提供的信息
env.port = '22'
def deploy():
source_folder = '/home/yangxg/sites/zmrenwu.com/django-blog-tutorial' ③
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-demo.zmrenwu.com') ⑥
sudo('service nginx reload')复制代码
① 你的代码托管仓库地址。api
② 配置一些服务器的地址信息和帐户信息,各参数的含义分别为:服务器
③ 须要部署的项目根目录在服务器上的位置。
④ 经过 run
方法在服务器上执行命令,传入的参数为须要执行的命令,用字符串包裹。这里执行了两条命令,不一样命令间用 &&
符号链接:
⑤ 对应上述部署过程当中 3-5 的几条命令。由于启用了虚拟环境,因此运行的是虚拟环境 ../env/bin/
下的 pip 和 python
⑥ 重启 Gunicorn 和 Nginx,因为这两条命令要在超级权限下运行,因此使用了 sudo
方法而不是 run
方法。
注意所有的脚本代码要放在 deploy 函数里,Fabric 会自动检测 fabfile.py 脚本中的 deploy 函数并运行。
因为脚本中有登陆服务器的用户名和密码等敏感信息,不要把 fabfile.py 文件也上传到公开的代码托管仓库。
进入 fabfile.py 文件所在的目录,在 Python2 的环境下用 fab 命令运行这个脚本文件。
好比个人是 Windows 环境,Python2 安装在 C:\Python27\ 下,那么运行:
C:\Python27\Scripts\fab deploy复制代码
这时 Fabric 会自动检测到 fabfile.py 脚本中的 deploy 函数并运行,你会看到命令行输出了一系列字符串,若是在最后看到
Done.
Disconnecting from zmrenwu.com... done.
说明脚本运行成功。
而若是看到
Aborting.
Disconnecting from zmrenwu.com... done.
说明脚本运行中出错,检查一下命令行输入的错误信息,修复问题后从新运行脚本便可。之后当你在本地开发完相关功能后,只须要执行这一个脚本文件,就能够自动把最新代码部署到服务器了。
本章节的代码位于:Step15: deploy automatically using fabric。
若是遇到问题,请经过下面的方式寻求帮助。
更多Django 教程,请访问 追梦人物的博客。