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

前期本人完成了“编写你的第一个 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;# 你的云服务器ipserver_name xx.xx.xx.xx;charset     utf-8;client_max_body_size 75M;   # adjust to tastelocation / {# 将nginx所有请求转到uwsgiinclude 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 nginxroot      7760     1  0 18:07 ?        00:00:00 nginx: master process ./nginxnginx     7761  7760  0 18:07 ?        00:00:00 nginx: worker processroot      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.mzph.cn/news/74035.shtml

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

相关文章

鼠标知识系列之星闪鼠标

随着 2023.8.4 华为 HDC 大会的落幕,一个新的名词开始进入了人们的视线:星闪 NaerLink,随着星闪技术引入键鼠圈子的还有一个名词:星闪鼠标。 正如我们之前鼠标知识分享系列提到过的,目前市面上的鼠标主要是有线鼠标和…

烟感报警器单片机方案开发,解决方案

烟感报警器也叫做烟雾报警器。烟感报警器适用于火灾发生时有大量烟雾,而正常情况下无烟的场所。例如写字楼、医院、学校、博物馆等场所。烟感报警器一般安装于所需要保护或探测区域的天花板上,因火灾中烟雾比空气轻,更容易向上飘散&#xff0…

在FPGA上快速搭建以太网

在本文中,我们将介绍如何在FPGA上快速搭建以太网 (LWIP )。为此,我们将使用 MicroBlaze 作为主 CPU 运行其应用程序。 LWIP 是使用裸机设计以太网的良好起点,在此基础上我们可以轻松调整软件应用程序以提供更详细的应用…

【MySQL基础】一条查询和更新语句的执行流程01-02

目录 MySQL的基本架构示意图连接器查询缓存分析器优化器执行器重要的日志模块:redo log重要的日志模块:binlog更新时redo log 和 binlog 两阶段提交 例如在执行下面这个查询语句: mysql> select * from T where ID10;MySQL的基…

Apache Hive之数据查询

文章目录 版权声明数据查询环境准备基本查询准备数据select基础查询分组、聚合JOINRLIKE正则匹配UNION联合Sampling采用Virtual Columns虚拟列 版权声明 本博客的内容基于我个人学习黑马程序员课程的学习笔记整理而成。我特此声明,所有版权属于黑马程序员或相关权利…

GPT引领前沿热点、AI绘图

GPT对于每个科研人员已经成为不可或缺的辅助工具,不同的研究领域和项目具有不同的需求。如在科研编程、绘图领域: 1、编程建议和示例代码: 无论你使用的编程语言是Python、R、MATLAB还是其他语言,都可以为你提供相关的代码示例。 2、数据可…

vue2中实现 TDesign 树形懒加载

之前我有写过Element ui的树形懒加载 其主要是通过load函数来实现 而TDesign也是照虎画猫 他也是主要靠load 我们先来看一个基本的组件 <template><t-tree :data"items" :load"load" /> </template><script lang"jsx">…

【每天一道算法题】day2-认识时间复杂度

认识时间复杂度&#xff1a; O&#xff1a;读作big O&#xff0c;在数学上指的是上限的意思 常数时间的操作 一个操作如果和样本的数据量没有关系&#xff0c;每次都是固定时间内完成的操作&#xff0c;叫做常数操作。时间复杂度为一个算法流程中&#xff0c;常数操作数量的一…

交友盲盒完整版——详细源码分享

现在目前比较火热的一款app交友盲盒是通过uniappspringboot技术来制作的&#xff0c;原理其实很简单&#xff0c;大家一看便知。 大家自行下载到手机里面去使用即可&#xff0c;不支持ios手机 演示地址&#xff1a;https://share.weiyun.com/l3ovztce 下面就是给大家分享源码了…

【C++】可变参数模板

2023年9月9日&#xff0c;周六下午 这个还是挺难学的&#xff0c;我学了好几天... 在这里我会举大量的示例程序&#xff0c;这样可以有一个更好的理解&#xff0c; 不定期更新。 目录 推荐文章&#xff1a; 示例程序一&#xff1a;拼接字符串 示例程序二&#xff1a;求整…

局域网ntp服务器设置(windows时间同步服务器NetTime)(ubuntu systemd-timesyncd ntp客户端)123端口、ntp校时

文章目录 背景windows如何配置ntp服务器手动配置配置参数AnnounceFlags和Enabled含义 使用软件配置&#xff08;NetTime&#xff09;实操相关疑问&#xff1a;0.nettime.pool.ntp.org是什么&#xff1f; 注意事项请务必检查windows主机123端口是否已被占用&#xff0c;方法请参…

华为云云耀云服务器L实例评测|在Docker环境下部署Ward服务器监控工具

华为云云耀云服务器L实例评测&#xff5c;在Docker环境下部署Ward服务器监控工具 一、前言1.1 云耀云服务器L实例简介1.2 Ward简介1.3 Ward特点 二、本次实践介绍2.1 本次实践简介2.2 本次环境规划 三、购买云耀云服务器L实例3.1 购买云耀云服务器L实例3.3 查看云耀云服务器L实…

Java高级——类加载及执行子系统的案例与实战

类加载及执行子系统的案例与实战 概述类加载器案例TomcatOSGi 字节码案例动态代理Java逆向移植工具 实战——远程执行功能目标思路实现验证&#xff08;未完成&#xff0c;不会写JSP&#xff09; 概述 Class文件以何种格式存储、字节码指令如何执行等都是由JVM控制 字节码生成…

php使用jwt作登录验证

1 在项目根目录下&#xff0c;安装jwt composer require firebase/php-jwt 2 在登录控制器中加入生成token的代码 use Firebase\JWT\JWT; use Firebase\JWT\Key; class Login extends Cross {/*** 显示资源列表** return \think\Response*/public function index(Request $r…

Lua语法结构

Lua基础 注释 print("hello.") -- 单行注释的写法 --[[ 多行注释的写法 --]]标识符 关键字 **and **break**do **else**elseif ****end **falsefor**function **ifinlocalnilnotorrepeatreturnthentrueuntil**while ** 数据类型 nil** boolean**** number**** st…

Oracle数据库概念简介

1. 数据库 一般意义上的数据库包含两个部分 库&#xff1a;就是一个存储一堆文件的文件目录数据库管理系统&#xff1a;管理库的系统 2. DBMS 数据库管理系统 数据库管理系统(Database Management System)&#xff0c;是一种操纵和管理数据库的大型软件&#xff0c;用于建立…

Bun v0.8.0 正式发布,Zig 编写的 JavaScript 运行时

Bun 是采用 Zig 语言编写的高性能 “全家桶” JavaScript 运行时&#xff0c;官方称其为 "all-in-one JavaScript runtime"。 所谓 "all in one"&#xff0c;是因为 Bun 提供了打包、转译、安装和运行 JavaScript & TypeScript 项目的功能&#xff0c…

华为mate60 上线 媒介盒子多家媒体报道

为什么你的品牌营销不见效&#xff1f;如何能推动品牌破圈&#xff1f;让媒介盒子给你一些启发。本期盒子要跟大家分享地新机上市&#xff0c;数码科技行业企业该如何做线上宣传。 HUAWEI Mate 60系列8月29日官宣发布&#xff0c;出色的拍照功能、强大的性能表现和持久的续航能…

初阶三子棋(超详解)

✨博客主页&#xff1a;小钱编程成长记 &#x1f388;博客专栏&#xff1a;C语言小游戏 初阶三子棋 1.游戏介绍2.基本思路3.实现前的准备4.实现步骤4.1 打印菜单4.2 初始化棋盘4.3 打印棋盘4.4 玩家下棋4.5 电脑下棋4.6 判断本局游戏继续还是结束4.7 优化棋盘的显示 5.游戏代码…

docker 笔记5:redis 集群分布式存储案例

尚硅谷Docker实战教程&#xff08;docker教程天花板&#xff09;_哔哩哔哩_bilibili 目录 1.cluster(集群)模式-docker版哈希槽分区进行亿级数据存储 1.1面试题 1.1.1 方案1 哈希取余分区 1.1.2 方案2 一致性哈希算法分区 原理 优点 一致性哈希算法的容错性 一致性…