云服务器下如何部署Django项目详细操作步骤

news2024/10/7 6:47:47

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

本人在把Django项目部署到服务器过程中,发现对于新手来说还是比较难的,百度上实际可用的项目部署参考文档凤毛麟角,绝大多数参考文档支离破碎,并不能真正指导一个新手完成一个项目的完整部署。为方便新手们顺利完成项目部署,本人参考了许多文档资料,将一个Django项目在云服务器上的部署全过程整理成详细部署文档,希望能够对项目新手提供一些实际可用的帮助,总体部署是基于:centos7+nginx+uwsgi+python3+django 之上做的。。

在实际的工作中,线上环境的服务器主机大部分都购买自阿里云亦或是腾讯云(大型互联网企业都是自己的服务器集群,而对于中小型公司来说成本太高,所以一般都采用购买云服务主机的方式)它们是现在主流的云虚拟主机提供方,如果你想自己搭建一个网站在线上环境下运行,你除了需要一个域名外还要有一台云虚拟机用来部署你的项目,这些大家可以自行了解。

一、云服务器前提环境条件:

根据在本地window系统下开发环境,在服务器上也要保持同步环境。

1,安装python3.7 ,这块不懂的网上自行搜索方法,因为服务器本身有python2 版本,所以安装python3.7 版本后,执行python3.7 的命令改成 python3 开头。

2,安装mysql 5.7.10 ,记得新建相同名的数据库,迁移本地数据库表结构和数据,这块不懂的网上自行搜索方法。

3,安装Django 3.2.18 。

以上前提环境条件准备好后开始部署“编写你的第一个 Django 应用程序”。

二、部署uwsgi服务器

1. 什么是WSGI协议:

Django 是 Python 语言编写的 Web 框架,而我们使用 Django 编写的项目称为 Web 应用,而一个 Web 项目的运行离不开 Web 服务器,所以就需要一种规范或者协议来定义 Web 应用如何与 Web 服务器之间实现交互以及请求的接受与响应的返回,这就引出了 WSGI 协议。

所以,我们就能够了解到 WSGI 协议的主要工作职责是什么了。

1) 从定义层面理解WSGI协议

WSGI(Web Server Gateway Interface)即 Web 服务器网关接口,它是属于一种规范协议,它定义了 Python Web 应用程序与 Web 服务器通信的接口。为了让大家更容易理解 WSGI 的作用,我们举一个通俗易懂的例子,比如,世界上有很多国家,各个国家之间货币都不通用,当你需要到韩国旅游的时候,就需要把我们的人民币按照国际汇率标椎兑换成韩元,这样我们才可以在韩国消费,而国际汇率标准就是一套完整的规范协议准则,也就相当于本节讲到的 WSGI 协议,需要各个国家遵守。

2) Python Web中WSGI协议

通过上面例子,再理解 WSGI 协议在 Python Web 中的作用就变的非常简单。Python 语言有各种各样的 Web 应用框架,如果在没有统一标准的情况下,可能需要针对每一个框架去实现各自的 Web 服务器。可想而知,如果这样的话,会给我开发者带来繁重的工作量。

WSGI 协议的出现恰恰解决了上述问题,它可以让 Web 服务器知道如何去调用 Python 应用程序;让 Python 应用程序知道客户端在请求什么,以及如何返回结果给 Web 服务器,WSGI 实现了 Web 服务器与应用程序之间的交互。

2. Django内置WSGI服务器

在 WSGI 协议中定义了两个角色:一个是 Web 服务器即 server,另一个是应用程序即 application,server 需要接受来自客户端的请求,然后根据协议定义调用应用程序(application),应用程序处理请求并返回结果给 server,最终响应给客户端。

Django 框架同时实现了 WSGI 的 server 和 application。其中内置的 WSGI 服务器是基于 Python 的内置模块 wsgiref 实现的,主要是添加了一些异常处理和错误记录,但是没有考虑到运行效率,故不适合在生产环境中使用,它主要被使用在开发和测试过程中。在这里进行一下简单的讲解,不作为本节的重点。

3. uWSGI生产环境的搭建与配置

上面介绍了 Django 的内置 WSGI 服务器的实现,但是由于 Django 并不专注于实现服务器,所以内置的 WSGI 服务器无法满足生产环境的需求,所以我们在这里要介绍另外一种 WSGI 服务器,即 uWSGI。

1) uWSGI服务器简单介绍

uWSGI 是当下最流行的一种 WSGI 服务器,同样遵守 WSGI 协议。它可以与各种 Python Web 框架实现兼容,而且配置过程与使用方式都非常简单。我们之前使用 runserver 命令启动项目,通常只是在开发和测试环境中使用。当开发结束后,完善的项目代码需要在一个高效稳定的环境中运行,这时候可以使用 uWSGI,它是 WSGI 服务器的一种,它可以让 Django、Flask 等开发的 Web 应用站点运行其中。

2) 安装与配置uWSGI服务器

要使用 uWSGI,首先要对它进行安装,但是这里有一点需要注意,因为项目都是部署在 Linux 系统上,所以这些操作也要在Linux 系统上完成,学会配置 uWSGI 服务器。

pip3 install uwsgi

使用上述命令安装 uWSGI,安装完成后在 mysite 项目的根目录下,新建 uwsgi.ini 配置文件(和 manage.py 文件同级目录),并在该文件中进行如下配置:

[uwsgi]
# 套接字方式的 IP地址:端口号
socket=127.0.0.1:8000
# Http通信方式的 IP地址:端口号
# http=127.0.0.1:8000
#上述两种方式选择其一,在使用Nginx需要使用socket

# 项目当前工作目录自行配置
chdir=/home/py_workspace/django_pro/mysite 这里需要换为项目文件夹的绝对路径

#指定wsgi模块下的application对象
module = mysite.wsgi:application

#是否启动主进程来管理其他进程
master=true

# 以上4个是核心配置项

# 项目中wsgi.py文件的目录,相对于当前工作目录
wsgi-file=mysite/mysite/wsgi.py
# 进程个数,根据电脑配置设置
process=4
# 每个进程的线程个数
threads=2
# 服务的pid记录文件
pidfile=uwsgi.pid
# 服务的日志文件位置
daemonize=uwsgi.log

然后修改项目 ./mysite/settings.py 文件将其设置为适合线上生产环境使用,如下所示:

....
DEBUG=False                    #关闭调试模式
ALLOWED_HOSTS = ['*']   #任何ip都可以访问
....

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'world',  #服务器数据库名
        "USER": "root",
        "PASSWORD": "123456", #服务器数据库密码
        "HOST": "127.0.0.1", #服务器数据库地址, 项目代码部署的服务器和数据库服务器一致可以用这个,不同的话使用实际数据库地址
        "PORT": "3306",
        "OPTIONS": {"init_command": "SET default_storage_engine=INNODB",},
    }
}

3) 启动与测试uWSGI服务器

配置完成后,我们就可以使用下面的命令启动 uWSGI 了:

#启动 uwsgi 命令
$ cd ./mysite/mysite # 项目文件夹,uwsgi.ini 配置文件 下执行
$ uwsgi --ini uwsgi.ini
#停止 uwsgi 命令
$ uwsgi --stop uwsgi.pid

说明:当 uWSGI 启动后,当前 Django 项目的程序已变成后台守护进程,在关闭当前终端时此进程也不会停止。执行完我启动命令后,可以看到在项目的主目录下又生成了两个文件分别是 uwsgi.pid 与 uwsgi.log,它们分别用来记录,uWsgi 的进程号码 pid 与 uWSGI 的相关运行日志。启动成功的标志如下所示:

[uWSGI] getting INI configuration from uwsgi.ini

此时 uWSGI.log 会帮助我们记录 uWSGI 服务器的请求日志等等,有兴趣可以自己看一看日志内容。上述就是 uWSGI 服务器的完整部署与使用流程,不过如果这样使用的话, uWSGI 会直接暴露给客户端用户,所以它通常会和 Nginx 搭配在一起进行使用。

三、部署Nginx服务器

1. 什么是Nginx及其主要作用 

Nginx (engine x) 是一个高性能的 HTTP ,负载均衡和反向代理 Web 服务器。Nginx 的主要作用是作为 Web 服务器的反向代理服务器,实现 Web 服务器的负载均衡以及站点资源的动静分离。

你虽然知道了 Nginx 拥有强大的功能,并且在实际应用中使用很广泛,但是你可能仍然处于云里雾里的感觉,所以我们就要理解一些和相关概念,比如什么是反向代理、负载均衡以及动静分离。

1) 反向代理服务器

反向代理服务器位于客户端用户与目标服务器之间,但是对于用户而言,反向代理服务器就相当于目标服务器,即用户直接访问反向代理服务器就可以获得目标服务器的资源。同时,用户不需要知道目标服务器的地址,也无须在用户端作任何设定。反向代理服务器通常可用来作为 Web 加速,用来提升用户访问站点的速度,所以使用 Nignx 作为 Web 服务器的前置服务器可以降低网络和服务器的负载,从而提高访问效率。

2) 什么是负载均衡

负载均衡(Load Balance),它的意思就是将工作任务分摊到多个操作单元上进行执行,比如 Web 服务器、FTP 服务器、企业关键应用服务器和其它关键任务服务器等,从而共同完成工作任务。单个服务器解决不了,我们增加服务器的数量,然后将请求分发到各个服务器上面,将原先请求到单个服务器上面的情况改为将请求分发到多个服务器上,将负载分发到不同的服务器,这就是负载均衡。

3) 理解动静分离

所谓动静分离就是为了加快网站的解析速度,可以把动态页面和静态页面由不同的服务器来解析,加快解析速度,降低单个服务器的压力。进而提升整个服务访问性能和可维护性。

4) Nginx应用场景

主要有以下三大场景:

一、作为虚拟主机,它可以实现在一台服务器虚拟出多个网站;

二、用来充当 HTTP 服务器。Nginx 是一个 HTTP 服务器可以独立提供 HTTP 服务,也可以做网页静态服务器;

三、实现反向代理、负载均衡。当网站的访问量达到一定程度后,单台服务器不能满足用户的请求,这时就需要用多台服务器组成服务集群并把 Nginx 做为反向代理服务器,实现多台服务器可以平均分担负载的目的,这样就不会造成某台服务器负载过高而宕机,而集群中另一台服务器闲置的情况。
 

2. 实现Nginx+uWSGI+Django项目部署

1) 项目部署原理分析

我们了解了 Nginx 的主要作用,在整个项目中起着关键的作用。在项目部署中,Nginx 作为“带头大哥”迎难而上来接收数客户端的请求(一个Nginx服务器能够同一时刻支撑 5 万的并发量),并将请求分为动态请求与静态请求,而 uWSGI 是排在第二位“二哥”将 Nginx 接收到的请求转变为 Django Web 框架能看懂的形式并发送给 Django,根据客户端请求,Django 返回响应交给 uWSGIM 依次传递,最后由 Nginx 返回给客户端响应,如下图所示:
 

图1:Django项目部署流程分析图
 

简图如下所示,理解起来非常方便:

图2:Django项目部署流程简易图

2) Nginx安装与配置

理解了上面原理架构图,我们就正式开始安装配置 Nginx ,使用如下命令在线安装即可:

yum -y install nginx

安装完了,我们要查找nginx 安装到哪里了,有那些重要文件和路径。

服务器上查看安装路径命令:

whereis nginx

/usr/sbin/naginx ---执行路径

/usr/lib64/nginx ---安装路径

/etc/nginx/ --- 配置路径

/usr/share/nginx ---默认站点目录

1、修改nginx配置文件

cd /etc/nginx  #进入配置路径

#先备份一个配置文件

cp nginx.conf nginx.conf.bak

#修改配置文件

vi nginx.conf

打开文件后,清空,复制如下配置信息,然后再根据实际情况修改部分数据。

#user root;
#worker_processes  1;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    gzip on;

    server {
        # 监听端口号
        listen  80;
        # 你的云服务器ip
        server_name xx.xx.xx.xx;
        charset     utf-8;
        client_max_body_size 75M;   # adjust to taste

        location / {
            # 将nginx所有请求转到uwsgi
            include uwsgi_params;
            # uwsgi的ip与端口,与之前的 uwsgi.ini 配置文件 地址端口一致
            uwsgi_pass 127.0.0.1:8000;
            }
            
            location /static {
                # 静态文件目录
                alias /home/py_workspace/django_pro/mysite/static;
            }

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
             root   html;
        }

    }

}

2.、配置完成后,启动nginx.

cd /usr/sbin  #进入执行路径

#启动 nginx

./nginx

#重启 nginx

./nginx -s reload

#停止 nginx

./nginx -s stop

ps -ef|grep nginx    查端是否启动成功

[root@ /usr/sbin]# ps -ef|grep nginx

root      7760     1  0 18:07 ?        00:00:00 nginx: master process ./nginx

nginx     7761  7760  0 18:07 ?        00:00:00 nginx: worker process

root      8449  8413  0 21:53 pts/0    00:00:00 grep --color=auto nginx

四、完成部署

经过 uwsgi 服务器和  nginx 服务器 部署配置,启动完成后,基本就结束部署了,打开浏览器,查看部署的第一个Django项目。

xx.xx.xx.xx  代表你的云服务器对外访问IP,因为nginx 配置默认端口为 80 , 云服务器一般开通了80端口访问权限,然后 uwsgi + Django 配置了 8000端口,需要在云服务器官网,自己添加 8000 端口访问权限,这块自行网上搜索解决,网络端口解决了,直接输入下面网址查看部署结果。

-- 进入后台管理网页

http://xx.xx.xx.xx/admin

 -- 进入自建的 polls 网页

http://xx.xx.xx.xx/polls

--------------------------------------end------------------------------

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/991727.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

四川玖璨电子商务有限公司:抖店代运营

抖店代运营是一种新兴的电商服务模式,通过专业团队全程管理店铺运营,帮助商家快速扩大销售规模。抖店代运营的出现,为很多创业者和传统实体店提供了一个转型升级的机会。 抖店代运营首先需要了解抖音这个平台的特点和用户群体,根…

史上最详细的Python安装教程,小白建议收藏!

前言:Hello大家好,我是小哥谈。Python是一种高级、通用、解释型的编程语言,由Guido van Rossum于1989年开始设计,1991年首次发布。它以简洁易读的语法而著称,并且强调代码的可读性和简洁性,使得程序员能够更…

出版行业常用软件系统开发

出版行业使用多种软件系统来支持各种出版任务,包括编辑、排版、制作、销售和管理。以下是出版行业中常用的一些软件系统以及它们各自的主要功能,希望对大家有所帮助。北京木奇移动技术有限公司,专业的软件外包开发公司,欢迎交流合…

【Java】传输层协议TCP

传输层协议TCP TCP报文格式首部长度保留位32位序列号和32位确认应答号标记ACKSYNFINRSTURGPSH 16位窗口大小16位校验和16位紧急指针选项 TCP特点可靠传输实现机制-确认应答超时重传连接管理机制三次握手四次挥手特殊情况 滑动窗口流量控制拥塞控制延迟应答捎带应答面向字节流粘…

Java网络编程( 一 )数据如何在网络上传输

数据如何在网络上传输 网络发展背景发送端和接收端网络协议分层封装 & 分用封装:分用: 传输补充(数据链路层(以太网)):ARP协议 网络发展背景 单机阶段—>局域网阶段—>广域网阶段—&…

Leetcode129. 求根到叶子节点数字之和

力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台 给你一个二叉树的根节点 root ,树中每个节点都存放有一个 0 到 9 之间的数字。 每条从根节点到叶节点的路径都代表一个数字: 例如,从根节点到叶子节点的路径 1 ->…

基于v-md-editor的在线文档编辑实现

概述 前面的文章讲到了基于语雀的在线文档编辑器的实现,在本文,将基于v-md-editor实现在线文档的编辑。 实现后效果 实现 说明:本文是基于Vue3实现的,实现了:1.Markdown的在线编辑和预览;2. 文件的上传和…

了解静电消除器离子风嘴的作用

离子风嘴在工业用途中很广泛。属于用压缩气系列的除静电的一种设备。具有安装简单、性能稳定、风速强劲、除静电迅速的特点。 离子风嘴可以产生许多的带着有正电荷负电荷的气体,被压缩气吹出,可以把设备上带的电荷中和掉。当设备表面上带有的电荷为负电荷…

Java认识异常(超级详细)

目录 异常的概念和体系结构 异常的概念 异常的体系结构 异常的分类 1.编译时异常 2.运行时异常 异常的处理 防御式编程 LBYL EAFP 异常的抛出 异常的捕获 异常声明throws try-catch捕获并处理 finally 异常的处理流程 异常的概念和体系结构 异常的概念 在Java中…

文件操作(个人学习笔记黑马学习)

C中对文件操作需要包含头文件<fstream > 文件类型分为两种: 1.文本文件&#xff1a;文件以文本的ASCII码形式存储在计算机中 2.二进制文件&#xff1a;文件以文本的二进制形式存储在计算机中&#xff0c;用户一般不能直接读懂它们 操作文件的三大类: 1.ofstream: 写操作 …

Tableau自四部曲_Part1:Tableau介绍与安装

文章目录 一、Tableau的优势1. Excel2. SQL3. Python/R4. Tableau 二、Tableau、PowerBI、FineBI到底应该学哪个1. 功能全面性2. 易学程度3. 学习顺序 三、Tableau下载与安装1. 下载2. 注册3. 安装4. 试用5. 激活6. 秘钥管理7. 学生账号申请 一、Tableau的优势 1. Excel 容易…

Java集合学习详解(2023年史上最全版)

java集合学习目录 一、基本概要0. 辅助工具类0.1 Collection 和 Collections 有什么区别&#xff1f;0.2 comparable 和 comparator的区别&#xff1f; 1.什么是集合2.集合的分类2.1 Collection接口2.2 Map接口 二、集合框架底层数据结构1. &#x1f60a;Collection1.1 ❤List1…

大麦订单生成 大麦订单购票成功截图生成

后台一键生成链接&#xff0c;后台管理 教程&#xff1a;解压源码&#xff0c;修改数据库config/Congig 不会可以看源码里有教程 下载程序&#xff1a;https://pan.baidu.com/s/16lN3gvRIZm7pqhvVMYYecQ?pwd6zw3

微信小程序中 vant weapp 使用外部的icon作为图标的步骤

微信小程序中 vant weapp 使用外部的icon作为图标的步骤 1. 在项目中创建静态资源文件夹2. 前往iconfont图标官网&#xff0c;添加图标并拷贝在线链接3. 下载iconfont代码&#xff0c;解压之后拷贝到小程序的目录中4. 修改iconfont.wxss 将本地链接替换为在线链接5. 在项目的ap…

Springboot+druid

1.Druid是Java语言中最好的数据库连接池。Druid能够提供强大的监控和扩展功能。 2.配置maven <dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>${druid-version}</version></dependency>…

Wireshark TS | 网络路径不一致传输丢包问题

问题背景 网络路径不一致&#xff0c;或者说是网络路径来回不一致&#xff0c;再专业点可以说是网络路径不对称&#xff0c;以上种种说法&#xff0c;做网络方向的工程师肯定会更清楚些&#xff0c;用简单的描述就是&#xff1a; A 与 B 通讯场景&#xff0c;C 和 D 代表中间…

Tomcat配置ssl

Tomcat配置ssl 部署tomcat服务&#xff0c;项目做到用https访问&#xff0c;使用nginx去做&#xff0c;访问任意一个子网站&#xff0c;都是https 或者 医美项目需要 上传jdk 456 tomcat war包 [nginx-stable] namenginx stable repo baseurlhttp://nginx.org/packages/…

一文看懂微信小程序新版隐私协议(附带弹窗组件)

一、前言 微信小程序近期又迎来了一次改革–9月15日之后如果小程序涉及调用微信的隐私接口获取用户的信息的&#xff0c;需要用户手动同意协议后才可正常调用接口&#xff0c;否则会返回报错信息。 隐私接口目前常用的有&#xff1a;手机号快捷获取、读取照片、获取用户的头像…

ArcGIS Pro3.0.2保姆级安装教程(附安装包)

软件简介&#xff1a; ArcGIS Pro是ERSI推出的新一代原生态64位ArcGIS桌面产品。具备强大的二维、三维一体化功能&#xff0c;继承了传统桌面产品ArcMap等产品几乎所有的功能&#xff0c;并在多个方面作了进一步的优化和改进&#xff0c;是云端一体化、数据科学与空间数据科学…

基于FPGA的图像二值化处理,包括tb测试文件和MATLAB辅助验证

1.算法运行效果图预览 将FPGA的数据导入到matlab进行显示 2.算法运行软件版本 Vivado2019.2 matlab2022a 3.部分核心程序 timescale 1ns / 1ps ............................................................................. module test_image;reg i_clk; reg i_rst; r…