堆栈
堆栈是 sh0 中的顶级组织单元。它将相关的应用和服务组合在一起,提供共享配置和项目的统一视图。
什么是堆栈?
堆栈代表一个由一个或多个应用和服务组成的项目或产品。例如,一个典型的 Web 应用堆栈可能包括:
- 前端应用(React、Vue、Svelte)
- 后端 API(Node.js、Python、Go)
- PostgreSQL 数据库
- Redis 缓存
- 后台工作进程
所有这些都位于一个堆栈中,共享环境变量,并可通过私有 Docker 网络进行通信。在控制台中打开堆栈时,你可以一目了然地看到所有组件。
Stack list view showing three stacks: 'production-api' with 4 services running, 'staging-frontend' with 2 services running, and 'blog' with 1 service running -- each showing status badges and resource usage
堆栈 vs 应用 vs 服务
理解层级关系非常重要:
| 概念 | 描述 | 示例 |
|---|---|---|
| 堆栈 | 项目或产品分组 | "E-commerce Platform" |
| 应用 | 堆栈中的可部署单元 | "api", "frontend", "worker" |
| 服务 | 应用的运行中容器实例 | "api-v3-abc123" (container) |
一个堆栈包含一个或多个应用。每个应用以一个或多个服务(容器)的形式运行。当你部署应用时,sh0 会创建一个新服务(容器),并在健康检查通过后可选地移除旧服务。
Note
同一堆栈中的所有应用共享一个 Docker 网络,这意味着它们可以使用应用名称作为主机名互相通信。例如,前端可以通过
http://api:3000 访问 API,无需额外配置。创建堆栈
有两种方式创建堆栈:
通过控制台:
- 点击右上角的 新建堆栈 按钮或从堆栈页面操作。
- 输入名称(仅限小写字母、数字和连字符)。
- 添加可选描述。
- 点击 创建堆栈。
Create Stack dialog with fields for name, description, and a Create Stack button
通过 API:
curl -X POST http://localhost:9000/api/projects \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{"name": "my-stack", "description": "Production web app"}'堆栈详情视图
点击堆栈可打开详情视图,提供项目的完整概览:
Stack detail view showing tabs for Apps, Environment, Domains, Backups, and Settings. The Apps tab is active, showing a grid of three apps: frontend (running), api (running), and database (running) with resource usage bars
- 应用选项卡 -- 此堆栈中的所有应用及其状态、资源使用情况和快捷操作(部署、重启、停止)。
- 环境变量选项卡 -- 跨所有应用共享的堆栈级环境变量。
- 域名选项卡 -- 此堆栈中分配给应用的所有域名。
- 备份选项卡 -- 此堆栈中数据库的备份计划和历史记录。
- 设置选项卡 -- 堆栈名称、描述、危险区域(删除堆栈)。
堆栈环境变量
堆栈级环境变量由堆栈中的所有应用继承。这对于共享配置(如 API 密钥、数据库 URL 或适用于整个项目的功能开关)非常有用。
DATABASE_URL=postgres://user:pass@db:5432/myapp
REDIS_URL=redis://cache:6379
APP_ENV=production
STRIPE_API_KEY=sk_live_... Stack Environment tab showing a list of environment variables with name, value (masked), and action buttons. An 'Add Variable' button and 'Import .env' button are at the top
变量优先级
应用级环境变量会覆盖堆栈级变量。如果堆栈定义了
APP_ENV=production,而应用定义了 APP_ENV=staging,则应用使用 staging。这样你可以共享默认值,同时允许每个应用单独覆盖。堆栈设置
设置选项卡允许你修改堆栈的元数据并执行管理操作:
- 名称和描述 -- 更新堆栈的显示名称和描述。
- Docker 网络 -- 查看此堆栈的内部 Docker 网络名称。
- 危险区域 -- 删除堆栈及其所有应用、服务和数据。此操作不可逆。
删除堆栈
删除堆栈会移除所有应用、容器、卷及相关数据。在删除前请务必备份重要数据。此操作不可撤销。
常见模式
以下是一些常见的堆栈组织方式:
按项目
每个项目一个堆栈,包含其所有服务。
saas-app (frontend + api + db + redis)按环境
为预发布和生产环境使用独立堆栈。
myapp-staging / myapp-production按客户
代理机构可以按客户组织。
client-acme / client-globex共享服务
公共基础设施使用独立堆栈。
infrastructure (traefik + monitoring + logging)通过 API 管理堆栈
所有堆栈操作均可通过 REST API 进行。以下是关键端点:
# List all stacks
curl http://localhost:9000/api/projects \
-H "Authorization: Bearer YOUR_TOKEN"
# Get a specific stack
curl http://localhost:9000/api/projects/STACK_ID \
-H "Authorization: Bearer YOUR_TOKEN"
# Update a stack
curl -X PUT http://localhost:9000/api/projects/STACK_ID \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{"name": "new-name", "description": "Updated description"}'
# Delete a stack
curl -X DELETE http://localhost:9000/api/projects/STACK_ID \
-H "Authorization: Bearer YOUR_TOKEN" Note
完整的 API 端点列表请参阅 API 参考。