# 前端 Docker 部署 ## 前置条件 - 服务器需安装 **Node.js 18+** 和 **pnpm**(macOS 执行 `npm install -g pnpm`) - 后端已部署在同一台服务器上 ## 首次部署 ```bash cd deploy cp .env.example .env vim .env # 改端口(默认 80 常被占用,建议 3100) bash deploy.sh rebuild ``` ## 日常操作 | 命令 | 作用 | 场景 | | ------------------------------- | -------------------------- | ------------------ | | `bash deploy.sh start` | 停旧容器 → 启动(不编译) | 改了 nginx 配置 | | `bash deploy.sh build [分支]` | 宿主机构建 dist → 编译镜像 | 代码变了,先编译 | | `bash deploy.sh rebuild [分支]` | 拉取分支代码 + 编译 + 启动 | 代码变了,一步到位 | | `bash deploy.sh stop` | 停止 | - | | `bash deploy.sh logs` | 查看日志 | 排查问题 | | `bash deploy.sh status` | 容器状态 | - | > 分支参数默认 `master`,指定其他分支:`bash deploy.sh rebuild test` ## 构建原理 宿主机构建 dist + Docker 打包 Nginx(因 Mac Docker Desktop 内存限制,Docker 内编译会 OOM): ``` 宿主 pnpm build → dist/ ↓ Docker (nginx:alpine) ├─ nginx 配置 → /etc/nginx/conf.d/ └─ dist/ → /usr/share/nginx/html/ ``` ## Nginx 代理规则 | 路径 | 转发目标 | 说明 | | ------------- | ------------------------------- | ------------------------- | | `/ghb-boot/*` | `http://ghb-backend:8081/ghb/*` | API 代理到后端容器 | | `/*` | 本地静态文件 | 前端路由回退到 index.html | 前后端通过 `public-services_default` 外部网络互通,无需额外配置。 ## 目录结构 ``` deploy/ ├── deploy.sh # 部署脚本(与后端命令一致) ├── .env.example # 配置模板 ├── .env # 实际配置(不入 git) ├── Dockerfile # 精简镜像(nginx + dist) ├── docker-compose.yml # Docker 编排 ├── nginx/ │ └── default.conf # Nginx 配置(含 API 代理) └── README.md ```