简要定义
Project 是你管理一组资源、环境和部署历史的工作边界。它不是服务器,也不是源码仓库——一个 Project 下可以有多个 Resource,每个 Resource 可以部署到不同的 Server。
为什么存在这个概念
团队通常按产品线或客户划分工作,而不是按单个应用划分。Project 提供了这个更高一层的分组,让资源列表、环境变量和部署历史都有一个稳定的归属,而不是散落在各处。
在 Web / CLI / API 中的体现
appaloft project create --name "my-first-project"
appaloft project list
appaloft project show <projectId>
appaloft project use <projectId>把当前文件夹连到项目
第一次在某个文件夹里运行 appaloft deploy 或 appaloft code 时,如果这个文件夹还没有关联项目:
- 没有 Git 时,默认按目录名创建一个项目(非交互 /
--yes),或者在你只有一个项目时直接用它。 - 在终端里跑
appaloft code时,如果文件夹还没关联项目,会在进入会话 TUI 之前询问:Continue → 按目录名创建默认项目 → 关联这个文件夹。^c立即退出。不会在 Cloud Agents 画面上再叠一层项目选择。 - 有 Git remote 时,用那个 remote 作为对应关系去查找或创建项目。没有 Git 也能继续,Git 不是门槛。
关联保存在用户目录(默认 ~/.appaloft/folder-links.json),不要求当前目录出现点文件。下一次在同一文件夹再跑命令会复用这个关联。要换项目,运行 appaloft project use <projectId>,不要走四步向导。appaloft context 仍然只切换控制面 profile。
项目生命周期
Project 可以被重命名、排序、设置描述、归档、恢复,并在满足条件后删除。
- 重命名 会根据新名称重新生成 slug;如果新 slug 已被占用,需要换一个名称。
- 排序 只改变项目列表的显示顺序,不影响资源、环境或运行中的部署。
- 归档 适用于不再接收新部署的项目。归档不会删除资源、环境、域名、证书、日志或历史部署——这些仍然可以查看和排查;它只会阻止在该项目下创建新的环境、资源或部署。
- 恢复 把归档项目改回 active 状态,不会自动恢复已删除的子对象、重试部署或改动域名/证书。
- 删除 只对已归档的项目开放,并且必须先通过删除预检(delete-check)——只要还有环境、资源、部署历史、域名、证书、日志、审计或运行时记录依赖这个项目,删除就不会启用。
appaloft project rename <projectId> --name "new-name"
appaloft project archive <projectId>
appaloft project delete-check <projectId>
appaloft project delete <projectId> --confirm <projectId>常见误区
- 把归档当成删除:归档只是停止接收新工作,所有历史数据和已运行的部署都不受影响。
- 认为删除项目会级联清理所有子资源:删除只在没有任何依赖记录时才会启用,Appaloft 不会为了完成删除而级联删除其他对象或抹掉保留历史。
- 认为排序会影响运行中的服务:项目列表排序纯粹是显示层面的操作。
相关任务
进阶细节
一个空的、没有环境变量也没有非删除资源的环境不会阻止项目删除——项目删除会先通过环境生命周期自动归档这些空环境,再把项目从普通项目列表中移除(tombstone),但不会抹掉保留下来的历史记录。