Flask – 在CentOS 7上部署Flask项目

在部署之前,要确保CentOS 7系统已经安装了MySQL 5.x数据库、Python 3.6.x和Nginx。

在CentOS 7的根目录 / 下创建一个project 目录,该目录用于存放所有要部署的项目。在project 下在创建conf (用户存放所有的配置文件)、 env (用户存放所有的虚拟环境)、 src (用于存放所有项目的源码)、 logs(用于存放所有的日志文件)。

部署

同步数据

使用navicat 将Windows上的数据库同步到CentOS上。首先要确保CentOS上的MySQL可以支持远程连接。

安装虚拟环境

1
2
3
4
5
6
7
8
9
10
# 切换目录
cd /project/env
# 安装虚拟环境 参数:指定虚拟环境中Python的版本(-p 本地Python3的安装目录)
virtualenv --no-site-packages -p /usr/local/python3.6 venv
# 进入虚拟环境目录
cd venv
# 激活虚拟环境
source bin/activate
# 安装环境所需要的包 其中re_install.txt文件中记录的是需要安装包的名称以及对应的版本
pip3 install -r re_install.txt

部署在测试环境中

进入项目目录,使用python manage.py runserver -p 8080 -h 0.0.0.0 -d 运行项目。

部署在正式环境中

使用 uwsgi + Nginx + MySQL 来部署项目。

配置nginx.conf文件

1
cd /project/conf

先编写自己项目的nginx.conf文件如下:

每一个项目对应有一个自己定义的nginx的配置文件,比如爱家项目,定义为aj_nginx.conf 文件。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
server {
listen 8080; # 端口
server_name xx.xx.xx.xx localhost; # 公网ip、域名

access_log /app/logs/aj_access.log; # 连接成功日志文件
error_log /app/logs/aj_error.log; # 错误日志

location / {
include uwsgi_params;
uwsgi_pass 127.0.0.1:8090; # 和uwsgi通信的端口

uwsgi_param UWSGI_CHDIR /app/src/ajzf; # 项目目录路径
uwsgi_param UWSGI_SCRIPT manage:app; # 启动flask的文件:Flask的实例
}
}

再修改总的nginx的配置文件,让总的nginx文件包含我们自定义的项目的axf_nginx.conf 文件。

总的nginx配置文件在:/etc/nginx/nginx.conf 中

django_centos_nginx1
django_centos_nginx1

以上步骤操作完成以后,需要重启nginx:

1
2
3
systemctl restart nginx

systemctl status nginx

如果自定义的axf_nginx.conf文件没有错误的话,查看nginx的运行状态会有如下的结果:

django_centos_nginx2
django_centos_nginx2

配置uwsgi文件

先安装uwsgi

1
pip3 install uwsgi

然后进行环境变量的配置, 建立软连接

1
ln -s /usr/local/python3.6/bin/uwsgi /usr/bin/uwsgi

在 /project/conf 文件夹下除了包含自定义的aj_nginx.conf文件,还有我们自定义的aj_uwsgi.ini 配置文件。

1
2
3
4
5
6
7
8
9
10
11
12
13
[uwsgi]

socket=127.0.0.1:8090

chdir=/app/src/ajzf

pythonpath=/usr/local/python3.6/bin/python3

pythonhome=/app/env/venv

callable=app

logto=/app/logs/aj_uwsgi.log

运行项目:

1
2
3
cd /project/conf

uwsgi --ini aj_uwsgi.ini