Files
2026-07-17 17:17:22 +08:00

66 lines
2.6 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
kind: build_system
name: Docker Compose 编排与多阶段构建部署
category: build_system
scope:
- '**'
source_files:
- docker-compose.yml
- backend/Dockerfile
- frontend/Dockerfile
- scripts/upload.sh
- DEPLOY.md
- backend/package.json
- frontend/package.json
- frontend/vite.config.js
- frontend_v2/package.json
---
## 构建系统概览
本项目采用 Docker Compose 作为统一的编排与部署方案,将前端(Nginx 静态站点)与后端(Node.js API)打包为两个容器服务,通过 .env 文件集中注入运行时配置。
### 核心工具链
- 包管理: pnpm v11.5.2(通过 packageManager 字段锁定版本)
- 前端构建: Vite 6 + Vue3,输出到 frontend/dist/
- 后端运行: Node.js 22 Alpine 镜像,直接执行 src/app.js
- 容器编排: docker-compose.yml 定义 backend、frontend 两个服务
- 部署脚本: scripts/upload.sh 基于 rsync 同步代码到远程服务器
### 构建流程
前端(frontend):
- 本地 pnpm build 生成静态资源至 dist/
- Dockerfile 使用多阶段构建:node:18-alpine 构建 → nginx:alpine 托管
- 生产环境通过 Nginx 提供静态文件,并将 /api 反向代理到后端
后端(backend):
- Dockerfile 基于 node:22-alpine,仅安装 --prod 依赖
- 入口为 src/app.js,监听端口 8000(由 compose 覆盖)
- 支持本地开发 pnpm devnodemon 热重载)
前端_v2Soybean Admin 模板):
- 独立的 pnpm workspace 工程,包含 packages/ 共享模块
- 使用 TypeScript + UnoCSS + NaiveUI,构建命令 vite build --mode prod
- 当前未集成到主部署流程,属于独立演进分支
### 部署架构
客户端 → Nginx(8082) → /api → backend:8000 (Node.js)
↘ 静态文件 ← frontend/dist/
环境变量统一通过根目录 .env 注入(数据库、JWT、S3、Redis、OTA 等)
OTA 升级包通过卷挂载 /data/projects/source 持久化
日志使用 json-file 驱动,限制单文件 10MB、最多 5 个文件
### 发布流程
1. 本地构建前端:cd frontend && pnpm build
2. 上传代码:./scripts/upload.sh allrsync 同步 dist、src、compose
3. 服务器构建并启动:docker compose build --no-cache backend && docker compose up -d
也可分别更新:仅前端 restart frontend,仅后端 build backend && up backend。
### 开发者约定
- 所有构建产物不提交 Gitdist/、node_modules/ 在 .gitignore
- 依赖锁定文件 pnpm-lock.yaml 必须随源码一起上传
- 环境变量 .env 仅在服务器维护,不纳入版本控制
- 修改 compose 后需重新上传 docker-compose.yml 并重启服务