Linux/Deepin环境下部署Nginx+uwsgi+Django,使产品项目上线

前言

最近这段时间想着把Django在学一学,就从网上找了个几年前的项目,收获颇丰,这篇博客就是记录我在最后部署项目上线的时候踩过的一些坑。说的不明白的地方还请各位指出,免得误人子弟。(备注:在部署前,大家一定先让自己的Django能够在Linux/Deepin跑起来。)

Linux/Deepin

这边的话就长话短说了,这俩系统的话在平常上实验课的时候机房都是Linux的,但是Deepin这款系统相比较Linux来说的话特别华丽,而且功能的话不比Linux弱,所以就在虚拟机中装了Deepin,具体安装的话百度上边都有的,这边就不在一一赘述,大家可以看下页面。在这里插入图片描述

Nginx和uwsgi的关系

想要安装Nginx和uwsgi之前,我想说让大家先了解这二者之间的关系,因为只有你更加了解他们之间的关系,以后的部署和操作大家看起来就不会有这么多的疑问。(这块很重要一定要看,别嫌多,对以后你开发来说很有帮助)

uwsgi

uWGSI:是一个web服务器,或者wsgi server服务器,他的任务就是接受用户请求,由于用户请求是通过网络发过来的,其中用户到服务器端之间用的是http协议,所以我们uWSGI要想接受并且正确解出相关信息,我们就需要uWSGI实现http协议,没错,uWSGI里面就实现了http协议。所以现在我们uWSGI能准确接受到用户请求,并且读出信息。现在我们的uWSGI服务器需要把信息发给Django,我们就需要用到WSGI协议,刚好uWSGI实现了WSGI协议,所以。uWSGI把接收到的信息作一次简单封装传递给Django,Django接收到信息后,再经过一层层的中间件,于是,对信息作进一步处理,最后匹配url,传递给相应的视图函数,视图函数做逻辑处理…后面的就不叙述了,然后将处理后的数据通过中间件一层层返回,到达Djagno最外层,然后,通过WSGI协议将返回数据返回给uWSGI服务器,uWSGI服务器通过http协议将数据传递给用户。这就是整个流程。

这个过程中我们似乎没有用到uwsgi协议,但是他也是uWSGI实现的一种协议,鲁迅说过,存在即合理,所以说,他肯定在某个地方用到了。我们过一会再来讨论

我们可以用这条命令:python manage.py runserver,启动Django自带的服务器,具体叫什么名字,我真不知道(知道的可以留言)。DJango自带的服务器(runserver 起来的 HTTPServer 就是 Python 自带的 simple_server)。是默认是单进程单多线程的,对于同一个http请求,总是先执行一个,其他等待,一个一个串行执行。无法并行。而且django自带的web服务器性能也不好,只能在开发过程中使用。于是我们就用uWSGI代替了。但是uWSGI也不够好,为什么看下图。

为什么有了uWSGI为什么还需要nginx?

因为nginx具备优秀的静态内容处理能力,然后将动态内容转发给uWSGI服务器,这样可以达到很好的客户端响应。支持的并发量更高,方便管理多进程,发挥多核的优势,提升性能。这时候nginx和uWSGI之间的沟通就要用到uwsgi协议。
嫌弃上边文字多的一定要看图!!一定要看图!!一定要看图!!
在这里插入图片描述在这里插入图片描述在这里插入图片描述

Nginx安装

在终端下输入sudo apt-get install nginx,我这里已经安装过了,大家安装的时候页面会稍许不同。
在这里插入图片描述
紧接着输入ps aux|grep nginx查看nginx是否运行。
在这里插入图片描述
这时候我们就可以访问nginx了,大家可以在命令行下输入ifconfig查看自己的本机ip地址。然后复制到浏览器进行访问。
在这里插入图片描述
哒哒哒,这就出来了!在这里插入图片描述在这里插入图片描述

uwsgi安装

这个安装还是很好说的直接pip3 install uwsgi,等待安装成功。安装成功以后这时候我们就可以测试uwsgi了。测试的时候大家根据情况输入uwsgi --http :8000 --module 你自己的项目名称.wsgi,这里呢我提醒下大家,大家运行这句话的时候是在自己的项目文件夹下运行的,比如说我的文件项目名叫做MX_Django,就cd到这个文件夹下运行uwsgi --http:8000 --module MX_Django.uwsgi就可以了。
在这里插入图片描述
在这里插入图片描述

正式部署

大家可以看到,虽然项目跑起来了,但是静态文件却没有加载进去,这就是因为前边我给大家说的nginx和uwsgi之间的关系(ps:如果没懂的再去前边看看),所以这时候就nginx就派上了用场了,这里我们就开始配置我们的nginx,让它能够找到我们自己的静态文件。

  • 首先我们新建一个uc_nginx.conf配置文件,这里我是直接将该配置文件新建到我的项目下,然后将下边这段代码复制进去,具体的目录大家根据自己的项目进行配置。
# the upstream component nginx needs to connect to
upstream django {
# server unix:///path/to/your/mysite/mysite.sock; # for a file socket
server 127.0.0.1:8000; # for a web port socket (we'll use this first)
}
# configuration of the server

server {
# the port your site will be served on
listen      80;
# the domain name it will serve for
server_name 你的ip地址 ; # substitute your machine's IP address or FQDN
charset     utf-8;

# max upload size
client_max_body_size 75M;   # adjust to taste

# Django media
location /media  {
    alias 你的目录/项目名称/media;  # 指向django的media目录
}

location /static {
    alias 你的目录/项目名称/static; # 指向django的static目录
}

# Finally, send all non-media requests to the Django server.
location / {
    uwsgi_pass  django;
    include     uwsgi_params; # the uwsgi_params file you installed
}
}
  • 然后我们将该配置文件加入到nginx的启动配置文件中
sudo ln -s 你的目录/项目名称/uc_nginx.conf /etc/nginx/conf.d/

或者可以直接将你的配置文件复制过去

sudo cp uc_nginx.conf /etc/nginx.conf

这两种方法都行,大家选其一就可以,具体的区别大家可以百度一下,我这稍微一提,ln就是相当于软链接,用这个方法配置的,大家在对源文件的内容修改以后,目标文件也会随之修改,cp的话就只是单纯的复制过去。

  • 紧接着配置完成以后重新启动nginx服务器sudo service nginx restart
  • 接下来我们就需要配置Django的settings文件了,我们在settings文件的最下边加入STATIC_ROOT = os.path.join(BASE_DIR, "static/"),同时将STATICFILES_DIRS这个注释掉,因为这句话使我们在开发的时候使用的,真正部署项目的时候就用不到了。在这里插入图片描述
  • 在总的urls.py文件中配置如下两句话
from MX_Django.settings import STATIC_ROOT
urlpatterns = [
	url(r'^static/(?P<path>.*)$',  serve, {"document_root": STATIC_ROOT}),
	]
  • 然后运行python manage.py collectstatic,将所有的静态文件配置到static文件夹下。
    在这里插入图片描述
  • 新建一个uwsgi的配置文件叫做uwsgi.ini。
# mysite_uwsgi.ini file
[uwsgi]

# Django-related settings
# the base directory (full path)
chdir           = /目录/项目名称
# Django's wsgi file
module          = 项目名称.wsgi
# the virtualenv (full path)

# process-related settings
# master
master          = true
# maximum number of worker processes
processes       = 10
# the socket (use the full path to be safe
socket          = 127.0.0.1:8000
# ... with appropriate permissions - may be needed
# chmod-socket    = 664
# clear environment on exit
vacuum          = true
# virtualenv = 虚拟环境目录
# 注:
# chdir: 表示需要操作的目录,也就是项目的目录
# module: wsgi文件的路径
# processes: 进程数
# virtualenv:虚拟环境的目录
  • 运行该配置文件uwsgi -i uwsgi.ini &
    在这里插入图片描述
  • 最后在浏览器输入自己的ip地址,当当当!!!大功告成
    在这里插入图片描述

写在最后

其实django部署上线坑很多,还有好多我没有列出来,如果你们有不明白或者疑惑的地方在下方评论留言,我看到会及时回复的,最后祝大家项目部署成功!!!在这里插入图片描述

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值