Django部署方法以及Nginx,uWSGI,Django部署原理

本文详细介绍了如何使用Nginx、uWSGI和Django进行部署配置,包括uWSGI作为Web服务器的角色、WSGI规范以及Django作为应用框架的功能。部署步骤涉及安装uWSGI和Nginx,设置配置文件,启动服务,重点强调了静态文件的处理和配置。最后,提到了最佳实践,确保静态文件路径配置正确。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

nginx + uwsgi + Django 部署配置方案

  • nginx, uwsgi, Django 三者关系
  • 配置方法

1. nginx + uwsgi + Django 配置方案原理

原理图

浏览器发起web请求 < ---- > nginx接受到浏览器请求 < ----- > uwsgi 处理请求 < ----- > 经过wsgi请求django

#### Nginx 作为反响代理服务器

负责静态资源处理,动态请求转发 (客户端发送过来的http进行解包, 分析),以及响应结果的回传

静态资源的处理: 如果请求的是静态资源, 直接返回静态路径下的资源

如果是动态页面请求: 比如牵涉到数据库数据的调用的问题, 转接到uwsgi

uWSGI作为Web服务器

uWSGI在 Nginx + uWSGI + Django 的配置过程中 担任中间件的任务 负责转发Nginx请求并发送给Django并处理后转发回Nginx

uWSGI在 uWSGI + Django中 还承担web服务器的作用

uWSGI 将接收到的包进行处理,并转发给wsgi,
wsgi根据请求调用django工程的某个文件或函数(我们写的APP),处理完后django将返回值交给wsgi,wsgi将返回值进行打包,转发给uWSGI,uWSGI接收后转发给nginx,nginx最终将返回值返回给客户端(如浏览器)。

实现了http, uwsgi, WSGI等协议

WSGI

python web 中应用程序和后端服务器之间的规范,使得 WebApp和WebServer进行通信的规范, 规定了一个application,来调用特定的APP

在django项目模板生成的时候 一个默认的wsgi.py文件.

Django作为应用框架

MVC框架, 用来实现数据库调用, 模板显示等功能 (我们主要在这一块进行开发)

2. 部署配置方法 (conda)

主要参考的网页:
参考1
参考2
django静态文件参考

安装uWSGI

这里需要装两次 uwsgi

conda install uwsgi

source activate django

conda install uwsgi

配置uWSGI对应的配置文件

[uwsgi]
socket = 127.0.0.1:7999 # 内部映射到nginx的端口 
chdir = /项目的绝对路径/mysite/ #项目的资源路径
wsgi-file = PV_Moniter/wsgi.py # wsgi.py所在的位置 相对项目路径的位置
processes = 4
threads = 2
stats = 127.0.0.1:9191
master=True
pidfile=uwsgi.pid
daemonize=uswgi.log

安装nginx
cd /usr/local/

wget http://nginx.org/download/nginx-1.13.7.tar.gz

// 解压

tar -zxvf nginx-1.13.7.tar.gz

cd ./nginx-1.13.7/

sudo ./configure 
sudo make 
sudo make install

cd ../naginx/conf/

sudo vim nginx.conf

安装完nginx之后就开始配置nginx的配置文件


events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    server {
        listen       80;  # 80 http协议  443 https协议
        server_name  127.0.0.1:80;  # 服务器的域名或者ip地址
        charset utf-8;
        location / { # 这部配置要和内部wsgi配置的一样
           include uwsgi_params;
           uwsgi_pass 127.0.0.1:7999; # uwsgi 对应的内部端口 因为他是映射到内部wsgi的
           uwsgi_param UWSGI_SCRIPT mysite.wsgi;  # wsgi对应的文件模块, 
           uwsgi_param UWSGI_CHDIR /项目绝对路径/mysite/; #项目路径 这个mysite是最大的项目路径 而不是mysite下的mysite文件夹!!!
           
        }
        location /static/ {
        alias /项目的绝对路径/mysite/static/; #静态资源路径
        }
    }
}

启动uwsgi和nginx

uwsgi -ini uwsgi.ini

sudo /usr/local/nginx/sbin/nginx

// 或者
sudo /usr/local/nginx/sbin/nginx -s reload

部署完成

访问配置环境我们配置的80端口即可!!!一定是我们配置的80 对外nginx代理的端口 而不是对内wsgi的7999端口

因为uWSGI本身不处理静态文件 所以一定要通过80端口才能访问

另外, 如果出静态文件找不到的情况,看一下 django中的路径配置

STATIC_URL = '/static/'
# STATIC_ROOT = os.path.join(BASE_DIR, 'common_static')
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
#
# 公共的 static文件  js 文件放在这里 公共的静态文件放在这里, 
# STATICFILES_DIRS = [
#     os.path.join(BASE_DIR, "static")
# ]

这里需要对STATICFILES_DIRS 与 STATIC_ROOT两个路径进行介绍

STATICFILES_DIRS:开发过程中放置静态文件
STATIC_ROOT: 上线后的文档目录执行python manage.py collectstaic 所有静态文件收集的目录

上述的目录 不能由包含关系
最佳实践

STATIC_URL = '/static/'
# 开发阶段放置项目自己的静态文件
STATICFILES_DIRS = (
    os.path.join(BASE_DIR, 'staticfiles'),
)
# 执行collectstatic命令后会将项目中的静态文件收集到该目录下面来(所以不应该在该目录下面放置自己的一些静态文件,因为会覆盖掉)
STATIC_ROOT = os.path.join(BASE_DIR, 'static')

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值