1. 选择部署方式
两个版本提供相同业务功能。不要根据“功能多少”选择,而应根据客户现有平台和可用性责任选择。
标准单机版
适合 Demo、验收和规模较小的生产环境。完整栈运行在一台 Ubuntu 主机上,部署最快,但主机、磁盘和全部数据服务都是单点。
Kubernetes 集成版
适合已经有成熟 Kubernetes、数据库、Secret Manager、入口和监控平台的客户。美聚只部署应用,不建设这些平台。
2. 获取并验证交付包
从美聚批准的交付渠道取得以下四个同版本文件,并在开始安装前验证身份。不要只接收一个来源不明的压缩包。
| 文件 | 用途 |
|---|---|
meiju-gateway-v1.0.0-linux-amd64.tar.gz | 正式离线交付包 |
*.tar.gz.sha256 | 外层 SHA-256 校验文件 |
*.tar.gz.sig | 校验文件的 Ed25519 签名 |
*.tar.gz.pub.pem | 签名验证公钥 |
sha256sum -c meiju-gateway-v1.0.0-linux-amd64.tar.gz.sha256
openssl pkeyutl -verify -pubin \
-inkey meiju-gateway-v1.0.0-linux-amd64.tar.gz.pub.pem \
-sigfile meiju-gateway-v1.0.0-linux-amd64.tar.gz.sig \
-rawin \
-in meiju-gateway-v1.0.0-linux-amd64.tar.gz.sha256OK 和 Signature Verified Successfully。任一检查失败都应停止安装,重新确认文件来源。tar -xzf meiju-gateway-v1.0.0-linux-amd64.tar.gz
cd meiju-gateway-v1.0.0-linux-amd64
./verify.sh包内 verify.sh 会继续检查内部文件、镜像和发布元数据;执行主机需要 openssl、sha256sum、tar、jq 和 rg。正式包包含 9 个美聚镜像、5 个第三方运行时镜像、Compose、Helm Chart、数据库 schema、SBOM、安全报告和部署文档。
3. 单机版前置条件
curl gzip jq openssl sha256sum tar rg1.0.0 在 Docker Engine 29.1.3、Compose 2.40.3 上完成原生验收。参考规格不是压测容量上限,生产容量必须根据并发、请求时长、用量速率和数据保留期实测。
4. 安装标准单机版
以下步骤假设已经在交付包所在目录完成外层和包内验证,并且 /opt/meiju/releases/1.0.0 尚不存在。
将版本放入不可变发布目录
cd ..
sudo install -d /opt/meiju/releases
sudo mv meiju-gateway-v1.0.0-linux-amd64 /opt/meiju/releases/1.0.0
export RELEASE=/opt/meiju/releases/1.0.0
export STATE=/opt/meiju/state
export TOOL="$RELEASE/single-node/meiju-single-node"新版本使用新的 release 目录,不在原目录上覆盖文件。现场配置和 Secret 始终保存在独立的 $STATE。
初始化现场状态
sudo install -d -m 0700 "$STATE" /opt/meiju/backups
sudo "$TOOL" --release "$RELEASE" --state "$STATE" initinit 只创建缺失文件,会生成随机数据库密码、服务令牌和初始管理员凭证,不会覆盖已有配置。
执行安装前检查
sudo "$TOOL" --release "$RELEASE" --state "$STATE" check只有所有检查通过后才继续。不要手工跳过镜像、签名、磁盘或配置检查。
安装并启动完整产品栈
sudo "$TOOL" --release "$RELEASE" --state "$STATE" install
sudo "$TOOL" --release "$RELEASE" --state "$STATE" statusinstall 会验证并导入 OCI 镜像、执行 migration、创建首管理员并启动服务;重复执行会保留已有配置和业务数据。
http://SERVER:8080/console/。如无法访问,先检查云防火墙、主机防火墙、端口监听和 status 输出。生产入口
正式环境应由客户入口终止 HTTPS,只公开 Console 的同源入口,并把 MEIJU_SESSION_COOKIE_SECURE 设为 true。不要直接公开 PostgreSQL、Redis、ClickHouse、AISIX status 或内部指标端口。
5. Kubernetes 前置条件
在运行 Helm 前,客户平台团队必须关闭以下清单。Chart 不会自动安装缺失的平台组件。
| 依赖 | 准备结果 |
|---|---|
| Kubernetes 与 Helm | Helm 3 可访问目标集群;节点可运行交付的 linux/amd64 镜像;1.0.0 已验证 Kubernetes v1.32.0 |
| PostgreSQL | 提供可建表、执行 migration 的连接 URL,并纳入客户备份与高可用体系 |
| Redis | 提供地址和可选密码,用于准入、预占和余额投影 |
| ClickHouse | 先应用交付包 db/clickhouse/ 中的 schema,再提供 HTTP(S) URL |
| 存储 | 动态供应 3 个 RWO PVC,并支持 Pod 重建后重新挂载原卷 |
| 镜像仓库 | 14 个 OCI archive 已导入客户批准的 Registry,节点可按 digest 拉取 |
| Secret Manager | 具备工作负载身份、最小只读策略和上游凭证轮换能力 |
| 入口与监控 | 准备 HTTPS Controller、DNS、证书;Prometheus 可抓取 6 个指标 Service |
6. 安装 Kubernetes 集成版
将版本放入不可变发布目录
cd ..
sudo install -d /opt/meiju/releases
sudo mv meiju-gateway-v1.0.0-linux-amd64 /opt/meiju/releases/1.0.0
export RELEASE=/opt/meiju/releases/1.0.0每个版本使用独立目录。不要在已经验签的发布目录中修改 Chart、镜像、schema 或元数据。
将 OCI 镜像导入客户 Registry
export RELEASE=/opt/meiju/releases/1.0.0
export REGISTRY_PREFIX=registry.example.com/approved/meiju
export REGISTRY_EVIDENCE=/secure/path/meiju-registry-evidence
install -d -m 0700 "$REGISTRY_EVIDENCE"
MEIJU_D5_REGISTRY_TLS_VERIFY=true \
"$RELEASE/scripts/d5-registry-publish.sh" \
"$RELEASE" "$REGISTRY_PREFIX" "$REGISTRY_EVIDENCE"该工具从包内 OCI archive 发布 14 个固定镜像,并从 Registry 重新读取 manifest 校验 digest。它需要 Docker、jq、sha256sum、tar,以及环境可取得脚本固定的 Skopeo 镜像。离线现场应由平台团队预先导入该工具镜像,或使用客户批准的等价 OCI 导入工具。最终引用记录在 registry-images.tsv。
初始化 ClickHouse schema
平台团队使用批准的 ClickHouse 客户端,按文件名顺序执行 $RELEASE/db/clickhouse/*.sql。这些 SQL 创建 meiju 数据库、用量表及 1.0.0 所需字段,并可幂等重复执行。执行后确认 meiju.usage_events 可查询,再继续安装。
准备 Chart 和现场 values
export RELEASE=/opt/meiju/releases/1.0.0
export CHART="$RELEASE/kubernetes/meiju-1.0.0.tgz"
export VALUES=/secure/path/meiju-values.yaml
cp "$RELEASE/kubernetes/meiju-values.example.yaml" "$VALUES"至少修改 Redis 地址、三个 StorageClass、Secret Manager、镜像 repository 和 HTTPS 入口。保持镜像 digest 不变,不使用浮动 tag。
创建命名空间和 runtime Secret
kubectl create namespace meiju
kubectl -n meiju create secret generic meiju-runtime \
--from-literal=database-url='postgres://USER:PASSWORD@HOST:5432/meiju' \
--from-literal=customer-key-service-token='RANDOM_SERVICE_TOKEN' \
--from-literal=clickhouse-url='https://USER:PASSWORD@HOST:8443'Redis 需要认证时增加 redis-password。生产 Secret 应由客户批准的 Secret 交付机制创建,不写进 values、Git 或操作记录。
只为全新数据库准备首管理员
kubectl -n meiju create secret generic meiju-initial-admin \
--from-literal=username=admin \
--from-literal=password='RANDOM_12_TO_256_BYTE_PASSWORD' \
--from-literal=email=admin@example.test仅在全新数据库中将 initialAdmin.enabled 设为 true。已有管理员的数据库必须保持 false。
依次验证渲染和目标 API
helm lint "$CHART" -f "$VALUES"
helm template meiju "$CHART" -n meiju -f "$VALUES" > /tmp/meiju-rendered.yaml
kubectl -n meiju apply --dry-run=server -f /tmp/meiju-rendered.yaml检查渲染出的镜像引用、StorageClass、入口、NetworkPolicy 和 Secret 名称,再进入真实安装。
安装并检查工作负载
helm upgrade --install meiju "$CHART" \
--namespace meiju \
-f "$VALUES" \
--wait --timeout 10m --history-max 10
helm -n meiju status meiju
kubectl -n meiju get pod,pvc,service
kubectl -n meiju get events --sort-by=.lastTimestampmigration Job、Pod 探针和 3 个 PVC 都应正常。PVC 保存已发布网关配置、AISIX spool 和 Collector 队列,不能作为缓存随意删除。
meiju-initial-admin Secret,同时把 initialAdmin.enabled 恢复为 false。7. 首次登录
标准单机版
初始用户名和密码位于以下两个只允许管理员读取的文件中:
sudo cat "$STATE/secrets/initial-admin/username"
sudo cat "$STATE/secrets/initial-admin/password"Kubernetes 集成版
使用部署前创建的 meiju-initial-admin Secret 中的用户名和密码。入口应通过客户 HTTPS 域名访问。
.complete 后可删除 username 和 password 文件,但不要删除 .complete;Kubernetes 版删除一次性首管理员 Secret。8. 首轮业务配置
请按下面顺序操作。上游、模型、价格和客户权限是相互引用的资源,颠倒顺序会导致后续页面没有可选目标。
创建上游服务及上游模型
进入“上游服务”,添加 Base URL、凭证引用和状态。打开该服务的编辑页,在下方表格中添加它实际提供的模型 ID。不同服务可以使用不同的上游模型命名。
让运行时取得上游凭证
Kubernetes 版在客户 Secret Manager 中按刚才填写的 secret_ref 保存 API Key。单机版从编辑页 URL 取得上游资源 ID,将字母转成大写、所有非字母数字字符替换为下划线,然后用 root 专用编辑器在 $STATE/secrets/upstream.env 中加入 MEIJU_UPSTREAM_SECRET_资源ID后缀=API_KEY。文件保持 0600,修改后执行生命周期工具的 start。不要把凭证明文放入命令行历史、上游 URL、名称或备注。
创建对外模型和路由策略
进入“模型路由”,创建客户调用时使用的稳定模型 ID,再配置路由目标。按现实需求选择故障切换、轮询或权重策略;上游目标必须指向已经登记的上游模型。
创建并发布价格版本
为对外模型配置输入和输出 token 单价,核对计价单位及生效时间,然后发布价格版本。已发布版本用于解释历史费用,不应通过覆盖旧版本改变历史账务。
创建客户并授予权限
创建客户,配置可调用模型、RPM、TPM、并发和总配额,按业务需要完成充值或授信,再发送账户激活邀请。
由客户创建 API Key
客户通过邀请激活账户,登录客户门户并自行创建 API Key。管理员不代客户创建、查看或修改 Key。客户可自行轮换和停用;停用不可逆。
发布网关配置
管理员在“网关配置”中查看待发布版本的完整快照,确认上游、对外模型、路由目标和统计数量后发布。只有发布后的网关资源配置才进入 AISIX 数据面。
9. 第一次模型调用
使用客户自己创建的 API Key 和刚刚发布的对外模型 ID。生产环境必须使用客户 HTTPS 网关域名。
export MEIJU_BASE_URL=https://gateway.example.com
export MEIJU_API_KEY='CUSTOMER_CREATED_API_KEY'
export MEIJU_MODEL_ID='YOUR_PUBLIC_MODEL_ID'
curl "$MEIJU_BASE_URL/v1/chat/completions" \
-H "Authorization: Bearer $MEIJU_API_KEY" \
-H "Content-Type: application/json" \
-d "{
\"model\": \"$MEIJU_MODEL_ID\",
\"messages\": [{\"role\": \"user\", \"content\": \"你好\"}],
\"stream\": false
}"成功响应应包含模型回复和用量信息。若返回未授权,检查 API Key 状态、客户状态和模型权限;若模型不可用,检查当前发布配置、上游模型状态、凭证引用和上游 HTTPS 连通性。
10. 验证完整业务闭环
“接口返回 200”只证明请求链路可用,不足以完成产品验收。一次真实调用后继续检查以下记录:
balanced=true 且 difference_micro=0。如不满足,不应继续扩大流量或切换生产入口。11. 日常运维与升级
单机版状态与日志
sudo "$TOOL" --release "$RELEASE" --state "$STATE" status
sudo "$TOOL" --release "$RELEASE" --state "$STATE" logs
sudo "$TOOL" --release "$RELEASE" --state "$STATE" stop
sudo "$TOOL" --release "$RELEASE" --state "$STATE" start
sudo "$TOOL" --release "$RELEASE" --state "$STATE" restart单机版一致性备份
sudo "$TOOL" --release "$RELEASE" --state "$STATE" backup /opt/meiju/backups该操作会短暂停止完整 Compose 栈,归档 6 个数据卷、现场配置和 Secret,再恢复原运行状态。备份包含明文数据库密码和上游凭证,必须存放到加密、独立、受访问控制的介质;本机目录不是异地备份。
单机版升级
sudo /opt/meiju/releases/NEW_VERSION/single-node/meiju-single-node \
--release /opt/meiju/releases/NEW_VERSION \
--state "$STATE" \
upgrade /opt/meiju/backups升级会先冷备份,再验签、导入镜像、执行向前 migration 并启动。不可逆 migration 不强行向后回滚。
Kubernetes 升级与应用回退
helm upgrade meiju /path/to/new/meiju-NEW_VERSION.tgz \
--namespace meiju -f "$VALUES" --wait --timeout 10m
helm -n meiju history meiju
helm -n meiju rollback meiju REVISION \
--wait --timeout 10m --cleanup-on-fail12. 故障定位
标准单机版
- 运行生命周期工具
status,确认容器和健康检查。 - 用
logs查看 migration、Console、控制面、AISIX、Collector 和计费服务。 - 检查主机磁盘、Docker daemon、时间同步和端口占用。
- 检查当前已发布网关配置、上游状态、凭证文件和 HTTPS 连通性。
- 检查 AISIX spool、Collector 队列、用量事件和账务对账。
Kubernetes 集成版
- 检查
helm status/history和 migration Job。 - 检查 Pod 状态、事件、探针和容器日志。
- 核对 runtime Secret 键名及数据库 DNS、TLS 和认证。
- 检查 PVC Bound/挂载状态与 StorageClass 事件。
- 检查 NetworkPolicy、入口和监控 namespace selector。
- 最后沿 AISIX、Collector、Usage Worker、Billing 检查用量与账务。
13. 限制与责任边界
| 范围 | 美聚 | 客户 |
|---|---|---|
| 软件制品 | 镜像、Chart、Compose、migration、版本说明与完整性证据 | 按批准流程接收、验签和保管 |
| 基础平台 | 定义资源、接口和数据契约 | 主机、Kubernetes、网络、存储、数据库与 Secret Manager |
| 安全入口 | 提供同源应用路径和安全配置项 | DNS、TLS 证书、负载均衡、防火墙与访问控制 |
| 备份恢复 | 说明数据语义、顺序和恢复后产品检查 | 备份产品、调度、介质、加密、恢复基础设施与演练 |
| 高可用与 SLA | 说明应用单点和可扩展边界 | 设计故障域、平台高可用、值守、切换和 SLA |
1.0.0 不提供 GPU/Kubernetes 管理、模型部署与推理运维、跨 AIDC 算力调度、动态批发定价、流水分成、自动退款,也不对客户机房或平台作统一 SLA 承诺。