背景:
服务器上面有需要部署两个django项目,其中一个python3版本,一个是python2版本,
怎么使用这两个版本的项目使用uwsgi共存呢?
思路:
既然都是一个是使用python2 的wsgi,一个使用的是python3版本的uwsgi。
那么就可用先安装两个uwsgi,之后对uwsgi进行不同版本重名了即可
步骤:
安装uwsgi
pip2 install uwsgi
pip3 install uwsgi
由于我的系统默认自带pip2,和python2,
然后python2版本安装的uwsgi默认是在
这个目录的
/usr/bin/uwsgi
这就说明直接运行uwsgi运行的python2版本的项目。
我的python3版本的uwsgi,pip安装在这个目录
/usr/local/python3/bin
于是可用对python3版本的uwsgi进行一个软连接映射
ln -s /usr/local/python3/bin/uwsgi /usr/bin/uwsgi3
这样就可以运行python3版本的而项目了
uwsgi3 --ini demopy3.ini
运行python2版本的的可以这样操作
uwsgi --ini demopy2.ini
这样就实现了版本共存了
参考:
https://blog.51cto.com/leizhu/2065394
uswgi配置
[uwsgi]
chdir = /home/mysite # 你的项目目录
home = /home/mysite_env # 如果有虚拟环境,则需要指定虚拟环境目录; 没有则注释掉
pythonpath = /usr/local/python3 # 指定python路径; 可注释
module = mysite.wsgi:application # 指向自己Django项目目录下mysite目录下的wsgi文件
master = True
processes = 4 # 使用进程数
harakiri = 60 # 最大超时时间
max-requests = 5000 # 最大请求数,到了后就会自动重启
socket = 127.0.0.1:8001 # socket连接地址和端口,和之前nginx配置一致
#http = 127.0.0.1:800 # socket和http二选一
pidfile = /home/mysite_uwsgi/master.pid # 在失去权限前,将pid写到指定的pidfile文件中
daemonize = /home/mysite_uwsgi/mysite.log # 使进程在后台运行,并将日志打到指定的日志文件或者udp服务器
# chmod-socket = 664 # 如果没有权限访问uWSGI的socket,这里可以设置权限
vacuum = True # 服务退出或重启,自动删除pid和socket文件
上面使用的socket方式nginx进行通讯,socket需要配合nginx使用,
如果直接访问8001端口,会报错
invalid request block size: 21573 (max 4096)...skip
解释:
使用nginx来把请求发送给uwsgi。所以uwsgi被配置成使用socket方式(为tcp协议)进行通信。如果打开浏览器访问uwsgi指定的端口,那么浏览器请求uwsgi的方式为http协议,而不是socket方式。所以就导致uwsgi的log文件中打出上面的错误信息。
如果需要临时调试,不经过nginx,可用使用使用http方式,
修改里面内容把socket=127.0.0.1:8001替换成http=127.0.0.1:8001
参考:
链接: https://blog.csdn.net/kriszhang/article/details/68941829
uwsgi命令
nginx测试命令:nginx -t
查看uwsgi进程:ps -aux | grep uwsgi
正常关闭uwsgi进程:uwsgi --stop /home/mysite_uwsgi/master.pid
强制关闭全部uwsgi进程:ps -aux | grep uwsgi |awk '{print $2}'|xargs kill -9
重新加载uwsgi:uwsgi --reload /home/mysite_uwsgi/master.pid
参考文档:
(Django官网)https://docs.djangoproject.com/en/2.1/howto/deployment/wsgi/uwsgi/
(uwsgi中文)https://uwsgi-docs-zh.readthedocs.io/zh_CN/latest/tutorials/Django_and_nginx.html
(uwsgi英文)https://uwsgi.readthedocs.io/en/latest/tutorials/Django_and_nginx.html
(自强学堂)https://code.ziqiangxuetang.com/django/django-nginx-deploy.html
参考https://www.jianshu.com/p/b91447672b35
内含根据不同配置文件部署django的介绍
nginx 配置
未完待续
见到配置
server {
listen 80;
#server_name www.baidu.cn;
location / {
include uwsgi_params;
uwsgi_pass 172.0.0.1:4000;
}
}