README
🚀 DevEx – 开源云集成开发环境平台
DevEx 是一个开源的云开发环境平台,能让你在浏览器中随时随地运行全功能的、基于容器的开发环境,就像在本地一样。它还提供 AI 辅助和安全的沙箱功能,借助 Kubernetes、WebSocket 和 GoLang 实现可扩展的 REPL 会话。
🚀 快速开始
DevEx 是一个开源平台,可创建基于云的开发环境(REPLs),其使用体验与本地环境无异,但你可以在任何时间、任何地点通过浏览器访问。它具有高度的灵活性,你可以使用自己喜欢的技术栈进行编码,通过 SSH 连接,或者通过我们的 MCP 服务器与 AI 代理运行会话。此外,它还支持安全地沙箱化 AI 生成的代码,让你在隔离的环境中测试实际更改。与 Gitpod 或 E2B 不同,DevEx 轻量级、可自托管,并且从一开始就是为生产环境设计的,拥有以开发者为中心的 CLI、无缝的 AI 集成以及基于 Kubernetes 的原生设计,可实现无限扩展。
📣 想添加自己的 REPL 模板?很简单! 👉 阅读贡献指南 即可开始。
✨ 主要特性
- 🔐 GitHub OAuth 认证
- 🪄 通过核心 API 创建、启动、停止、删除 REPLs
- 💾 基于 S3 的文件持久化
- 📦 每个 REPL 的 Kubernetes 部署(动态)
- 📡 基于 WebSocket 的编辑器和终端
- 🧹 用于清理和同步的临时容器
- 🔒 通过 Let's Encrypt 和 Cert Manager 实现 HTTPS 和 TLS
- 🎨 美观的 Next.js + Tailwind 前端
⚙️ 工作原理
graph TB
User[👤 用户] --> Web[🌐 前端网页<br/>React/Next.js 应用程序]
Web --> Core[🔧 核心后端<br/>• 用户认证<br/>• REPL 管理<br/>• S3 集成<br/>• K8s 编排]
Core --> S3[(🗄️ S3 存储<br/>用户名/REPL ID/<br/>├── 模板/<br/>└── 用户文件/)]
subgraph K8sCluster["☸️ Kubernetes 集群"]
direction TB
IngressController[🚪 Ingress NGINX 控制器<br/>流量路由]
CertManager[🔒 Cert 管理器<br/>TLS 证书管理]
subgraph ReplResources["📦 每个 REPL 的资源"]
Deployment[🚀 部署<br/>REPL 容器实例]
Service[🔗 服务<br/>内部网络访问]
Ingress[🌍 入口<br/>外部访问路由]
end
subgraph Pod["🏠 REPL Pod"]
MainContainer[🐳 运行容器<br/>• WebSocket 服务器<br/>• 文件操作<br/>• PTY/终端访问<br/>• 代码执行]
EphemeralContainer[⚡ 临时容器<br/>文件同步回 S3<br/>🔄 清理过程]
end
Deployment --> Pod
Service --> Pod
Ingress --> Service
IngressController --> Ingress
end
Core --> K8sCluster
Core -.->|创建资源<br/>部署 → 服务 → 入口| ReplResources
Web -.->|🔌 WebSocket 连接<br/>• 文件管理<br/>• 终端访问<br/>• 实时协作| MainContainer
Core -.->|📁 复制模板<br/>到用户目录| S3
EphemeralContainer -.->|💾 同步文件回<br/>清理前| S3
MainContainer -.->|📂 加载文件<br/>会话开始时| S3
🌀 会话生命周期
sequenceDiagram
participant U as 用户
participant W as 前端网页
participant C as 核心服务
participant K as Kubernetes
participant S as S3 存储
participant R as 运行容器
U->>W: 创建新 REPL
W->>C: POST /repl/create
C->>S: 创建用户目录<br/>复制模板文件
U->>W: 启动会话
W->>C: POST /repl/start
C->>K: 创建部署<br/>服务和入口
K->>R: 初始化容器
R->>S: 下载文件
R->>W: WebSocket 连接
Note over U,R: 开发会话激活
U->>R: 通过 WebSocket 进行文件操作
R->>R: 实时文件编辑
U->>W: 关闭会话
W->>C: POST /repl/stop
C->>K: 注入临时容器
K->>S: 上传修改后的文件
C->>K: 删除资源
🔩 关键组件
web/ – 前端
- 基于 Next.js + Tailwind CSS 构建
- 支持 GitHub OAuth 登录
- 提供文件树、编辑器和终端的图形用户界面
- 包含用于与运行器交互的 WebSocket 钩子
core/ – 后端 API
- 采用 Go 语言编写
- 处理用户认证、S3 操作、Kubernetes 部署和清理
- 使用 Redis 进行 REPL 会话状态跟踪
- 📄 详细架构和部署步骤请参阅 core/README.md
runner/ – REPL 运行时容器
- 轻量级 Go 服务器
- 提供以下功能的 WebSocket API:
- 文件树和文件内容访问
- 终端(PTY)会话
- 📄 事件列表和包内部详情请参阅 runner/README.md
k8s/ – Kubernetes 引导和 TLS
- 包含:
- Ingress-NGINX 配置
cert-manager+ Let’s Encrypt 实现自动 TLS
- 📄 完整设置说明请参阅 k8s/README.md
templates/
- 在创建 REPL 时复制的基础文件夹(如 Node.js、Python)
- 特定语言的 Docker 化脚手架
- 📦 想添加自己的模板?请参阅 贡献指南
🧱 基础设施
- ☸️ 用于 REPL Pod 的 Kubernetes 集群
- 🔒 用于 TLS 的 Cert Manager + Let’s Encrypt
- 🗃️ 用于持久化的 S3 兼容存储
- 🐳 用于运行时环境的 Docker 镜像
- ⚙️ 用于内存会话跟踪的 Redis
📦 部署流程
- 用户登录并创建 REPL
core/将模板复制到 S3 上的用户名/REPL ID/目录core/在 Kubernetes 中部署 Pod、服务和入口runner/通过 WebSocket 连接并提供文件系统和终端服务- 会话结束时:
- 临时容器将更新后的文件上传到 S3
- 清理所有 K8s 资源
💻 技术栈
| 层次 | 技术栈 | | ------------- | ---------------------------------- | | 前端 | Next.js、Tailwind、WebSockets | | 后端 | GoLang(Echo/Fiber)、Redis、S3 SDK | | 运行器 | GoLang + PTY + WebSocket | | 编排 | Kubernetes、Docker、Docker Swarm | | 网络 | Ingress NGINX + cert-manager | | 认证 | GitHub OAuth |
📄 各组件文档
📚 如需更深入的实现细节:
core/– 后端 README.mdrunner/– 运行器 WebSocket README.mdk8s/– Kubernetes + TLS 设置web/– 前端 README.md
🧠 构建原因
“这个项目是我深入研究云基础设施、DevOps 和全栈工程的成果,它是一个实际应用的体现。” — Parth Kapoor
🌐 演示与链接
🤝 贡献
本项目正在积极开发中。如果你想贡献模板、修复问题或添加功能,请从这里开始 👉 CONTRIBUTING.md。欢迎提交拉取请求、提出建议和反馈!
📜 许可证
本项目采用 MIT 许可证。
Scan to join WeChat group