资讯专栏INFORMATION COLUMN

Django 博客开发教程 15 - 使用 Fabric 自动化部署

haobowd / 2509人阅读

摘要:使用可以在服务器中自动执行命令。重启和使改动生效。执行自动部署脚本进入文件所在的目录,在的环境下用命令运行这个脚本文件。在使用自动化部署的评论区留言。

在 使用 Nginx 和 Gunicorn 部署 Django 博客 中,我们通过手工方式将代码部署到了服务器。整个过程涉及到十几条命令,输了 N 个字符。一旦我们本地的代码有更新,整个过程又得重复来一遍,这将变得非常繁琐。

使用 Fabric 可以在服务器中自动执行命令。因为整个代码部署过程都是相同的,只要我们用 Fabric 写好部署脚本,以后就可以通过运行脚本自动完成部署了。

安装 Fabric

Fabric 目前仅支持 Python2,如果你的系统中只有 Python3 版本,请先安装一个 Python2 的版本,推荐安装 Python 2.7。Python3 和 Python2 可以共存于一个系统,所以不用担心同时安装两个版本的 Python 会发生冲突。

接下就可以简单地通过 pip 命令安装 Fabric 了。注意要使用 Python2 环境下的 pip,这样才能把 Fabric 安装到 Python2 环境下。

pip install fabric
部署过程回顾

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

远程连接服务器。

进入项目根目录,从远程仓库拉取最新的代码。

如果项目引入了新的依赖,需要执行 pip install -r requirement.txt 安装最新依赖。

如果修改或新增了项目静态文件,需要执行 python manage.py collectstatic 收集静态文件。

如果数据库发生了变化,需要执行 python manage.py migrate 迁移数据库。

重启 Nginx 和 Gunicorn 使改动生效。

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

编写 Fabric 脚本

Fabric 脚本通常位于 fabfile.py 文件里,因此先在项目根目录下建一个 fabfile.py 文件。

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

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")

① 你的代码托管仓库地址。

② 配置一些服务器的地址信息和账户信息,各参数的含义分别为:

env.user:用于登录服务器的用户名

env.password:用户名对应的密码

env.hosts:服务器的 IP 地址,也可以是解析到这个 IP 的域名

env.port:SSH 远程服务器的端口号

③ 需要部署的项目根目录在服务器上的位置。

④ 通过 run 方法在服务器上执行命令,传入的参数为需要执行的命令,用字符串包裹。这里执行了两条命令,不同命令间用 && 符号连接:

cd 命令进入到需要部署的项目根目录

git pull 拉取远程仓库的最新代码

⑤ 对应上述部署过程中 3-5 的几条命令。因为启用了虚拟环境,所以运行的是虚拟环境 ../env/bin/ 下的 pip 和 python

⑥ 重启 Gunicorn 和 Nginx,由于这两条命令要在超级权限下运行,所以使用了 sudo 方法而不是 run 方法。

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

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

执行 Fabric 自动部署脚本

进入 fabfile.py 文件所在的目录,在 Python2 的环境下用 fab 命令运行这个脚本文件。

比如我的是 Windows 环境,Python2 安装在 C:Python27 下,那么运行:

C:Python27Scriptsfab deploy

这时 Fabric 会自动检测到 fabfile.py 脚本中的 deploy 函数并运行,你会看到命令行输出了一系列字符串,如果在最后看到

Done.
Disconnecting from zmrenwu.com... done.

说明脚本运行成功。

而如果看到

Aborting.
Disconnecting from zmrenwu.com... done.

说明脚本运行中出错,检查一下命令行输入的错误信息,修复问题后重新运行脚本即可。以后当你在本地开发完相关功能后,只需要执行这一个脚本文件,就可以自动把最新代码部署到服务器了。

总结

本章节的代码位于:Step15: deploy automatically using fabric。

如果遇到问题,请通过下面的方式寻求帮助。

在 使用 Fabric 自动化部署 的评论区留言。

将问题的详细描述通过邮件发送到 djangostudyteam@163.com,一般会在 24 小时内回复。

更多Django 教程,请访问 追梦人物的博客。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/44415.html

相关文章

  • Django搭建个人博客:结束和开始

    摘要:教程看到这里,你已经学会如下内容搭建开发环境博文管理用户管理发表评论若干小功能搭建简单的小博客,以上的功能够用了。教程为了起步平缓,没有展开这方面的内容。陌生人,祝你学业进步事业有成欢迎常到杜赛的个人网站做客 教程看到这里,你已经学会如下内容: 搭建开发环境 博文管理 用户管理 发表评论 若干小功能 搭建简单的小博客,以上的功能够用了。 相信你的志向不止于此。毕竟程序员面试个个造火...

    zqhxuyuan 评论0 收藏0
  • 基于ubuntu16.04部署IBM开源区块链项目-弹珠资产管理(Marbles)

    摘要:协议的细节由一个名为的处理。运行下面的脚本来让所有的事情都发生一两分钟后,命令提示符将返回运行结果如下图所示现在运行该命令查看当前正在运行的容器。 showImg(https://segmentfault.com/img/bVbazHF?w=709&h=159); 前言 本教程基本上是对Marbles项目的翻译过程. 如果英文比较好的话,建议根据官方操作说明,一步步进行环境部署。当然你...

    voidking 评论0 收藏0
  • Django 学习小组:博客开发实战第四周——标签云与文章归档

    摘要:本教程内容已过时,更新版教程请访问博客开发入门教程。表示降序排列,默认是升序排列。学习小组简介学习小组是一个促进新手互相学习互相帮助的组织。我们会将每周的详细开发文档和代码通过邮件列表发出。 本教程内容已过时,更新版教程请访问: django 博客开发入门教程。 通过前四周的时间我们开发了一个简单的个人 Blog,教程地址: 第一周:Django 学习小组:博客开发实战第一周教程 ——...

    RichardXG 评论0 收藏0
  • 基于Docker & Fabric的Web项目部署方案

    本文描述了Web项目的两种部署方案,石器时代的ssh & pull & restart方式不做太多说明 1.基于Fabric(Python)的部署方案 Fabric 是一个用于ssh的Python库&命令行工具 Fabric is a Python (2.5-2.7) library and command-line tool for streamlining the use of SSH for...

    SKYZACK 评论0 收藏0
  • 基于Docker & Fabric的Web项目部署方案

    本文描述了Web项目的两种部署方案,石器时代的ssh & pull & restart方式不做太多说明 1.基于Fabric(Python)的部署方案 Fabric 是一个用于ssh的Python库&命令行工具 Fabric is a Python (2.5-2.7) library and command-line tool for streamlining the use of SSH for...

    RyanHoo 评论0 收藏0

发表评论

0条评论

haobowd

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<