# Flask + uWsgi + Nginx 搭建后端服务器
# 一、配置 Python Venv 虚拟环境
在Ubuntu 系统下,有python 2 和 python 3 两个版本,所以使用虚拟环境,以指定python运行环境。虚拟环境的创建,以及后续uWsgi全部由普通用户角色安装与执行。
# 创建虚拟环境
python3 -m venv venv
# 安装 Flask
pip install --upgrade pip
pip install -U setuptools
pip install flask
# Python Venv 的基本操作
# 进入虚拟环境
source ./venv/bin/activate
# 退出虚拟环境
deactivate
# 二、完成 Flask 项目
编写 main.py
# filename: main.py
from flask import Flask
app = Flask(__name__)
# 这里启用 Flask 跨域访问,不启动则 Vue 无法访问
CORS(app, supports_credentials=True)
@app.route("/")
def hello_world():
return "<p>Hello, World!</p>"
if __name__ == "__main__":
# 这里指定 Flask 启动时的端口,方便调试
app.run(host='0.0.0.0', port='5000')
else:
# 这里指定 uWsgi 应用实例名,如果不加这句,那么 uWsgi 无法正确运行项目
application = app
# Flask 项目的启动与调试
# 如果 main.py 中,运行代码未指定主机地址与端口号
# app.run()
# 那么 Flask 服务使用以下方式启动,以指定主机地址与端口号
flask run --host=0.0.0.0 --port=8080
# 如果 main.py 中,运行代码已指定主机地址与端口号
# app.run(host='0.0.0.0', port='5000')
# 那么使用 python 直接运行代码即可
python main.py
# 三、uWsgi的安装与配置
uWsgi在Venv环境中使用 pip 安装,无需root权限
pip install uwsgi
# 编写uWsgi 配置文件
# filename uwsgi.ini
[uwsgi]
# 由 nginx 代理时,使用以下方式指定 Flask 地址和端口号
socket = 127.0.0.1:5000
# 如果不使用 socket ,直接用 uWsgi 启动程序,则用 http
# http = 0.0.0.0:5000
# 设定 Flask 应用的根目录
chdir = /home/ubuntu/proj/helloworld
# 指定应用的入库文件
wsgi-file = main.app
# 指定 Flask 对象
callable = app
# 设定应用进程的数量
processes = 2
# 设定每个进程的线程数量
threads = 2
# 设定是否启动主线程
master = true
# 设定日志的打印文件
daemonize = /home/ubuntu/proj/helloworld/logs/uwsgi.log
# 设定主进程 pid 的写入文件
pidfile = uwsgi.pid
# 设定虚拟环境的路径
virtualenv = /home/ubuntu/proj/helloworld/venv
# 测试 uWsgi
uWsgi安装完成后,可以先不加载 uwsig.ini 文件,而是从命令行直接启动,以检查uWsgi 以及 Flask 项目是否能正常运行
# 命令一
uwsgi --http-socket :8088 --wsgi-file main.py
# 命令二
uwsgi --http :8001 --wsgi-file main.py
# 运行 uWsgi
# 启动 uwsgi
uwsgi --ini uwsgi.ini
# 停止 uwsgi
uwsgi --stop uwsgi.pid
# 重启 uwsgi
uwsgi --reload uwsgi.pid
启动后,可以查看 /logs/uwsgi.log 日志,排查问题
可以执行以下命令,来检查uwsgi工作状态
# 查看进程
ps -aux | grep uwsgi
# 查看端口
netstat -anp | grep 8088
注意:
这个地方uWsgi已配置文件启动之后,即使端口打开,外网也是访问不了的,如何让外部直接访问uWsgi,还没试验成功(ini文件中,将socket改成http无效)
# 四、Nginx 的安装与配置
Nginx 务必使用 root 权限安装与配置,以免出现各种权限不足问题
apt-get install nginx
# Nginx 配置文件编写
nginx 配置文件路径为:/etc/nginx/nginx.conf
http {
server {
# 监听端口
listen 80;
# 监听ip 换成服务器公网IP
server_name ***.***.***.***;
# 监听域名 换成服务器解析域名 与上面二选其一
# server_name xxx.baidu.com
# 动态请求
location / {
include uwsgi_params;
uwsgi_pass 127.0.0.1:5000;
}
# 静态请求
# location /static {
# alias /root/face/server/static/;
# }
}
}
# Nginx 的基础操作
# 启动 Nginx
nginx
# 停止 Nginx
nginx -s stop
# 重启 Nginx
nginx -s reload
# Nginx 的几个配置案例
http {
# 代理 Vue
server {
listen 80;
server_name xxx.mallocx.com;
location / {
root /home/your/vue/path/dist;
index index.html
try_files $uri $uri/ /index.html
}
}
# 代理 Flask
server {
listen 5000;
server_name xxx.mallocx.com;
location / {
include uwsgi_params;
uwsgi_pass 127.0.0.1:5010
}
}
# 代理 Https Vue
server {
listen 443 ssl;
server_name xxx.mallocx.com;
ssl_certificate /home/your/certificate/mallocx.com_bundle.crt;
ssl_certificate_key /home/your/certificate/mallocx.com.key;
location / {
root /home/your/vue/path/dist;
index index.html
try_files $uri $uri/ /index.html
}
}
}
注意:
nginx配置文件,第一行权限设置,必须要改为user root; 否则不解析