zoukankan      html  css  js  c++  java
  • 使用 Fabric 自动化部署

    安装 Fabric

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

    接下就可以简单地通过 pip 命令安装 Fabric 了。

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

    部署过程回顾

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

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

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

    编写 Fabric 脚本

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

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

     
    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 命令运行这个脚本文件(已配置环境变量)。

    比如我的是 Windows 环境,那么运行:

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

     而如果看到
    Aborting. Disconnecting from blogproject... done.
    说明脚本运行中出错,检查一下命令行输入的错误信息,修复问题后重新运行脚本即可。以后当你在本地开发完相关功能后,只需要执行这一个脚本文件,就可以自动把最新代码部署到服务器了。
  • 相关阅读:
    添加脚本真机调试Error launching remote program: failed to get the task for process xxx.
    问题资源Android lint 能够做的事情
    调用生成通过存储过程自动生成AWR报告
    破解行Android apk 逆向工程研究﹣破解 MyTV HD 機種限制手記
    代码判断判断给定的图是否是有向无环图
    修改系统android2.3.4增加gsensor
    类对象工厂设计模式(Factory Pattern)
    脚本指令《游戏脚本的设计与开发》第一章 读取和解析一个脚本文件
    级别指示Android Hierarchy 工具的一些知识
    nullnull[小代码] 双击BACK键 退出
  • 原文地址:https://www.cnblogs.com/peng-lan/p/9605113.html
Copyright © 2011-2022 走看看