环境说明

开发环境: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.


做一个热爱生活的人