fabric自动部署django工程

本文记录用fabric自动部署自己写的webtools工程,节约每次上线的时间

0x01. fabric 安装

fabric安装很简单直接apt-get install fabric,但是在windows上面安装会出现如下错误:缺少visual c++ 9.0的情况。只需要下载Microsoft Visual C++ Compiler for Python 2.7安装即可。安装好后会在scripts目录下生成一个fab.exe文件,将其加入环境变量即可。

0x02. fabric基本语法

fabric的基本语法很简单,我这里直说几个常用的函数。
第一步导入模块,from fabric.api import run, cdrun命令是在远程服务器上面执行命令的函数,cd是跳转目录的函数。比如要在远程服务器的/home目录下执行ls命令的话,代码如下:

from fabric.api import run, cd

def exec_code():
    with cd('/home'):
        run('ls')

只需要在本地执行fab exec_code -H user@remote_host,程序会自动提醒输入密码登录,然后执行相关的操作。

0x03. 使用fabric自动部署django

我的需求很简单,每次写完一部分之后需要在树莓派进行重新部署django工程,同时settings.pywsgi.py文件与开发环境有所不同,所以不能覆盖。所以我的基本部署的步骤如下:

  1. 从git中fetch下来
  2. 跳到工程目录,删除除settings.pywsgi.py的所有文件
  3. 将新的工程复制过来
  4. 覆盖settings.pywsgi.py
  5. pip install新的库
  6. 执行migrate
  7. 重启apache

总结起来写出的代码如下所示,使用方法为fab push_code -H xx@xx.xx.xx.xx,fabric只是提供了一个框架,能够自动的判断命令是否执行成功,执行不成功即停止运行,并且能够程序自动提示登录ssh,通过该模块能更快的进行批量部署,如安装apache或者mysql等软件:

# coding=utf8
from fabric.api import run, cd


def push_code(path='/home/webtools-rep'):
    with cd(path):
        run('git fetch origin master')
    with cd('/home/webtools'):
        run('mv /home/webtools/webtools/settings.py /home')
        run('mv /home/webtools/webtools/wsgi.py /home')
        run('rm -rf *')
        run('cp -R /home/webtools-rep/webtool/* ./')
        run('mv /home/settings.py ./webtools')
        run('mv /home/wsgi.py ./webtools')
        run('source /home/env/bin/activate')
        run('pip install -r /home/webtools/requirements.txt')
        run('python manage.py migrate')
        run('/etc/init.d/apache2 restart')
阅读更多

更多精彩内容