安装uWsgi
默认情况下,使用pip安装uWsgi会出现错误,需要首先安装python3-dev,如果安装python-dev会提示安装的是python2.7.
sudo apt install python3-dev
pip install uwsgi
配置、运行uWsgi
进入Flask项目根目录,下创建一个配置文件 myproject.ini:
[uwsgi]
master = true #启动主进程,来管理其他进程,其它的uwsgi进程都是这个master进程的子进程,如果kill这个master进程,相当于重启所有的uwsgi进程。
http = :5000 #服务端口
socket = :5000 #用于和 nginx 进行数据交互的端口
chdir = /home/login_user/app/FlaskWeb #项目目录
wsgi-file = /home/login_user/app/FlaskWeb/FlaskWeb.py #flask项目运行文件
callable = app #设置在收到请求时,uWSGI加载的模块中哪个变量将被调用,本次flask项目里为“app”。
buffer-size = 65536 #设置用于uwsgi包解析的内部缓存区大小。默认是4k。
processes = 4 #服务进程数
threads = 8 #线程数
enable-threads = true #
max-requests = 2000 #最大请求数
daemonize = flaskweb.log #使进程在后台运行,记录日志
lazy-apps=true #各个进程都创建自己的app
virtualenv = /home/login_user/app #虚拟环境目录
运行uWsgi
uwsgi --ini myproject.ini
注意事项
- callable中app 指的是 flask 项目启动程序中定义的 flask name 的名字,并非py文件的名字
- 安装运行时会提示“chdir(): No such file or directory”错误,删除掉配置文件中的注释即可。
- 运行中会提示找不到数据库,主要因为uwsgi启动多进程时,会启动一个主进程初始化所有的app(其中包括数据库连接),然后将所有app复制到其他进程中。这就导致所有进程全部共用一个MySQL的连接。添加lazy-apps=true解决。
- 如果本机使用nginx,使用socket,如果通过frp,则选择http。
设置uwsgi自启动服务
创建 uwsgi.service 文件
在/etc/systemd/system目录下创建文件:
[Unit]
Description=uWSGI
After=network.target
[Service]
User=user
WorkingDirectory=/your/path/summary
#Environment=FLASKR_SETTINGS=/your/path/summary/env.cfg
ExecStart=/usr/local/bin/uwsgi --ini //your/path/summary/uwsgi.ini
[Install]
WantedBy=multi-user.target
启动、停止、重启、查看服务
sudo systemctl start uwsgi.service sudo systemctl stop uwsgi.service sudo systemctl restart uwsgi.service
加入、关闭系统自启动
sudo systemctl daemon-reload
sudo systemctl enable uwsgi.service
sudo systemctl disable uwsgi.service