目标
告诉 Appaloft “要部署什么”:本地目录、Git 仓库、容器镜像、Compose 清单,还是已经构建好的静态目录。
适用场景
- 第一次为一个资源配置部署来源。
- 仓库迁移、目录重组或镜像地址变化后,需要把资源重新指向新的来源。
- 排查”Appaloft 读取的代码不是我期望的版本”。
前置条件
- 已经创建 Project 和 Resource(见项目、资源)。
- 如果来源是私有 Git 仓库,已经完成 GitHub 与集成中的仓库授权。
输入与默认值
| 来源类型 | 适合场景 | 需要确认的输入 |
|---|---|---|
| 本地目录 | CLI 本地部署、快速试验 | 当前目录、忽略文件、构建输出 |
| Git 仓库 | 可重复部署、CI、Preview | 仓库 URL、ref、子目录、访问权限 |
| Docker / OCI 镜像 | 已有构建产物 | 镜像地址、tag、运行端口 |
| Compose 清单 | 多容器或已有 Compose 配置 | Compose 文件路径、服务名、暴露端口 |
| 静态站点 | 前端静态构建产物 | 构建命令和 publish directory |
来源不承担 Project、Server、Environment 或域名的职责——这些是独立的输入,见产品心智模型。
零配置检测的诚实覆盖范围
“零配置”是指 Appaloft 能检查已选定的应用目录,自动推导构建/启动方式,而不需要你手工填写 Runtime Profile。以下按诚实的成熟度标注(不是营销口径):
| 来源或应用形态 | 状态 |
|---|---|
| 本地单应用根目录:Next.js / Vite / React / Vue / Svelte / Astro static / Nuxt generate 等主流前端框架 | 已支持 |
| 本地单应用根目录:Express、Fastify、NestJS、Hono、Koa、通用 Node 生产脚本 | 已支持 |
| 本地单应用根目录:FastAPI、Django、Flask、Poetry Web 应用 | 已支持 |
| 本地单应用根目录:Spring Boot、Quarkus(JVM 模式) | 已支持 |
| 显式 Dockerfile / Compose / 预构建镜像 / 显式 install-build-start 命令 | 已支持(属于显式 fallback,不算零配置检测) |
| 本地 Rails、Laravel、Symfony、Phoenix | Preview — 检测/规划已实现,尚未通过完整真实构建验证 |
| 公网远程 Git + 自动 framework 检测 | 不支持 — 不会为了框架识别去克隆远程仓库,需要先本地克隆 |
| 公网远程 Git + 显式 Dockerfile/Compose/预构建镜像/命令 Profile | Preview |
Monorepo 中限定范围的本地目录发现(唯一候选或显式 baseDirectory) | Preview |
| Monorepo 根目录存在多个候选应用且未选择 | 不支持 — 会阻塞并列出候选,直到显式传入 baseDirectory |
通用 workload 归档包(.zip 等)依赖自动检测 | 不支持 |
Appaloft 在无法安全生成完整计划时会 fail closed(停止并说明原因),不会猜测——这是设计选择,不是缺陷。
CLI 操作步骤
# 从当前目录发起零配置部署
appaloft deploy .
# 本地目录,显式指定静态发布方式
appaloft deploy ./apps/web --method static --publish-dir build
# 已经构建好的静态输出目录,跳过构建
appaloft deploy ./dist --as static-site
# Git 仓库作为来源
appaloft deploy https://github.com/example/web \
--method static \
--publish-dir dist \
--resource-name web
# 为已存在的资源配置/更新 Git source profile
appaloft resource configure-source res_web \
--kind git-repository \
--locator https://github.com/example/web \
--git-ref main \
--base-directory apps/web
# 部署前先只看计划,不创建部署尝试
appaloft deployments plan --project prj_prod --environment env_prod --resource res_web --server srv_prodHTTP/API 操作步骤
POST /api/deployments
Content-Type: application/json
{
"projectId": "prj_example",
"environmentId": "env_production",
"serverId": "srv_primary",
"resourceId": "res_web",
"source": {
"kind": "git-repository",
"locator": "https://github.com/example/web",
"gitRef": "main",
"baseDirectory": "."
}
}预期输出与状态
appaloft deployments plan 会返回:选中的应用根目录、检测到的 framework/runtime、使用的 planner、推导出的 install/build/start 命令、监听端口、健康检查、以及告警或阻塞原因。计划还会附带 planVersion 和一个稳定的 sha256: 指纹,方便你确认两次计划是否等价。
验证
- 运行
appaloft resource show res_web --json,确认 source 摘要(仓库、ref、目录或镜像 tag)符合预期。 - 触发一次部署,确认
deployments plan阶段没有被阻塞。
回滚 / 恢复
- 来源不再可访问或需要切换到新仓库/镜像时,这是显式的 来源重新关联(source relink)动作,不是普通重试。执行前确认目标资源、当前来源、新来源和预期环境;执行后通过下一次部署或资源详情确认 Appaloft 读取的是新来源。
- 用
appaloft source-links list/show查看当前仓库到 Project/Environment/Resource 的安全映射,用relink显式改变映射,用delete只移除映射(不会删除资源或部署历史)。