一、背景描述
- python部署环境为python3.6,由于apt-get install uwsgi-plugin-python3,使用python38_plugin.so,python3.8中对应python3.6使用库不兼容,运行不起来
sudo apt-get install uwsgi
sudo apt-get install uwsgi-plugin-python3
- 将18.04下python36_plugin.so复制,修改软连接,重启uwsgi也不生效
scp -P 36000 jtserver@172.31.x.x:/home/jtserver/python36_plugin.so .
sudo cp python36_plugin.so /usr/lib/uwsgi/plugins/
cd /etc/alternatives/uwsgi-plugin-python3
sudo mv uwsgi-plugin-python3 uwsgi-plugin-python3.bak # 备份旧文件
sudo ln -sv /usr/lib/uwsgi/plugins/python36_plugin.so /etc/alternatives/uwsgi-plugin-python3
sudo service uwsgi restart
二、获取uwsgi安装文件
- jtserver@work:~$ wget http://projects.unbit.it/downloads/uwsgi-latest.tar.gz
三、编译安装
- 解压文件
tar -zxvf uwsgi-latest.tar.gz
cd uwsgi-2.0.20
- 执行编译,使用对应项目环境python3.6编译
python3.6 uwsgiconfig.py --build
python3 setup.py install`
- 查询目录下文件,已经多出一个uwsgi执行文件
四、配置系统环境
sudo mv uwsgi-2.0.20 /usr/local/lib
cd /usr/local/lib/uwsgi-2.0.20
sudo cp uwsgi /usr/local/bin/
sudo ln -sv /usr/local/bin/uwsgi /usr/bin/uwsgi
五、配置运行环境
- 将uwsgi挂载到supervisor并启动
sudo vim /etc/supervisor/conf.d/uwsgi_emperor.conf
[program:uwsgi_emperor]
directory=/usr/local/bin
command=uwsgi --emperor /etc/uwsgi/vassals --uid www-data --gid www-data
autostart=true
autorestart=true
startsecs=10
stopwaitsecs=600
killasgroup=true
numprocs=1
user=jtserver
redirect_stderr=true
stdout_logfile=/var/log/supervisor/uwsgi_emperor.log
stdout_logfile_backups=15
stdout_logfile_maxbytes=300MB
- 将python项目配置到uwsgi (若没有vassals则手动新建),配置前请处理好所需目录路径(存放log路径等文件夹新建)
sudo mkdir /etc/uwsgi/vassals
cd /etc/uwsgi/vassals
sudo vim <your-project>.ini
[uwsgi]
socket = /tmp/<your-project>.sock
chdir = /home/jtserver/vhost/<your-project>/
module = manage
callable = app
workers = 2
master = True
vacuum = True
# plugins = python3
enable-threads = True
threads = 20
max-requests = 50000
disable-logging = True
virtualenv = /home/jtserver/virtualenv/<your-project>/
touch-reload = /home/jtserver/vhost/<your-project>/reload
chmod-socket = 666
harakiri = 10 # 如果一个请求花费的时间超过了这个harakiri超时时间10秒,那么这个请求都会被丢弃,并且当前处理这个请求的工作进程会被回收再利用
ignore-write-errors = True
#uwsgi后台运行,日志写到uwsgi.log
daemonize = /home/jtserver/log/<your-project>/uwsgi.log
六、参考
- http://t.zoukankan.com/pengpengdeyuan-p-14663112.html