# 中州养老部署指南 ## 1. 部署架构 本项目按前后端分离部署: - 前端:`zzyl-ui`,Vue 2 项目,使用 `pnpm` 构建,打包为 Nginx 镜像。 - 后端:`zzyl-admin`,Spring Boot 服务,JDK 11,容器内端口 `9000`。 - 中间件:MySQL 8、Redis 7。 - CI:GitHub Actions 构建并推送 `zzyl-admin`、`zzyl-ui` 两个镜像。 - CD:服务器上手动执行 Docker Compose,所有运行时变量统一写在 `deploy/compose/.env`。 生产入口为前端服务:`http://服务器IP或域名:${UI_PORT}/`。前端 `/prod-api/` 会由 Nginx 转发到后端 `zzyl-admin:9000`。 ## 2. 需要准备的材料 - Linux 服务器,建议 2 核 4G 以上,已安装 Docker Engine、Docker Compose Plugin、Git、curl。 - 阿里云 ACR 或其他 Docker Registry,用于保存后端和前端镜像。 - GitHub Secrets:`ACR_REGISTRY`、`ACR_USERNAME`、`ACR_PASSWORD`、`IMAGE_NAMESPACE`。 - 域名和 DNS 解析;如对外提供 HTTPS,还需要证书或上层反向代理网关。 - 数据库初始化脚本:`sql/dev0302.sql`、`sql/quartz.sql`。 - 阿里云 OSS:Bucket、Endpoint、Region、AccessKeyId、AccessKeySecret。 - 微信小程序:`appId`、`secret`,并把生产域名加入小程序后台白名单。 - 华为云 IoTDA/AMQP:AK、SK、ProjectId、Endpoint、RegionId、AMQP Host、AccessKey、AccessCode、QueueName。 - 百度千帆:AccessKey、SecretKey、模型名。 ## 3. CI 构建流程 工作流文件:`.github/workflows/build-and-push.yml`。 触发方式: - 推送到 `main` 或 `master`。 - 推送 `v*` Tag。 - 在 GitHub Actions 手动执行 `workflow_dispatch`。 CI 会执行: 1. 使用 JDK 11 执行 `mvn -B clean package -DskipTests`。 2. 基于 `zzyl-admin/Dockerfile` 构建并推送 `zzyl-admin:${tag}`。 3. 基于 `zzyl-ui/Dockerfile` 使用 `pnpm install --frozen-lockfile && pnpm build:prod` 构建并推送 `zzyl-ui:${tag}`。 4. 分支构建会额外推送 `latest` 标签。 镜像地址示例: ```text registry.cn-hangzhou.aliyuncs.com/your-namespace/zzyl-admin:latest registry.cn-hangzhou.aliyuncs.com/your-namespace/zzyl-ui:latest ``` ## 4. 服务器目录与环境变量 推荐目录: ```bash mkdir -p /opt/zzyl/compose /opt/zzyl/sql mkdir -p /data/zzyl/{logs,uploadPath} ``` 复制文件到服务器: - `deploy/compose/docker-compose.full.yml` 到 `/opt/zzyl/compose/docker-compose.yml` - `deploy/compose/.env.example` 到 `/opt/zzyl/compose/.env` - `sql/dev0302.sql` 和 `sql/quartz.sql` 到 `/opt/zzyl/sql` 编辑 `/opt/zzyl/compose/.env`,至少修改: - `ZZYL_ADMIN_IMAGE`、`ZZYL_UI_IMAGE` - `UI_PORT`,如果宿主机 Nginx 也监听 80,建议改为 `8080` - `MYSQL_ROOT_PASSWORD`、`MYSQL_APP_PASSWORD`、`MYSQL_PASSWORD` - `REDIS_PASSWORD` - `TOKEN_SECRET`、`DRUID_LOGIN_PASSWORD` - OSS、微信、华为云、百度千帆相关变量 注意:`MYSQL_APP_USER/MYSQL_APP_PASSWORD` 必须与 `MYSQL_USERNAME/MYSQL_PASSWORD` 保持一致。 ## 5. 首次部署 进入部署目录: ```bash cd /opt/zzyl/compose docker compose --env-file .env up -d mysql redis ``` 初始化数据库: ```bash set -a . ./.env set +a docker exec -i zzyl-mysql mysql -uroot -p"${MYSQL_ROOT_PASSWORD}" < /opt/zzyl/sql/dev0302.sql docker exec -i zzyl-mysql mysql -uroot -p"${MYSQL_ROOT_PASSWORD}" zzyl < /opt/zzyl/sql/quartz.sql ``` 启动完整系统: ```bash docker compose --env-file .env pull docker compose --env-file .env up -d docker compose --env-file .env ps ``` ## 6. 进入系统 浏览器访问: ```text http://服务器IP或域名/ ``` 如果 `UI_PORT` 不是 `80`,访问: ```text http://服务器IP或域名:${UI_PORT}/ ``` 默认后台账号: - 用户名:`admin` - 密码:`admin123` 首次登录后请立即修改管理员密码,并检查系统管理、养老业务菜单是否正常显示。 ## 7. 升级与验证 升级: ```bash cd /opt/zzyl/compose docker compose --env-file .env pull docker compose --env-file .env up -d docker image prune -f ``` 验证: ```bash docker compose --env-file .env ps docker logs zzyl-admin --tail 200 docker logs zzyl-ui --tail 100 curl -I http://127.0.0.1:${UI_PORT}/ ``` 常见问题: - 前端打不开:检查 `zzyl-ui` 容器、`UI_PORT`、安全组和防火墙。 - 登录验证码失败:检查 `/prod-api/captchaImage` 是否被 Nginx 转发到后端。 - 后端启动失败:优先查看 MySQL、Redis、华为云 IoTDA/AMQP、OSS、百度千帆变量。 - 上传失败:检查 OSS 配置和 `RUOYI_PROFILE=/data/zzyl/uploadPath`。