最近看到关于fabric的使用介绍,大多文章都已过时,因为现在 Fabric 支持 Python3,但是它又不兼容旧版 Fabric。所以,如果你按照那些教程去操作的话根本跑不通。而这篇文章是给使用Python3的同学准备的。
如果你还没用过 Fabric,那么这篇文章就是帮你快速上手 Fabric 的,不管你现在用不用,先了解了以后也用得着。
平时我们的开发流程是这样,经过几个月奋战,项目终于开发完了,测试也没问题了,我们就把代码提交到 GitHub 那样的托管平台,准备部署到正式环境。你小心翼翼地登录到正式服务器,进入到项目目录中,把代码从远程仓库拉下来,然后启动程序。后面每次有新功能发布或者哪怕只是修改了一个小小的 Bug 时,你都要执行重复的操作,登录服务器,切换到指定目录,拉取代码,重启服务。
其实这种操作非常繁琐,也没什么技术含量,还容易出问题,于是 Fabric 出场了。Fabric 是一个远程部署神器,它可以在本地执行远程服务器的命令。
怎么做?很简单。
安装 Fabric
pip install fabric --upgrade
现在举一个React/Vue项目部署的例子
import os
import tarfile
from fabric import connection
def deploy_font(conn):
# 压缩包上传到服务器上的目录
source_to_base_dir = '/tmp'
# 本地前端编译后的目录
source_folder = os.path.abspath(r'D:/xxxx/dist')
# 压缩后的文件名称
tar_name = 'font.tar'
# 压缩文件
compress_file(tar_name, source_folder)
source_tar_path_name = '%s/%s' % (source_to_base_dir, tar_name)
# 服务器上项目部署目录
portal_dir = '/www/xxx/dist'
# 上传文件
conn.put(tar_name, source_to_base_dir)
# 解压文件目录
tar_dir = '/tmp/portal'
conn.run('mkdir -p %s' % tar_dir)
# 解压文件
conn.run('tar -C %s -xvf %s' % (tar_dir, source_tar_path_name))
# 删除压缩文件
conn.run('rm -rf %s' % source_tar_path_name)
# 删除项目文件
conn.run('rm -rf %s/*' % portal_dir)
# 拷贝文件到指定的目录
conn.run('cp -r %s/* %s/' % (tar_dir, portal_dir))
# 删除临时文件
conn.run('rm -rf %s' % tar_dir)
def compress_file(tarfile_name, dirname):
"""
把前端编译后的文件打成压缩包
tarfile_name是压缩包名字,dirname是要打包的目录
:param tarfile_name:
:param dirname:
:return:
"""
if os.path.isfile(dirname):
with tarfile.open(tarfile_name, 'w') as tar:
tar.add(dirname)
else:
with tarfile.open(tarfile_name, 'w') as tar:
for root, dirs, files in os.walk(dirname):
for single_file in files:
filepath = os.path.join(root, single_file)
tar.add(filepath, arcname=filepath.replace(dirname, ''))
if __name__ == '__main__':
# 链接服务器
conn = connection.Connection("root@xxxxxxx:22", connect_kwargs={"password": "xxxx"})
deploy_font(conn)
好了,然后运行脚本,部署一个前端的项目就是这么简单,以后再也不用登服务器了。如果还有其他项目的话建议结合Web框架写个简易的后台管理系统来使用。