
Sim 项目开发容器完全指南用 VS Code Dev Containers 与 GitHub Codespaces 搭建 AI Agent 协作工作台开发环境【免费下载链接】simSim is the collaborative workspace to build, deploy, and monitor AI agents and workflows. Used by 100,000 builders.项目地址: https://gitcode.com/GitHub_Trending/sim16/simSim 是一个用于构建、部署和监控 AI Agent 与工作流的协作平台仓库采用 Bun Turborepo 的 monorepo 结构包含 Next.js 主应用、Socket.io 实时服务与 PostgreSQL 数据库等多个组件。本指南以仓库根目录 .devcontainer/README.md 为骨架结合 devcontainer.json、docker-compose.yml、Dockerfile 等真实配置完整讲解如何在一键创建好的隔离容器环境中初始化、运行与调试 Sim 项目。读完本文你将掌握开发容器的架构分工、全部sim-*开发命令的底层原理、自动化初始化脚本的执行细节以及故障排查与个性化定制的完整方案。开发容器架构四个服务一次拉起Sim 的开发容器并不是单个容器而是一套基于 Docker Compose 的多容器编排方案其核心配置集中在 .devcontainer/docker-compose.yml 中共包含四个服务服务作用端口资源上限按当前 compose 配置app主应用Next.js3000 / 30018G 内存realtimeSocket.io 实时服务30021G 内存README 描述为 4GB实际以 docker-compose.yml 中deploy.resources.limits.memory: 1G为准migrations数据库迁移执行器一次性任务——dbPostgreSQL pgvector 扩展5432—其中app与realtime都基于同一个 Dockerfile 构建工作目录统一挂载为/workspace并共享一个名为bun-cache的命名卷用于缓存 Bun 依赖避免每次重建容器都重新下载包。这套编排的设计意图是主应用与实时服务既可以一起启动也可以独立启动便于针对某一个服务单独调试。这一思路贯穿了后文的全部开发命令。环境准备三样必备工具要打开开发容器你需要准备Visual Studio Code含 Dev Containers 扩展Docker Desktop 或 Podman Desktop作为容器运行时任选其一VS Code Dev Containers extension扩展 IDms-vscode-remote.remote-containers容器镜像基座为oven/bun:1.4.1-alpine与仓库根目录 package.json 中声明的packageManager: bun1.4.1严格一致。Dockerfile 在镜像内通过apk add预装了一整套开发工具包括git、curl、wget、jq、sudo、postgresql-client、vim、nano、bash、bash-completion、zsh、zsh-vcs、ca-certificates、shadow。此外镜像做了三件重要的工程化处理非 root 用户默认创建bun用户UID/GID 均为 1000并在宿主机用户 UID 不一致时按需自动创建用户组与用户见 Dockerfile 中的addgroup/adduser逻辑保证挂载卷中的文件权限与宿主机兼容免密 sudo为bun用户写入/etc/sudoers.d/bun并赋予NOPASSWD权限容器内执行需要提权的操作如安装全局工具、写入/etc/bash_completion.d不需要交互输入密码端口声明EXPOSE 3000、3001、3002三个端口分别对应主应用、备用端口与实时服务。快速开始在容器中打开项目获取项目代码后例如git clone本仓库按以下步骤进入开发环境用 VS Code 打开项目根目录出现提示时点击Reopen in Container或按F1输入Dev Containers: Reopen in Container等待容器完成构建与初始化首次构建需拉取镜像并执行初始化脚本耗时取决于网络使用sim-start启动开发环境。整个行为由 devcontainer.json 驱动其中几个关键配置项值得注意dockerComposeFile: docker-compose.yml与service: app告知 Dev Containers 使用 Compose 编排并把主终端挂入app服务workspaceFolder: /workspace容器内工作目录workspaceMount以 bind 方式把本地仓库目录挂载到/workspace实现源码实时同步forwardPorts: [3000, 3002, 5432]自动把应用、实时服务与数据库端口转发到宿主机postCreateCommand容器创建完成后执行.devcontainer/post-create.sh完成依赖安装与数据库初始化即使脚本出错也会通过|| true放行避免容器卡死在失败状态remoteUser: bun以非 root 的bun用户进入容器与 Dockerfile 中的用户创建逻辑呼应。容器内自动预装的 VS Code 扩展customizations.vscode段会在容器内自动安装 9 个与项目技术栈严格匹配的扩展扩展 ID用途biomejs.biome本项目默认的 lint / format 工具Biomebradlc.vscode-tailwindcssTailwind CSS 智能提示ms-vscode.vscode-typescript-next最新的 TypeScript 语言服务github.copilot/github.copilot-chatAI 编程辅助mikestead.dotenv.env文件语法高亮dsznajder.es7-react-js-snippetsReact/JSX 代码片段steoates.autoimport自动补全 importoven.bun-vscodeBun 运行时调试支持同时预置了编辑器行为editor.formatOnSave开启保存即格式化并在保存时通过source.fixAll.biome与source.organizeImports.biome自动修复并整理 import与仓库根目录 biome.json 的代码规范保持一致。开发命令一条命令与两条拆分的背后逻辑容器初始化完成后终端里会出现一组sim-*项目命令。它们全部定义在 .devcontainer/sim-commands.sh 中本质是 shell alias映射到仓库根目录 package.json 的 npm scripts。运行服务Option 1整体启动日常开发推荐sim-start该命令等价于cd /workspace bun run dev:full而dev:full的底层实现是dev:full: bunx concurrently -n \App,Realtime\ -c \cyan,magenta\ \cd apps/sim bun run dev\ \cd apps/realtime bun run dev\即用concurrently同时拉起AppNext.js端口 3000与RealtimeSocket.io端口 3002两个进程并在终端中以不同颜色区分输出。Option 2分服务启动便于单独调试在app容器终端执行sim-app等价于bun run dev通过 Turbo 启动 Next.js 主应用端口 3000在realtime容器终端执行sim-sockets等价于bun run dev:sockets即cd apps/realtime bun run dev。查看 apps/realtime/package.json 可知其实际命令为SIM_DB_ROLErealtime DB_APP_NAMEsim-realtime bun --watch src/index.ts以--watch模式运行实时服务入口并使用SIM_DB_ROLErealtime限定数据库角色。数据库与构建命令sim-migrate # 推送 schema 变更到数据库 sim-generate # 生成新的迁移文件 build # 构建应用 pgc # 连接 PostgreSQL 数据库这些命令与 packages/db/package.json 中的脚本一一对应alias实际执行的脚本说明sim-migratecd /workspace/packages/db bun run db:push等价于bunx drizzle-kit push --config./drizzle.config.ts并在推送后额外执行reconcile-credential-group-resource-policies.ts校准凭据组资源策略sim-generatecd /workspace/packages/db bun run db:generate等价于bunx drizzle-kit generate --config./drizzle.config.ts依据 packages/db/schema.ts 生成增量迁移pgcPGPASSWORDpostgres psql -h db -U postgres -d simstudio以postgres用户连接simstudio数据库另外还有两个实用辅助命令sim-rebuild构建后直接启动用于验证生产构建产物与docs-dev单独启动 apps/docs 文档站点开发服务器。sim-commands.sh还会在每次新开终端时打印一次命令速查横幅并用SIM_WELCOME_SHOWN环境变量保证每个会话只提示一次。自动化初始化post-create.sh 的完整执行链路容器创建后的所有初始化工作由 .devcontainer/post-create.sh 完成这是整个开发容器体验的核心。其执行链路分为五步1. 安装全局工具与 shell 补全bun install -g turbo drizzle-kit typescript types/node在运行时而非构建时安装 Turbo、drizzle-kit、TypeScript 等全局工具失败时仅打印警告不中断流程随后为 Bash 安装 Bun 的 shell 补全写入/etc/bash_completion.d/bun。2. 注入项目命令到 shell脚本会把如下片段追加到~/.bashrc与~/.zshrc若都不存在则创建最小~/.bashrc# Sim project commands if [ -f /workspace/.devcontainer/sim-commands.sh ]; then source /workspace/.devcontainer/sim-commands.sh fi这保证了每个新终端都能直接使用sim-*命令且命令源文件挂载自仓库项目命令随代码一起版本化。3. 清理并重装依赖由于开发容器可能在多平台macOS ARM、Linux x64 等间复用工作区脚本会检测到已存在的node_modules时先删除node_modules、apps/sim/node_modules、apps/docs/node_modules再执行bun install确保安装的是与当前容器平台匹配的原生二进制如isolated-vm、sharp见根 package.json 的trustedDependencies字段。4. 生成 .env 环境文件脚本依次为三个子项目从各自的.env.example生成.envapps/sim/.env不存在时从 apps/sim/.env.example 复制若连示例都不存在则直接写入最小DATABASE_URLapps/realtime/.env从apps/realtime/.env.example复制packages/db/.env从packages/db/.env.example复制供 drizzle-kit 与迁移脚本使用其中apps/sim/.env.example中需要重点关注的必填项包括DATABASE_URL容器内由 compose 注入postgresql://postgres:postgresdb:5432/simstudioBETTER_AUTH_SECRET认证密钥README 注释建议用openssl rand -hex 32生成compose 中默认值为your_auth_secret_hereNEXT_PUBLIC_APP_URLhttp://localhost:3000浏览器访问地址与BETTER_AUTH_URL保持一致。5. 生成 schema 并等待数据库就绪后推送迁移脚本先在packages/db下执行bun run db:generate生成 schema然后进入最长 60 秒的等待循环每隔 5 秒用psql -h db -U postgres -c \q探测数据库连通性一旦就绪立即执行bun run db:push推送 schema。超时会打印警告并跳过迁移但不会中断整个初始化流程最终无论成败都以exit 0结束并在结尾打印完成横幅。补充说明容器编排层还单独定义了一个migrations一次性服务基于 docker/db.Dockerfile执行bun run db:migrateapp服务通过depends_on等待其service_completed_successfully后再启动与 post-create 脚本中的db:push形成编排层 容器内双重保障。二者分别对应db:migratepackages/db/scripts/migrate.ts面向迁移历史与db:push面向开发期快速同步 schema。服务编排与环境变量详解在 docker-compose.yml 中各服务的关键配置如下app 服务8G 内存上限端口映射3000:3000与3001:3001extra_hosts添加host.docker.internal:host-gateway让工作流能够访问 Docker 宿主上的服务配合EGRESS_ALLOWED_HOSTS白名单使用依赖db须通过健康检查与migrations须成功完成通过${VAR:-default}语法透传大量可选环境变量其中BETTER_AUTH_SECRET与ENCRYPTION_KEY支持从宿主机环境变量注入其余如COPILOT_API_KEY、OLLAMA_URL默认http://localhost:11434、SIM_AGENT_API_URL、NEXT_PUBLIC_CHAT_DISABLED等均可在启动时按需覆盖共享卷bun-cache:/home/bun/.bun/cache并设置BUN_INSTALL_CACHE_DIR显著加速重复安装。db 服务pgvector 扩展数据库镜像为pgvector/pgvector:pg17即 PostgreSQL 17 预装 pgvector 向量扩展——这对应 Sim 的知识库 Embedding 检索能力可参考 apps/sim/lib/embeddings 目录的向量化实现。默认库名simstudio用户名/密码均为postgres端口可通过POSTGRES_PORT覆盖默认 5432并带有每 5 秒一次的pg_isready健康检查。故障排查速查表症状处理方式构建错误依赖或镜像层问题F1→Dev Containers: Rebuild Container强制重建容器端口冲突确保宿主机 3000、3002、5432 未被占用数据库端口可改用POSTGRES_PORT环境变量重映射容器运行时异常确认 Docker Desktop 或 Podman Desktop 正在运行依赖装完后命令找不到确认post-create.sh已完成观察初始化日志必要时重建容器重新执行初始化个性化定制项目命令与个人配置分离开发容器刻意区分了两种配置的归属项目命令sim-start、sim-app等统一由/workspace/.devcontainer/sim-commands.sh提供随仓库版本化保证所有协作者获得一致的命令体验个人 shell 定制别名、提示符、主题等应使用 VS Code 的dotfiles特性而非直接修改项目内文件创建一个 dotfiles 仓库例如github.com/youruser/dotfiles在其中维护你的.bashrc、.zshrc或其它配置在 VS Code 设置中声明 dotfiles 仓库与安装命令{ dotfiles.repository: youruser/dotfiles, dotfiles.installCommand: install.sh }这种项目命令版本化 个人偏好独立的做法遵循 VS Code 官方最佳实践也避免了个人配置被提交进仓库污染团队环境。进一步探索开发容器相关的全部文件都集中在 .devcontainer 目录建议按以下顺序阅读以建立完整认知.devcontainer/README.md官方使用说明本文骨架.devcontainer/devcontainer.jsonDev Containers 入口配置扩展、端口、postCreate 钩子.devcontainer/docker-compose.yml四服务编排、环境变量与健康检查.devcontainer/Dockerfile镜像基座、预装工具与非 root 用户构建.devcontainer/post-create.sh容器创建后的自动化初始化链路.devcontainer/sim-commands.sh全部sim-*命令的 alias 定义对命令底层感兴趣的读者可继续对照根目录 package.jsondev:full、dev:sockets等脚本与 packages/db/package.jsondb:generate、db:push、db:migrate理解每条命令的真实执行路径。【免费下载链接】simSim is the collaborative workspace to build, deploy, and monitor AI agents and workflows. Used by 100,000 builders.项目地址: https://gitcode.com/GitHub_Trending/sim16/sim创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考