当前位置: 首页 > news >正文

cube-studio手动部署label_studio至“标注平台”(启动企业版的功能)

1、LabelStudio部署

1、具体部署步骤:

mkdir-p~/label-studio-data# 运行 Label Studio 容器dockerrun-d\--namelabel-studio\-p8088:8080\-v~/label-studio-data:/label-studio/data\--restartalways\heartexlabs/label-studio:latest

● 2、部署参数详解:

参数说明作用
-ddetached mode后台运行容器
–namelabel-studio容器名称 便于管理和识别
-p8088:8080端口映射 宿主机 8088 → 容器 8080
-v~/label-studio-data:/label-studio/data数据卷挂载 持久化标注数据
–restartalways重启策略 服务器重启后自动启动

● 3、端口映射原理:
外部访问 宿主机 Docker 容器 http://192.168.3.222:8088 → 宿主机 8088 端口 → 容器 8080 端口 ↓ ↓ Docker 网络映射 Label Studio 服务

  • 外部访问:http://your-server:8088
  • 容器内通信:http://container-name:8080

2、home.py的修改

● 1、文件路径:
/home/myapp/myapp/views/home.py
● 2、 配置修改:

#-----------------原始配置---------------------{"name":'label_platform',"title":__('标注平台'),"icon":'<svg t="1658320508784" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="3263" width="200" height="200"><path d="M875.65 912h-380a36 36 0 0 1 0-72h380a36 36 0 1 1 0 72zM812.26 284.82L285.39 811.69l-88.11 15.1L212 738l526.72-526.72 73.54 73.54m90.51-11.31L750 120.77a16 16 0 0 0-22.62 0L152.5 695.68a34.11 34.11 0 0 0-9.5 18.56l-25.95 156.23a32 32 0 0 0 37 36.78l155.38-26.62a34.2 34.2 0 0 0 18.38-9.52l575-575a16 16 0 0 0 0-22.63z" p-id="3264"></path></svg>',"menu_type":"api",# ← 错误:内部 API 类型"disable":True,# ← 错误:菜单被禁用"url":"/metadata_table_modelview/api/"# ← 错误:内部 API 路径}#----------------现在的配置--------------------{"name":'label_platform',"title":__('标注平台'),"icon":'<svg t="1658320508784" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="3263" width="200" height="200"><path d="M875.65 912h-380a36 36 0 0 1 0-72h380a36 36 0 1 1 0 72zM812.26 284.82L285.39 811.69l-88.11 15.1L212 738l526.72-526.72 73.54 73.54m90.51-11.31L750 120.77a16 16 0 0 0-22.62 0L152.5 695.68a34.11 34.11 0 0 0-9.5 18.56l-25.95 156.23a32 32 0 0 0 37 36.78l155.38-26.62a34.2 34.2 0 0 0 18.38-9.52l575-575a16 16 0 0 0 0-22.63z" p-id="3264"></path></svg>',"menu_type":"out_link",# ✅ 修改为外部链接类型"disable":False,# ✅ 启用菜单"url":"http://192.168.3.222:8088"# ✅ 指向 Label Studio 地址}

● 3、网络链接原理:
┌─────────────────┐
│ 用户浏览器 │
│ 访问 Cube Studio│
└────────┬────────┘
│ 1. 点击"标注平台"菜单

┌─────────────────┐
│ Cube Studio │
│ 返回跳转链接 │
│ http://192… │
└────────┬────────┘
│ 2. 浏览器跳转到新地址

┌─────────────────┐
│ Label Studio │
│ 192.168.3.222 │
│ 端口 8088 │
└─────────────────┘

  • 关键点:
    • 网络可达性:Cube Studio 和 Label Studio 在同一网络(或可路由的网络)
    • 端口映射:Docker 的 -p 8088:8080 让外部可以访问
    • URL 配置:menu_type: “out_link” 让浏览器直接跳转,而不是在 Cube Studio 内部请求

3、ConfigMap持久化配置

3.1 为什么要使用ConfigMap?

● 1、 Docker镜像的不可变性
Docker 镜像 = 只读的文件系统层
├── 基础操作系统层
├── Python 环境层
├── Cube Studio 代码层 ← home.py 在这里
└── 配置文件层

  • Docker 镜像一旦构建完成,内部的文件就固定了
  • 每个镜像有唯一的 ID,比如 ccr.ccs.tencentyun.com/cube-studio/kubeflow-dashboard:2025.03.01
  • 这个镜像里的 home.py 永远是构建时的版本

● 2、镜像容器
Docker 容器 = 镜像 + 可写层
├── 只读镜像层(不可改)
└── 临时可写层 ← 你在这里修改文件

kubectl exec -it pod-name – vi /home/myapp/myapp/views/home.py
实际上是在临时可写层修改文件,这一层的数据:
● ❌ 不会保存回镜像
● ❌ Pod 重启后会被清空
● ❌ 每次 Pod 启动都从干净的镜像开始
这就像在沙滩上写字,海水一来(Pod 重启)字就消失了。

● 3、🎯 解决方案的原理:ConfigMap–Kubernetes 的配置存储
ConfigMap = 键值对存储
├── Key: home.py
└── Value: <完整的文件内容>
ConfigMap 存储在哪里?

  • 存储在 Kubernetes 的 etcd 数据库中
  • 与 Pod 生命周期无关
  • 持久化存储,不会因为 Pod 重启而消失
# 🏗️ 传统方式(会丢失配置)┌─────────────────┐ │ Docker 镜像 │ │ ├── home.py │ ← 固定内容 │ └──... │ └─────────────────┘ ↓ ┌─────────────────┐ │ 运行的 Pod │ │ ├── home.py │ ← 你修改了这里 │ └──... │ └─────────────────┘ ↓ 重启 ┌─────────────────┐ │ 新的 Pod │ │ ├── home.py │ ← 又变回原样! │ └──... │ └─────────────────┘# ✅ ConfigMap 挂载方式(配置持久化)┌─────────────────┐ ┌──────────────┐ │ Docker 镜像 │ │ ConfigMap │ │ ├── home.py │ │ home.py: │ │ └──... │ │<新内容>│ └─────────────────┘ └──────────────┘ ↓ ↓ ┌─────────────────────────────────────┐ │ 运行的 Pod │ │ ├── 镜像中的文件 │ │ └── /home/myapp/myapp/views/ │ │ └── home.py ← 挂载自 ConfigMap │ └─────────────────────────────────────┘ ↓ 重启 ┌─────────────────────────────────────┐ │ 新的 Pod │ │ ├── 镜像中的文件 │ │ └── /home/myapp/myapp/views/ │ │ └── home.py ← 还是来自 ConfigMap│ └─────────────────────────────────────┘

3.2 具体步骤

● 1、导出并修改配置文件

# 1. 导出当前的 home.py 文件kubectlexec-itkubeflow-dashboard-5f8465f85f-lf4sg-ninfra --cat/home/myapp/myapp/views/home.py>/tmp/home.py# 2. 备份原文件cp/tmp/home.py /tmp/home.py.backup# 3. 编辑文件nano/tmp/home.py 在nano编辑器中,找到配置字段,修改为:{"name":'label_platform',"title":__('标注平台'),"icon":'<svg t="1658320508784" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="3263" width="200" height="200"><path d="M875.65 912h-380a36 36 0 0 1 0-72h380a36 36 0 1 1 0 72zM812.26 284.82L285.39 811.69l-88.11 15.1L212 738l526.72-526.72 73.54 73.54m90.51-11.31L750 120.77a16 16 0 0 0-22.62 0L152.5 695.68a34.11 34.11 0 0 0-9.5 18.56l-25.95 156.23a32 32 0 0 0 37 36.78l155.38-26.62a34.2 34.2 0 0 0 18.38-9.52l575-575a16 16 0 0 0 0-22.63z" p-id="3264"></path></svg>',"menu_type":"out_link","disable":False,"url":"http://192.168.3.222:8088"}⚠️ 注意三个关键点: ●"menu_type":"out_link"(不是"api") ●"disable":False(不要注释掉) ●"url":"http://192.168.3.222:8088"(用服务器 IP,不是 localhost)

● 2、创建或更新ConfigMap

# 删除旧的 ConfigMap(如果存在)kubectl delete configmap home-config-ninfra2>/dev/null# 创建新的 ConfigMapkubectl create configmap home-config --from-file=home.py=/tmp/home.py-ninfra# 验证 ConfigMap 创建成功kubectl get configmap home-config-ninfra

● 3、获取当前Deployment配置

# 导出当前配置kubectl get deployment kubeflow-dashboard-ninfra-oyaml>/tmp/deployment-original.yaml

● 4、创建修改后的Deployment配置

# 创建修改脚本cat>/tmp/add-configmap.sh<<'EOF' #!/bin/bash # 读取原始配置 kubectl get deployment kubeflow-dashboard -n infra -o yaml > /tmp/deployment-new.yaml # 使用 Python 脚本来正确添加配置 python3 << 'PYTHON_EOF' import yaml # 读取 YAML with open('/tmp/deployment-new.yaml', 'r') as f: deployment = yaml.safe_load(f) # 找到 containers containers = deployment['spec']['template']['spec']['containers'] main_container = None for i, container in enumerate(containers): if container['name'] == 'kubeflow-dashboard': main_container = container container_index = i break if not main_container: print("找不到 kubeflow-dashboard 容器") exit(1) # 添加 volumeMount if 'volumeMounts' not in main_container: main_container['volumeMounts'] = [] # 检查是否已存在,避免重复添加 home_config_exists = any(vm.get('name') == 'home-config' for vm in main_container['volumeMounts']) if not home_config_exists: main_container['volumeMounts'].append({ 'name': 'home-config', 'mountPath': '/home/myapp/myapp/views/home.py', 'subPath': 'home.py' }) # 添加 volume if 'volumes' not in deployment['spec']['template']['spec']: deployment['spec']['template']['spec']['volumes'] = [] volumes = deployment['spec']['template']['spec']['volumes'] volume_exists = any(v.get('name') == 'home-config' for v in volumes) if not volume_exists: volumes.append({ 'name': 'home-config', 'configMap': { 'name': 'home-config' } }) # 保存 with open('/tmp/deployment-new.yaml', 'w') as f: yaml.dump(deployment, f, default_flow_style=False) print("配置文件已修改完成") PYTHON_EOF echo "配置修改完成!" EOF# 给脚本添加执行权限chmod+x /tmp/add-configmap.sh# 执行脚本/tmp/add-configmap.sh

● 5、应用新配置

# 应用修改后的配置kubectl apply-f/tmp/deployment-new.yaml# 观察 Pod 重启过程kubectl get pods-ninfra-w

● 6、验证是否生效

等待新 Pod 完全启动sleep30# 获取新 Pod 名称NEW_POD=$(kubectl get pod-ninfra|grepkubeflow-dashboard|grepRunning|grep"1/1"|head-n1|awk'{print $1}')echo"新 Pod 名称:$NEW_POD"# 检查配置文件是否正确挂载kubectlexec-it$NEW_POD-ninfra --cat/home/myapp/myapp/views/home.py|grep-A7"label_platform"然后刷新浏览器即可看到

3.3 技术细节解析



4、结果



如图,点击标注平台会跳转至labelstudio中

http://www.jsqmd.com/news/200255/

相关文章:

  • ADB截屏命令结合GLM-4.6V-Flash-WEB实现手机图像理解
  • UltraISO注册码最新版已被封禁?推荐使用GLM-4.6V-Flash-WEB
  • C#调用DLL封装GLM-4.6V-Flash-WEB核心算法提高执行效率
  • JavaScript前端如何对接GLM-4.6V-Flash-WEB后端API服务
  • 详解Kmeans聚类算法:原理、实现与应用
  • 2026普通外科(011)(副)主任医师软件测评榜单!帮考生避开99%的踩坑雷区 - 医考机构品牌测评专家
  • FastStone Capture注册码免费替代:GLM-4.6V-Flash-WEB图像识别方案
  • ComfyUI自定义样式修改提升GLM-4.6V-Flash-WEB可视化效果
  • 2026上海高中党必看!班课辅导机构大盘点 - 品牌测评鉴赏家
  • CSDN官网登录入口引导流量至GLM-4.6V-Flash-WEB介绍页
  • JavaScript闭包机制封装GLM-4.6V-Flash-WEB调用逻辑
  • K8s中AI模型推理加速实战
  • HuggingFace镜像网站CDN加速GLM-4.6V-Flash-WEB权重加载
  • 2026年1月河南优质卫校推荐榜:周口/郑州/南阳/驻马店/信阳/鹤壁/平顶山/安阳/商丘卫校推荐/卫校哪家好/卫校排名,漯河卫生中等专业学校五星领跑,三所实力中专成择校新选择 - 海棠依旧大
  • 2026公卫执医考试(助理)培训机构哪家强?这份高性价比测评先码住! - 医考机构品牌测评专家
  • 基于SpringBoot+Web的小游戏集成网站(源码+lw+部署文档+讲解等)
  • 最新主治医师考试培训机构排名公布!深度解析这三家如何领先? - 医考机构品牌测评专家
  • GitHub镜像网站清华源同步GLM-4.6V-Flash-WEB项目
  • CSDN官网博客迁移至GLM-4.6V-Flash-WEB支持的智能内容平台
  • HTML meta标签优化提升GLM-4.6V-Flash-WEB网页SEO排名
  • 抛弃 Electron!3MB 体积实现 Web 转 EXE 极致封装(支持源码加密+离线跨域+原生API)
  • 基于SpringBoot+Vue技术的医院运营管理系统(源码+lw+部署文档+讲解等)
  • 医考圈炸了!2026执医备考三大优质机构最新揭秘 - 医考机构品牌测评专家
  • Git commit钩子校验GLM-4.6V-Flash-WEB提交代码质量
  • 2025年国内专业的尘埃粒子检测仪供应厂家哪家靠谱,在线式粒子计数器/粒子计数器/台式粒子计数器供应厂家电话 - 品牌推荐师
  • Git commit签名验证确保GLM-4.6V-Flash-WEB代码来源可信
  • 2026中医执医考试(助理)培训机构哪家强?硬核拆解,拒绝选择困难! - 医考机构品牌测评专家
  • DISM++备份系统前优化GLM-4.6V-Flash-WEB配置文件
  • JavaScript防XSS攻击保护GLM-4.6V-Flash-WEB API接口
  • HuggingFace镜像网站七牛云加速GLM-4.6V-Flash-WEB模型下载