python2+python3+django+uwsgi+nginx共存

背景:

服务器上面有需要部署两个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;
  }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章