🚀 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