文档首页 / 容器化部署

容器化部署

发行包不含镜像与编排模板;说明自行构建镜像时的依据:JDK 21、数据卷、MR_DB_* 环境变量、授权与机器绑定注意事项,附 Dockerfile 示例。

概述

当前发行包只包含产品 jar、启动脚本和说明文件,不提供官方镜像、Docker Compose 模板或 Helm 包。产品本身是「一个 jar + 外部数据库」,程序支持用环境变量注入数据库连接、授权与机器指纹,所以可以自行编写 Dockerfile 构建镜像。

本文列出构建容器镜像时有依据的要点。下文的 Dockerfile 是按启动脚本的实际命令写成的示例,需要在你的环境中自行验证。

容器化部署结构:环境变量注入数据库连接与授权,数据卷与健康检查

构建要点

项目 要求 依据
基础镜像 含 Java 21 及以上的完整运行时,JDK 或 JRE 均可 2.0.61 之前的版本运行期会用到 javac,须用 JDK 镜像;启动脚本会检查 Java 版本不低于 21
工作目录 放 jar 的目录,data/、logs/ 在其下生成 启动脚本会先切换到 jar 所在目录
数据卷 至少挂载 data/;选用内置 H2、需要保留备份包、驱动、插件、字体时必须持久化 见 配置项参考 的目录布局
配置库 推荐外接数据库,通过环境变量注入 MR_DB_URL 等
堆内存 未设置 -Xmx 时按容器可用内存的百分比自适应(-XX:MaxRAMPercentage,脚本默认 75) JDK 21 识别容器内存限制
内存溢出 建议加 -XX:+ExitOnOutOfMemoryError,由容器重启策略拉起 启动脚本同样使用该参数
时区与编码 -Duser.timezone=Asia/Shanghai、-Dfile.encoding=UTF-8 启动脚本固定附加
健康检查 GET /api/health,无需登录 见 裸机部署

环境变量注入数据库连接

设置 MR_DB_URL、MR_DB_USERNAME、MR_DB_PASSWORD 后,程序不再读取 data/work/database.config,也不进入初始化向导,直接连接该库并执行数据库迁移。密码按明文处理,不加密、不写入磁盘,适合从 Secret 或环境变量中注入。

变量 说明
MR_DB_URL JDBC URL,如 jdbc:postgresql://db:5432/sight_report?currentSchema=public
MR_DB_USERNAME 用户名
MR_DB_PASSWORD 密码

注意:设置 MR_DB_URL 后系统视为已初始化,初始化接口会拒绝再次初始化。源码里未发现在这种模式下为全新空库创建管理员账号的路径。首次部署建议先用向导(挂载 data/ 卷,向导会把连接信息写入 data/work/database.config)完成初始化,或让容器连接一个已经初始化过的配置库。

Dockerfile 示例

以下为示例,sight-report.jar 需放在构建上下文中:

FROM eclipse-temurin:21-jdk
WORKDIR /app
COPY sight-report.jar /app/sight-report.jar
VOLUME ["/app/data", "/app/logs"]
EXPOSE 9091
ENTRYPOINT ["java", \
  "-XX:MaxRAMPercentage=75", \
  "-XX:+ExitOnOutOfMemoryError", \
  "-Dfile.encoding=UTF-8", \
  "-Duser.timezone=Asia/Shanghai", \
  "-jar", "/app/sight-report.jar", \
  "--spring.profiles.active=prod"]

运行示例:

docker run -d --name sight-report -p 9091:9091 \
  -v sight-data:/app/data -v sight-logs:/app/logs \
  -e MR_DB_URL='jdbc:postgresql://db:5432/sight_report?currentSchema=public' \
  -e MR_DB_USERNAME=sight_report -e MR_DB_PASSWORD='your_password' \
  sight-report:local

Sight Wall 把 jar 名换成 sight-wall.jar,端口换成 9090。

授权与机器绑定

  • 授权保存在配置库中,容器重建不会丢失。
  • 授权带机器绑定时,容器的机器特征(磁盘序列号、安装目录等)容易随重建改变。源码提供了两个注入点:MR_MACHINE_FP(注入稳定的机器指纹)和 MR_CLUSTER_UID(注入集群标识)。申请授权时,用这些稳定值生成环境信息,见 运行配额与机器绑定。
  • 配置库中还没有授权时,程序会读取环境变量 MR_LICENSE_CODE(授权内容)或 MR_LICENSE_FILE(授权文件路径)自动注册;两者都未设置时,会读取工作目录下的 report-license.txt。适合容器零接触交付。

多副本

多个容器副本等同于集群,需要外接配置库、Redis 与粘性会话,见 集群与高可用。

相关文档

联系我们

请填写您的信息,我们将在 1 个工作日内与您联系。