前因
以前没有玩过flask
,最近写了个flask
demo本地跑通之后,想放到服务器上部署测试测试。把代码上传服务器之后,先下载依赖:
pip install -r requirements.txt
下载完依赖之后直接按照本地运行的命令直接跑
python -m flask run
或者
python app.py
跑完成之后用postman进行测试,好家伙,有些接口能调通,有些接口不能调通。这是为什么呢?最后通过询问朋友和百度之后发现flask
的一般部署需要借助wsgi
和nginx
。
wsgi全称Python Web Server Gateway Interface,指定了web服务器和Python web应用或web框架之间的标准接口,以提高web应用在一系列web服务器间的移植性
下面记录一下部署的一个大概流程
部署
部署大致步骤如下:
-
准备一台centos服务器:这里以centos7为例
-
上传项目到服务器:/home/application/flask
-
python3环境
-
安装虚拟环境
-
uWSGI配置
-
nginx代理
-
测试
Python3环境准备
通过wget
下载Python3
wget https://www.python.org/ftp/python/3.7.0/Python-3.7.0.tgz
解压
tar -zxvf Python-3.7.0.tgz.tgz
编译安装
cd Python-3.7.0
./configure
make && make install
检测是否安装成功
python3 -V
安装虚拟环境
通过python自带工具pip
下载
pip3 install virtualenv
进入到项目目录
cd /home/application/flask/flask_demo
flask_demo
是我的项目名称
创建虚拟环境
virtualenv venv_flask
source venv_flask/bin/activate
deactivate #退出虚拟环境
uWSGI配置
安装
pip3 install uwsgi
配置uWsgi
,先在项目根目录创建文件uwsgi.ini
[uwsgi]
# uwsgi启动时所使用的地址与端口
socket = 127.0.0.1:5000
# 指向网站目录
chdir = /home/application/flask/flask_demo
# python 启动程序文件
wsgi-file = app.py
# python 程序内用以启动的 application 变量名
callable = app
# 处理器数
processes = 4
# 线程数
threads = 2
#状态检测地址
stats = 127.0.0.1:9191
启动测试
uwsgi uwsgi.ini
这时候启动外网仍调不通,需要配置nginx才能完美调通
nginx代理
首先下载nginx
,不会的可以参考Linux安装Nginx看这篇就够了
对../xxx/nginx/nginx.conf
进行如下配置
server
{
listen 5000;
server_name 127.0.0.1; # IP或域名
location / {
include uwsgi_params;
uwsgi_pass 127.0.0.1:5000;
uwsgi_param UWSGI_PYHOME /home/application/flask/flask_demo/venv_flask/bin; # Python位置或虚拟环境
uwsgi_param UWSGI_CHDIR /home/application/flask/flask_demo; # 项目根目录
uwsgi_param UWSGI_SCRIPT app:app; # 启动项目的主程序
}
}
启动nginx
start nginx
后台启动uwsgi
uwsgi --ini /home/application/flask/flask_demo/uwsgi.ini --daemonize /home/application/flask/flask_demo/log.out
启动之后你可以先查看是否启动
ps -ef | grep uwsgi
如果启动成功,那么就可以进行相关测试了。到这里部署就结束了。
参考:
- http://www.pythondoc.com/flask/deploying/index.html
- https://cloud.tencent.com/developer/article/1853918