Files
zhongzhou-elderly-care/doc/部署指南.md
2026-04-26 08:09:15 +08:00

4.5 KiB
Raw Blame History

中州养老部署指南

1. 部署架构

本项目按前后端分离部署:

  • 前端:zzyl-uiVue 2 项目,使用 pnpm 构建,打包为 Nginx 镜像。
  • 后端:zzyl-adminSpring Boot 服务JDK 11容器内端口 9000
  • 中间件MySQL 8、Redis 7。
  • CIGitHub Actions 构建并推送 zzyl-adminzzyl-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 SecretsACR_REGISTRYACR_USERNAMEACR_PASSWORDIMAGE_NAMESPACE
  • 域名和 DNS 解析;如对外提供 HTTPS还需要证书或上层反向代理网关。
  • 数据库初始化脚本:sql/dev0302.sqlsql/quartz.sql
  • 阿里云 OSSBucket、Endpoint、Region、AccessKeyId、AccessKeySecret。
  • 微信小程序:appIdsecret,并把生产域名加入小程序后台白名单。
  • 华为云 IoTDA/AMQPAK、SK、ProjectId、Endpoint、RegionId、AMQP Host、AccessKey、AccessCode、QueueName。
  • 百度千帆AccessKey、SecretKey、模型名。

3. CI 构建流程

工作流文件:.github/workflows/build-and-push.yml

触发方式:

  • 推送到 mainmaster
  • 推送 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 标签。

镜像地址示例:

registry.cn-hangzhou.aliyuncs.com/your-namespace/zzyl-admin:latest
registry.cn-hangzhou.aliyuncs.com/your-namespace/zzyl-ui:latest

4. 服务器目录与环境变量

推荐目录:

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.sqlsql/quartz.sql/opt/zzyl/sql

编辑 /opt/zzyl/compose/.env,至少修改:

  • ZZYL_ADMIN_IMAGEZZYL_UI_IMAGE
  • UI_PORT,如果宿主机 Nginx 也监听 80建议改为 8080
  • MYSQL_ROOT_PASSWORDMYSQL_APP_PASSWORDMYSQL_PASSWORD
  • REDIS_PASSWORD
  • TOKEN_SECRETDRUID_LOGIN_PASSWORD
  • OSS、微信、华为云、百度千帆相关变量

注意:MYSQL_APP_USER/MYSQL_APP_PASSWORD 必须与 MYSQL_USERNAME/MYSQL_PASSWORD 保持一致。

5. 首次部署

进入部署目录:

cd /opt/zzyl/compose
docker compose --env-file .env up -d mysql redis

初始化数据库:

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

启动完整系统:

docker compose --env-file .env pull
docker compose --env-file .env up -d
docker compose --env-file .env ps

6. 进入系统

浏览器访问:

http://服务器IP或域名/

如果 UI_PORT 不是 80,访问:

http://服务器IP或域名:${UI_PORT}/

默认后台账号:

  • 用户名:admin
  • 密码:admin123

首次登录后请立即修改管理员密码,并检查系统管理、养老业务菜单是否正常显示。

7. 升级与验证

升级:

cd /opt/zzyl/compose
docker compose --env-file .env pull
docker compose --env-file .env up -d
docker image prune -f

验证:

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