pip install uwsgi
# 查看uwsgi版本号
uwsgi –version
如果服务器安装anconda,有可能安装不上去,建议使用以下命令:
conda install -c conda-forge uwsgi
创建test.py文件,并写下以下内容
def application(env, start_response):
start_response('200 OK', [('Content-Type','text/html')])
return [b"Hello World"]
通过uwsgi运行该文件
uwsgi --http :8001 --wsgi-file test.py
在我们通过Django创建web项目时,在子目录web下已经帮我们生成的 wsgi.py文件
所以,我们只需要再创建web_uwsgi.ini配置文件即可
当然,uwsgi支持多种类型的配置文件,如xml,ini等
此处,使用ini类型的配置
在项目目录下新建文件夹script, 在script 文件下新建uwsgi.ini文件
# 配置服务器的监听ip和端口,让uWSGI作为nginx的支持服务器的话,设置socket就行;
# 如果要让uWSGI作为单独的web-server,用http
#http = 0.0.0.0:8004
socket = 192.168.106.112:8000
# 配置项目目录(此处设置为项目的根目录)
chdir = /home/x/20180523_nginx/
# 配置入口模块 (django的入口函数的模块,即setting同级目录下的wsgi.py)
#wsgi-file = o1_app/wsgi.py
module = o1_app.wsgi
# 开启master, 将会多开一个管理进程, 管理其他服务进程
master = True
# 监听队伍最大长度,默认128
listen=128
# 服务器开启的进程数量
processes = 8
# 以守护进程方式提供服, 输出信息将会打印到log中
daemonize = uwsgi.log
# 服务器进程开启的线程数量
threads = 4
# 退出的时候清空环境变量
vacuum = true
# log, 可以控制是否前台运行
daemonize = /home/x/20180523_nginx/script/log_uwsgi.log
# 进程pid
pidfile = /home/x/20180523_nginx/script/uwsgi.pid
#修改python代码时,自动重启uwsgi服务
#py-autoreload = 1
接下来,切换到项目目录的script下,通过uwsgi命令读取myweb_uwsgi.ini文件启动项目
uwsgi --ini uwsgi.ini
运行成功后的截图如下, 注意查看uwsgi的启动信息,如果有错,就要检查配置文件的参数是否设置有误
再接下来要做的就是修改nginx.conf配置文件。vi /usr/local/nginx/conf/nginx.conf,添加新配置内容(在/var/log下新建文件夹nginx存放日志文件)
参考这篇文章nginx配置:
总结Nginx的安装、配置与设置开机自启
将uwsgi变成服务直接用systemctl进行管理。
创建service方法(如果没有system文件夹,先创建文件夹,否则vim会报错)
vim /usr/lib/systemd/system/uwsgi.service
[Unit]
Description=uwsgi-uwsgi-support
After=network.target
Before=nginx.service
[Service]
ExecStartPre=/bin/sleep 60
ExecStart=/usr/sbin/start_uwsgi.sh
ExecReload=/bin/kill -HUP ( ps -ep | grep uwsgi)
Type=forking
[Install]
WantedBy=multi-user.target
开机自启
systemctl enable uwsgi.service
创建其中的shell脚本
vim /usr/sbin/start_uwsgi.sh
#!/bin/bash -e
###BEGIN INIT INFO
# Provides: adbd
# Required-Start:
# Required-Stop:
# Default-Start:
# Default-Stop:
# Short-Description:
# Description: Linux ADB
### END INIT INFO
uwsgi --ini /root/app/sport/script/uwsgi_sport.ini
给脚本赋权
chmod +x /usr/sbin/start_uwsgi.sh
设置开机自启动
systemctl enable uwsgi.service
查看是否正确启动 systemctl list-unit-files |grep uwsgi 看下如下图就成功启动了
启动uwsgi:
systemctl start uwsgi.service
启动uWSGI服务器
$ uwsgi --ini uwsgi.ini
重启uWSGI服务器
$ sudo service uwsgi restart
查看所有uWSGI进程
$ ps aux | grep uwsgi
停止所有uWSGI进程
$ sudo pkill -f uwsgi -9
重启uwsgi服务
$ uwsgi --reload *.pid
停止uwsgi服务
$ uwsgi --stop *.pid
配置uwsgi.ini中的listen选项,需先增大该系统参数,然后再提高uwsgi的监听队列长度,原因是listen的队列长度不能超过系统参数规定的最大连接数
# 修改
sysctl -w net.core.somaxconn=32768
sysctl -w net.ipv4.tcp_max_syn_backlog=8192
# 查看是否修改成功
sysctl -a
若在容器内部修改内核参数需先配置docker-compose.yml 否则可能会出现sysctl: setting key "net.core.somaxconn": Read-only file system 的提示
# 增加
privileged: true
sysctl命令相关补充
作用:在运行时配置内核参数
常用:
# 写入配置
sysctl -w xxx=xxx
# 载入sysctl配置文件,若-p后未指定路径,则载入/etc/sysctl.conf
sysctl -p