环境说明
开发环境:Windows10
部署环境:阿里云 - Debian10
需求介绍
我使用SpringBoot作为第一服务,已经配置到nginx中,实现了访问fucaijin.cn时访问SpringBoot项目。
但现在需要将flask作为第二服务,需要实现访问fucaijin.cn/aaa/时是访问flask项目。
1. 创建flask项目
首先在PC上使用PyCharm创建Flask项目,上传到linux,比如是/home/fucaijin/project/flaskProject,该目录就是flask项目的根路径,该目录下有app.py等文件,比如app.py内容可以如下:
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello_world():
return 'Hello World'
@app.route(f'/aaa/')
def flask():
return f'Hello World -- aaa'
if __name__ == '__main__':
app.run()
2. 创建虚拟环境
cd到flask项目根目录中,然后创建虚拟环境:
cd /home/fucaijin/project/flaskProject
virtualenv -p /usr/bin/python3 env # 使用python3创建虚拟环境,此时会在项目目录中生成一个env目录
source env/bin/activate # 激活虚拟环境
虚拟环境命令:
virtualenv -p /usr/bin/python3 env #在当前目录下创建名为env的虚拟环境,指定用的python版本为python3
source env/bin/activate #激活虚拟环境
deactivate #退出虚拟环境
3. 在虚拟环境安装flask
cd到flask项目根目录中,并激活虚拟环境后,执行:
pip install flask
python app.py
此时会出现"Running on http://127.0.0.1:5000/",另开一个终端窗口,使用curl http://127.0.0.1:5000/
访问是否得到响应"Hello World",有响应说明已经在虚拟环境中正确安装了flask,并能正确运行。
4. 安装uwsgi
apt install aptitude build-essential python-dev python3-dev libpcre3 libpcre3-dev # 安装uwsgi前的依赖
pip install uwsgi # 安装uwsgi
5. 测试uwsgi
创建文件test_demo.py:
def application(env, start_response):
start_response('200 OK', [('Content-Type','text/html')])
return [b"Hello World"] # python3
执行:
uwsgi --http :8000 --wsgi-file test_demo.py
# 意思:使用http协议在8000端口加载test_demo.py文件
如果报错类似于:uwsgi: error while loading shared libraries: libpcre.so.1: cannot open shared object file: No such file or directory
说明缺失文件,使用文件搜索,从根目录开始搜,并将搜索到的文件在/usr/lib/中做软连接即可:
find / -name libpcre.so.3 # 找到libpcre.so.3(一般在/lib/x86_64-linux-gnu下)
/lib/x86_64-linux-gnu/libpcre.so.3 # 比如这是找到的文件路径
sudo ln -s /lib/x86_64-linux-gnu/libpcre.so.3 /usr/lib/libpcre.so.1 # 做软链接即可
# 以下是因为文件缺失,我做的软连接,仅供参考:
sudo ln -s /lib/x86_64-linux-gnu/libpcre.so.3 /usr/lib/libpcre.so.1
sudo ln -s /root/anaconda3/lib/libicui18n.so.58 /usr/lib/libicui18n.so.58
sudo ln -s /root/anaconda3/lib/libicuuc.so.58 /usr/lib/libicuuc.so.58
sudo ln -s /root/anaconda3/lib/libicudata.so.58 /usr/lib/libicudata.so.58
如果没报错,则curl 127.0.0.1:8000
看是否访问成功,一般能踩过前面的坑到这里就访问成功了。
6. 使用uswgi访问flask项目
创建uwsgi配置文件uwsgi_config.ini,该配置文件的文件名可以任意自定义,可以放在flask项目的根目录中:
[uwsgi]
http = 127.0.0.1:8000
home = /home/fucaijin/project/flaskProject/env
wsgi-file = /home/fucaijin/project/flaskProject/app.py
callable=app
processes = 1
threads = 1
buffer-size = 32768
master = true
stats=/home/fucaijin/project/flaskProject/uwsgi.status
pidfile=/home/fucaijin/project/flaskProject/uwsgi.pid
执行:uwsgi uwsgi_config.ini
项目启动成功后curl 127.0.0.1:8000/aaa/或curl 127.0.0.1:8000
进行验证是否启动成功
7. 在nginx配置文件中,配置uwsgi部署Flask
将uwsgi_config.ini文件中的第一行配置http = 127.0.0.1:8000
改为socket= 127.0.0.1:8000
然后修改nginx的配置文件80端口节点下的配置,和location /
节点同级添加配置节点:
location /aaa/ {
include uwsgi_params;
uwsgi_pass 127.0.0.1:8000;
}
8. 启动uwsgi并重启nginx
执行uwsgi uwsgi_config.ini
,然后关闭终端窗口即可实现后台运行。
如果需要关闭,使用端口占用命令netstat -tunlp|grep 8000
找到uwsgi占用的端口程序的PID,使用kill -9 8000
即可停止。
另外打开终端窗口执行nginx -s reload
即可重新加载nginx的配置文件。
9.测试flask部署
打开浏览器,访问"fucaijin.cn/aaa/"看是否访问成功flask项目
Q.E.D.