Skip to Content
文档开始构建和部署

1. 构建多平台镜像

1.1 通过 GitHub Actions 构建并推送

你可以使用 GitHub Actions 工作流或其他 CI 工具,构建并推送多平台镜像到 Docker 镜像仓库。

更多细节请参考 .github/workflows/build-and-push.yml 文件。 当推送以 “v” 开头的 tag 时触发构建,例如 v1.0.0

./deploy/Dockerfile 为多阶段 Dockerfile,共三个阶段:

  1. fonts — 通过 deploy/install-font.sh 下载 Noto 字体文件(缓存层,很少变更)
  2. build_stage — 使用 Maven 编译应用 jar
  3. final image — 将字体与 jar 复制到精简 JRE 镜像中

在 GitHub Actions 工作流中,会通过 build args 传入 APP_PATHAPP_NAME 参数。 镜像的 version 会从 tag 名中提取,例如 v1.0.0 -> 1.0.0

./deploy/Dockerfile.ci 为 CI 流水线使用的两阶段变体(jar 已预先构建),包含相同的字体安装阶段。

1.2 本地脚本手动构建并推送

构建镜像并推送到 Docker 镜像仓库。

通过指定 APP_PATHAPP_VERSION 来构建 Java 应用镜像。

./deploy/build.sh <APP_PATH> <APP_VERSION> [<REGISTRY_NAMESPACE>]

其中 APP_PATH 是应用源码目录的相对路径,例如 apps/demo-app。 并且 APP_PATH 的最后一段名称就是应用名,例如 demo-app

REGISTRY_NAMESPACE 为可选参数,默认值是 softa。 你可以指定 REGISTRY_NAMESPACE,将镜像推送到你自己的 Docker 镜像仓库。

构建 Demo 应用镜像示例:

./deploy/build.sh apps/demo-app 1.0.3

2. 安装 Noto 字体(PDF 生成)

配合 file-starter 生成 PDF(RICH_TEXT 文档模板)时需要 Noto 字体。 Docker 镜像内已自动安装(见上文)。本地开发请执行:

sh deploy/install-font.sh

脚本会自动检测操作系统字体目录(macOS 为 ~/Library/Fonts,Linux 为 ~/.local/share/fonts)。 也可显式指定目标目录:

sh deploy/install-font.sh /path/to/fonts

3. 通过 Docker Compose 启动 EFK(可选)

docker-compose -f deploy/efk/docker-compose.yml up -d

通过 http://localhost:5601  访问 Kibana 控制台。

或者你也可以通过配置 spring.elasticsearch.uris 属性,连接到你自己的 Elasticsearch 集群。

然后使用 demo-app/init_es/create_index 创建索引。

4. 通过 Docker Compose 启动 Pulsar(可选)

docker-compose -f deploy/pulsar/docker-compose.yml up -d

通过 http://localhost:8080  访问 Pulsar 控制台。

或者你也可以通过配置 spring.pulsar.client.service-url 属性,连接到你自己的 Pulsar 集群。

最关键的是:你需要配置 mq.topics.xxx.topic 属性,才能启用对应的 Listener。

另一方面,如果你还没准备好搭建 Pulsar 服务,也可以选择不配置, 或注释掉 mq.topics.xxx 相关 topics,以避免因无法启动而阻塞。

5. 通过 Docker Compose 启动 Minio(可选)

docker-compose -f deploy/minio/docker-compose.yml up -d

Minio API 地址

http://localhost:9000 

Minio Web UI 控制台

http://localhost:9001  Username: minioadmin Password: minioadmin

6. 通过 Docker Compose 启动 Demo 应用

docker-compose -f ./deploy/demo-app/docker-compose.yml up -d

创建数据库实例,并执行 deploy/demo-app/init_mysql 中的 SQL 脚本。

7. 生产环境

强烈建议生产环境通过流水线,并使用 Kubernetes 进行容器化部署。

最后更新于