nginx + uwsgi + systemd 部署 flask
Flask 常用部署方式
uWSGI + Nginx(最常用)
Gunicorn + Nginx
gevent.pywsgi + Nginx
使用gevent.pywsgi的完整示例:python
from gevent import pywsgi
from your_app import appserver = pywsgi.WSGIServer(('0.0.0.0', 5000), app)
print("Server running on port 5000...")
server.serve_forever()
导出第三方模块
pip freeze > requirements.txt
创建python虚拟环境
# 安装虚拟环境的第三方包 virtualenv
pip3 install virtualenv# 创建虚拟环境(虚拟环境一般放在项目根目录下)
virtualenv venv# 激活虚拟环境
source venv/bin/activate# 退出虚拟环境
deactivate
下载三方模块
在虚拟环境中导入requirements中的第三方模块
pip install -r requirements.txt
导入数据库
新建 文件 wsgi.py
# wsgi.py
from app import app # 从应用模块导入 app 实例if __name__ == "__main__":app.run()
创建uwsgi.ini
[uwsgi]
module = wsgi
callable = app
master = true
processes = 2
threads = 100
plugin = python3
socket = 0.0.0.0:8002# 或者使用Unix socket方式(二选一)
; socket = /myflaskapp/uwsgi.sock
; chmod-socket = 660
; vacuum = true# Python虚拟环境virtualenv = /home/ubuntu/zhiliao_oa/venv# 日志文件
logto = /home/ubuntu/zhiliao_oa/logs/error.log
buffer-size = 65535
die-on-term = true
创建 /etc/systemd/system/flaskoa.service
[Unit]
Description=uWSGI instance to serve your Flask app
After=network.target[Service]
User=www-data
Group=www-data
WorkingDirectory=/home/ubuntu/zhiliao_oa
Environment="PATH=/home/ubuntu/zhiliao_oat/venv/bin"
ExecStart=/usr/bin/uwsgi --ini =/home/ubuntu/zhiliao_oa/wsgi.ini[Install]
WantedBy=multi-user.target
配置nginx
# nginx配置server {listen 80;server_name flask.larance.xyz;location / {uwsgi_pass 127.0.0.1:8002; # uwsgi运行的端口include uwsgi_params;}location /static{alias /home/ubuntu/zhiliao_oa/static; # 你收集的静态文件的位置}
}