# 中尚鹏管理系统 - 部署说明 ``` 作者: rovina 最近修订: 2026/3/2 ``` --- ## 一、环境要求 | 组件 | 版本 | |------|------| | Node.js | 18+ | | pnpm | 8+ | | Go | 1.21+ | | MySQL | 8.0+ | --- ## 二、后端部署 ### 2.1 配置文件 复制并修改 `backend/configs/config.dev.yaml`: ```yaml server: port: 8080 mode: "release" # 生产环境建议 release read_timeout: 30 write_timeout: 30 database: host: "127.0.0.1" # 或 MySQL 服务地址 port: 3306 user: "root" password: "your_password" dbname: "myapp" max_open_conns: 100 max_idle_conns: 10 reset_database: false # 生产务必 false jwt: secret: "your_jwt_secret" expire_hours: 24 ``` ### 2.2 启动 ```bash cd backend # 指定配置文件(可选,默认 ./configs/config.dev.yaml) export CONFIG_PATH=./configs/config.prod.yaml go run ./cmd/api # 或编译后运行 go build -o zsp-api ./cmd/api && ./zsp-api ``` ### 2.3 数据目录 - 单合同附件:`./data/contract/uploads/` - 批量归档:`./data/contract/batch_archive/` 首次运行会自动创建,需确保进程有写权限。 --- ## 三、前端部署 ### 3.1 开发环境 ```bash cd frontend pnpm install pnpm dev ``` 前端默认端口 8848(可改 `.env.development` 中 VITE_PORT),API 请求 `/api/*` 会代理到 `http://127.0.0.1:8080`。 ### 3.2 生产构建 ```bash cd frontend pnpm install pnpm build ``` 产物在 `dist/`,需配合 Nginx 等 Web 服务器部署。 ### 3.3 为什么打包部署后访问不到 8080 的数据? 打包后前端是**静态资源**,在**用户浏览器**里运行。请求会发到「打开页面时的那台服务器的同源地址」: - 开发时:页面来自 `http://127.0.0.1:5173`,Vite 把 `/api` 代理到本机 8080,所以能访问。 - 部署后:页面来自 `http://你的服务器:80`,浏览器只会把 `/api` 发到 `http://你的服务器:80/api`,**不会**自动发到 8080。 因此必须让**提供前端页面的 Web 服务器**(如 Nginx)把 `/api` 反向代理到本机 8080(或后端容器)。同时前端已统一用**相对路径** `/api/xxx`,不再写死 `127.0.0.1:8080`,这样部署后即可通过同源访问到后端。 ### 3.4 Nginx 配置 完整配置文件见 `docs/deploy/nginx.conf`,包含: - SPA 路由重写(`try_files $uri /index.html`) - API 反向代理(`/api` → `127.0.0.1:8080`) - 大文件上传支持(`client_max_body_size 100m`) - 静态文件缓存(合同附件 7 天缓存) - Gzip 压缩 --- ## 四、Docker 部署(可选) ### 4.1 后端 Dockerfile 示例 ```dockerfile FROM golang:1.21-alpine AS builder WORKDIR /app COPY go.mod go.sum ./ RUN go mod download COPY . . RUN CGO_ENABLED=0 go build -o zsp-api ./cmd/api FROM alpine:latest WORKDIR /app COPY --from=builder /app/zsp-api . COPY --from=builder /app/configs ./configs RUN mkdir -p data/contract/uploads data/contract/batch_archive EXPOSE 8080 CMD ["./zsp-api"] ``` ### 4.2 运行 ```bash # 需挂载配置与数据目录 docker run -d -p 8080:8080 \ -v $(pwd)/configs:/app/configs \ -v $(pwd)/data:/app/data \ -e CONFIG_PATH=/app/configs/config.prod.yaml \ zsp-backend ``` --- ## 五、健康检查 - 后端:`GET http://{host}:8080/health` 返回 `{"status":"ok"}` - 合同 API:`GET http://{host}:8080/api/contract` 需返回 JSON --- ## 六、常见问题 1. **跨域**:后端已启用 CORS,生产环境若前后端同域可无需额外配置。 2. **文件访问**:合同文件通过 `/api/contract-files/{path}` 访问,确保 Nginx 将 `/api` 转发至后端。 3. **数据库**:首次部署需确保 MySQL 已创建 `myapp` 库,表由 GORM AutoMigrate 自动创建。 4. **JWT 认证**:除 `/api/auth/login`、`/api/auth/register` 外,所有 API 均需 JWT 认证。前端需在登录后存储 token,并在后续请求中通过 `Authorization: Bearer ` 头传递。token 有效期为 24 小时。