setup-devcontainer
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseDevcontainer Setup
Devcontainer 配置搭建
Generate devcontainer configuration for any repository. Optionally create a Gitpod/Ona project and verify with a test environment.
为任意代码仓库生成devcontainer配置。可选择创建Gitpod/Ona项目并通过测试环境验证。
When to Use
适用场景
- First-time devcontainer setup for a repo
- Migrating from legacy
.gitpod.yml - Re-generating config after major stack changes
- Verifying an existing devcontainer setup works
- 为代码仓库首次搭建devcontainer环境
- 从旧版迁移配置
.gitpod.yml - 技术栈重大变更后重新生成配置
- 验证现有devcontainer配置是否可用
Phase 1: Config Generation
第一阶段:配置生成
1.1 Detect Framework
1.1 检测技术框架
Scan the repo directly (no prerequisite files required):
- /
Gemfile→ Railsconfig/routes.rb - with
package.json→ Next.jsnext - with
package.json→ Strapistrapi - /
manage.py→ Djangosettings.py - with
composer.json→ Laravellaravel - with
composer.json→ Symfonysymfony - with
package.json→ Expressexpress - with
package.json→ NestJS@nestjs - Multiple in subdirs → Monorepo
package.json
Also detect:
- Database: PostgreSQL, MySQL, MongoDB, SQLite (from config files, Gemfile, package.json)
- Default branch: or check
git symbolic-ref refs/remotes/origin/HEAD/mainmaster - CLAUDE.md: If missing, suggest running but do NOT block
setup-harness - Speckit: directory exists → note speckit commands available
.specify/ - Legacy config: exists → extract ports, tasks, extensions as migration hints
.gitpod.yml
直接扫描代码仓库(无需前置文件):
- /
Gemfile→ Railsconfig/routes.rb - 包含的
next→ Next.jspackage.json - 包含的
strapi→ Strapipackage.json - /
manage.py→ Djangosettings.py - 包含的
laravel→ Laravelcomposer.json - 包含的
symfony→ Symfonycomposer.json - 包含的
express→ Expresspackage.json - 包含的
@nestjs→ NestJSpackage.json - 子目录中存在多个→ 单仓库多项目(Monorepo)
package.json
同时检测:
- 数据库:PostgreSQL、MySQL、MongoDB、SQLite(从配置文件、Gemfile、package.json中识别)
- 默认分支:通过获取,或检查
git symbolic-ref refs/remotes/origin/HEAD/main分支master - CLAUDE.md:若缺失,建议运行但不强制要求
setup-harness - Speckit:存在目录 → 记录可用的speckit命令
.specify/ - 旧版配置:存在→ 提取端口、任务、扩展作为迁移参考
.gitpod.yml
1.2 Ask User
1.2 询问用户
Confirm detected stack, then ask:
- Optional tasks: Fly.io CLI, database backup/restore from S3
- Additional VS Code extensions
- Custom port overrides
- Preserve existing or
.devcontainer/files?.ona/
确认检测到的技术栈后,询问以下内容:
- 可选任务:Fly.io CLI、从S3备份/恢复数据库
- 额外的VS Code扩展
- 自定义端口覆盖
- 是否保留现有的或
.devcontainer/文件?.ona/
1.3 Generate Files
1.3 生成文件
- — Generic base + detected DB packages
.devcontainer/Dockerfile - — Features, extensions, ports
.devcontainer/devcontainer.json - (if using Gitpod/Ona) — Services + tasks:
.ona/automations.yaml- Standard tasks: ,
setup_node,setup_git_config,setup_gnupg,setup_sshsetup_aws - —
install_claude_code(always included)curl -fsSL https://claude.ai/install.sh | sh - Framework-specific services and dependency install tasks
- Optional tasks based on user choices
- Standard tasks:
- — 通用基础镜像 + 检测到的数据库依赖包
.devcontainer/Dockerfile - — 功能特性、扩展、端口配置
.devcontainer/devcontainer.json - (若使用Gitpod/Ona) — 服务 + 任务:
.ona/automations.yaml- 标准任务:、
setup_node、setup_git_config、setup_gnupg、setup_sshsetup_aws - —
install_claude_code(默认包含)curl -fsSL https://claude.ai/install.sh | sh - 框架专属服务和依赖安装任务
- 根据用户选择添加可选任务
- 标准任务:
1.4 Validate
1.4 验证配置
- No placeholder values remain (,
[dbname], etc.)[backend-dir] - Ports match detected frameworks
- Extensions match detected frameworks
- DB service configured if needed
- 无占位符残留(如、
[dbname]等)[backend-dir] - 端口配置与检测到的框架匹配
- 扩展配置与检测到的框架匹配
- 数据库服务已按需配置
Phase 2: Gitpod/Ona Project Setup (optional)
第二阶段:Gitpod/Ona项目配置(可选)
Skip this phase if not using Gitpod/Ona.
若不使用Gitpod/Ona可跳过此阶段。
2.1 Prerequisites
2.1 前置检查
bash
gitpod version && gitpod whoamiIf not authenticated, user needs .
gitpod login --token "<PAT>" --non-interactivebash
gitpod version && gitpod whoami若未认证,用户需执行。
gitpod login --token "<PAT>" --non-interactive2.2 Check Existing Project
2.2 检查现有项目
bash
gitpod project list --timeout 30sSearch output for the repo URL. If project exists, skip to 2.4.
bash
gitpod project list --timeout 30s在输出中搜索仓库URL。若项目已存在,直接跳至2.4步骤。
2.3 Create Project
2.3 创建项目
bash
REPO_URL=$(git remote get-url origin)
gitpod project create "$REPO_URL" --timeout 30sExtract the project ID from output.
bash
REPO_URL=$(git remote get-url origin)
gitpod project create "$REPO_URL" --timeout 30s从输出中提取项目ID。
2.4 Configure Secrets
2.4 配置密钥
Gitpod has two secret scopes. Both are needed for a fully functional environment.
Gitpod有两种密钥作用域,两者均需配置才能实现完整功能的环境。
Project secrets (per-project, set via CLI)
项目级密钥(按项目配置,通过CLI设置)
Check existing:
bash
gitpod project secret list <project-id> -o json --timeout 15sRequired project secrets:
- — Claude Code authentication
CLAUDE_CODE_OAUTH_TOKEN - — GitHub API access (for
GH_TOKENCLI inside pods)gh - Project-specific secrets (,
ENV_PASS, etc.)AWS_*
Set missing ones:
bash
gitpod project secret set <project-id> CLAUDE_CODE_OAUTH_TOKEN "<token>"
gitpod project secret set <project-id> GH_TOKEN "<token>"Never handle token values directly — user provides them.
检查现有密钥:
bash
gitpod project secret list <project-id> -o json --timeout 15s必填项目级密钥:
- — Claude Code认证令牌
CLAUDE_CODE_OAUTH_TOKEN - — GitHub API访问令牌(用于容器内的
GH_TOKENCLI)gh - 项目专属密钥(如、
ENV_PASS等)AWS_*
设置缺失的密钥:
bash
gitpod project secret set <project-id> CLAUDE_CODE_OAUTH_TOKEN "<token>"
gitpod project secret set <project-id> GH_TOKEN "<token>"切勿直接处理令牌值 — 需由用户提供。
Personal secrets (user-level, set via dashboard)
个人级密钥(用户级配置,通过控制台设置)
Set once per account, apply to ALL environments. Configured in the web dashboard under user settings, NOT via CLI.
Required personal secrets:
- — base64-encoded
GITCONFIG~/.gitconfig - through
GPG_1— base64-encoded GPG keyring tar.gz split into 5 chunksGPG_5 - — base64-encoded SSH private key
SSH_PRIVATE_KEY - — base64-encoded SSH public key
SSH_PUBLIC_KEY - — base64-encoded known_hosts
SSH_KNOWN_HOSTS
每个账户只需配置一次,适用于所有环境。需在Web控制台的用户设置中配置,无法通过CLI设置。
必填个人级密钥:
- — base64编码的
GITCONFIG文件~/.gitconfig - 至
GPG_1— base64编码的GPG密钥环tar.gz分块文件(共5块)GPG_5 - — base64编码的SSH私钥
SSH_PRIVATE_KEY - — base64编码的SSH公钥
SSH_PUBLIC_KEY - — base64编码的known_hosts文件
SSH_KNOWN_HOSTS
2.5 Output
2.5 输出结果
Report:
- Project ID
- Repo URL
- Pool naming convention:
{project}-{purpose}-runner-{n} - Configured secrets
报告以下内容:
- 项目ID
- 仓库URL
- 资源池命名规则:
{project}-{purpose}-runner-{n} - 已配置的密钥
Phase 3: Test Environment (optional)
第三阶段:测试环境验证(可选)
3.1 Create Test Env
3.1 创建测试环境
bash
gitpod environment create <project-id> \
--name "<project>-setup-test" \
--class-id 0198bec9-2af2-704f-a4f9-927101d8b844 \
--set-as-context --dont-waitbash
gitpod environment create <project-id> \
--name "<project>-setup-test" \
--class-id 0198bec9-2af2-704f-a4f9-927101d8b844 \
--set-as-context --dont-wait3.2 Poll Until Running
3.2 轮询直至环境运行
Every 10s, timeout 3min:
bash
gitpod environment get <env-id> --timeout 15s每10秒轮询一次,超时时间3分钟:
bash
gitpod environment get <env-id> --timeout 15s3.3 Verify Checklist
3.3 验证清单
SSH in and run checks:
bash
gitpod environment ssh <env-id> -- "<command>"- Claude Code installed:
claude --version - Git identity configured:
git config --global user.name && git config --global user.email - No repo-level git overrides: should return empty/error
git config --local user.name - Git clean on default branch: is empty
git status --porcelain - Services running: DB responds (or
pg_isready)mysqladmin ping - App server starts: framework start command runs without immediate crash
- Speckit available: if detected in Phase 1
ls .specify/
通过SSH连接并执行检查:
bash
gitpod environment ssh <env-id> -- "<command>"- Claude Code已安装:
claude --version - Git身份已配置:
git config --global user.name && git config --global user.email - 无仓库级Git配置覆盖:应返回空值或错误
git config --local user.name - 默认分支Git状态干净:输出为空
git status --porcelain - 服务已运行:数据库可响应(或
pg_isready)mysqladmin ping - 应用服务器可启动:框架启动命令可正常运行无立即崩溃
- Speckit可用:若第一阶段检测到则执行
ls .specify/
3.4 Teardown
3.4 销毁测试环境
bash
gitpod environment stop <env-id>
gitpod environment delete <env-id>If user passes , only report the env ID and SSH command.
--keep-openbash
gitpod environment stop <env-id>
gitpod environment delete <env-id>若用户传入参数,仅返回环境ID和SSH命令即可。
--keep-openEnvironment Classes
实例规格列表
| Class | ID | Specs |
|---|---|---|
| Small | 0198bec9-2af2-7056-b500-a1145383a73c | 2 vCPU / 8 GiB |
| Regular | 0198bec9-2af2-704f-a4f9-927101d8b844 | 4 vCPU / 16 GiB |
| Large | 0198bec9-2af2-7049-a4db-caaca7016e9f | 8 vCPU / 32 GiB |
| 实例规格 | ID | 配置参数 |
|---|---|---|
| 小型 | 0198bec9-2af2-7056-b500-a1145383a73c | 2 vCPU / 8 GiB |
| 常规 | 0198bec9-2af2-704f-a4f9-927101d8b844 | 4 vCPU / 16 GiB |
| 大型 | 0198bec9-2af2-7049-a4db-caaca7016e9f | 8 vCPU / 32 GiB |
Key Rules
核心规则
- Never hardcode secrets — tokens go in project secrets
- Claude Code install: always use (NOT npm)
curl -fsSL https://claude.ai/install.sh | sh - Default to Regular class unless user specifies otherwise
- Always tear down test envs unless
--keep-open - SSH pattern:
gitpod environment ssh <env-id> -- "<command>" - This skill sets up projects, not orchestration — dispatch and scheduling are handled separately
- 切勿硬编码密钥 — 令牌需存储在项目级密钥中
- Claude Code安装:始终使用(禁止使用npm)
curl -fsSL https://claude.ai/install.sh | sh - 默认使用常规规格:除非用户明确指定其他规格
- 默认销毁测试环境:除非传入参数
--keep-open - SSH命令格式:
gitpod environment ssh <env-id> -- "<command>" - 本技能仅负责项目搭建:调度和编排功能由其他模块单独处理