Skip to main content

利用githook将flask快速部署到Linux服务器

SmartDeng...About 2 minFlaskLinuxLinuxNginxFlask

利用githook将flask快速部署到Linux服务器

网上有用到一些自动化部署工具来实现自动部署的,过程略为繁琐,就偷个懒,这个方法的灵感来源于hexo自动部署的过程,反正linux 下没有shell脚本不能做的。

就干脆利用git的post-receive 来实现了,简单粗暴。

环境

centos7 nginx web服务

本地flask应用创建

创建好本地flask应用。

服务器端配置

基本配置

  • 在root用户下安装好nginx 、Python对应版本和git,并按照hexo的配置步骤创建一个普通用户(git)

nginx配置

新建nginx配置文件:

/etc/nginx/conf.d/flask.conf

添加以下内容:

server {
        listen 80;
	server_name example.com;
        location / {
            include uwsgi_params;
            uwsgi_pass 127.0.0.1:8000;
        }
}

并重启nginx服务器:

systemctl restart nginx

uwsgi 配置

切换到git用户:

su git && cd

新建flask.git用来作为远程git仓库

mkdir flask.git
cd flask.git && git init --bare

编辑githooks脚本,实现本地git push到该仓库后,自动运行uwsgi,完成自动部署。

cd hooks
vim post-receive

输入以下内容:

#!/bin/bash
GIT_REPO=/home/git/flask.git
TMP_GIT_CLONE=/tmp/flask
FLASK_DIR=/home/git/flask_ac
rm -rf ${TMP_GIT_CLONE}
git clone $GIT_REPO $TMP_GIT_CLONE
killall -9 uwsgi
rm -rf ${FLASK_DIR}/app
cp -rf ${TMP_GIT_CLONE}/app ${FLASK_DIR}
cd /home/git/flask_ac && sh uwsgistart.sh >/dev/null 2>&1

killall -9 uwsgi 先终止uwsgi程序,然后更新代码后运行 uwsgistart.sh 脚本启动uwsgi,>/dev/null 2>&1 表示结果不回显,开始没加的时候,本地终端关闭后,远程uwsgi也停止了,所以加了这个。其他几个就是用到的几个目录。

再赋予可执行权限

chmod +x post-receive

在用git推送之前,需要在服务器中配置好python venv环境,目录树如下:

.
├── app
│   ├── app.py
│   ├── __pycache__
│   ├── static
│   └── templates
├── flaskdeploy.sh
├── flaskrun.sh
├── requirements.txt
├── uwsgistart.sh
└── venv
    ├── bin
    ├── include
    ├── lib
    ├── lib64 -> lib
    └── pyvenv.cfg

app目录是后续会经常修改的内容,这个在服务器端配置Python虚拟环境时创建一个空目录即可,后面git push上去就行了。其他内容在一次配置好后基本不需修改,所以这样分开可以很方便的更新站点文件。

requirements.txt通过本地的pip 导出,在本地flask中执行:

pip freeze > requirements.txt

flaskdeploy.sh 为本地使用,本地修改完app中的内容后,运行该脚本即可同步至服务器。内容如下:

#!/bin/bash

git add -A
git commit -m "auto deploy"
git push

就是git的推送命令。

flaskrun.sh也是本地使用的脚本,用来快速在本地运行flask:

#!/bin/bash

. venv/bin/activate && cd app && flask run

最后一个是uwsgistart.sh,这个是在服务器端起作用的,用来通过git-hooks脚本启动uwsgi服务。内容如下:

#!/bin/bash
. venv/bin/activate && cd app&&uwsgi --socket 0.0.0.0:8000 -p 3 -w app:app

这里就是将8000端口暴露给nginx,上面nginx配置中就是获取uwsgi的8000端口,实现http的访问,完成反向代理。

Comments
  • Latest
  • Oldest
  • Hottest
Powered by Waline v3.1.3