# 部署与发布

本章以工程自带的 deploy/ 一键容器化部署为主线,给出实际执行的命令与要改的配置项。

# 一、单机 Docker Compose 部署

部署文件都在 deploy/ 下,会拉起 Redis + MeiliSearch + 后端(harness-boot) + 前端(harness-ui) 四个服务(MySQL 默认复用既有实例)。

# 1. 准备环境变量

cp deploy/.env.example deploy/.env

按实际环境改 deploy/.env,重点几项:

变量 说明
BOOT_IMAGE / UI_IMAGE 后端/前端镜像,默认取流水线发布的 SNAPSHOT 标签;离线/私有仓库改成自己的镜像名:标签
DB_HOST / DB_PORT / DB_NAME / DB_MYSQL_USERNAME / DB_MYSQL_PASSWORD 数据库连接;DB_NAME 默认 dev_alinesno_infra_harness_v100
REDIS_HOST / REDIS_PORT / REDIS_PASSWORD Redis 连接,REDIS_PASSWORD 留空 = 不开密码认证
MEILISEARCH_MASTER_KEY 知识库全文检索主密钥,长度必须 ≥16 字节,留空会导致 meilisearch 容器拒绝启动
POINT_ENABLED 积分模块开关,true 后积分相关 Bean 才注册、前端积分入口才显示
SANDBOX_ENABLED / SANDBOX_HOST / SANDBOX_API_KEY 沙箱(云电脑)开关与地址密钥
ORG_ISOLATION_ENABLED 组织(租户)隔离,默认 true:模型提供商与 MCP 资产严格同组织可见
FILE_STORAGE_PLATFORM / LOCAL_ENABLE_STORAGE / QINIU_* 文件存储,没配七牛凭据时保持 local(落盘到容器 /tmp/harness-local,compose 已挂卷)
SA_TOKEN_SIGN_SECRET_KEY 对外暴露部署时必须换成自己的随机串,不能沿用仓库默认值
DASHSCOPE_API_KEY 通义千问等模型密钥,DB 内已配可留空
BOOT_MEMORY_LIMIT / BOOT_CPU_LIMIT 后端容器资源边界,默认 4g / 2,必须显式设(堆上限按容器可见内存推导)

# 2. 启动

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

如果本机没有可复用的 MySQL,加 --profile with-db 让 compose 顺带起一个本地库:

docker compose -f deploy/docker-compose.yml --env-file deploy/.env --profile with-db up -d

表结构由 actable 启动时自动建(auto: update),无需预置建表脚本。

# 3. 访问与看日志

  • 前端:http://<宿主机>:${UI_HOST_PORT:-80}
  • 后端:http://<宿主机>:${BOOT_HOST_PORT:-8080}(容器内固定 8080,由 -Dserver.port 下发)
  • 跟踪后端日志:
docker compose -f deploy/docker-compose.yml logs -f harness-boot

# 4. 服务依赖顺序(排障用)

  • harness-boot 依赖 redis 健康后才启动。
  • harness-ui 依赖 harness-boot 先起(nginx 启动时要解析反代上游主机名,单独 up -d harness-ui 会因 host not found in upstream 退出)。

# 二、Kubernetes 部署

deploy/ 下备有三份清单,按角色选用:

  • kubernetes-dev.yml —— 后端服务
  • kubernetes-portal-dev.yml —— 门户前端
  • kubernetes-admin-dev.yml —— 管理端前端

与 compose 的差异:k8s 用 ENC(...) + JASYPT_ENCRYPTOR_PASSWORD 传密文,compose 直接传明文。要启用加密配置,把 compose 里注释的 -D...=ENC(...) 行原样贴回并配好 JASYPT_ENCRYPTOR_PASSWORD。

# 三、镜像构建与版本

  • 后端产物来自 alinesno-infra-harness-boot,前端产物来自 alinesno-infra-harness-ui(镜像内含 dist 与 nginx 配置)。
  • 版本号由根 pom.xml 的 <revision> 统一管理(当前 2.2.0-SNAPSHOT)。
  • 发布走持续集成流水线构建并推送到镜像仓库 registry.cn-shenzhen.aliyuncs.com/alinesno-infra-platform/,deploy/.env 里的 BOOT_IMAGE / UI_IMAGE 即指向该仓库。

# 四、发布与回滚

  1. 合并代码到发布分支,由流水线构建、推送新镜像标签。
  2. 更新目标环境的 deploy/.env(或 k8s 清单)里的镜像标签与配置。
  3. 重新 docker compose up -d(或 kubectl apply)滚动更新。
  4. 启动后验证:后端日志出现 Started HarnessApplication、前端可登录、关键链路可用。
  5. 异常时把镜像标签回退到上一稳定版本重新发布即可(保留历史镜像标签)。
Last Updated: 9/25/2026, 7:10:09 AM