Python 框架学习 Django篇 (九) 产品发布、服务部署

news2024/11/27 14:41:13

我们前面编写的所有代码都是在windows上面运行的,因为我们还处于开发阶段

当我们完成具体任务开发后,就需要把我们开发的网站服务发布给真正的用户

通常来说我们会选择一台公有云服务器比如阿里云ecs,现在的web服务通常都是基于liunx操作系统的

一、架构说明

我们把上线程序并不是简单的把windows的程序仍到linux上运行即可,还需要考虑两个点

1、Django 在生产环境不应该处理静态资源(比如网页、图片等)的请求
   #前面使用了html作为模板返回,或者直接用templates返回前端页面的
   #return render(index.html) 在这种方法是不可取的, django更多的使用json返回数据
   #而碰到这种静态请求时,我们会在前面搭建一台nginx来进行访问,django只接受动态请求


2、Django 在生产环境 不能直接处理 HTTP请求
   #Django是wsgi web application 的框架,它只有一个简单的单线程 wsgi web server供调试时使用,性能很低。

 在生产环境必须提供 专业的 wsgi web server,比如 uWSGI 或者 Gunicorn。 我们这里使用 Gunicorn。

而且即使有了 uWSGI 或者 Gunicorn,我们最好还要在前面设置 Nginx 。所有的客户请求由它先接受,再进行相应的转发。

架构图

Nginx 在整个后端的最前方, 可以实现 负载均衡、反向代理、请求缓存、响应缓存 、负荷控制等等一系列功能。可以大大的提高整个后端的性能和稳定性。

 架构子系统协同分析

1、nginx  
   #Nginx 运行起来是多个进程, 接收从客户端(通常是浏览器或者手机APP)发过来的请求
   #它会根据请求的URL进行判断, 如果请求的是静态资源, 比如HTML文档、图片等
   #它直接从配置的路径进行读取, 返回内容给客户端
   #如果请求的是动态数据, 则转发给Gunicorn+Django进行处理


2、Gunicorn/Django
    #Gunicorn和Django是运行在同一个 Python进程里面的, 它们都是用Python代码写的程序。
    #启动Gunicorn的时候,它会根据配置加载Django的入口模块,这个入口模块里面提供了WSGI接口。
    #当Gunicorn接收到Nginx转发的HTTP请求后, 就会调用Django的WSGI入口函数,将请求给Django进行处理
    #Django框架再根据请求的URL和我们项目配置的URL路由表,找到我们编写的对应的消息处理函数进行处理。
    #我们编写的消息处理函数,就是前面章节大家学习到的,处理前端请求。如果需要读写数据库,就从MySQL数据库读写数据。

二、产品发布包准备

      如果需要你负责产品发布时,你需要准备发布的产品包,而产品包不是说让你把代码打个zip包就完事了,产品通常会设计好几个子系统

       前端通常包含web前端、app前端,而后端也包括业务处理系统、数据库系统、消息队列、异步任务系统、缓存系统等等,

       为了保证这些子系统能在生产环境 友好配合 , 需要仔细的规划、配置、产生发布包

关于前端发布包和后端发布包

首先, 我们现在的系统包括
1、web前端系统(包括web前端的HTML、css、图片、js业务代码、js库等文件)
2、后端业务处理系统

3、数据库系统
 

以上都需要做到产品发布包里面,不同的运营架构,部署的方式不同,需要构建发布包的方式也不同,这里,根据我们的架构图,可以把 前端系统代码 做在一个发布包中, 后端系统做在另一个发布包中

    我们完全可以 把 前后端系统 分别部署到 两台 Linux主机上。当有请求需要Django后端业务系统处理的时候,转发给Django所在的主机即可。 如果请求只是获取一些静态资源

   比如HTML、图片等,在前端主机处理完即可。 这样做到部署的前后端分离。目前我们先按照简单的来, 根据我们的架构图, 都部署在同一台机器上

三、前端产品包准备

前端发布包,由前端开发人员提供,在如下百度网盘中的 bysms_front_v1.5.zip,大家先下载到本地

百度网盘链接:https://pan.baidu.com/s/1nUyxvq6IYykBNtPUf4Ho6w

提取码:9w2u

四、后端产品包准备

作为后端的开发人员,当然由我们来提供后端的发布包

(注意: 我这里的项目名称是Django_demo  别和应用名称那层搞混了)

1、添加项目权限及导入Gunicorn 功能

vi Django_demo/Django_demo/settings.py

#允许访问的权限
ALLOWED_HOSTS = ['*','localhost','127.0.0.1']



#添加导入应用
INSTALLED_APPS = [
...

    'gunicorn',   #新增

]



#修改
DEBUG = False   #改成False

2、拷贝项目

这里我们需要将原先的项目拷贝一份出来,新的项目的名称自定义,我这里直接定义为paas了

3、删除拷贝项目中数据库配置

migrations 是存放我们orm转换的python到数据库的配置,如果不删除,可能会影响生产环境

paas/mgr/migrations
paas/paas/migrations

4、修改数据库配置为生产环境

paas/Django_demo/settings.py

DATABASES = {
    'default':
        {
            'ENGINE': 'django.db.backends.mysql',    # 数据库引擎
            'NAME': 'paas', # 数据库名称
            'HOST': '101.43.156.78', # 数据库地址
            'PORT': 30013, # 端口
            'USER': 'root',  # 数据库用户名
            'PASSWORD': '123456', # 数据库密码
        }
}

我这边懒得装第二套数据库了,直接用原先的数据

5、添加linux启动脚本

生产环境,我们使用 Gunicorn 作为 Django的WSGI前端,首先我们需要创建一个 Gunicorn启动配置文件  paas/gunicorn_conf.py ,内容如下

 paas/gunicorn_conf.py

# gunicorn/django  服务监听地址、端口
bind = '0.0.0.0:8000'

# gunicorn worker 进程个数,建议为: CPU核心个数 * 2 + 1
workers =  3 

# gunicorn worker 类型, 使用异步的event类型IO效率比较高
worker_class =  "gevent"  

# 日志文件路径
#errorlog = "/home/gunicorn.log"
errorlog = "-"
loglevel = "info"

import sys,os

cwd = os.getcwd()
sys.path.append(cwd)

要保证我们的Django后端服务在linux上一个命令就能启动,需要开发一个 Linux 启动shell脚本 ./run.sh

vi paas/run.sh

#!/bin/bash
DIR="$( cd "$( dirname "$0" )" && pwd )"
echo $DIR

cd $DIR

# ulimit -n 50000
#这里就是指定一下我们定义的配置文件
#Django_demo.wsgi  就是我们这个项目的项目名称+ .wsgi就行
gunicorn --config=$DIR/gunicorn_conf.py Django_demo.wsgi 

#后台运行用下面这个
#nohup gunicorn --config=$DIR/gunicorn_conf.py Django_demo.wsgi &> /dev/null &

6、导出本地环境使用的库

#导出依赖
pip freeze > requirements.txt

我们为了提供django的性能在他前面使用Gunicorn去部署

另外需要按照一些依赖的库gevent 和 greenlet (异步模式需要)

vi requirements.txt

#添加
Gunicorn
gevent
greenlet 

7、整理路径

五、部署nginx环境

mkdir /apps/demo/{web,app}

cd /apps/demo/web

1、添加nginx配置文件

vi nginx.conf

user  nginx;          # 用byhy用户运行Nginx进程
worker_processes  2; # 启动两个Nginx worker 进程

events {
    # 每个工作进程 可以同时接收 1024 个连接
    worker_connections  1024;
}

# 配置 Nginx worker 进程 最大允许 2000个网络连接
worker_rlimit_nofile 2000;

http {
    include       mime.types;
    default_type  application/octet-stream;

    sendfile        on;

    keepalive_timeout  30;

    gzip  on;

    # 配置 动态服务器(比如Gunicorn/Django)
    # 主要配置 名称(这里是apiserver) 地址和端口
    upstream apiserver  {

        # maintain a maximum of 20 idle connections to each upstream server
        keepalive 20;

        server 10.0.16.15:30021; # 地址和端口
    }

    # 配置 HTTP 服务器信息
    server {
        # 配置网站的域名,这里请改为你申请的域名, 如果没有域名,使用IP地址。
        server_name  10.0.16.15;

        # 配置访问静态文件的根目录,
        root /home/byhy/bysms_frontend/z_dist;

        # 配置动态数据请求怎么处理
        # 下面这个配置项说明了,当 HTTP 请求 URL以 /api/ 开头,
        # 则转发给 apiserver 服务器进程去处理
        location /api/      {
            proxy_pass         http://apiserver;
            proxy_set_header   Host $host;
        }
    }

}

上面的配置文件中,我们定义了如果请求/api/ 就把请求交给10.0.16.15:30021端口,这个是一会我们搭建django暴露的端口

2、添加前端包

bysms_front_v1.5

 

3、启动nginx

docker run -itd --name test  \
    -v ./nginx.conf:/etc/nginx/nginx.conf \
    -p 30019:80 \
    -v ./bysms_front_v1.5:/home/byhy/bysms_frontend/ \
    nginx

4、测试

#这个是访问nginx下的
http://101.43.156.78:30019/mgr/sign.html

六、部署后端环境

1、上传后端包

cd /apps/demo/app

#将我们整个paas项目扔进去

 

2、编写Dockerfile

FROM python:3

COPY  ./paas /home/paas/
WORKDIR /home/paas/

RUN python3 -m pip config set global.index-url  https://pypi.douban.com/simple/ \
    && python3 -m pip config set global.trusted-host pypi.douban.com \
    && pip3 install -r requirements.txt \
    && chmod +x run.sh

CMD ["./run.sh"]

3、构建镜像

docker build . -f Dockerfile -t python:v1

4、运行

docker run -itd --name paas-app \
 -p 30021:8000 \
 docker.io/library/python:v1

5、测试

http://101.43.156.78:30019/api/mgr/orders/?action=list_order

七、创建用户

#登录容器
docker exec -it paas-app bash

#写入django数据库表数据
python3 manage.py makemigrations
python3 manage.py migrate 

#创建用户 
python3 manage.py createsuperuser


byhy
12345678

流程基本就是这样,上面前端的代码调用的后端的api可能有问题,稍后修改

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

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

相关文章

Hbuilder打包项目为h5

Hbuilder打包项目为h5 manifest.json 配置 修改 web 配置下的 页面标题、路由模式、运行的基础路径 发行 H5 发行 填入网站标题和网站域名 编译 编译完成之后存放在 unpackage/dist/build/h5 目录下

OpenCV 输出文本

PutText() 输出文本 OpenCV5 将支持中文字符的输出, 当前版本OpenCV4原生不支持, 可以使用Contrib包FreeType方式实现, 不过比较麻烦.为了省事, 也可以通过将Mat转成bitmap,然后使用GDI方式输出中文字符. 示例代码 /// <summary>/// OpenCV暂时不能支持中文字符输出,显示…

卓越进行时 | 赛宁助力职业院校实践“岗课赛证训创”育人模式

11月7日&#xff0c;赛宁网安邀请南京城市职业学院网络安全学科师生走进网络安全卓越中心&#xff0c;为大一新生提供“职业导学” 和“岗位认知”的综合性实践课程&#xff0c;帮助学生提升对于网络安全专业和未来职业的认知水平&#xff0c;进一步深化校企合作人才培养的持续…

centos中安装的goland配置sdk报错:所选的目录不是Go SDK的有效主路经

选中目录后一直报错&#xff1a; 正确的位置&#xff1a; 原因竟然是使用 解压go1.21.4.linux-amd64.tar.gz 包出来&#xff0c;少了scr和test目录&#xff0c;重新解压后可以正确设定SDK主目录。 有同样问题的可以确认一下。 tar -C /usr/local -zxvf go1.19.2.linux-amd64.…

rabbitmq下载安装教程

1.首先需要下载erlang和rabbitmq安装包&#xff1a; 官网下载比较慢&#xff0c;通过网盘下载&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1fM2BrJqefyzUDZD4tfZLIg 提取码&#xff1a;5hsu 2.安装&#xff0c;傻瓜式安装就可以&#xff0c;可以自定义自己要安装的目…

封装一个中间大两头小的轮播图(vue-awesome-swiper、vue2)

需求 先看效果图 对vue来说&#xff0c;element-UI是有相应的轮播组件&#xff08;走马灯&#xff09;的&#xff0c;但相对简单的 如上面的两头大中间小轮播&#xff0c;element上文档这款很类似&#xff0c;但不适用&#xff0c;因为卡片之间底层移动和间距是依赖js实现的…

【Transformer从零开始代码实现 pytoch版】(二)Encoder编码器组件:mask+attention+feed forward+addnorm

Encoder组件 编码器部分&#xff1a; 由N个编码器层堆叠而成每个编码器层由两个子层连接结构组成第一个子层连接结构包括一个多头自注意力子层和规范化层以及一个残差连接第二个子层连接结构包括一个前馈全连接子层和规范化层以及一个残差连接 &#xff08;1&#xff09;Mask…

Python 标准库 subprocess 模块详解

1. Subprocess模块介绍 1.1 基本功能 subprocess 模块&#xff0c;允许生成新的进程执行命令行指令&#xff0c;python程序&#xff0c;以及其它语言编写的应用程序, 如 java, c,rust 应用等。subprocess可连接多个进程的输入、输出、错误管道&#xff0c;并且获取它们的返回…

医院检验信息管理系统源码 医院LIS系统源码 云LIS源码 区域LIS源码

医院检验信息管理系统源码 医院LIS系统源码 云LIS源码 区域LIS源码 医院检验信息管理系统&#xff0c;利用计算机网络技术、数据存储技术、快速处理技术&#xff0c;对检验科进行全方位信息化管理&#xff0c;使检验科达到自动化运行&#xff0c;信息化管理和无纸化办公的目的…

山西电力市场日前价格预测【2023-11-10】

日前价格预测 预测说明&#xff1a; 如上图所示&#xff0c;预测明日&#xff08;2023-11-10&#xff09;山西电力市场全天平均日前电价为480.16元/MWh。其中&#xff0c;最高日前电价为710.56元/MWh&#xff0c;预计出现在18: 00。最低日前电价为388.44元/MWh&#xff0c;预计…

double类型数相减有小数误差问题

相减有误差 BigDecimal消除误差

12.(vue3.x+vite)组件间通信方式之$attrs与$listeners

前端技术社区总目录(订阅之前请先查看该博客) 示例效果 在vue3中的$attrs的变化 $ listeners已被删除合并到$ attrs中。 $ attrs现在包括class和style属性。 也就是说在vue3中$ listeners不存在了。vue2中$listeners是单独存在的。 在vue3 $attrs包括class和style属性, vue…

程序员的护城河:构建数字世界的守护者

目录 前言1 持续学习的愿望和能力2 与他人沟通和合作的能力3 追求技术的深度和广度4 具备分享的精神结语 前言 在数字化时代&#xff0c;程序员是现代社会的护城河。他们的工作不仅是构建应用程序和系统&#xff0c;更是为保障系统安全、数据防护以及网络稳定发挥着至关重要的…

如何判断身边的朋友是否嫉妒你?

嫉妒 &#xff0c;源于你的优秀&#xff0c;破坏了他的自恋。 为什么嫉妒往往发生在亲戚、朋友、同学、同行、同乡、同胞…之间&#xff0c;因为你们曾活在同一套自恋评价标准下。 通常情况下&#xff0c;如果你没发迹前&#xff0c;一个对你评价以负面为主的人&#xff0c;在…

带你走进中国十大名校,全面了解学校历史和文化

一、资源描述 本套资源是很不错的&#xff0c;带你实地走进中国十大名校的校园&#xff0c;看看校园内的著名景点和建筑&#xff0c;同时讲解十大名校的历史和文化。这些高校不仅是中国十大名校&#xff0c;可能也是中国排名前十的学校&#xff0c;更是众多学子梦寐以求的&…

Docker Desktop 和 WSL2 位置迁移

迁移 WSL2 安装位置 WSL2 默认安装在 C 盘&#xff0c;我们可以通过以下步骤迁移安装位置 通过以下命令列出已安装的 Linux 发行版&#xff1a; wsl -l -v可以看到已安装了 Ubuntu-22.04&#xff0c;其运行状态为&#xff1a;Stopped 如果运行状态为 Running&#xff0c;需…

折幕变形制作-插件及软件

1、案例展示&#xff1a; 各种变形制作相关&#xff1a; 沉浸式视频变形制作制作

企业涉密文件怎么加密?企业重要文件加密方法

对于一个企业来说&#xff0c;涉密文件的重要性不言而喻&#xff0c;我们需要使用专业的方法来保护企业重要文件。那么&#xff0c;企业涉密文件该怎么加密呢&#xff1f;下面我们来一起了解一下。 本地文件加密 针对在电脑本地保存的文件&#xff0c;我们可以使用超级加密300…

开发知识点-Pygame

Pygame Pygame最小开发框架与最小游戏游戏开发入门单元开篇 Pygame简介安装游戏开发入门语言开发工具的选择 Pygame最小开发框架与最小游戏 游戏开发入门单元开篇 Pygame简介安装 游戏开发入门语言开发工具的选择

肩胛骨筋膜炎怎么治疗最有效

肩胛后背疼痛是平时工作、生活中常见的一类症状&#xff0c;尤其现在随着工作方式和生活习惯的改变&#xff0c;长期伏案工作以及低头看电脑已经成为常态&#xff0c;所以肩胛后背痛出现的频率还是比较高的。常见的原因主要包括&#xff1a;肩胛后背的筋膜炎&#xff0c;最容易…