名字 必填
地址 必填
描述
来源
是否上架 必填 bool,默认上架
备注
名字 必填
区域
CPU
内存
系统盘容量
数据盘容量
ip地址公网 必填
ip地址内网 必填
ssh端口 必填,默认22
用户名
密码
显卡名称
显卡数量
docker连接地址
使用TLS bool 默认启用
CA证书 text 前端强制用 普通text输入框进行输入,不要用富文本框
客户端证书 text 前端强制用 普通text输入框进行输入,不要用富文本框
客户端私钥 text 前端强制用 普通text输入框进行输入,不要用富文本框
是否上架 必填 bool 默认上架
备注
名称 必填 显卡型号 必填 显卡数量 CPU核心数 内存(GB) 系统盘容量(GB) 数据盘容器(GB) 价格/小时 是否上架 必填 bool 默认上架 备注
镜像 1对1 镜像表 必填
模版 1对1 产品规格 必填
用户 前端不显示, 提交的时候后端自动填写。
节点 1对1 算力节点表 必填
Docker容器 后端创建后自动回填
实例名称 必填 字符
容器状态 字符格式 前端不显示, 每次状态变更后由后端自动填写。
备注
操作 关闭/删除/重启
新增加一个 新增实例 按钮。 点击按钮后, 实现分步选择流程
选择镜像 从镜像库中选择 上架状态
选择显卡规格 从产品规格中选择 上架状态 前端 显示 显卡规格的名字+显卡型号+数量+CPU/硬盘/系统盘/数据盘容量 (只修改弹窗)
显卡规格选择之后,才能选择节点,默认节点为空。
新增一个查询接口,生成对应 API 权限记录 根据选择的产品规格,去 算力节点 中 匹配 满足要求的 算力节点。 例如: 选择了产品规格 中的 4090显卡 2块 CPU 要求 2核心 内存要求4G 系统盘要求50G,容量盘要求50G。 根据这些去匹配 算力节点 中 已上架 节点的 CPU 内存 系统盘 数据盘 显卡型号 数量。 需要用 已上架 的算力节点,减掉 实例管理 中 已经创建的配置情况后,再去匹配。自动更新容器状态。
提交创建后,去对应的 算力节点 获取docker连接信息,然后 创建对应的容器 通过docker api 创建。 并在实例创建成功后回填 containerId 与状态。
需要根据创建实例的模板,去配置容器 对应的参数 CPU --cpus=2 内存 --memory=4g 系统盘 --storage-opt overlay2.size=20G 容量盘 命名卷映射到 "/data" 显卡数量 --gpus 1 如果不支持 --storage-opt overlay2.size=20G ,就跳过这个参数,重试。 必须确保这些配置参数能准确转换为 Docker API 的对应参数。 删除容器的时候,会自动把挂载的数据卷 一起删除。
普通用户 可以创建, 只能看到自己创建的实例,删除自己的实例。 列表接口必须根据当前登录用户的 userId 进行数据过滤。 管理员 admin 可以创建 。 可以看到所有用户创建的实例,删除所有的实例。
实例管理 中增加操作 启动 重启 关闭容器,查看日志,终端xterm.js 等功能,通过对接docker api。 终端需要在 vite.config.js 为代理添加了 ws: true
当前用户只能操作自己创建的实例, 管理员可以操作所有。自动更新容器状态。前端增加对应的按钮 和 对应 API 权限记录。
删除实例时,同时删除容器。必须容器删除掉,才能删除实例。否则报错。
- SSH服务器监听2026端口
- 用户通过账号密码认证
- 认证成功后展示用户创建的所有容器列表(格式:序号 实例名称-容器ID-算力节点)
- 用户输入序号后,自动连接到对应的容器
- 在
go.mod中添加golang.org/x/crypto/ssh用于SSH服务器实现
文件:server/service/jumpbox/jumpbox.go
- 实现SSH服务器监听(端口2026)
- 实现用户认证逻辑(对接系统用户表)
- 实现交互式容器列表展示
- 实现容器连接逻辑(通过Docker Exec或SSH)
文件:server/service/jumpbox/auth.go
- 实现SSH密码认证
- 验证用户名和密码(对接sys_users表)
文件:server/service/jumpbox/session.go
- 处理SSH会话
- 展示容器列表
- 处理用户输入选择
- 建立到容器的连接
基于现有的 terminal.go 实现,使用Docker Exec方式连接到容器:
- 通过算力节点信息获取Docker客户端
- 使用
docker exec进入容器 - 转发SSH会话到容器内部
文件:server/initialize/jumpbox.go
- 在系统初始化时启动SSH跳板机服务
- 在
server/initialize/router.go中调用初始化
文件:server/config/jumpbox.go
- 添加SSH跳板机配置(端口、密钥等)
- 在
config.yaml中添加配置项
- 从SSH连接获取用户名和密码
- 查询
sys_users表验证用户 - 使用系统现有的密码加密方式验证
- 根据认证成功的用户ID查询实例
- 使用
GetInstanceInfoList方法获取用户创建的实例 - 关联查询算力节点名称
- 格式化显示:
序号 实例名称-容器ID-算力节点名称
- 根据选择的实例ID获取实例信息
- 获取算力节点信息(包含Docker连接信息)
- 使用Docker Exec建立交互式shell连接
- 转发SSH会话的输入输出到容器
server/service/jumpbox/jumpbox.go- SSH服务器主逻辑server/service/jumpbox/auth.go- 认证逻辑server/service/jumpbox/session.go- 会话处理server/initialize/jumpbox.go- 初始化SSH服务server/config/jumpbox.go- 配置管理
server/go.mod- 添加SSH依赖server/config/config.go- 添加跳板机配置结构server/config.yaml- 添加跳板机配置项server/initialize/router.go- 调用跳板机初始化
- SSH服务器需要独立goroutine运行,不阻塞主服务
- 需要处理SSH密钥生成和管理
- 容器连接失败时的错误处理
- 会话超时和断开连接的处理
- 日志记录SSH连接和操作
- 管理员 admin 登录 可以看到所有节点。