如何用Nginx部署Django

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何用Nginx部署Django相关的知识,希望对你有一定的参考价值。

如果你在windows上开发的django项目。部署的话,需要分三步。
第一步:在linux下下载python用的依赖包,搭建python环境。将windows下的项目复制到linux下,使用django自带服务进行启动。
第二步:下载uwsgi模块并且编写配置文件来替代django自带的服务模块。
第三步:下载nginx包,编译安装。然后创建配置文件,配置nginx启动django项目的信息。然后访问即可。
参考技术A 我们假设你将会把Nginx程序日志放到你的目录/home/work/var/test/logs/下,请确保该目录存在。
我们假设你的Django的static目录是/home/work/src/sites/testdjango1/testdjango/collectedstatic/ , media目录是/home/work/src/sites/testdjango1/testdjango/public/media/,请确保这些目录存在。
我们假设你的域名是 www.you.com (在调试时你可以设置成你的机器IP)
我们假设你的域名端口是 80(在调试时你可以设置一些特殊端口如 8070)
基于上面的假设,我们为conf/nginx.conf添加以下配置
server

listen 80;
server_name you.com;
access_log /home/work/var/test/logs/access.log;
error_log /home/work/var/test/logs/error.log;

#charset koi8-r;

#access_log logs/host.access.log main;

location /
include uwsgi_params;
uwsgi_pass 127.0.0.1:8077;


#error_page 404 /404.html;

# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html
root html;


location /static/
alias /home/work/src/sites/testdjango1/testdjango/collectedstatic/;
index index.html index.htm;


location /media/
alias /home/work/src/sites/testdjango1/testdjango/public/media/;



在上面的设置后,可以让Nginx来处理静态文件(/static/ 和 /media/ )。非静态文件请求Nginx会发给 socket 8077,然后让uWSGI来进行处理。本回答被提问者和网友采纳

Django部署Nginx-静态文件配置

django-部署nginx-静态文件配置

nginx 配置静态文件路径

  • 创建新路径-主要存放Django所有静态文件 如: /home/jerome/项目名_static/

  • 在Django settings.py 中添加新配置

    STATIC_ROOT = ‘/home/jerome/项目名_static/static‘
    # 此配置路径 存放所有正式环境中需要的静态文件
    
  • 进入项目,执行 python3 manage.py collectstatic

    执行该命令后,Django将项目中所有静态文件 复制到 STATIC_ROOT 中 ,包括Django内建的静态文件【如admin后台的样式】

  • Nginx配置中添加新配置

# file : sudo vim /etc/nginx/nginx.conf
# 新添加location /static 路由配置,重定向到指定的 第一步创建的路径即可
server {
...
location /static {
# root 第一步创建文件夹的绝对路径,如:
root /home/jerome/项目名_static;
}
...
}

检查一下是否语法错误 sudo nginx -t

重启 sudo service nginx restart/sudo /etc/init.d/nginx restart

django 静态文件 部署到nginx服务器 相关问题

项目目录下的 setting.py 文件

STATIC_URL = "/static/"? 表示在URL里通过static访问静态资源,django利用STATIC_URL来让浏览器可以直接访问静态文件。

STATICFILES_DIRS

STATICFILES_DIRS =?(

os.path.join(BASE_DIR, ‘common_static‘),

)

该条代码不是必须的,如果加上,则公共静态文件存放在?STATICFILES_DIRS目录下。

STATIC_ROOT

STATICFILES_ROOT =?(

os.path.join(BASE_DIR, ‘static/‘),

)

在部署的时候 执行collectstatic 命令后,会将项目中各个APP目录下的static文件夹以及STATICFILES_DIRS文件夹内的静态文件全部复制到?STATIC_ROOT 所指向的文件夹。

一 、在开发时使用runserver 0.0.0.0:80 启动时,django寻找静态文件按以下顺序查找,查到了就不再继续往下查找:

1、查找STATICFILES_DIRS对应的目录下的静态文件(如果设置了STATICFILES_DIRS)

2、查找各APP目录下的Static文件夹下的静态文件

二、使用Nginx + uWSGI?部署时,Nginx服务器接管了静态文件的响应,所以寻找静态文件的顺序为

1、静态文件按照在Nginx 设置的静态目录下查找。

Nginx 设置的静态目录
总结、可以看出,当使用Nginx + uWSGI?部署时,就不再从STATICFILES_DIRS以及各APP目录下的Static文件夹中寻找静态文件了。而是直接从Nginx 设置的静态目录下查找,所以我们需要将所有的静态文件复制到Nginx 设置的静态目录下,庆幸的是,django有一个方便的做法,那就是设置好setting.py里的?STATIC_ROOT,然后在终端执行 python manage.py collectstatic,就将所有的静态文件全部复制到STATIC_ROOT目录下了。


以上是关于如何用Nginx部署Django的主要内容,如果未能解决你的问题,请参考以下文章

宝塔面板如何用uwsgi与nginx快速部署Django项目

手拉手教你如何用docker部署mysql redis nginx tomcat

手拉手教你如何用docker部署mysql redis nginx tomcat

如何用宝塔面板部署HTTPS/SSL证书

CentOs Linux 对于Django uwsgi + Nginx 的安装与部署

如何用nginx发包