Django部署服务器

这篇具有很好参考价值的文章主要介绍了Django部署服务器。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

概念解析

HTTP, Nginx, WSGI, uWSGI, Django之间的关系
django部署到服务器,django,服务器,python,nginx

在学习Django部署之前,先了解一个web应用的运行过程是怎么样的,这有利于理解整个部署过程。


首先是浏览器客户端发出请求,请求一个html页面,客户端采用HTTP协议将请求发送到服务器端,服务器端解析HTTP协议,从中得到客户的请求内容,并把请求内容同样采用HTTP协议发送给客户端。这就是打开某个网页的全过程。

接下来把服务器的内容细化,明确服务器的工作本质就是接受HTTP请求、解析HTTP请求、处理HTTP请求,发送HTTP响应包发送回客户端。通俗点讲就是:

客户端:将要求封装成一封书信给服务器端,里面写着我要李白的一首诗

服务器:拿到书信拆解之后,根据要求写下李白的某首诗,再次封装成书信,送回去

客户端:拿到回信,把李白的诗挂着展示出来

封装书信相当于把要求封装成HTTP包,要李白的诗相当于申请某页html,拆解书信就是解析HTTP,写下李白的诗就是生成要求html文档,封装书信就是封装成HTTP包,展示李白的诗就是把html文档内容展示到浏览器上。


现在我们理解这个流程了,假设你正在制作web应用,相当于制作一个服务器端,即你要接受HTTP请求、解析HTTP请求、处理HTTP请求,发送HTTP响应。这些实质上是网络传输协议的内容,但是你只是要做一个管理系统玩一下而已,如果按照上面的流程一步一步去实现,那你第一步就得先去了解学习实现HTTP协议,我都还没开始写诗呢(制作html文档),就得花大部分时间去处理HTTP,而且实现出来的HTTP协议大概率还没别人做得好,你说这是何苦呢?这无疑增加了学习的成本,很明显这个时候你就会想:“如果我仅仅负责生成html文档就好。”
没错,就是这样,WSGI就是为了让你去专心生成html,至于HTTP封装、拆箱什么的就不用你管了,我就负责好好写诗,写完之后怎么把诗包装成信,这就不用我们管了,这就简化了我们开发web应用的流程。总的来说,WSGI就是把HTTP翻译成web应用框架能理解的语言,让web应用框架知道客户端正在请求哪个页面,然后web应用框架就提交这个页面给WSGI,让它再翻译成HTTP送给客户端。

现在先跳过nginx,这个不是必须的,没有nginx,uWSGI也可以和客户端进行交互。

WSGI概念:全称 Web Server Gateway Interface(Web服务器网关接口),是一个标准的Python应用程序编程接口(API),用于连接Web服务器和Python Web应用程序框架之间的接口。WSGI定义了一种规范的协议,使得Web服务器和Python应用程序之间可以通信和交换数据。WSGI的目的是让开发人员能够使用Python编写Web应用程序,同时与各种Web服务器和Web框架进行交互。使用WSGI可以使Web应用程序更易于开发、测试和部署,并且可以使应用程序具有更高的可移植性,因为它们可以在不同的Web服务器和框架之间进行移植。

uWSGI:是一个Web服务器和应用服务器,他本质就是实现了WSGI,http等协议,它的任务就是把HTTP协议转化成web应用所支持的网络协议,比如说http转WSGI和WSGI转http,就是上面例子中的拆信和装信的步骤。

Django框架:一个基于Python的开源的Web应用开发框架,框架的作用在于处理和回复请求,其他的内容不是它要care的,只写诗,剩下的一概不管。

好了,介绍完流程之后,这个时候可能就有人有疑问了:“你不是说Django只写诗其他的一概不管的吗?那我在本地开发的时候,运行python manage.py runserver,就可以实现网站的运行,也没用到uWSGI啊?那岂不是http处理部分也是Django负责的。”对于这个问题呢,http处理部分也是Django负责的,这个是没错的,但是负责WSGI部分是Python内置了一个WSGI服务器,这个模块叫wsgiref,它是用纯Python编写的WSGI服务器的参考实现。所谓“参考实现”是指该实现完全符合WSGI标准,但是不考虑任何运行效率,仅供开发和测试使用。你如果拿他来部署,你的网站恐怕是要经常出事的,所以还是交给uWSGI或者其他web服务器比较好。

现在回过头去说说Nginx的作用,这个时候先说说正向代理和反向代理

django部署到服务器,django,服务器,python,nginx
django部署到服务器,django,服务器,python,nginx

正向代理是一个位于客户端和目标服务器之间的代理服务器(中间服务器)。为了从原始服务器取得内容,客户端向代理服务器发送一个请求,并且指定目标服务器,之后代理向目标服务器转交并且将获得的内容返回给客户端。正向代理的情况下客户端必须要进行一些特别的设置才能使用。

反向代理正好相反。对于客户端来说,反向代理就好像目标服务器。并且客户端不需要进行任何设置。客户端向反向代理发送请求,接着反向代理判断请求走向何处,并将请求转交给客户端,使得这些内容就好似他自己一样,一次客户端并不会感知到反向代理后面的服务,也因此不需要客户端做任何设置,只需要把反向代理服务器当成真正的服务器就好了。

简单来说,正向代理就是我知服务器,服务器不知我;反向代理就是,我知要访问的服务器,但是访问是不是处理我要的信息的服务器,我就不知道了,简单来说我就是不知道哪台机子回答了我的问题。Nginx就是实现方向代理的服务器接口。

Nginx是一个高性能的Web服务器和反向代理服务器,Nginx的特点是占用资源少、并发能力强、稳定性高,并且可以处理大量的并发连接和请求。Nginx最初是为解决C10K问题而开发的,即如何处理数万个并发连接。它采用了异步、事件驱动的处理方式,能够高效地处理大量的并发连接,使得Web应用程序可以更快地响应用户请求。Nginx还支持反向代理、负载均衡、静态文件服务、SSL/TLS加密等功能,可以作为一个高效的Web服务器、反向代理服务器或应用程序服务器来使用。同时,Nginx还提供了强大的配置选项和插件机制,可以根据需求进行灵活的定制和扩展。

好了,现在理顺完所有的概念和过程了,现在我们就可以开始部署Django服务器了。

部署Django到服务器

1、环境安装
python我用的是系统自带的python3.9,路径为/usr/bin/python3
2、安装nginx

终端输入:

sudo apt-get update
sudo apt-get install nginx

nginx安装完成后,在本地浏览器输入你的云服务器公网IP地址,就会出现nginx的欢迎界面,代表安装成功。如果显示失败,先查看云服务器80端口的防火墙有没有打开,或者云服务器的网络安全组规则添加80端口。具体可以参考这个文章:

3、安装uWSGI
sudo pip3 install uwsgi

看到最后出现successful就可以了。

4、运行测试

先测试一下不使用Nginx和uWSGI,django能不能正常运行

cd /你的项目地址
python3 manage.py runserver

如果可以正常运行就说明Django程序移植到ubuntu没问题,如果出现错误,就要先去解决这些问题,包括包的安装问题,搜索不到包的问题

如果不是root用户,pip安装的时候,可能会把包安装到/home/ecs-user/.local/bin/目录下,这样运行django项目的时候,会报django import出错。解决办法是manage.py文件,在最前面加入:

import sys
sys.path.append('/home/ecs-user/.local/lib/python3.9/site-packages')
5、部署Nginx,uWSGI
首先针对uwsgi

在Django的Project目录下(与manage.py同级)新建一个名为uwsgi.inirun.loguwsgi.pid的文件,终端输入:

touch uwsgi.pid
touch run.log
sudo vim uwsgi.ini

然后文件里加入

[uwsgi]
chdir = /home/ecs-user/Project
module = Project.wsgi:application
socket = 127.0.0.1:8000
master = true
processes = 4
threads = 2
pidfile=uwsgi.pid
daemonize = /home/ecs-user/Project/run.log
disable-logging = true

保存。

接下来是nginx

终端输入,找到nginx的配置文件

sudo nginx -t

结果一般为

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

/etc/nginx/就是nginx的目录,cd到这个路径,然后找到conf.d文件夹,在该文件夹下新建django项目的nginx的配置文件,后缀必须为.conf,名字无所谓。

cd /etc/nginx/conf.d
vim django.conf

然后复制粘贴:

# HTTP
server {
    listen 80;
    server_name 公网IP;

    location / {
        include  uwsgi_params;
        uwsgi_pass  127.0.0.1:8000;
    }

    location /static {
        alias /home/ecs-user/Project/static;
    }
}

修改保存之后,输入sudo nginx -t看看修改之后的配置有没有问题,出现success就ok了。

静态文件的话,nginx会直接去找static的静态文件夹/home/ecs-user/Project/static,这里填入你的静态文件夹路径就好,动态请求会去找uWSGI。设置完之后,别忘了把Django的settings里的Debug部分修改:

DEBUG = False
ALLOWED_HOSTS = ['*']

最后,如果你不是root用户,要先给你的静态文件添加权限,我为了防止还有其他权限问题,我直接给整个项目文件夹添加权限:

sudo chmod +R 777 project
6、设置部分大功告成

现在可以开始准备运行

首先,重启nginx和uwsgi

sudo service nginx restart
sudo killall -9 uwsgi
# 稍等几秒钟,电脑关闭端口需要时间
cd project
sudo uwsgi uwsgi.ini

然后在客户端浏览器直接输入IP地址就可以访问了,如果出错了,查看run.log日志文件一个一个排查错误。

后续

后续可以添加还有,为IP申请域名,将域名部署到web应用,通过域名来访问网站;使用https协议安全访问网页。

参考:




补充

如果有什么不对的地方,请各位批评指正!文章来源地址https://www.toymoban.com/news/detail-549149.html

到了这里,关于Django部署服务器的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Django进行docker服务器部署

    Django是一个广泛使用的Python Web框架,而Docker是一个增强应用程序部署的流行容器平台。结合这两个技术,可以轻松地部署和维护Django应用程序。在本文中,我们将探讨如何使用Docker在服务器上部署Django应用程序。 1、安装Docker和Docker Compose 在开始之前,需要先安装Docker和Doc

    2024年02月13日
    浏览(50)
  • django部署到centos服务器上

    步骤一 更新系统和安装依赖, 步骤二:创建并激活虚拟环境 在终端中执行以下命令: 可以不创建虚拟环境, 步骤三:安装Django和其他必需的库 在虚拟环境中执行以下命令: 步骤四:克隆项目源代码 使用git命令克隆Django项目源代码到合适的目录: 其实如果是本地的项目,

    2024年02月12日
    浏览(36)
  • 云服务器下如何部署Django项目详细操作步骤

    前期本人完成了“编写你的第一个 Django 应用程序”,有了一个简单的项目代码,在本地window系统自测没问题了,接下来就想办法部署到服务器上,可以通过公网访问我们的Django项目。将开发机器上运行的开发版软件实际安装到服务器上进行长期运行,这是使用 Django 框架进行

    2024年02月09日
    浏览(51)
  • docker+django+ubuntu服务器 测试质量管理平台部署

      然后setting.py中增加服务器ip地址 0.0.0.0开放所有 其中setting.py注意 DEBUG = False 是False的话js和css的静态文件不会生效 在此注意一下!!!!!!! 2.拉取git的项目代码 构建成镜像 镜像run成容器 其中8888是容器内部的端口号,8886是对外开放的端口号  没有报错说明就是成功了 最后直接访

    2024年02月01日
    浏览(49)
  • 将本地Django项目部署到服务器上(Ubuntu20.04)

    最近因为项目的需求开始正在搭建一个个人网站。在本地完成了项目后端的内容后需要部署到服务器上以供用户访问。因为后端使用的是Django框架,就在网上找了很多有关将Django项目部署到网站上的教程。由于本人在网络这块属于小白,原理了解甚少,在一边参照各种教程一

    2024年02月03日
    浏览(49)
  • Django部署到服务器后无法获取到静态元素 The requested resource was not found on this server

    写了一个Django项目,部署到云主机后,访问发现图片无法访问,报错 The requested resource was not found on this server 图片是一个词云图,根据爬虫爬取的信息生成的,根据爬取的信息会改变,所以没有把图片放在nginx中,而是直接获取Django的图片 直接原因是因为发布到服务器,将D

    2024年04月25日
    浏览(35)
  • Docker搭建django调试服务器

    MySite –Dockerfile –requirement.txt –docker-compose.yml –web/ ----myweb/ ----manage.py 创建Dockerfile: 注意: “groupadd -g 1000 web useradd -u 1000 -g web weber”, 其中的\\\"-g 1000\\\"和\\\"-u 1000\\\"分別代表用户组和用户, 对应docker主机的用户(可使用linux命令id查看) 创建requirement.txt 创建docker-compose.yml COPY项目文件到

    2024年02月05日
    浏览(44)
  • 阿里云服务器搭建django+区块链

    djago搭建参考:https://www.bilibili.com/read/cv10030536/ 成功搭建后加入区块链部分,其中遇到的问题: 1.区块链相关代码: tip:注意路径和要引入的包 2.证书拷贝问题 说是证书配置问题,按照fisco bcos的教程把fisco下的证书文件重新复制的sdk的bin目录下,把bin目录里面的内容删除掉

    2024年01月19日
    浏览(41)
  • springboot和Django哪一个做web服务器框架更好

    目录 一、两者特点 二、各自优势 编程语言 : Spring Boot:使用 Java 编程语言。 Django:使用 Python 编程语言。 生态系统和社区支持 : Spring Boot:具有庞大的 Java 生态系统和强大的社区支持。适用于大型企业应用。 Django:有活跃的 Python 社区,提供丰富的库和扩展。适用于快速

    2024年02月14日
    浏览(47)
  • Python web实战 | Docker+Nginx部署python Django Web项目详细步骤【干货】

      在这篇文章中,我将介绍如何使用 Docker 和 Nginx 部署 Django Web 项目。一步步讲解如何构建 Docker 镜像、如何编写 Docker Compose 文件和如何配置 Nginx。 1.1 配置 Django 项目 在开始之前,我们需要有一个 Django 项目。如果你还没有 Django 项目,可以按照 Django 官方文档的指导创建一

    2024年02月15日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包