DeskClaw 的发版和部署使用独立入口管理:release.sh 只负责版本制品和 GitHub Release,deploy.sh 只负责把已存在镜像 tag 更新到 K8s,init.sh 只负责首次初始化环境。
deploy/
├── release.sh # 发版:构建镜像、推送、git tag、GitHub Release
├── deploy.sh # 部署:更新 K8s Deployment 到指定 tag
├── init.sh # 初始化:Namespace、Secret、基础 Deployment/Service
├── lib/ # 共享函数
├── .env.local # 本地部署配置(不进 git)
├── k8s/ # K8s Deployment / Service / Ingress 清单
└── mirrors/ # 构建镜像源预设
创建 deploy/.env.local(已被 .gitignore 忽略):
REGISTRY="<YOUR_REGISTRY>/<YOUR_NAMESPACE>"
PUBLIC_REGISTRY="<PUBLIC_REGISTRY>/<PUBLIC_NAMESPACE>" # 可选
KUBE_CONTEXT="<YOUR_KUBECTL_CONTEXT>"PUBLIC_REGISTRY 可选。配置后,backend/portal/proxy 使用 PUBLIC_REGISTRY,admin 始终使用 REGISTRY;未配置时所有组件使用 REGISTRY。
其他前提:
- Docker Desktop 运行中,且已登录容器镜像仓库
kubectl已配置目标集群上下文- 目标 Namespace 和
cr-pull-secret已存在,或先运行init.sh ghCLI 已安装并认证(仅release.sh需要)
创建版本制品:
./deploy/release.sh create v0.5.0
./deploy/release.sh create v0.5.0 --ee
./deploy/release.sh create v0.5.0 --skip-proxy
./deploy/release.sh create v0.5.0 --mirrors cncreate 会构建并推送版本镜像、生成 changelog、创建/更新 git tag,并创建 GitHub Pre-release。它不会执行 K8s 部署。
将 GitHub Release 标记为正式版:
./deploy/release.sh finalize v0.5.0finalize 只更新 GitHub Release 状态,不触碰 K8s。
部署只使用已存在镜像 tag,--tag 必填:
./deploy/deploy.sh deploy --tag v0.5.0 --prod --context <CTX>
./deploy/deploy.sh deploy backend --tag v0.5.0 --prod --context <CTX>
./deploy/deploy.sh deploy proxy --tag v0.5.0 --prod --context <CTX>EE 模式:
./deploy/deploy.sh deploy --tag v0.5.0 --ee --prod --context <CTX>
./deploy/deploy.sh deploy admin --tag v0.5.0 --ee --prod --context <CTX>
./deploy/deploy.sh deploy --tag v0.5.0 --ee --skip-proxy --prod --context <CTX>生产部署会先展示当前镜像和目标镜像,并要求交互确认。部署脚本不构建镜像、不推送镜像、不修改 GitHub Release。需要独立验证环境时,可以先显式初始化临时 staging namespace,再把上述命令的 --prod 替换为 --staging。
./deploy/init.sh --prod --context <CTX>
./deploy/init.sh --env-file path/to/.env --prod --context <CTX>
./deploy/init.sh --ee --prod --context <CTX>
# 可选临时验证 namespace:
./deploy/init.sh --staging --context <CTX>初始化会创建 Namespace、写入后端 Secret,并应用基础 Deployment/Service 清单。Ingress 仍需配置域名后手动 apply:
kubectl --context <CTX> -n <NS> apply -f deploy/k8s/ingress.yaml文件上传策略由后端环境变量和 system_configs(系统配置表)共同决定。K8s 部署时,deploy/init.sh 会把 nodeskclaw-backend/.env 写入 nodeskclaw-backend-env Secret,因此上传配置必须先写进该 env 文件再初始化或覆盖 Secret。
需要同步的关键项:
| 配置 | 说明 |
|---|---|
UPLOAD_STORAGE_BACKEND |
上传存储后端意图,auto/local/s3。目标为 S3 但必需配置缺失时不会回退 local |
S3_ENDPOINT、S3_BUCKET、S3_ACCESS_KEY_ID、S3_SECRET_ACCESS_KEY |
S3 兼容对象存储必需配置 |
AGENT_FILE_DOWNLOAD_BASE_URL |
发给 Agent 的稳定下载 URL 基础地址,必须是 Agent Pod 可达的后端 /api/v1 地址 |
UPLOAD_GATEWAY_PROXY_BODY_SIZE_MB |
记录部署网关请求体上限,需与 Ingress nginx.ingress.kubernetes.io/proxy-body-size 和 Portal Nginx client_max_body_size 保持一致 |
UPLOAD_PROXY_READ_TIMEOUT_SECONDS、UPLOAD_PROXY_SEND_TIMEOUT_SECONDS |
需与 Ingress 读写超时和 Portal Nginx 反代超时保持一致 |
如果应用上限高于网关上限,Portal 的「组织设置 > 文件上传」会展示风险提示,但实际大文件仍会被 Nginx / Ingress 先拒绝。调整大文件能力时必须同时改 .env、deploy/k8s/ingress.yaml 和 nodeskclaw-portal/nginx.conf。
本地验证:
./deploy/release.sh create v0.5.0生产发布:
./deploy/deploy.sh deploy --tag v0.5.0 --prod --context <CTX>
./deploy/release.sh finalize v0.5.0- 日常测试版本:
YYYYMMDD-<git-short-hash>或显式版本号 - 正式版本:语义化版本,例如
v0.1.0-beta.1、v0.1.0
通过 --ee 参数控制构建或部署目标:
- CE 模式默认包含 backend、portal、proxy,不包含 admin。
- EE 模式包含 backend、admin、portal、proxy,并要求本地存在
ee/目录。 - admin 镜像始终使用
REGISTRY,其他组件使用PUBLIC_REGISTRY,未配置时回退REGISTRY。