Django4.2(DRF)+Vue3 读写分离项目部署上线

文章目录

  • 1 前端
  • 2 后端
    • 2.1 修改 settings.py 文件
      • 关于静态文件
      • 2.2 关于用户上传的文件图片
  • 3 Nginx
  • 4 镜像制作
    • 4.1 nginx
    • 4.3 Django镜像
      • 4.3.1 构建
    • 5 docker-compose 文件内容

1 前端

进入前端项目的根目录,运行如下命令进行构建

npm run build

构建完成后,项目根目录下会出现打包后的目录 dist
在这里插入图片描述
这个 dist 目录需要给到 nginx ,具体配置见第 3 章节的 Nginx

2 后端

2.1 修改 settings.py 文件

关于静态文件

说明:读写分离项目 Django中是没有静态文件的,这里的静态文件是 Djngo 中集成的后台管理的 admin 和 api 文档应用使用的静态文件。

DEBUG = False   # 修改为 FalseALLOWED_HOSTS = ["*"]  # 允许任何主机访问# 告诉项目,访问所有静态文件的 URL 前缀
# 也就是都需要从 /statics/ 开头,这个需要和 nginx 中 location 后面的值一致
STATIC_URL = '/statics/'# 静态文件收录的位置,生产部署时使用,配置完成后
# 执行如下命令完成静态文件的收录, django 会把所有应用使用到的静态文件拷贝到这个目录里一份
# python manage.py collectstatic
# 注意不包含用户通过页面上传的文件,具体见面的配置说明
STATIC_ROOT = Path.joinpath(BASE_DIR, 'statics')

2.2 关于用户上传的文件图片

这个是临时使用,做好自己编写视图实现。
修改 setings.py 文件

# 用户通过页面上传的文件,使用这个 URL 访问,这个需要在nginx上配置为 location 的值
MEDIA_URL = '/media/'# 存储文件的路径
MEDIA_ROOT = Path.joinpath(BASE_DIR, 'media')

3 Nginx

说明: 配置文件中 sharkplat 是 程序的后端主机名。

server {listen       80;listen  [::]:80;server_name  localhost;#access_log  /var/log/nginx/host.access.log  main;# 这个就是前端了location / {root   /usr/share/nginx/html;try_files $uri $uri/ /index.html last;index  index.html index.htm;}# 这里就是后端用到的静态文件,注意是后端应用(admin和 DRF 自带的 api 文档)的静态文件。location /statics/{root /usr/share/nginx;}# 这里就是用户通过页面上传的图片location /media {root /usr/share/nginx;}# 这个是后台管理location /admin {proxy_pass http://sharkplat/admin;}# 这里是后端数据接口location /v1 {proxy_pass_header Server;proxy_set_header Host $http_host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Scheme $scheme;proxy_http_version 1.1;proxy_set_header Upgrade $http_upgrade;proxy_set_header Connection "upgrade";proxy_pass http://sharkplat/v1;}error_page   500 502 503 504  /50x.html;location = /50x.html {root   /usr/share/nginx/html;}
}

4 镜像制作

4.1 nginx

镜像使用的是 nginx:1.20.2-alpine

4.3 Django镜像

4.3.1 构建

Dockerfile

FROM alpine:latest
COPY requirements.txt /root/requirements.txt
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories && \apk add --update --no-cache \gcc mysql-dev musl-dev curl \jq py3-configobj py3-pip \py3-setuptools python3 python3-dev && \mkdir /root/.pip && \echo '[global]' > /root/.pip/pip.conf && \echo 'index-url=https://mirrors.aliyun.com/pypi/simple' >> /root/.pip/pip.conf &&\pip install --upgrade pip &&\pip install -r /root/requirements.txt

requirements.txt
在 DRF 项目根目录环境下执行如下命令获取.
pip3 freeze > requirements.txt

asgiref==3.7.2
asttokens==2.2.1
attrs==23.1.0
backcall==0.2.0
certifi==2023.7.22
charset-normalizer==3.2.0
coreapi==2.3.3
coreschema==0.0.4
decorator==5.1.1
Django==4.2
django-filter==23.2
django-guardian==2.4.0
django-phonenumber-field==7.1.0
django-simpleui==2023.8.28
djangorestframework==3.14.0
djangorestframework-simplejwt==5.3.1
drf-spectacular==0.26.5
executing==1.2.0
idna==3.4
importlib-metadata==6.8.0
inflection==0.5.1
ipython==8.14.0
itypes==1.2.0
jedi==0.19.0
Jinja2==3.1.2
jsonschema==4.20.0
jsonschema-specifications==2023.11.2
Markdown==3.4.4
MarkupSafe==2.1.3
matplotlib-inline==0.1.6
mysqlclient==2.2.0
parso==0.8.3
pexpect==4.8.0
phonenumberslite==8.13.17
pickleshare==0.7.5
Pillow==10.0.0
prompt-toolkit==3.0.39
ptyprocess==0.7.0
pure-eval==0.2.2
Pygments==2.15.1
PyJWT==1.7.1
pytz==2023.3
PyYAML==6.0.1
referencing==0.31.1
requests==2.31.0
rpds-py==0.13.2
six==1.16.0
sqlparse==0.4.4
stack-data==0.6.2
traitlets==5.9.0
typing_extensions==4.7.1
uritemplate==4.1.1
urllib3==2.0.4
wcwidth==0.2.6
zipp==3.16.2
click==8.1.7
gunicorn==21.2.0
h11==0.14.0
uvicorn==0.25.0

5 docker-compose 文件内容

version: '3.9'
services:web:image: nginx:1.20.2-sharkvolumes:- "./dist:/usr/share/nginx/html"- "./conf.d:/etc/nginx/conf.d"- "./statics:/usr/share/nginx/statics"- "./sharkplat/media:/usr/share/nginx/media"restart: alwaysports:- "9900:80"sharkplat:image: sharkplat:1.0command: sh /sharkplat/start.shrestart: alwaysports:- "8010:80"volumes:- "./sharkplat:/sharkplat"

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

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

相关文章

K8S之Pod的介绍和使用

Pod的理论和实操 pod理论说明Pod介绍Pod运行与管理Pod管理多个容器Pod网络Pod存储 Pod工作方式自主式Pod控制器管理的Pod(常用) 创建pod的流程 pod实操通过资源清单文件创建自主式pod通过kubectl run创建Pod(不常用) pod理论说明 …

计算机网络基础知识笔记

1 HOST和PORT Claude-2-100k: 我来用简单的语言解释一下HOST和PORT这两个网络术语: HOST就是设备的IP地址,比如"127.0.0.1"就是我们本机的IP地址; PORT就是端口号,可以把它简单理解为设备上的门牌号。 举个类比,我们要给某个人发信件,需要知道…

指针的深入了解6

1.回调函数 回调函数就是一个通过函数指针调用的函数。 如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数 时,被调用的函数就是回调函数。回调函数不是由该函数的实现方直接调用&#xff0…

华为HCIE课堂笔记第十七章 广域网互联技术

第十七章 广域网互联技术 17.1 GRE VPN GRE VPN用于分支与分支通过私网地址互联,通过在私网报文上添加一个GRE的头部,以及添加一层外层的IP头部,通过外层头部中的目IP地址使得报文到达隧道对端接口,并解封装得到原始的私网报文…

高通GAIA V3命令参考手册的研读学习(十二):第四个示例

主机和设备交互通信的第四个示例,也就最后一个示例:设置默认音量失败 这个示例描述了主机发送一个设置默认音量的请求,其中包含一个无效的值。 对于设备而言,因为语音音量的有效范围是0到15 (0x00到0x0f),也就是一共…

Python的类(Class)和描述器(Descriptor)

1. 背景 笔者的大数据平台XSailboat的SailWorks模块包含离线分析功能。离线分析的后台实现,包含调度引擎、执行引擎、计算引擎和存储引擎。计算和存储引擎由Hive提供,调度引擎和执行引擎由我们自己实现。调度引擎根据DAG图和调度计划,安排执…

【DOCKER】docker 安装sonarque

安装docker 安装docker https://blog.csdn.net/BThinker/article/details/123358697 加入阿里云镜像 https://blog.csdn.net/TommyXu8023/article/details/113291112 { "registry-mirrors": ["https://alzgoonw.mirror.aliyuncs.com"] }安装sonarqube ht…

【LVGL源码移植环境搭建】

LVGL源码移植&环境搭建 ■ LVGL源码移植■ 下载LVGL源码■ 修改LVGL文件夹■■■■ 视频链接 Ubuntu模拟器环境建置 ■ LVGL源码移植 ■ 下载LVGL源码 LVGL源码 我们以选择v8.2.0为例,选择8.2.0下载 ■ 修改LVGL文件夹 1.我们只需要关注这5个文件即可&…

《Docker技术革命:从虚拟机到容器化,全面解析Docker的原理与应用-上篇》

文章目录 Docker为什么会出现总结 Docker的思想Docker历史总结 Docker能干嘛虚拟机技术虚拟机技术的缺点 容器化技术Docker和虚拟机技术的区别 Docker概念Docker的基本组成镜像(image)容器(container)仓科(repository)…

GitHub工作流的使用笔记

文章目录 前言1. 怎么用2. 怎么写前端案例1:自动打包到新分支前端案例2:自动打包推送到gitee的build分支案例3:暂时略 前言 有些东西真的就是要不断的试错不断地试错才能摸索到一点点,就是摸索到凌晨两三点第二天要8点起床感觉要…

JDK8对List对象根据属性排序

文章目录 JDK8对List对象根据属性排序1. 被排序字段为null或者空时候报错2. 使用Stream流排序2.1 根据name升序2.2 根据name升序,score降序 3. 使用Collections排序3.1 根据name升序3.2 根据name升序,score降序 4. 完整的demo JDK8对List对象根据属性排序…

聊一聊GPT、文心、通义、混元

我使用同一个Prompt提示词“请以记叙文的文体来写”,分别发送给GPT-3.5(调用API)、文心、通义、混元,下面是它们各自生成的文本内容,大家一看便知了。 GPT-3.5: 在我个人使用GPT模型的过程中,我…

【C语言】学生管理系统

大家好,欢迎来到我的博客总结应用。在上一篇博客中,我写了有关结构体和内存操作函 数的总结,这些博客记录了我的学习、思考和经验。为了更好地总结和回顾这些内容,在此 篇博客中,我编写了”学生管理系统“来帮助我整理…

Facebook的创新征程:社交媒体的演进之路

在当今数字化时代,社交媒体已经成为人们生活中不可或缺的一部分,而Facebook作为社交媒体领域的巨头,一直在不断创新和演进。本文将深入探讨Facebook的创新征程,追溯其社交媒体的发展历程,探讨其对用户、社会和数字时代…

echart 实现自定义地图

先上效果图 需求:自定义区域平面图,支持区域高亮 // 2D详情const initChartsMapItemB async (flow: any, mapbg: any) > {// mapbg 为svg的地址 import mapbg from //assets/json/map/F42d.svgconst svgData (await request.get(mapbg)) as anye…

WPF应用程序(.Net Framework 4.8) 国际化

1、新建两个资源字典文件zh-CN.xaml和en-US.xaml&#xff0c;分别存储中文模板和英文模板 (1) zh-CN.xaml <ResourceDictionary xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x"http://schemas.microsoft.com/winfx/2006/xaml&q…

(delphi11最新学习资料) Object Pascal 学习笔记---第4章第1节(过程和函数)

第4章 过程与函数 ​ Object Pascal 语言&#xff08;以及 C 语言的类似功能&#xff09;强调的另一个重要思想是例程的概念&#xff0c;例程基本上是一系列具有唯一名称的语句&#xff0c;可以多次调用。例程&#xff08;或函数&#xff09;通过名称来调用&#xff0c;这样就…

基于链表实现贪吃蛇游戏

本文中&#xff0c;我们将使用链表和一些Win32 API的知识来实现贪吃蛇小游戏 一、功能 &#xff08;1&#xff09;游戏载入界面 &#xff08;2&#xff09;地图的绘制 &#xff08;3&#xff09;蛇身的移动和变长 &#xff08;4&#xff09;食物的生成 &#xff08;5&…

阿里云盘分享多文件方法

1、单次分享不超过100个文件/文件夹 2、分享的文件夹目录不超过15个子文件夹层级 3、文件夹里面的总文件数量不能超过4000个 其实限制的条件蛮高的&#xff0c;但是对于这么大容量的网盘&#xff0c;稍微一分享就会超过条件限制&#xff0c;有的人会拆分为好几个文件多次分享&a…

CentOS 7 部署 ZeroTier Moon 节点

ZeroTier是一套使用UDP协议构建的SD-WAN网络软件&#xff0c;其主要有三部分组成&#xff1a;行星服务器Planet、月亮服务器Moon、客户端节点LEFA&#xff0c;行星服务器是ZeroTier的根节点&#xff0c;可以采用ZeroTier官方的服务器&#xff0c;也可以使用开源代码自行搭建 月…