方案 B:宝塔 Nginx + Compose 数据层(逐步操作)
本方案:宝塔只跑 Nginx。MySQL、Redis、后端全部在 Docker Compose 里。
机器上已经有宝塔 MySQL、还想复用 3306 → 用 方案 A。
不要在这台机再点「安装 Mysql 环境」。
打包说明见 如何打安装包。
0. 这套方案长什么样
| 组件 | 谁提供 | 端口(宿主机) |
|---|---|---|
| 网站入口 | 宝塔 Nginx | 80 |
| 前端 | /www/wwwroot/ruoyi-office/web | /web/ |
| 后端 | 容器 ruoyi-yudao | 127.0.0.1:48080 |
| 数据库 | 容器 ruoyi-mysql(镜像 mysql:8.0) | 127.0.0.1:13306(避开宝塔 3306) |
| 缓存 | 容器 ruoyi-redis | 127.0.0.1:16379 |
建议机器:≥ 4 核 8G。8G 内存时后端容器限制约 2G(-Xmx1g),再小容易启动到一半被系统杀掉。磁盘建议 ≥ 80G。必须能上外网(拉 mysql / redis / eclipse-temurin 镜像)。
1. 登录宝塔面板
- 打开
https://服务器IP:面板端口/安全入口。证书自签,点 高级 → 继续访问。 - 登录。绑定手机可跳过。
- 安全入口写错会 404(nginx 字样),用服务器上
bt default核对当前地址。
2. 软件商店:只装 Nginx 和 Docker
打开 软件商店:
- 安装 Nginx(1.22 / 1.24 均可)→ 运行中。
- 安装 Docker(含 Compose)→ 运行中。
- 终端检查:
nginx -v
docker version
docker compose version || docker-compose version2.1 为什么「数据库」是空的?
打开 数据库 → MySQL 会看到「当前未安装 Mysql 环境」——这是方案 B 的正常状态:

中间那个 「安装 Mysql 环境」不要点。点了会占用 3306,和 Compose 里的库两套打架。
本包的库在 Docker 里,宿主机端口是 13306,不进宝塔数据库菜单。
2.2 为什么「网站 → PHP 项目」是空的?
安装脚本直接写 Nginx 配置文件,不会在 PHP 项目里点「添加站点」:

请看 文件 里的 /www/wwwroot/ruoyi-office/web 和 vhost/nginx/ruoyi-office.conf,或直接用浏览器打开 /web/。
2.3 为什么 Docker「应用商店 → 已安装」是空的?
那是宝塔应用市场装的模板,我们用的是 命令行 Compose,不会出现在这里:

请改点顶部 「容器」 或 「Compose 编排」。装完后应看到三个容器:
ruoyi-yudaoruoyi-mysqlruoyi-redis
3. 上传安装包
- 按 如何打安装包 准备目录或 zip。
- 宝塔 文件 →
/opt/→ 上传并解压为:
/opt/ruoyi-office-pack/
install.sh
compose/
sql/
web/
app/yudao-server.jar4. 填写 compose/.env(方案 B 专用)
DEPLOY_MODE=b 不要改成 a。
DEPLOY_MODE=b
SITE_HOST=192.168.1.20
HTTP_PORT=80
MYSQL_HOST=127.0.0.1
MYSQL_PORT=13306
MYSQL_DATABASE=ruoyi-office
MYSQL_USERNAME=ruoyi
MYSQL_PASSWORD=请改成一套足够长的密码
REDIS_HOST=redis
REDIS_PORT=6379
REDIS_PASSWORD=请改成Redis密码
DRUID_USERNAME=admin
DRUID_PASSWORD=请改成监控台密码
JAVA_OPTS="-Xms512m -Xmx1g -Djava.security.egd=file:/dev/./urandom"
YUDAO_IMAGE_TAG=latest说明:
| 项 | 怎么填 |
|---|---|
SITE_HOST | 办公电脑访问用的 IP/域名,不要写 127.0.0.1 |
MYSQL_PASSWORD | Compose 里 MySQL 的 root 和业务用户都用这串(镜像官方变量) |
MYSQL_PORT | 给宿主机映射用,容器内部仍是 3306;保持 13306 |
REDIS_HOST | 必须写 redis(compose 服务名),不要写 127.0.0.1 |
REDIS_PASSWORD | 必填,会写入 redis.conf 的 requirepass |
JAVA_OPTS | 加双引号;8G 机器不要把 -Xmx 调到 2g 以上,容易把整机打满 |
MYSQL_ROOT_PASSWORD | 方案 B 不必填(root 就是上面的 MYSQL_PASSWORD) |
内存 16G 以上才考虑把 JAVA_OPTS 调到 -Xmx2g,并把 compose 里 yudao 的 mem_limit 一起加大。
5. 终端执行首装
cd /opt/ruoyi-office-pack
sed -i 's/\r$//' install.sh update.sh health.sh scripts/*.sh compose/.env
chmod +x install.sh update.sh health.sh scripts/*.sh
bash install.sh首次会:
- 构建
ruoyi-office镜像(jar + temurin JRE) docker compose up拉起 mysql、redis、yudao(mysql 健康检查通过后才导库)- 导入 schema + static_data(几分钟)
- 写 Nginx 并 reload
- 等待
http://127.0.0.1:48080/actuator/health为 UP(启动约 1~2 分钟)
若 yudao 日志里出现 Killed:内存不够,确认 compose 中 yudao mem_limit 为 2g,且 JAVA_OPTS 为 -Xmx1g。实验室 8G 机在 1.5G 限制下会被杀掉。
6. 在宝塔里怎么核对
| 去哪看 | 应该看到 |
|---|---|
| Docker → 容器 | ruoyi-yudao、ruoyi-mysql、ruoyi-redis 均为 Up / healthy |
文件 /www/wwwroot/ruoyi-office/web/index.html | 存在 |
文件 /www/server/panel/vhost/nginx/ruoyi-office.conf | server_name = SITE_HOST |
| 数据库 → MySQL | 仍提示未安装 —— 正常,不要装 |
| 浏览器 | http://SITE_HOST/web/ |
用服务器本机 curl 127.0.0.1/web/ 可能 404,请用办公电脑访问 IP,或 curl 时加 Host: SITE_HOST。
7. 浏览器验收
打开 http://SITE_HOST/web/,租户选 宇擎源码,账号 admin(密码见交付清单;实验室为 admin123)。
工作台:

用户管理(有组织树和用户列表即表示库已导入、反代正常):

8. 以后更新
cd /opt/ruoyi-office-pack
bash update.sh只换镜像和前端,不重建 MySQL 数据卷(/opt/ruoyi-office/mysql/data)。误删该目录等于毁库。
9. 排障
bash /opt/ruoyi-office/scripts/health.sh
docker ps
docker logs --tail 80 ruoyi-yudao
docker logs --tail 40 ruoyi-mysql| 现象 | 处理 |
|---|---|
| 宝塔数据库/PHP/Docker 应用商店是空的 | 方案 B 正常,见第 2 节 |
yudao 反复重启、日志 Killed | 加内存或确认 2G 限制 + -Xmx1g |
| MySQL 容器起不来 | 看 MYSQL_PASSWORD、数据目录权限 |
| Redis AUTH 失败 | .env 的 REDIS_PASSWORD 必须和 redis.conf 里一致(脚本按 CHANGE_ME_REDIS 替换) |
| 拉镜像失败 | 给 Docker 配国内镜像加速 |
JAVA_OPTS 导致 source 失败 | 整段加双引号 |
10. 生产建议
- 确认三个容器
restart: always已在跑(compose 默认 always)。 - 需要滑块验证码时,把
/opt/ruoyi-office/app/config/application-prod.yaml的yudao.captcha.enable改为true,再docker compose up -d --force-recreate yudao-server。 - 13306 / 16379 / 48080 只绑在
127.0.0.1,不要对公网开放。 - 改掉
admin默认密码。
