Nginx+Uwsgi+Django以及解决的一些问题
1.pip3 install uwsgi,项目目录路径:/data/my_env1/monitor1/,
项目名:monitor1,app名:show
测试启动: ln -s /data/linkdood/im/vrv/python36/bin/uwsgi /user/bin/uwsgi uwsgi --http 192.168.165.10:8000 --file monitor1/wsgi.py --static-map=/static=static 访问http://192.168.165.10:8000 ,页面可以正常访问,表示项目启动成功。
2.使用uwsgi配置文件启动django项目:
在项目同级目录创建script目录,用于存放配置文件、生成的pid、socket,
创建uwsgi.ini,内容如下:
[uwsgi] chdir=/data/my_env1/monitor1 wsgi-file=/data/my_env1/monitor1/monitor1/wsgi.py socket=/data/my_env1/monitor1/script/uwsgi.sock workers=4 pidfile=/data/my_env1/monitor1/script/uwsgi.pid http=192.168.165.10:8000 static-map=/static=/data/my_env1/monitor1/static uid=root gid=root master=true vacuum=true enable-threads=true post-buffering=4096 daemonize=/data/my_env1/monitor1/script/uwsgi.log
uwsgi常用的三个命令,注意这里的停止和启动,文件后缀是pid不是ini
uwsgi --ini uwsgi.ini uwsgi --stop uwsgi.pid uwsgi --reload uwsgi.pid 重载配置 至此,uwsgi+django就完美结合了,但是,光有uwsgi还不够,uwsgi处理动态请求能力高, 但对于静态请求(如static文件,css,js文件等)处理能力差,此时就要结合nginx一起使用
3.centos7用yum下载较新的nginx
# vi /etc/yum/repo.d/nginx.repo [nginx] nginx=nginx repo baseurl=http://nginx.org/packages/centos/7/$basearch/ gpgcheck=0 enabled=1 # yum -y install nginx 查看版本:nginx -v 启动:nginx 停止:nginx -s stop 重启:nginx -s reload
在nginx配置文件中添加内容如下:
# vi /etc/nginx/conf.d/default.conf listen 80; server_name 192.168.165.10; location / { include uwsgi_params; uwsgi_pass unix:/data/my_env1/script/uwsgi.sock; } location /static { alias /data/monitor1/static; }
修改Django项目的settings配置,DEBUG = False,此时访问页面会发现无法加载static文件,所以得有以下步骤:
# mkdir -p /data/monitor1/static 在settings文件中添加一行 STATIC_ROOT = '/data/monitor1/static' # python manage.py collectstatic 但是参考的这篇博客把monitor1目录给了777,我没给,怕不安全, 就按照上面的做了,如果后续有什么错的话,再参考这样的做法. # cd /data/ # mkdir monitor1 # chmod 777 monitor1 # cd monitor1/ # mkdir static
4.让nginx去处理图片:
location /media { autoindex on; alias /data/monitor1/media; }
在没有nginx,自己做调试DEBUG=Ture时,想让Django去处理图片,一般这么写:
MEDIA_URL = '/media/' MEDIA_ROOT = os.path.join(BASE_DIR, 'media/') 然后在url.py中添加: from django.conf import settings from django.conf.urls.static import static if settings.DEBUG: urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) 我觉得在settings.py中,MEDIA_ROOT可以写绝对路径,虽然我没试过,但应该可以; 这样写的:MEDIA_ROOT = os.path.join(BASE_DIR, '../media') 也就是在图片存放在项目目录的上一层.
参考博客地址:https://blog.csdn.net/Duke10/article/details/80971453