# 部署与发布
本章以工程自带的 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即指向该仓库。
# 四、发布与回滚
- 合并代码到发布分支,由流水线构建、推送新镜像标签。
- 更新目标环境的
deploy/.env(或 k8s 清单)里的镜像标签与配置。 - 重新
docker compose up -d(或kubectl apply)滚动更新。 - 启动后验证:后端日志出现
Started HarnessApplication、前端可登录、关键链路可用。 - 异常时把镜像标签回退到上一稳定版本重新发布即可(保留历史镜像标签)。