一、文档说明
本文档覆盖佑桥系统从零开始的完整安装部署过程,包括环境准备、安装实施、安装验证、 备份恢复、版本升级、可选能力开启与故障排查。
佑桥系统由四个部分组成,本次交付的 Docker 部署包会把它们编排为一台服务器上的一组容器:
| 组件 | 作用 | 容器名 |
|---|---|---|
| MySQL 8 | 业务主库,存放文件元数据、权限、字典、菜单等 | youqiao-mysql |
| Redis 7 | 缓存与登录会话 | youqiao-redis |
| 后端服务 | Java 17 Spring Boot,对外提供 REST 接口(8688) | youqiao-backend |
| 前端站点 | Nginx 托管单页应用,反向代理接口(80) | youqiao-web |
二、交付清单
A. 部署脚手架(本压缩包)
youqiao-docker-3.8.9.zip—— 编排文件、镜像定义、初始化 SQL、安装脚本与本文档。
B. 运行时产物(需从佑桥官网「软件下载」页获取)
| 文件 | 版本 | 大小 | 说明 |
|---|---|---|---|
youqiao-admin-3.8.9.jar | 3.8.9 | 约 311 MB | 后端可执行 jar(含全部依赖) |
youqiao-web-frontend-3.8.9.zip | 3.8.9 | 约 9 MB | 前端构建产物,解压后为 dist/ |
youqiao-init-sql-3.8.9.zip | 3.8.9 | 约 18 KB | 初始化 SQL(部署包内已自带,单独提供便于离线取用) |
C. 配套工具(可选,同一软件下载页)
| 文件 | 说明 |
|---|---|
youqiao-agent-skill-1.0.0.zip | 智能体文件同步 Skill,Node.js ≥ 14 可直接运行 |
youqiao-sync-1.0.0-win-x64-setup.exe | PC 同步客户端 · Windows 安装版 |
youqiao-sync-1.0.0-win-x64-portable.exe | PC 同步客户端 · Windows 便携版 |
youqiao-sync-1.0.0-linux-amd64.deb | PC 同步客户端 · Linux Debian/Ubuntu |
youqiao-sync-1.0.0-linux-x64.tar.gz | PC 同步客户端 · Linux 通用免安装版 |
youqiao-sync-1.0.0-mac-x64.dmg | PC 同步客户端 · macOS Intel 芯片 |
youqiao-sync-1.0.0-mac-arm64.dmg | PC 同步客户端 · macOS Apple Silicon(M 系列) |
| 文件 | SHA256 | 大小 |
|---|---|---|
youqiao-admin-3.8.9.jar | 590cd4fa4e6129b2… | 310.7 MB |
youqiao-agent-skill-1.0.0.zip | e96d1ad4af3f5238… | 0.2 MB |
youqiao-deployment-guide-3.8.9.md | a317f6b0bd014de7… | 0.0 MB |
youqiao-docker-3.8.9.zip | ac754bca1c0f50fe… | 0.0 MB |
youqiao-init-sql-3.8.9.zip | bddeb127569ead34… | 0.0 MB |
youqiao-sync-1.0.0-linux-amd64.deb | 7798d724d26e4e45… | 103.5 MB |
youqiao-sync-1.0.0-linux-x64.tar.gz | e403b5571e5b3e6c… | 100.0 MB |
youqiao-sync-1.0.0-mac-arm64.dmg | 3f2beb448aeece68… | 86.3 MB |
youqiao-sync-1.0.0-mac-x64.dmg | 52eff24e4c89364c… | 90.5 MB |
youqiao-sync-1.0.0-win-x64-portable.exe | 0cb6488f0a2b5f7d… | 77.0 MB |
youqiao-sync-1.0.0-win-x64-setup.exe | 766a8506f068414c… | 77.2 MB |
youqiao-web-frontend-3.8.9.zip | ae0c3e4792d60851… | 9.0 MB |
checksums.txt。三、环境要求
3.1 硬件建议
| 规模 | CPU | 内存 | 磁盘 | 说明 |
|---|---|---|---|---|
| 试用 / 演示 | 4 核 | 8 GB | 100 GB SSD | 仅开启基础功能 |
| 常规生产 | 8 核 | 16 GB | 300 GB SSD | 推荐配置 |
| 较大规模 | 16 核 | 32 GB+ | 1 TB SSD | 文件量大或并发高时 |
3.2 操作系统
推荐 Linux x86_64,已在以下发行版验证:
- Ubuntu 20.04 / 22.04 / 24.04
- CentOS 7.9 / Rocky Linux 8、9
- Debian 11 / 12
- Anolis OS 8、OpenEuler 22.03(信创场景)
Windows / macOS 也可通过 Docker Desktop 安装,但不建议用于生产。
3.3 软件依赖
| 软件 | 版本要求 | 安装方式 |
|---|---|---|
| Docker Engine | ≥ 20.10(建议 24+) | 见 5.1 |
| Docker Compose | ≥ V2(docker compose 命令) | Docker 官方安装脚本自带 |
| 可选:git / curl / vim | 任意 | 系统包管理器 |
3.4 端口规划
| 端口 | 服务 | 是否必须对外开放 | 说明 |
|---|---|---|---|
| 80 | 前端站点 | 是 | 用户访问入口,可在 .env 改 WEB_PORT |
| 8688 | 后端接口 | 否(经前端反代) | 若需第三方系统集成则开放 |
| 13306 | MySQL | 强烈建议不开放 | 默认映射到宿主机便于排障,生产请在 compose 中删除该映射 |
| 6379 | Redis | 否 | 不映射到宿主机,仅容器内访问 |
| 9000 / 9001 | MinIO | 否 | 可选服务(--profile search) |
| 9200 | Elasticsearch | 否 | 可选服务(--profile search) |
| 19530 | Milvus | 否 | 可选服务(--profile search) |
| 8012 | kkFileView | 否 | 可选服务(--profile search) |
四、部署总览
用户浏览器
│ http://服务器IP:80
▼
┌───────────────────┐
│ youqiao-web │ Nginx + 前端静态资源
│ (Nginx 容器) │ /prod-api/* 反向代理
└─────────┬─────────┘
│ http://backend:8688
▼
┌─────────────────────────────────────────────┐
│ youqiao-backend (容器) │
│ Spring Boot 3.x + MyBatis-Plus + Quartz │
└──────┬──────────────┬──────────────┬────────┘
│ │ │
┌───────▼──────┐ ┌─────▼─────┐ ┌──────▼────────┐
│ youqiao-mysql│ │youqiao- │ │ 挂载卷 │
│ (MySQL 8) │ │redis(R7) │ │ upload/plugins │
└──────────────┘ └───────────┘ └────────────────┘五、安装前准备
5.1 安装 Docker(含国内镜像加速)
# 1) 安装 Docker Engine + Compose 插件(适用于多数 Linux)
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
# 2) 启动并设置开机自启
systemctl enable --now docker
# 3) 配置国内镜像加速(国内服务器强烈建议配置,否则拉镜像会很慢)
mkdir -p /etc/docker
cat > /etc/docker/daemon.json <<'EOF'
{
"registry-mirrors": [
"https://docker.m.daocloud.io",
"https://mirror.ccs.tencentyun.com"
],
"log-driver": "json-file",
"log-opts": { "max-size": "100m", "max-file": "3" }
}
EOF
systemctl daemon-reload && systemctl restart docker
# 4) 验证
docker version && docker compose version若服务器无法访问外网,请在一台可联网的机器上先把所需基础镜像导出,再拷贝到目标服务器导入:
# 联网机器
docker pull mysql:8.0.36 redis:7.2-alpine eclipse-temurin:17-jre-jammy nginx:1.25-alpine
docker save -o base-images.tar mysql:8.0.36 redis:7.2-alpine eclipse-temurin:17-jre-jammy nginx:1.25-alpine
# 目标服务器
docker load -i base-images.tar5.2 上传部署包与运行时产物
mkdir -p /opt/youqiao && cd /opt/youqiao
# 1) 解压部署脚手架
unzip youqiao-docker-3.8.9.zip
cd youqiao-docker-3.8.9
# 2) 放入后端 jar
cp /path/to/youqiao-admin-3.8.9.jar runtime/backend/
# 3) 放入前端产物(注意:放的是 dist 里面那一层,不要多套一层 dist/)
unzip /path/to/youqiao-web-frontend-3.8.9.zip # 得到 dist/
cp -r dist/* runtime/web/
ls runtime/web # 应能看到 index.html、static/、html/、styles/dist 整个目录拷进 runtime/web/,变成 runtime/web/dist/index.html, 会导致 Nginx 打开是 403/404。请确认 runtime/web/index.html 存在。5.3 防火墙放行
# firewalld(CentOS / Rocky / openEuler)
firewall-cmd --permanent --add-port=80/tcp
firewall-cmd --reload
# ufw(Ubuntu / Debian)
ufw allow 80/tcp
ufw reload
# 云服务器还需在「安全组」中放行 80 端口六、安装步骤
6.1 生成并修改配置
cp .env.example .env
vi .env核心配置项说明(完整清单见附录 A):
| 变量 | 默认值 | 必改建议 |
|---|---|---|
MYSQL_ROOT_PASSWORD | YouQiao@2026 | 必须改 |
MYSQL_PASSWORD | youqiao@2026 | 必须改 |
MYSQL_DATABASE | yq2 | 一般不变 |
REDIS_PASSWORD | YouQiaoRedis@2026 | 必须改(不能留空) |
WEB_PORT | 80 | 80 被占用时改为 8080 等 |
BACKEND_PORT | 8688 | 一般不变 |
JAVA_OPTS | -Xms1g -Xmx2g | 按服务器内存调整 |
.env 不会自动生效, 需要用新口令重建服务(见 9.3)。6.2 执行安装
bash scripts/install.sh脚本会依次完成:环境检查 → 生成 .env → 校验运行时产物是否齐备 → 创建数据目录 → 构建镜像 → 启动容器 → 等待后端健康检查通过。
首次构建耗时主要取决于基础镜像下载速度,通常 3~10 分钟。看到下面这段话即表示安装成功:
================================================================
安装完成
访问地址:http://<服务器IP>:80
超级管理员:admin
初始密码 :admin123
================================================================6.3 数据库初始化说明
MySQL 容器首次启动时会自动按文件名字典序执行 sql/ 下的脚本:
01-schema.sql—— 建 69 张表(含文件治理、权限、审批、工具平台、插件宿主等)02-seed.sql—— 写入体系种子数据(部门、角色、菜单、字典、岗位、参数、文件类型、工具接口)
./scripts/ctrl.sh uninstall 删除数据卷。初始化脚本只含表结构与体系配置,不包含任何业务数据,也不会写入任何外部存储的密钥。
6.4 首次登录与安全加固
- 浏览器打开
http://<服务器IP>:80 - 使用
admin / admin123登录 - 立即:右上角头像 → 个人中心 → 修改密码
- 到「系统管理 → 存储管理 / 办公管理 → 存储配置」配置对象存储(阿里云 OSS / MinIO 等)
- 生产环境建议把
docker-compose.yml里 MySQL 的ports映射删除后重建,避免数据库暴露
七、验证安装
# 1) 四个核心容器都应为 Up(backend 健康检查为 healthy)
./scripts/ctrl.sh status
# 2) 前端页面可打开
curl -sS -o /dev/null -w "HTTP %{http_code}\n" http://127.0.0.1:80/
# 3) 验证码接口可返回(无需登录,用于确认后端确实活着)
curl -sS -o /dev/null -w "HTTP %{http_code}\n" http://127.0.0.1:80/prod-api/captchaImage
# 4) 数据库表已建立
docker exec youqiao-mysql mysql -uroot -p"$MYSQL_ROOT_PASSWORD" -e "USE yq2; SHOW TABLES;" | wc -l
# 期望输出约 70(69 张表 + 表头)浏览器侧验证:打开登录页能看到验证码图片 → 输入 admin 登录成功 → 进入首页能加载文件列表菜单。
八、可选能力
默认只启动基础四件套。以下能力按需开启(建议生产环境通过 --profile 显式开启):
docker compose --profile search up -d| 能力 | 涉及服务 | 开启后的动作 |
|---|---|---|
| 全文检索 | elasticsearch | 在后端启动参数打开 --Es.enable=true 并配置 host/port |
| 向量检索 | milvus + milvus-etcd + milvus-minio | 打开 --Milvus.enable=true |
| 私有化对象存储 | minio-store | 系统内「存储配置」选择 MinIO 类型并填写 minio-store:9000 |
| 文件在线预览 | kkfileview | 系统内配置预览服务地址 http://kkfileview:8012 |
九、运维与数据
9.1 备份
# 数据库备份(ctrl.sh 已内置)
./scripts/ctrl.sh backup
# 产物:backup/yq2_YYYYMMDD_HHMMSS.sql
# 文件数据备份:直接打包落盘目录
tar czf youqiao-data-$(date +%Y%m%d).tar.gz runtime/data runtime/logs建议用 crontab 每天执行一次数据库备份:
0 2 * * * cd /opt/youqiao/youqiao-docker-3.8.9 && ./scripts/ctrl.sh backup9.2 恢复
# 停服后恢复(不要在运行中恢复)
./scripts/ctrl.sh stop
# 重新起一个空库并导入
docker compose up -d mysql
docker exec -i youqiao-mysql mysql -uroot -p"$MYSQL_ROOT_PASSWORD" < backup/yq2_20260926_020000.sql
docker compose up -d9.3 修改数据库/缓存口令后如何生效
口令固化在数据卷中,改 .env 后再 docker compose up -d 不会生效。正确做法:
./scripts/ctrl.sh uninstall # 删除容器与数据卷(会清库!先备份)
vi .env # 修改新口令
bash scripts/install.sh # 重新初始化9.4 版本升级
升级后端或前端产物(不涉及数据结构变更时):
cp /path/to/new/youqiao-admin-x.y.z.jar runtime/backend/
rm -f runtime/backend/youqiao-admin-3.8.9.jar
sed -i 's/youqiao-admin-3.8.9.jar/youqiao-admin-x.y.z.jar/' backend/Dockerfile
cp -r /path/to/new/dist/* runtime/web/
./scripts/ctrl.sh pull-upgrade若升级说明中提到「含数据库变更」,请先备份,再按随版本提供的增量 SQL 手工执行。
十、故障排查
| 现象 | 可能原因 | 处理 | |
|---|---|---|---|
| 打开页面 403 / 白屏 | 前端文件放错层级 | 确认 runtime/web/index.html 存在(见 5.2 提示),然后 ./scripts/ctrl.sh rebuild | |
| 页面能开但验证码图片不显示 | 后端未启动或反代不通 | ./scripts/ctrl.sh logs backend;确认 backend 健康;检查 nginx /prod-api/ 配置是否被改过 | |
| 登录提示验证码错误 | Redis 未就绪或时钟不准 | docker exec youqiao-redis redis-cli -a <REDIS_PASSWORD> ping;检查服务器时区是否为 CST | |
| backend 反复重启 | 数据库连接失败 / 内存不足 | docker logs youqiao-backend --tail=200;确认 .env 口令与数据卷内实际口令一致;调小 JAVA_OPTS | |
docker compose 报 version obsolete | 使用了新版 Compose | 无害提示,可忽略 | |
| 初始化 SQL 没执行 | 数据卷不是空的 | ./scripts/ctrl.sh uninstall 后重装(注意会清库) | |
端口占用(address already in use) | 80/8688/13306 已被占 | 改 .env 中对应端口,或停掉占用进程 `ss -lntp \ | grep :80` |
| 镜像拉取超时 | 服务器访问 Docker Hub 慢 | 配置 5.1 的镜像加速,或改用离线导入方式 | |
| 上传大文件失败 | Nginx/后端体积限制 | nginx.conf 中 client_max_body_size 已设 1024m;后端 spring.servlet.multipart.max-file-size 默认 10MB,如需更大请改后端配置 |
日志定位速查:
./scripts/ctrl.sh logs backend # 后端
./scripts/ctrl.sh logs web # 前端 / Nginx
./scripts/ctrl.sh logs mysql # 数据库
./scripts/ctrl.sh status # 各容器健康状态附录 A:环境变量清单
| 变量 | 默认值 | 作用 |
|---|---|---|
MYSQL_ROOT_PASSWORD | YouQiao@2026 | MySQL root 口令,后端连接默认使用 root |
MYSQL_DATABASE | yq2 | 业务库名 |
MYSQL_USER / MYSQL_PASSWORD | youqiao / youqiao@2026 | 附加普通账号(便于运维自行登录) |
MYSQL_PORT | 13306 | MySQL 映射到宿主机的端口 |
REDIS_PASSWORD | YouQiaoRedis@2026 | Redis 口令,不可为空 |
WEB_PORT | 80 | 前端对外端口 |
BACKEND_PORT | 8688 | 后端对外端口 |
JAVA_OPTS | -Xms1g -Xmx2g -XX:+UseG1GC | JVM 参数 |
MINIO_ROOT_USER / MINIO_ROOT_PASSWORD | youqiao / youqiao@2026 | 可选 MinIO 账号 |
后端容器内部还有一组变量(MYSQL_HOST、REDIS_HOST、SERVER_PORT 等), 在 docker-compose.yml 中已写死为容器名,一般无需修改。
附录 B:不使用 Docker 的部署方式
若客户环境不允许使用容器,可按下面方式手工部署。
1) 安装依赖:JDK 17、MySQL 8、Redis 7、Nginx。
2) 初始化数据库
mysql -uroot -p -e "CREATE DATABASE yq2 DEFAULT CHARSET utf8mb4 COLLATE utf8mb4_unicode_ci;"
mysql -uroot -p yq2 < sql/01-schema.sql
mysql -uroot -p yq2 < sql/02-seed.sql3) 启动后端
mkdir -p /home/youqiao/uploadPath /home/youqiao/plugins /home/youqiao/logs
cd /home/youqiao
nohup java -Xms1g -Xmx2g -jar youqiao-admin-3.8.9.jar \
--server.port=8688 \
--spring.profiles.active=druid \
--spring.datasource.druid.master.url='jdbc:mysql://127.0.0.1:3306/yq2?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&serverTimezone=GMT%2B8' \
--spring.datasource.druid.master.username=root \
--spring.datasource.druid.master.password='你的口令' \
--spring.redis.host=127.0.0.1 \
--spring.redis.password='你的口令' \
--ruoyi.profile=/home/youqiao/uploadPath \
--youqiao.plugin.home=/home/youqiao/plugins \
> logs/backend.log 2>&1 &4) 部署前端:把 dist/ 内容放到 Nginx 站点根目录,参考 frontend/nginx.conf (把 proxy_pass http://backend:8688; 改成 http://127.0.0.1:8688;)。
附录 C:数据落盘位置
| 数据 | 位置 | 是否必须备份 |
|---|---|---|
| 业务数据库 | Docker 卷 mysql_data | 是(ctrl.sh backup) |
| 上传的文件(本地存储模式) | runtime/data/upload | 是 |
| 子系统插件目录 | runtime/data/plugins | 是(重新安装子系统需恢复) |
| 后端日志 | runtime/logs/backend | 否 |
| Redis 持久化 | Docker 卷 redis_data | 否(缓存性质) |