You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

咨询:基于Django+Vue实现Markdown指令触发终端命令执行方案

实现Killercoda式命令点击执行功能的方案指导

问题背景

我正在为儿童学习小组开发类似Killercoda的项目,通过Kubernetes Pod创建VM并借助Ingress暴露,采用code-server或Theia这类浏览器端终端IDE提供访问。目前已完成基础部署,但无法实现核心功能:点击左侧指令栏Markdown中的命令标记(如ls -lh{{exec}}),将命令传递至终端自动执行。

现有技术栈

  • 后端:Django Rest Framework(DRF)
  • 前端:Vue.js

已知配置示例

Markdown指令配置

### Single line code blocks can be copied by default
`copy me`

### It can also be disabled
`copying disabled`{{}}

### Execute a command per click
`ls -lh`{{exec}}

### Send Ctrl+c before execute
Run a blocking command:
`sleep 1d`{{exec}}

End it and run another:
`whoami`{{exec interrupt}}

步骤管理index.json示例

{
  "title": "Lab 1",
  "description": "Everything Linux",
  "details": {
    "intro": {
      "text": "intro.md"
    },
    "steps": [
      {"text": "step1.md"},
      {"text": "step2.md"},
      {"text": "step3.md"}
    ],
    "finish": {
      "text": "finish.md"
    }
  },
  "backend": {
    "imageid": "ubuntu"
  }
}

实现方案指导

前端层面

  • Markdown解析与标记识别:使用Vue生态的Markdown解析库(如marked、vue-markdown-loader),自定义渲染器逻辑,识别带有{{exec}}或{{exec interrupt}}后缀的代码块。给这类代码块添加点击事件监听,并赋予特殊样式(如高亮边框、鼠标悬停指针效果)区分普通代码。
  • 命令交互逻辑:点击可执行命令时,提取命令内容和标记类型(普通执行/先中断再执行),通过WebSocket或HTTP请求将命令发送至后端。建议用WebSocket实现实时交互,避免HTTP轮询的延迟。
  • 状态同步:前端需要维护当前用户的会话ID,确保命令能发送到对应的Pod终端。

后端层面

  • WebSocket服务搭建:用DRF结合Channels实现WebSocket服务,建立前端与后端的长连接,用于实时传递命令和终端输出。
  • Kubernetes Pod交互:使用Python的kubernetes-client库,根据用户会话找到对应的Pod实例,通过Kubernetes的exec接口进入容器执行命令,并捕获输出返回给前端。
  • 会话隔离:为每个学习用户/小组分配独立的Pod,后端通过会话ID或用户标识关联到正确的Pod,防止命令串流到其他终端。
  • 命令中断处理:当收到{{exec interrupt}}类型的请求时,先通过Kubernetes exec向目标Pod发送SIGINT信号(模拟Ctrl+C),再执行后续命令。

终端IDE集成

  • code-server/Theia API调用:这两款IDE都提供了终端操作的API:
    • code-server可以通过其REST API创建终端、发送命令;
    • Theia则支持通过WebSocket接口直接与终端通信。
      后端可作为中间层,将前端的命令请求转发到对应IDE的终端接口,或直接通过Kubernetes exec与容器内的终端交互。

工具与资源参考

  • 前端解析工具:marked库支持自定义渲染规则,适合识别并处理带标记的命令代码块;Vue3可结合@vueuse/core简化WebSocket连接管理。
  • 后端K8s操作:Python kubernetes-client库封装了Pod的exec、日志等操作,适配DRF的服务逻辑。
  • 核心逻辑参考:拆解Killercoda的前端交互流程——核心是标记识别、命令提取、终端会话绑定,自行实现对应逻辑即可。

内容的提问来源于stack exchange,提问作者sam hassan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 08:27:48