坑1、pip install uwsgi安装uwsgi到系统环境(非虚拟环境)执行 uwsgi --http :8001 --module myblog.wsgi时报找不到uwsgi命令
解决:pip 安装的,命令文件放在/usr/local/python3.7/bin/uwsgi,需要添加到系统可找到的路径下,添加软连接:ln -s /usr/local/python3.7/bin/uwsgi /usr/bin/uwsgi
坑2、解决问题1后执行uwsgi --http :8001 --module myblog.wsgi,报ModuleNotFoundError: No module named ‘django‘
解决:uwsgi是安装在系统环境,而django是安装在虚拟环境,需要指定虚拟环境,用这条语句代替uwsgi --http :8001 --chdir /root/myblog_proj/myblogyblog --home=/root/.Envs/myblog --module myblog.wsgi,解决方案来自:https://code.ziqiangxuetang.com/django/django-nginx-deploy.html
3、Nginx已经重新安装(之前源码安装,已卸载),使用apt-get install nginx安装,配置文件,启动停止方式参考:https://www.cnblogs.com/EasonJim/p/7806879.html
Nginx安装后所有文件(启动文件,配置文件)都是默认的,本人没有移动什么东西
启动Nginx:/usr/sbin/nginx
停止Nginx:ps aux|grep nginx查看进程id,然后 kill -9 进程id
配置文件路径:/etc/nginx/
坑4、按照教程在/root/myblog_proj/conf下新建myblog_nginx.conf(这个放哪里无所谓,好找就行,不过uwsgi的启动配置文件uwsgi.ini和Nginx的配置文件myblog_nginx.conf总共两个都统一放在这个文件夹下)并修改后,新建软连接到/etc/nginx/conf.d(即执行 ln -s /root/myblog_proj/conf/myblog_nginx.conf /etc/nginx/conf.d/),使用service nginx restart重启Nginx时,发生如下报错:
解决:不能以service nginx restart或service nginx start启动Nginx,权限问题,需要用第三条中的方式启动和停止(后面找下解决方案,这种启动停止有点麻烦,可能是myblog_nginx.conf放在root下有权限问题,所以以后部署最好不要部署在root下,安全问题和权限问题都很麻烦)
5、uwsgi的安装启动和停止:
安装:pip install uwsgi
查看uwsgi的进程:
启动:uwsgi --ini uwsgi.ini(自己写的配置文件,在/root/myblog_proj/conf下)
重启:使用pkill -f uwsgi会直接并重启(杀死后直接重启??)。pkill详解:http://www.mamicode.com/info-detail-2315063.html
停止:pkill -f uwsgi -9(这个不会重启,直接杀死)
uwsgi的日志在/var/log/uwsgi/myblog.log中(这个路径是在配置文件中配置的)
6、至于为什么把配置文件软连接到/etc/nginx/conf.d/就能执行该配置文件,我也不知道,参考一下这篇文章:https://www.cnblogs.com/jenkin1991/p/8301983.html(nginx下面有个conf.d和sites-enabled文件夹,按照uwisg官网,就是把软连接到sites-enabled文件夹下,好像效果一样:https://uwsgi.readthedocs.io/en/latest/tutorials/Django_and_nginx.html)
坑7:好不容易可以访问网站后,发现无法加载静态文件,查看/var/log/nginx/error.log发现很多permission denied。
解决,整个django工程放在root目录下(静态文件也都是collect到root下),Nginx加载静态文件没有权限,百度方案,在/etc/nginx/nginx.conf第一行改为 user root; 问题解决
8、整个配置过程,熟悉各个步骤是按照uwsgi官网:https://uwsgi.readthedocs.io/en/latest/tutorials/Django_and_nginx.html进行的,根据官网循序渐进地实现它提供的案例,能大体理解Nginx和uwsgi以及django本身提供的服务器各扮演什么角色,以及Nginx和uwisg之间交互关系。具体配置是按照http://projectsedu.com/这篇博文来(这其实也是按照uwisg官网配置的,主要不同感觉就是myblog_nginx.conf建立软连接时放的位置不同)和https://www.bilibili.com/video/av56419126/?p=88视频这两集视频。都结合这看下,遇到坑百度一下
9、另外一个参考资料页比较有参考价值,django官网:https://docs.djangoproject.com/en/2.2/howto/deployment/wsgi/uwsgi/
10、启动uwsgi时就指定了虚拟环境路径,所以用uwsgi启动项目不需要在虚拟环境中?(目前不是在虚拟环境中启动的uwsgi)
原文地址:https://www.cnblogs.com/olivertian/p/11192535.html