nginx+uwsgi部署django详细步骤

为什么要写这篇文章?

        最近想把写好的django项目上线,于是就去网上寻找方案。但是发现怪的很,每个人有每个人不同的做法。终于自己摸索出来部署的流程。


处理流程

        

在这种方式中,我们的通常做法是,将nginx作为服务器最前端,它将接收WEB的所有请求,统一管理请求。nginx把所有静态请求自己来处理(这是NGINX的强项)。然后,NGINX将所有非静态请求通过uwsgi传递给Django,由Django来进行处理,从而完成一次WEB请求。大概关系如下图。
在这里插入图片描述


为什么选择nginx+uwsgi?

        

nginx轻量,属于反向代理服务器,他可以监听一个端口比如80,然后配置一个反向代理端口如8000。这样通过浏览器访问80端口,实际上是请求了8000端口的数据。这样能隐藏自己的真实端口。
uwsgi是一个web服务器,其实django+uwsgi就能工作。但是如之前所言nginx处理静态文件的能力更强。所以我们使用这套组合拳nginx+uwsgi,现在我们开始部署。

STEP0 先把你的项目跑起来

        笔者这里使用的是腾讯云上的学生服务器,要注意的一点就是:你得配置安全组的入站规则,不然项目运行起来怎么也访问不了。

STEP1 配置uwsgi

  • 安装

以Ubuntu/Debian 为例,先安装依赖包:

apt-get install build-essential python-dev
pip install uwsgi
  • 启动

以我自己的项目为例。项目结构大概是这个样子

在这里插入图片描述
我们现在进入wsgi.py同级目录下

uwsgi --http :9090 --wsgi-file wsgi.py

如果访问9090端口,如果项目正常运行,第一步就OK了。

  • xx.ini

用命令启动uwsgi是比较麻烦,而且不方便后面的一个维护和修改。

uwsgi 有多种配置可用:
ini/yaml/xml/json

从uwsgi的官方文档来看,貌似(我个人的理解)推荐用ini方式,所以下面的配置也都是基于ini的。

ini 格式说明:

1,ini配置为 key=value 形式

2,在ini配置文件里,#号为注释,

3,布尔值为 true 和 false

4,在命令行里,uwsgi myconf.ini 等价于 uwsgi --ini myconf.ini

新建一个xx.ini文件,放在哪里都是可以的。

在这里插入图片描述


对里面参数的一些解释:

chdir
 代表着项目的绝对路径

wsgi-file  
是wsgi相对chdir的一个路径,
他的真实路径是/Users/zhoumeng/Desktop/test_two/mysite/mysite/wsgi.py

==注意==:socket
uwsgi和Nginx交互需要使用socket参数,即使用TCP协议,WSGI和uwsgi协议都在TCP协议之上。
socket参数也可以配置为网络地址,如socket=127.0.0.1:8080,但如果Nginx和uWSGI同在一个服务器上,可以使用socket文件的形式。

=启动方式:

uwsgi xx.ini 或 uwsgi --ini xx.ini

uwsgi官网关于ini文件的介绍可供参考


STEP2 配置nginx

  • 安装

参考
菜鸟教程这里不进行赘述。
在这里插入图片描述

当你看到这张图,说明安装成功了。

  • nginx.conf

1. 找到nginx.conf所在位置
nginx -h

在这里插入图片描述
找到你nginx.conf所在位置,根据不同操作系统,存放的位置不同。

2. 编辑nginx.conf

在http{

    server{
}


            }下修改成如下图。

在这里插入图片描述

uwsgi_params就在nginx.conf 同目录下。

uwsgi_pass 刚才xx.ini里socket就派上用场啦。

总结一下:现在流程就是用户访问80端口,nginx和uwsgi通过8080端口来进行交互,
当然生产环境别用8080端口,端口容易被占用。

关于nginx.conf对uwsgi的详细介绍

启动
uwsgi xx.ini 
注意一下nginx是否还在运行。如果还在运行
sudo nginx -s stop
sudo nginx

STEP3 最后的工作

        现在我们的工作完成了一大部分,现在去访问/admin。有没有觉得页面变丑了??

        通常来说,你会有两种静态资源/media/开头的链接和/static/开头的。static用来处理一些网站原始图片,视频,js,css文件那么如何关闭让Django处理/static/开头的文件呢,很简单,在setting.py中将DEBUG值改为False,这时,Django就不去处理/static/文件了。

        那么/media/呢?一般来说,用户上传的图片,我们会保存起来,在网页上显示时候就用/media/,在setting.py中设置。

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)

这里的意思是在DEBUG=True时,会解析/media/文件,文件存放的位置是第二个参数。
如此一来当即在部署为生产环境时,只需要把DEBUG改为False,Django就不会去处理static和media了。

收集静态文件
运行python3 manager.py collectstatic

在之前先在setting.py中设置STATIC_ROOT = os.path.join(BASE_DIR, '../collectedstatic') 
这样收集的静态文件就都放进上面的目录里了。

配置nginx解析静态文件

同样,nginx.conf
首先,在文件顶部加入
user root onwer
声明让root 用户跑nginx,否则访问静态文件可能提示没有权限
其次,在上面说的配置文件location /前加入以下带内容

    location /static/ {
        autoindex on;
        alias /Users/zhoumeng/Desktop/test_two/collectedstatic/;

    }

    location /media/ {
        autoindex on;
        alias /Users/zhoumeng/Desktop/test_two/mysite/media/;
    }

大功告成,重启nginx应该就没有问题了。

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Linux系统上部署Django + nginx + uWSGI的步骤如下: 1. 安装必要的软件 在Linux系统上安装必要的软件包,包括Python、pip、nginxuWSGI等。 2. 创建Django项目 使用Django创建一个新项目或使用现有的Django项目。 3. 配置uWSGIDjango项目的根目录下创建一个uwsgi.ini文件,用于配置uWSGI。示例配置如下: ``` [uwsgi] # 指定运行模式为WSGI http = :8000 # 指定Django应用的wsgi模块 wsgi-file = myproject.wsgi # 指定进程数 processes = 4 # 指定线程数 threads = 2 # 指定静态文件路径 static-map = /static=/path/to/static # 指定日志路径 logto = /path/to/logfile ``` 其中,http参数指定了监听的端口号,wsgi-file参数指定了Django应用的wsgi模块,processes参数指定了进程数,threads参数指定了线程数,static-map参数指定了静态文件的路径,logto参数指定了日志文件的路径。 4. 配置nginxnginx的配置文件中添加以下内容: ``` server { listen 80; server_name example.com; access_log /var/log/nginx/access.log; error_log /var/log/nginx/error.log; location / { uwsgi_pass 127.0.0.1:8000; include uwsgi_params; } location /static { alias /path/to/static; } } ``` 其中,server_name指定了域名,access_log和error_log指定了日志文件的路径,uwsgi_pass指定了uWSGI的地址和端口号,include指定了uWSGI的参数。 5. 启动uWSGI服务 使用以下命令启动uWSGI服务: ``` uwsgi --ini uwsgi.ini ``` 6. 启动nginx服务 使用以下命令启动nginx服务: ``` sudo service nginx start ``` 这样就完成了Django + nginx + uWSGI部署。可以通过访问该网站的域名来验证是否部署成功。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值