Nginx+uWSGI部署python服务
1 python 安装 uWSGI
参考: https://www.runoob.com/python3/python-uwsgi.html
1.1 通过pip 命令安装:
pip install uwsgi
1.2 下载安装脚本:
curl http://uwsgi.it/install | bash -s default /tmp/uwsgi
将 uWSGI 二进制安装到 /tmp/uwsgi ,你可以修改它。
1.3 源代码安装:
wget http://projects.unbit.it/downloads/uwsgi-latest.tar.gz
tar zxvf uwsgi-latest.tar.gz
cd uwsgi-latest
make
安装完成后,在当前目录下,你会获得一个 uwsgi 二进制文件
2 配置uWSGI的xml配置文件 下面示例:myapp.xml
<uwsgi>
<pythonpath>/home/dbfor/myapp</pythonpath> # 运行文件包路径
<module>manage.main</module> # manage是python程序的名称, main是manage下得main执行方法
<callable>app</callable>
<socket>0.0.0.0:5000</socket> # python服务要运行的ip和端口
<buffer-size>40960</buffer-size>
<listen>64</listen>
<master/>
<daemonize>/data/serverlog/myapp.log</daemonize> # 输出日志路径
<pidfile>/home/dbfor/myapp/uwsgi.pid</pidfile> # pid文件
<processes>8</processes> # 启动的线程数
<memory-report/>
</uwsgi>
3 uWSGI运行、重启、停止
参考: https://www.jianshu.com/p/c3b13b5ad3d7
# 先运行python虚拟环境,这里假定虚拟环境在env目录下
. env/bin/activate
通过uwsgi --help可以查看得到:
-x|--xmlconfig load config from xml file
-x|--xml load config from xml file
--ini load config from ini file
-y|--yaml load config from yaml file
-y|--yml load config from yaml file
3.1 运行,通过指定运行配置文件
uwsgi -x myapp.xml
3.2 重启
# 先查询uwsgi程序运行的主线程ip(pid)
ps -ef | grep myapp
uwsgi --reload uwsgi.pid # 或者通过kill -HUP pid 重启
3.3 停止
uwsgi --stop uwsgi.pid # 或者通过kill -9 pid强制退出
4 Nginx 配置uWSGI反向代理接口
4.1 可以选择声明自己的一些uWsgi获取参数 uwsgi_params
uwsgi_param QUERY_STRING $query_string;
uwsgi_param REQUEST_METHOD $request_method;
uwsgi_param CONTENT_TYPE $content_type;
uwsgi_param CONTENT_LENGTH $content_length;
uwsgi_param REQUEST_URI $request_uri;
uwsgi_param PATH_INFO $document_uri;
uwsgi_param DOCUMENT_ROOT $document_root;
uwsgi_param SERVER_PROTOCOL $server_protocol;
uwsgi_param REQUEST_SCHEME $scheme;
uwsgi_param HTTPS $https if_not_empty;
uwsgi_param REMOTE_ADDR $remote_addr;
uwsgi_param REMOTE_PORT $remote_port;
uwsgi_param SERVER_PORT $server_port;
uwsgi_param SERVER_NAME $server_name;
4.2 在nginx的配置文件中,配置如下http的sever参数
server {
listen 80;
server_name xxx.dbfor.com;
location ^~ /test/ {
rewrite /test/(.+)$ /$1 break; # 添加请求地址的字段判定和重定向请求
include uwsgi_params;
uwsgi_pass 127.0.0.1:8080; # uWsgi的ip地址和端口
}
access_log /data/nginx_log/test.log main; # 运行日志
error_log /data/nginx_log/test_error.log warn; # 错误日志
}
通过上面的配置,接下来可以通过 http://xxx.dbfor.com/test/…… 的方式来访问对应的接口
4.3 Nginx操作命令
# 检查配置是否正确
nginx -t -c /etc/nginx/nginx.conf
# 启动
nginx -s start
# 退出
nginx -s stop
# 重启
nginx -s reload