Deployment Guide

OARS 私有化部署手册

面向实施与运维人员,说明 OARS 企业应用平台在客户环境中的标准部署路径。 涵盖 Docker Compose 一键编排、源码传统部署、配置项、首次验收、生产加固、升级备份与常见故障处理。

适用:Linux 生产环境 · OARS 源码交付包 默认端口:前端 18088 / 后端 8080 API 前缀:/oars

1. 概述

OARS 采用前后端分离架构:前端为 Vue 3 静态站点,后端为 Spring Boot 3 单体应用(模块化 Maven 工程)。 私有化部署时,客户通常只需对外暴露一个 Web 入口(Nginx),由 Nginx 托管前端静态资源并反向代理 API。

本手册覆盖两条主流路径:

  • 推荐:Docker Compose 一键编排 MySQL、Redis、后端与 Nginx 前端 — 适合 POC、试点与标准私有化。
  • 备选:源码交付 + 传统部署 — 适合需深度二开、接入现有中间件或信创数据库的项目。
阅读建议 首次部署请按第 5 章顺序操作;生产上线前务必完成第 10 章加固项;升级前阅读第 15 章备份纪律。
命令与环境 本手册中的 Shell 命令、路径与脚本均以 Linux + bash 为准(生产部署推荐环境)。在 Windows 上仅能预览本静态页面,不能直接照抄 cpdeploy/docker/podman-up.sh 等命令;本地开发请使用 WSL2 或连接 Linux 云主机操作。
文档与实测 内容与仓库 deploy/docker/oars-javaoars-web 源码一致,Compose 配置已通过 docker compose config 校验。上线前建议在与生产同规格的干净 Linux 主机完整跑通一次构建与冒烟(见 5.3 验证清单)。

2. 架构说明

标准 Compose 部署时的组件关系如下:

关键路径约定

路径说明
/前端 SPA 入口,History/Hash 路由由 Nginx try_files 回退
/oars/后端 API 上下文路径(server.servlet.context-path
/oars/actuator/health健康检查端点
/oars/swagger-ui.html接口文档(生产建议关闭或限制访问)
/uploads/本地上传文件访问(由后端或 Nginx 反代)

前端构建时 VITE_GLOB_API_URL 须与浏览器实际访问的后端前缀一致。Compose 默认设为 /oars(同域反代,无需写完整域名)。

3. 环境要求

硬件建议

场景CPU内存磁盘
POC / 试点2 核8 GB50 GB SSD
生产(中小规模)4 核+16 GB+100 GB+ SSD(含数据库与上传)
生产(高并发)8 核+32 GB+按上传与日志增长规划

软件依赖

组件版本要求说明
操作系统Linux x86_64(推荐)CentOS 7+、Ubuntu 20.04+、麒麟等;Windows 可用于开发
Docker20.10+Compose 部署路径
Docker Composev2+或使用 Podman 脚本
JDK21+源码部署后端
Maven3.6+源码构建后端
Node.js20+源码构建前端;推荐 pnpm 10.x
MySQL8.0+Flyway 9.x 不支持 MySQL 5.7
Redis6+(推荐 7.x)Token 黑名单、分布式锁等

网络与端口

Docker Compose 与 Podman 脚本 均将 MySQL、Redis、后端映射到 127.0.0.1(仅本机可连),前端端口 18088 绑定 0.0.0.0 对外提供 Web 访问。生产环境仍须在云安全组 / 防火墙中禁止数据库与 Redis 端口对公网开放。

3.1 命令行环境

项目说明
操作系统生产部署推荐 Linux x86_64(Ubuntu 22.04、CentOS 7+/Rocky、麒麟等)
Shellbash;文档命令在源码仓库根目录下执行,除非另有说明
权限Docker / Podman 通常需 root 或加入 docker 组;脚本需 chmod +x deploy/docker/*.sh
Windows不适合作为生产宿主机照抄本手册;开发预览静态页可以,部署请用 WSL2 或 Linux 云主机
路径约定下文「源码根目录」指含 oars-java/oars-web/deploy/ 的 monorepo 根目录

3.2 云服务器部署

多数客户会在腾讯云、阿里云、华为云等 ECS 上部署。以下为通用要点;装完 Docker 后按第 5 章 Compose 步骤执行即可。

实例规格(参考)

场景建议配置系统盘
POC / 试点2 核 8 GB50 GB SSD
生产(中小规模)4 核 16 GB+100 GB+ SSD;上传与数据库增长快时单独挂数据盘

安全组 / 防火墙(必做)

端口Compose 默认公网是否放行说明
80 / 443生产推荐 Nginx 反代 + HTTPS(第 12 章);POC 可临时放行 18088
18088前端POC 可放行未配域名前可直接访问;上线后建议只留 80/443
18080后端已绑 127.0.0.1,仅本机;安全组仍建议拒绝
13306MySQL仅本机或运维跳板机访问
16379Redis同上
22SSH限制来源 IP仅运维网段,禁止 0.0.0.0/0 长期开放

云主机上的推荐步骤

  1. 安装 Docker 与 Compose 插件 以 Ubuntu 为例:按 Docker 官方文档安装 Engine 与 docker compose v2;国内机器可配置镜像加速(阿里云 / 腾讯云容器镜像服务提供的加速器地址)。
  2. 上传或拉取源码 将交付包解压至 /opt/oars/ 等目录,或通过客户 Git 仓库 clone;确认含 deploy/docker/
  3. 配置并启动 按第 5 章复制 .env、修改密码与 JWT,执行 docker compose ... up -d --build
  4. (可选)绑定域名与 HTTPS 在云厂商负载均衡或本机 Nginx 配置证书,将 443 反代到 127.0.0.1:18088 或直接托管静态资源(第 12 章)。
  5. (可选)使用云数据库 生产可改用云 RDS MySQL、云 Redis,省略 Compose 中的 oars-mysql / oars-redis 服务,后端环境变量指向云实例(第 11 章)。
云厂商差异 轻量应用服务器、ECS、裸金属的安全组界面不同,但原则一致:只暴露 Web 入口(80/443 或 POC 阶段 18088),数据库与 Redis 不对公网。

4. 交付物

源码交付包为 monorepo 结构(以实际合同清单为准)。注意:Flyway 迁移脚本位于 oars-java/oars-migration/,不是仓库根目录下的独立文件夹;运行时由 oars-app 依赖该模块,启动时自动执行迁移。

(源码根目录)
├── oars-java/                 # 后端 Maven 多模块
│   ├── oars-app/              # 启动入口(Spring Boot)
│   ├── oars-migration/        # Flyway 脚本(db/migration)
│   ├── oars-flow/、oars-form/ …
│   └── …
├── oars-web/                  # 前端 pnpm monorepo
│   └── apps/web-antd/         # 主应用,构建产物 dist/
├── deploy/
│   └── docker/                # Dockerfile、Compose、Podman 脚本、.env.example
└── …
路径内容
oars-java/oars-app/可执行 JAR 的构建模块,spring.profiles.active=prod 启动
oars-java/oars-migration/Flyway SQL;不要手工改已执行脚本,升级只追加新迁移
oars-web/apps/web-antd/管理端前端;.env.production 控制 API 与静态资源前缀
deploy/docker/容器化交付:Compose、Dockerfile、Nginx 模板、Podman 脚本
容器镜像 客户可本地构建(oars-backend:<tag>oars-frontend:<tag>),或由乙方提供已构建镜像 tar 包 docker load 导入后再 compose up(需与 OARS_IMAGE_TAG 一致)。

5. Docker Compose 部署(推荐)

编排 MySQL、Redis、后端 Spring Boot 与 Nginx 前端,改 .env 后一条命令拉起完整环境。

5.1 准备

  1. 进入源码根目录 确认存在 deploy/docker/docker-compose.yml
  2. 复制环境变量模板
    cp deploy/docker/.env.example deploy/docker/.env
  3. 编辑 deploy/docker/.env 生产环境必须修改:MySQL root 密码、Redis 密码、JWT 密钥(建议 ≥ 32 字节随机串)。可选调整宿主机端口与 JVM 参数。

5.2 启动

源码根目录执行(Linux bash):

docker compose --env-file deploy/docker/.env \
  -f deploy/docker/docker-compose.yml up -d --build

首次构建耗时说明

首次 --build 会拉取基础镜像(Maven、Node、MySQL、Redis、Nginx 等)并在容器内编译前后端,通常需要 10~30 分钟,取决于:

  • 出网带宽与是否配置 Docker 镜像加速(国内云主机建议开启)
  • CPU / 内存(前端 pnpm 构建默认较大内存占用)
  • Maven 中央仓库与 npm registry 可达性

后续升级若仅改业务代码,Docker 层缓存可显著缩短时间。构建过程中可用 docker compose ... logs -f oars-backend 观察进度。

停止服务(保留数据卷):

docker compose --env-file deploy/docker/.env \
  -f deploy/docker/docker-compose.yml down
删除数据卷 down -v 会删除 MySQL 与上传文件数据卷,执行前必须完成备份。

5.3 验证

建议按下列顺序做端到端冒烟(与仓库 deploy/docker/podman-smoke-test.sh 检查项一致):

步骤地址 / 命令预期
1. 容器状态docker compose --env-file deploy/docker/.env -f deploy/docker/docker-compose.yml ps四个服务均为 running;backend 为 healthy
2. 后端健康(本机)curl -fsS http://127.0.0.1:18080/oars/actuator/healthJSON 中 "status":"UP"
3. 经前端反代curl -fsS http://127.0.0.1:18088/oars/actuator/health同上(验证 Nginx 反代)
4. 前端页面浏览器访问 http://<云主机公网IP>:18088/显示登录页
5. 登录账号 admin / 密码 123456(见第 9 章)进入工作台
6. 后端日志docker logs oars-backend --tail 100无 Flyway 失败、无 Redis 连接错误
Podman 环境 若使用第 6 章 Podman 脚本,可直接运行 deploy/docker/podman-smoke-test.sh 自动完成步骤 2~3 与前端 HTML 探测。

6. Podman 部署

若环境无 docker compose 但已安装 Podman,可使用仓库脚本(Linux bash):

cp deploy/docker/.env.example deploy/docker/.env
chmod +x deploy/docker/*.sh
# 编辑 deploy/docker/.env 后
deploy/docker/podman-up.sh

脚本会构建镜像、创建网络与数据卷、依次启动 MySQL → Redis → 后端 → 前端,并等待健康检查通过。

冒烟验证与停止:

deploy/docker/podman-smoke-test.sh
deploy/docker/podman-down.sh

与 Docker Compose 的一致性

Podman 脚本的端口绑定策略与 Compose 相同:MySQL、Redis、后端监听 127.0.0.1,前端监听 0.0.0.0。环境变量、数据卷名称与冒烟脚本均可共用。

7. 源码传统部署

适合客户已有 MySQL/Redis 集群、需信创数据库驱动,或要在现有 CI/CD 流水线中构建的场景。

7.1 数据库

创建数据库(字符集必须为 utf8mb4):

CREATE DATABASE oars
  DEFAULT CHARACTER SET utf8mb4
  COLLATE utf8mb4_unicode_ci;

无需手工导入 SQL — 启动后端时 Flyway 自动执行 oars-java/oars-migration/src/main/resources/db/migration/ 下的脚本,并写入基线表与种子数据(含内置管理员)。

7.2 后端

  1. 配置生产 Profile 编辑 oars-java/oars-app/src/main/resources/application-prod.yml,或通过环境变量覆盖数据库、Redis、JWT、上传目录等(见第 8 章)。
  2. 编译打包
    cd oars-java
    mvn -pl oars-app -am -DskipTests package
  3. 启动
    java -jar oars-app/target/oars-app-*.jar \
      --spring.profiles.active=prod
    首次启动等待 Flyway 完成(日志中出现迁移成功信息)。默认监听 8080,上下文路径 /oars

7.3 前端

  1. 配置构建变量oars-web/apps/web-antd/.env.production 中设置:
    • VITE_GLOB_API_URL — 浏览器访问的后端 API 前缀,同域反代时填 /oars
    • VITE_BASE — 静态资源 public path,同域部署填 /;CDN 分离见第 13 章
  2. 构建
    cd oars-web
    corepack enable
    pnpm install --frozen-lockfile
    pnpm run build:antd
    产物位于 oars-web/apps/web-antd/dist/
  3. 部署到 Nginxdist 内容复制到 Nginx root,并配置 /oars//uploads/ 反代(见第 12 章)。

8. 配置说明

环境 Profile

Profile用途
dev本地开发(仓库默认)
test测试环境
prod生产环境(Compose 默认激活)
demo演示环境(独立库与上传目录)

Compose 环境变量(deploy/docker/.env

变量默认值说明
OARS_IMAGE_TAGlocal镜像标签
OARS_FRONTEND_PORT18088对外 Web 端口
OARS_BACKEND_PORT18080后端调试端口(本机)
OARS_MYSQL_DATABASEoars数据库名
OARS_MYSQL_ROOT_PASSWORD示例密码生产必改
OARS_REDIS_PASSWORDredis123生产必改
OARS_JWT_SECRET示例密钥生产必改,≥ 32 字节
OARS_UPLOAD_DIR/app/uploads容器内上传目录
OARS_JAVA_OPTS-Xms512m -Xmx1024mJVM 参数
VITE_GLOB_API_URL/oars前端构建 API 前缀
VITE_BASE/前端静态资源路径

后端关键配置项

配置说明
spring.datasource.*MySQL 连接 URL、用户名、密码、连接池
spring.data.redis.*Redis 地址、端口、密码
jwt.secretJWT 签名密钥;泄露等于全线失守
file.storage.local.path上传目录,默认 ./uploads;须可写并纳入备份
spring.flyway.*默认开启,启动时自动迁移

敏感配置建议通过环境变量注入,勿将真实生产密码提交到版本库。个人本地覆盖可使用 application-local.yml(已在 .gitignore 中)。

9. 首次启动与验收

内置管理员

Flyway 基线迁移会创建超级管理员账号:

  • 账号admin
  • 密码:开发环境默认为 123456;生产环境应在首次登录后立即修改,或通过 PasswordGenerator 工具生成 BCrypt 哈希后更新数据库

生成新密码哈希(在 oars-java 目录):

mvn compile exec:java \
  -Dexec.mainClass="com.oars.common.util.PasswordGenerator" \
  -pl oars-common

冒烟测试清单

  • 访问前端登录页,使用 admin 登录成功
  • 进入工作台,页面无 API 404 / CORS 错误
  • /oars/actuator/health 返回 UP
  • 上传头像或附件,文件可正常访问
  • 创建测试流程模板并发起、办理一条待办(验证核心业务链路)
  • 登出后 Token 失效(JWT 黑名单依赖 Redis)

登录 API 示例

POST /oars/app/auth/login
Content-Type: application/json

{
  "account": "admin",
  "password": "123456"
}

10. 生产环境加固

以下四项直接影响安全与可用性,上线前务必处理:

  1. JWT 密钥 替换默认开发密钥;登出 Token 黑名单依赖 Redis,密钥泄露风险极高。
  2. 数据库与 Redis 凭据 使用强密码;MySQL/Redis 不对公网暴露;字符集 utf8mb4。
  3. Swagger / 接口文档 生产环境建议关闭或限制内网访问:
    springdoc:
      swagger-ui:
        enabled: false
      api-docs:
        enabled: false
  4. 上传目录与备份 确认上传目录权限与磁盘空间;制定 MySQL + 上传文件的定期备份策略。
登出注意事项 客户端调用 POST /oars/app/auth/logout 时必须在 Header 携带 Authorization: Bearer {accessToken},否则 Token 无法进入黑名单。

11. 使用外部 MySQL / Redis

若客户已有数据库或缓存集群,可省略 Compose 中的 oars-mysql / oars-redis 服务,将后端环境变量指向外部地址:

SPRING_DATASOURCE_URL=jdbc:mysql://db.example.com:3306/oars?...
SPRING_DATASOURCE_USERNAME=oars_user
SPRING_DATASOURCE_PASSWORD=********
SPRING_DATA_REDIS_HOST=redis.example.com
SPRING_DATA_REDIS_PORT=6379
SPRING_DATA_REDIS_PASSWORD=********

外部 MySQL 仍须预先创建 oars 库(utf8mb4),Flyway 由后端首次启动时执行。确保网络连通性与防火墙白名单。

国产数据库(瀚高、达梦、金仓等)需额外安装 JDBC 驱动并按项目专篇配置,启用前请与技术支持确认兼容性。

12. Nginx 与 HTTPS

生产环境通常在客户自有域名下部署,由 Nginx 或网关统一入口。核心配置参考(与 Compose 内置模板一致):

server {
  listen 443 ssl http2;
  server_name app.example.com;

  root /var/www/oars/dist;
  index index.html;
  client_max_body_size 80m;

  location /oars/ {
    proxy_pass http://127.0.0.1:8080/oars/;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_read_timeout 300s;
  }

  location /uploads/ {
    proxy_pass http://127.0.0.1:8080/uploads/;
    proxy_set_header Host $host;
    proxy_set_header X-Forwarded-Proto $scheme;
  }

  location / {
    try_files $uri $uri/ /index.html;
  }
}

HTTPS 证书可使用 Let's Encrypt、客户 CA 或云厂商证书。若前端使用 Hash 路由(VITE_ROUTER_HISTORY=hash),try_files 配置可适当简化。

13. CDN 静态资源分离(可选)

当 JS/CSS 等静态资源托管在独立 CDN 域名时,构建前设置:

# oars-web/apps/web-antd/.env.production
VITE_BASE=https://cdn.example.com/
VITE_GLOB_API_URL=/oars

此时 index.html 通常保留在源站(主域名),其余静态资源上传 CDN。须在对象存储 / CDN 配置 CORS,允许主站域名跨域加载脚本:

  • 允许来源:https://app.example.com
  • 允许方法:GETHEAD
注意 VITE_BASE 同时影响 Vue Router base 与资源 URL,修改后须全量重新构建前端并同步上传 CDN。

14. ONLYOFFICE 文档中心(可选)

若授权版本包含文档中心在线编辑能力,需额外部署 ONLYOFFICE Document Server,并确保:

  • 用户浏览器能访问 Document Server 地址
  • Document Server 能回调 OARS 后端保存接口(网络双向可达)
  • ONLYOFFICE 软件许可由客户自行采购(不含在 OARS 授权费内)

具体集成参数(回调 URL、JWT 等)在 OARS 管理后台配置,部署前请与技术支持确认版本与网络拓扑。

15. 升级与备份

升级前

  1. 备份 MySQL 全库(mysqldump 或快照)
  2. 备份上传目录(Compose 数据卷 oars-upload-datafile.storage.local.path
  3. 记录当前镜像 tag / 源码版本号

升级步骤

  1. 获取新版本源码或镜像
  2. 更新 deploy/docker/.env 中的 OARS_IMAGE_TAG(如适用)
  3. 重新构建并启动:docker compose ... up -d --build
  4. 观察后端日志,确认 Flyway 新迁移执行成功
  5. 执行冒烟测试与关键业务回归
数据库回滚纪律 已执行的 Flyway 迁移不可删除或修改。生产故障应使用数据库备份恢复,或追加前向修复脚本,切勿手工删 flyway_schema_history 记录。

数据卷说明

数据卷内容备份优先级
oars-mysql-data业务数据库
oars-upload-data用户上传文件
oars-redis-dataRedis AOF中(可重建)
oars-backend-logs应用日志

16. 故障排查

前端能打开,接口全部失败

  • 浏览器开发者工具 Network 查看 API 请求 URL 是否含 /oars
  • 检查 Nginx /oars/ 反代目标是否可达
  • 容器内测试:wget -qO- http://oars-backend:8080/oars/actuator/health

后端启动失败 / 反复重启

  • docker logs oars-backend --tail 200 查看堆栈
  • 常见原因:MySQL 未就绪、密码错误、Flyway 迁移冲突、Redis 密码不匹配
  • 确认 SPRING_DATASOURCE_URL 中主机名在容器网络内可解析(Compose 内用服务名 oars-mysql

登录成功但立即 401

  • 检查 JWT 密钥是否在多实例间一致
  • 确认 Redis 连通(Token 黑名单与部分会话能力依赖 Redis)

上传失败或文件 404

  • 检查上传目录挂载与写权限
  • Nginx client_max_body_size 是否 ≥ 80m
  • 确认 /uploads/ 反代配置

端口冲突

修改 deploy/docker/.envOARS_FRONTEND_PORTOARS_BACKEND_PORTOARS_MYSQL_PORTOARS_REDIS_PORT 后重新启动。

附录

A. 默认端口与绑定地址

Compose 与 Podman 脚本使用相同映射(可在 deploy/docker/.env 中修改端口):

服务容器端口宿主机映射
前端 Nginx80800.0.0.0:18088
后端 Spring Boot8080127.0.0.1:18080
MySQL3306127.0.0.1:13306
Redis6379127.0.0.1:16379

云安全组策略见第 3.2 节。

B. 冒烟测试脚本

仓库提供 deploy/docker/podman-smoke-test.sh,对 Compose 与 Podman 均适用(检查本机 18080 / 18088 健康与前端 HTML):

chmod +x deploy/docker/podman-smoke-test.sh
deploy/docker/podman-smoke-test.sh
# 成功时输出:Docker smoke test: OK

C. 常用命令

# 查看容器
docker compose --env-file deploy/docker/.env \
  -f deploy/docker/docker-compose.yml ps

# 跟踪后端日志
docker logs -f oars-backend

# 进入 MySQL
docker exec -it oars-mysql mysql -uroot -p

# Redis PING
docker exec oars-redis redis-cli -a <password> ping

D. 技术支持

部署过程中遇到问题,请联系 OARS 技术支持:电话 / 微信 18254181315。提供错误日志、docker compose ps 输出与环境说明可加快定位。

需要远程部署协助?

授权套餐内含远程答疑支持额度;驻场实施与定制开发请单独评估。

预约演示 · 手机与微信同号

182 5418 1315