🚀 Codex Web IDE v2(多用户 + Docker + xterm)完整实现方案
🧠 项目目标
构建一个类似:
-
Cursor
-
Replit
-
GitHub Codespaces
的 自建 AI Web IDE 平台,具备:
-
多用户
-
容器隔离(Docker)
-
Web IDE(Monaco)
-
浏览器终端(xterm)
-
Codex Agent(支持远程 approve)
🏗️ 一、整体架构
Browser
├── Monaco Editor
├── xterm.js Terminal
└── Agent Panel
↓
WebSocket / HTTP
↓
Backend (Go)
├── Auth Service
├── Workspace Manager
├── Container Manager (Docker)
├── Terminal Service (PTY over WS)
├── File Service
├── Agent Manager
↓
Docker Container (per user)
├── /workspace
├── bash
└── codex CLI
🔥 二、核心技术选型
| 模块 | 技术 |
|---|---|
| 编辑器 | Monaco Editor |
| 终端 | xterm.js |
| 后端 | Go |
| 容器 | Docker |
| 通信 | WebSocket |
| AI | Codex CLI |
📦 三、项目结构
project/
├── backend/
│ ├── main.go
│ ├── auth/
│ ├── agent/
│ ├── container/
│ ├── terminal/
│ ├── file/
│ └── ws/
├── frontend/
│ ├── index.html
│ ├── app.js
│ └── styles.css
└── data/
🔐 四、用户系统(最小实现)
登录
GET /login?user=harold
Cookie 存储
func GetUser(r *http.Request) string {
c, _ := r.Cookie("user")
if c == nil {
return ""
}
return c.Value
}
🐳 五、Docker Workspace(核心)
每个用户一个容器
docker run -dit \
--name ws-<user> \
-v ./data/<user>:/workspace \
-w /workspace \
ubuntu:22.04 bash
👉 容器保证:
-
隔离
-
安全
-
可销毁
执行命令
docker exec -it ws-user bash
💻 六、Web Terminal(xterm)
原理
浏览器终端 → WebSocket → PTY → Docker
👉 Web 终端可以直接操作容器,无需 SSH (Presidio)
后端(Go)
cmd := exec.Command(
"docker", "exec", "-it",
"ws-"+user,
"bash",
)
ptmx, _ := pty.Start(cmd)
前端(xterm.js)
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/xterm/css/xterm.css" />
<script src="https://cdn.jsdelivr.net/npm/xterm/lib/xterm.js"></script>
<script>
const term = new Terminal();
term.open(document.getElementById('terminal'));
const ws = new WebSocket("ws://localhost:8080/ws/terminal");
term.onData(data => ws.send(data));
ws.onmessage = e => term.write(e.data);
</script>
📂 七、文件系统 API
读取文件
GET /file?path=main.go
保存文件
POST /file/save
实现(容器内)
cmd := exec.Command(
"docker", "exec", "ws-"+user,
"cat", path,
)
🤖 八、Codex Agent 集成
在容器中运行
docker exec -it ws-user codex
Agent 抽象
type Agent interface {
Start()
Approve()
Reject()
}
PTY 接入
cmd := exec.Command(
"docker", "exec", "-it",
"ws-"+user,
"codex",
)
📡 九、远程 Approve(Telegram / Web)
流程
Codex ask → backend detect → push event
↓
Frontend / Telegram
↓
点击 approve
↓
pty.Write("y\n")
🌐 十、WebSocket 设计
| 路径 | 功能 |
|---|---|
| /ws/terminal | 终端 |
| /ws/agent | Codex 输出 |
| /ws/events | 通知 |
🧠 十一、状态机设计
type State string
const (
Running
WaitingApprove
WaitingInput
)
🔐 十二、安全设计(必须)
资源限制
--memory=512m
--cpus=1
--pids-limit=100
防路径穿越
if strings.Contains(path, "..") {
reject
}
非 root 用户(推荐)
--user 1000:1000
🚀 十三、自动化能力
Workspace 自动创建
-
用户首次访问 → 自动 docker run
自动销毁
-
30分钟无操作 → stop container
📈 十四、扩展能力(未来)
v3 升级方向
-
Kubernetes 调度
-
多节点执行
-
Workspace snapshot
-
多人协作
-
Diff + Patch UI
-
AI 自动 approve
🧠 十五、关键设计理念
1. Agent 抽象
支持未来切换:
-
PTY
-
app-server
-
Claude / OpenAI API
2. 容器优先
Docker 保证:
-
隔离
-
安全
-
可扩展
3. WebSocket 驱动
所有实时能力:
-
Terminal
-
Agent 输出
-
通知
🏁 十六、总结
本项目实现后,你将拥有:
✅ Web IDE
✅ 多用户系统
✅ Docker 隔离开发环境
✅ 浏览器终端(xterm)
✅ Codex AI 编程助手
✅ 远程 approve(Telegram / Web)
🎯 最终效果
👉 一个完全自建的:
💻 AI 云开发平台(Cursor 替代)
🚀 推荐下一步
-
加 Monaco 文件树
-
加 Diff UI
-
加 Git 集成
-
上 Kubernetes