社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

Python自动化部署工具-Fabric

涛哥聊Python • 5 年前 • 386 次点击  
阅读 24

Python自动化部署工具-Fabric

image

今天分享一个Python的自动化发布工具—Fabric。

我在前面文章「Linux系列开坑记(一)-常用的3个命令」说了tar,rsync,supervisor这三个,从打包上传备份上线,进程管理工具。

我相信细心的读者发现了,但是这里其实还缺一个工具。

那就是衔接这三个步骤的工具,它可以通过SSH,让我们在远端服务器执行shell命令更加方便,更加智能的与服务器进行交互。

除了与远端服务交互,也非常方便我们日常执行较为复杂,需要要定制化的Python函数。

安装

pip install Fabric # 安装 pip freeze > requirements.txt # 把安装包写入文件中

一个官网例子:

def hello(name='sitin'):
    print("Hello world %s!" % name)
复制代码

使用fab执行一下效果如下:

image

这里面我们需要知道fab是fabric安装的命令行工具,我们主要是通过它进行操作。

我个人平时用的比较多的命令有:

run 远端执行命令 local 本地执行命令 cd 远端切换目录 lcd 本地切换 @task 装饰器声明函数为fab task

简单的脚本我觉得是已经够用了,复杂一点需要更多操作了,详情见后文。

部署步骤

通常情况下,作为一个Python工程师我们发布代码需要做的事儿常见的有以下几点:

  1. git pull 拉取最新代码,比如master分支(或者develop分支)

  2. tar 打包最新代码

  3. rsync增量同步到远端服务器,去掉一些不需要的本地目录

  4. 备份数据库或者备份代码

  5. supervisor指定重启远端一个或多个服务,通过交互式指令判断

  6. sentry查看日志正常与否

除了最后一步,这里面所有的操作我们都在fabfile.py就进行操作了,一般情况下fabfile.py放在项目根目录,当然你放在其他地方也没有什么问题。通过**-f**进行指定就行。

概要讲了,下面请参看我们的一个实战例子

一个例子

from fabric.api import (
    with_settings,
    hosts,
    cd,  # 远端
    lcd, # 本地切换目录
    run, # 执行
    env,
)

EST_ENV = '127.0.0.1'TEST_USER = 'test'env.forward_agent = True# 允许本地 SSH 代理连接远程终端时跳转@hosts(TEST_ENV) # 指定远程操作的机器地址@with_settings(user=TEST_USER) # 用来临时设定 env 变量,可以等同于 with settingsdef deploy_test():
    # 发布测试环境
    local('git pull --rebase upsgream dev') # local执行本地命令拉取代码到本地,这个可以用CI自动发布,就不用拉取到本地。
    local('rsync -r . --exclude=tmp/ --exclude=backup/ sitin@yourip:/data/your_project') # 上传代码    with cd('/data/your_project'): # 表示所有操作在这个目录下面
        run('docker-compose pull test')  # test镜像名
        backup_db() # 这里其实就是一个普通备份函数
        run('docker-compose stop test') # 执行远端命令同local相反
        run('docker-compose rm -f test')
        run('docker-compose run --rm test python manage.py migrate') # db同步
        run('docker-compose up -d test')
复制代码

在终端执行命令

fab deploy_test # 就能进行发布了测试环境了 fab deploy_product # 如果有就能发布了

通常情况下测试,开发,服务器与线上操作不太一样,我们可以通过上面方式进行操作。除了上面的操作之后,如果我们测试线上完全一直或者多台服务器,可以通过指定不同角色来进行选择服务器的发布。

env.roledefs = {    
  'test': ['test@yourip'],  # 指定多台机器    
  'dev': ['dev@yourip'],     
  'prod': ['opt@yourip2'],   
}   
def deploy(branch=master): 
    pass
复制代码

fab -R test(上面定义的角色) deploy -f fabfile.py deploy这里还可以指定发布哪个分支的代码

这样指定某一个角色的服务器,某一个分支进行发布非常简单方便,对于经常使用的复杂命令操作我们还可以作为缩写命令来进行操作。

其他

类似我们要在docker里面进行docker-compose run --rm python manage.py migrate这种较长操作。

把操作写到fabfile.py里面的函数,就类似linux下面alias一样,fab migrate就完了简单方便。

除了上面,我们可以指定发布版本颜色进行区分发布成功出错与否,进行警示我们,非常方便快捷。

更多的大家可以参看fab -h更多参数含义,今天这个工具就介绍到这儿.

另外有不清楚docker-compose这个命令的参考我前面的文章。关于Python服务器运维,除了Fabric 还有SaltStack,Ansible更为复杂强大的管理工具,后期我们再进行分享,感谢你的关注。

image

一个坚持原创的Python公号

相关文章:

容器化部署实践之Django应用部署(二)

使用Docker容器化部署实践之Django应用部署(一)

Linux系列开坑记(一)-常用的3个命令

Docker容器化部署实践Docker Compose

image

扫码免费加入


今天看啥 - 高品质阅读平台
本文地址:http://www.jintiankansha.me/t/fcsV4baFwj
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/28051
 
386 次点击