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

news/2025/2/19 16:29:31/

文章目录

  • 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.ppmy.cn/news/1338454.html

相关文章

pdf怎么转成高清图?pdf在线转换器推荐分享

在日常的工作或者学习中,有时候会需要将编辑好的pdf转高清图片,这样更方便我们后续使用,那么怎么将pdf转图片(https://www.yasuotu.com/pdftopic)还能保持清晰呢?下面介绍一款pdf转换工具,支持p…

solr的原理是什么

1 Java程序里如果有无限for循环的代码导致CPU负载超高,如何排查? 排查Java程序中由于无限循环导致的CPU负载过高的问题,可以按照以下步骤进行: 资源监控: 使用系统命令行工具(如Linux上的top或htop&#xf…

Flink CEP实现10秒内连续登录失败用户分析

1、什么是CEP? Flink CEP即 Flink Complex Event Processing,是基于DataStream流式数据提供的一套复杂事件处理编程模型。你可以把他理解为基于无界流的一套正则匹配模型,即对于无界流中的各种数据(称为事件),提供一种组合匹配的…

蓝桥杯-循环节长度

两个整数做除法,有时会产生循环小数,其循环部分称为: 循环节。比如,11/136>0.8461553846153..... 其循环节为[846153] 共有 6 位。下面的方法,可以求出循环节的长度。请仔细阅读代码,并填写划线部分缺少的代码。 注…

20240130金融读报1分钟小得01

1、开放银行本质上是以用户需求为核心,以场景服务为切入点的共享平台金融模式,一定程度上加快了商业银行“隐形”和金融服务的无缝和泛在 2、利用自身优势进行差异化竞争,比如农信的客户面对面交流、全方位覆盖、政银紧密合作。针对劣势进行互…

跟着pink老师前端入门教程-day14+15

2.6 main 主体模块制作 HTML&#xff1a; <div class"w"><div class"main"><!-- 焦点图模块 --><div class"focus"><ul><li><img src"./images/banner_bg.png" alt""></li>…

“减半倒数80天”!比特币18个月后将飙涨四倍!但多数矿企短期面临亏损?

随着比特币现货ETF的顺利推出&#xff0c;比特币的另一个潜在的催化剂就是即将到来的第四次减半。据Bitcoin Block Half最新数据&#xff0c;目前距离比特币减半仅剩余约80天&#xff0c;预计将在今年4月22日发生&#xff0c;届时&#xff0c;每个区块的比特币奖励将从当前的6.…

《Docker极简教程》--前言--Docker的简介

Docker 是一种用于构建、部署和运行应用程序的开源平台&#xff0c;它使用容器技术来实现轻量级、可移植和自包含的应用程序环境。Docker 的核心思想是将应用程序及其依赖项打包到一个称为容器的封闭单元中&#xff0c;从而消除了在不同环境中运行应用程序时可能出现的许多兼容…