自动化部署与更新flask项目

我自己写了flask一个应用,已经成功部署上线了。使用的是uwsgi与nginx
1.我的做法在github上有一个私有的代码库,每次本地开发完之后就将代码更新到远程库中
2.然后登陆服务器,服务器上项目的代码库一开始是从远程库中克隆下来的,所以每次需要更新代码前需要先git pull,
3.然后我需要进入这个项目的虚拟环境,运行uwsgi --relaod uwsgi.pid
这样才算是真正完成更新
请问各位大神有没有什么更好的方式

阅读 5.8k
2 个回答

简单说下思路

第一步,在服务器上创建一个git远程仓库

cd /home/username
mkdir -p repositories/projectname.git
cd repositories/projectname.git
git init --bare .

第二步,在服务器上编写post-receiveGit Hooks)自动部署脚本

touch /home/username/repositories/projectname.git/hooks/post-receive
chmod +x /home/username/repositories/projectname.git/hooks/post-receive

实际可能需要更加复杂的逻辑,这里只做说明

#!/bin/bash
/usr/bin/git --work-tree=/var/www/projectname --git-dir=/home/username/repositories/projectname.git checkout -f
/home/username/.virtualenvs/virtualenvname/bin/python /home/username/.virtualenvs/virtualenvname/bin/uwsgi --reload /path/to/uwsgi.pid

备注:用户username必须拥有/var/www/projectname目录的读写权限

第三步,在本地添加远程仓库

cd /path/to/projectdir
git remote add production username@myhostname:/home/username/repositories/projectname.git
# 本地代码提交后,更新到远程仓库
git push production master
# 远程仓库接收完成后,将执行post-receive脚本,以达到自动化部署的目的

想用成熟的方案的话可以使用Jenkins,不过需要在一台服务器上先部署Jenkins,有点占内存的,简单一点的方案可以使用GitHub webhooks,然后写一个专门用来更新服务的flask应用,只有一个接口,用来执行关闭服务,更新代码,运行测试,重启服务的任务,直接用os.system或者subprocess.call调用命令就可以。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题