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

原文地址:https://www.cnblogs.com/fawaikuangtu123/p/9687363.html