initial clean deployment

This commit is contained in:
2026-04-26 08:09:15 +08:00
commit 605530fccc
841 changed files with 101888 additions and 0 deletions

Binary file not shown.

150
doc/部署指南.md Normal file
View File

@@ -0,0 +1,150 @@
# 中州养老部署指南
## 1. 部署架构
本项目按前后端分离部署:
- 前端:`zzyl-ui`Vue 2 项目,使用 `pnpm` 构建,打包为 Nginx 镜像。
- 后端:`zzyl-admin`Spring Boot 服务JDK 11容器内端口 `9000`
- 中间件MySQL 8、Redis 7。
- CIGitHub 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`
- 阿里云 OSSBucket、Endpoint、Region、AccessKeyId、AccessKeySecret。
- 微信小程序:`appId``secret`,并把生产域名加入小程序后台白名单。
- 华为云 IoTDA/AMQPAK、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`