容器化部署
发行包不含镜像与编排模板;说明自行构建镜像时的依据: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 与粘性会话,见 集群与高可用。