返回 Skill 列表
extension
分类: 开发与工程无需 API Key

modelscope-studio-deploy

部署和管理 ModelScope 创空间(国内站 .cn 与国际站 .ai),支持单站部署、跨站搬运(cn→ai 含翻译)。当用户提到创空间、Studio、modelscope.cn/ai 部署时触发。

person作者: kelseyehubModelScope

ModelScope 创空间部署(国内站 + 国际站统一)

支持三种工作模式:

  1. 国内站单独部署(modelscope.cn)
  2. 国际站单独部署(modelscope.ai)
  3. 国内站 → 国际站搬运(clone cn 代码 → 翻译 UI 为英文 → push 到 ai)

0. 站点差异速查

| 项目 | 国内站 (.cn) | 国际站 (.ai) | |------|-------------|-------------| | 域名 | modelscope.cn | modelscope.ai | | Git remote | https://oauth2:{token}@www.modelscope.cn/studios/{owner}/{repo}.git | https://oauth2:{token}@www.modelscope.ai/studios/{owner}/{repo}.git | | API base | https://modelscope.cn/openapi/v1 | https://modelscope.ai/openapi/v1 | | Token 获取 | https://modelscope.cn/my/myaccesstoken | 个人页 → Access Control(/my/myaccesstoken 可能重定向到首页,需从页面提取) | | MCP 服务端点 | /mcp/servers/modelscope/modelscope-mcp-server | 同左(域名替换) | | 认证独立 | ✅ .cn token 不能用于 .ai | ✅ .ai token 不能用于 .cn |

关键提醒:两站 token 完全独立,不可互通。操作哪个站就用哪个站的 token。


1. 前置条件

1.1 确认 Token

根据目标站点确认对应 token:

# 国内站
echo $MODELSCOPE_CN_TOKEN
# 或从 git remote 提取
git remote -v 2>/dev/null | grep modelscope.cn

# 国际站
echo $MODELSCOPE_AI_TOKEN
# 或从 git remote 提取
git remote -v 2>/dev/null | grep modelscope.ai

无 token 时引导用户:

  • 国内站:访问 https://modelscope.cn/my/myaccesstoken
  • 国际站:访问个人页 Access Control 面板获取(URL /my/myaccesstoken 可能重定向,需在 profile 页找 Access Control 入口)

后文用 ${TOKEN} 统一指代当前操作站点的 token,${DOMAIN}modelscope.cnmodelscope.ai

1.2 MCP 服务(可选,优先用 HTTP API)

MCP 配置流程两站相同,仅域名不同:

# 查询已有部署链接
curl -s -X GET \
  "https://${DOMAIN}/openapi/v1/mcp/servers/modelscope/modelscope-mcp-server?get_operational_url=true" \
  -H "Authorization: Bearer ${TOKEN}"

# 无可用链接时部署
curl -s -X POST \
  "https://${DOMAIN}/openapi/v1/mcp/servers/modelscope/modelscope-mcp-server/deploy" \
  -H "Authorization: Bearer ${TOKEN}" \
  -d '{"transport_type": "sse"}'

如果 MCP 不可用或配置困难,全程用 HTTP API 即可完成所有操作。

1.3 Git 环境

确保 Git 已安装、用户信息已配置、git-lfs 可用。


2. 模式 A:单站部署(国内站或国际站)

流程完全相同,仅域名和 token 不同。

Step 1: 检查本地 Git 仓库

[ -d .git ] && git remote -v 2>/dev/null | grep ${DOMAIN}/studios

有远程 → 提取 owner/repo_name,跳到 Step 3。

Step 2: 分析项目

SDK 类型判断

| 类型 | 检测条件 | 入口文件 | |-----|---------|---------| | gradio | app.py 导入 gradio | app.py | | streamlit | app.py 使用 streamlit | app.py | | docker | 存在 Dockerfile | Dockerfile | | static | 存在 index.html(已构建) | index.html |

Docker 类型需先完成阿里云账号绑定+实名认证。

获取用户信息

curl -s "https://${DOMAIN}/openapi/v1/users/me" \
  -H "Authorization: Bearer ${TOKEN}" | python3 -c "import sys,json; print(json.load(sys.stdin)['data']['username'])"

Step 3: 创建或更新创空间

# 检查是否存在
curl -s "https://${DOMAIN}/openapi/v1/studios/${owner}/${repo_name}" \
  -H "Authorization: Bearer ${TOKEN}"

不存在 → 创建(默认 private: true,问用户):

curl -s -X POST "https://${DOMAIN}/openapi/v1/studios" \
  -H "Authorization: Bearer ${TOKEN}" \
  -H "Content-Type: application/json" \
  -d '{"owner":"...","repo_name":"...","sdk_type":"gradio","display_name":"...","private":true}'

Step 4: 处理敏感信息

扫描硬编码 secret → 改为 os.environ.get("KEY") → 记录环境变量清单。

Step 5: 同步代码

# 配置远程
git remote remove modelscope 2>/dev/null || true
git remote add modelscope https://oauth2:${TOKEN}@www.${DOMAIN}/studios/${owner}/${repo_name}.git

# 大文件处理
git lfs install

# 拉取(必须先拉后推,禁止 force push)
git fetch modelscope master
git merge modelscope/master --allow-unrelated-histories -m "Merge remote"

# 冲突时保留本地
git checkout --ours . && git add . && git commit -m "Resolve conflicts, keep local"

# 推送
git add . && git commit -m "Deploy to ModelScope Studio" && git push -u modelscope master

Step 6: 配置环境变量

# 查看已有
curl -s "https://${DOMAIN}/openapi/v1/studios/${owner}/${repo_name}/secrets" \
  -H "Authorization: Bearer ${TOKEN}"

# 添加缺失的
curl -s -X POST "https://${DOMAIN}/openapi/v1/studios/${owner}/${repo_name}/secrets" \
  -H "Authorization: Bearer ${TOKEN}" \
  -H "Content-Type: application/json" \
  -d '{"key":"API_KEY","value":"..."}'

Step 7: 触发部署

curl -s -X POST "https://${DOMAIN}/openapi/v1/studios/${owner}/${repo_name}/deploy" \
  -H "Authorization: Bearer ${TOKEN}"

Step 8: 监控状态

# 轮询状态直到 Running 或 Failed
curl -s "https://${DOMAIN}/openapi/v1/studios/${owner}/${repo_name}" \
  -H "Authorization: Bearer ${TOKEN}" | python3 -c "import sys,json; print(json.load(sys.stdin)['data']['status'])"

# 查看日志(docker 先查 build 再查 run)
curl -s "https://${DOMAIN}/openapi/v1/studios/${owner}/${repo_name}/logs/run" \
  -H "Authorization: Bearer ${TOKEN}"

Step 9: 自动诊断

| 错误特征 | 修复 | |---------|------| | ModuleNotFoundError | 添加到 requirements.txt | | SyntaxError | 修复代码 | | 端口问题 | 监听 0.0.0.0:7860 | | 环境变量为空 | 检查 Step 6 |

修复 → 推送 → 重新 deploy → 检查日志,循环直到 Running。

Step 10: 完成

URL: https://${DOMAIN}/studios/${owner}/${repo_name}


3. 模式 B:国内站 → 国际站搬运

将 .cn 创空间的代码搬运到 .ai 对应组织,并翻译 UI 为英文。

Step 1: Clone 国内站代码

WORKDIR=$(mktemp -d)
git clone https://oauth2:${CN_TOKEN}@www.modelscope.cn/studios/${owner}/${repo_name}.git ${WORKDIR}/${repo_name}
cd ${WORKDIR}/${repo_name}

Step 2: 翻译 UI 为英文

对所有面向用户的文本进行翻译:

必须翻译(用户可见):

  • Gradio UI 组件的 label、placeholder、value、info、choices
  • HTML 模板中的中文文案
  • 状态提示、错误信息、按钮文字
  • 页面标题、描述文本

保持中文(开发者侧):

  • 代码注释
  • logger 日志消息
  • 变量名/函数名(除非原本就是拼音需改英文)

翻译原则:

  • 技术术语保持标准英文(如"推理步数"→"Inference Steps")
  • 按钮简洁("开始生成"→"Generate"、"取消"→"Cancel")
  • 错误提示保持信息完整

Step 3: 确保国际站创空间存在

# 检查是否存在
curl -s "https://modelscope.ai/openapi/v1/studios/${owner}/${repo_name}" \
  -H "Authorization: Bearer ${AI_TOKEN}"

不存在则创建(参数从 .cn 侧复制,display_name/description 翻译为英文)。

Step 4: 推送到国际站

cd ${WORKDIR}/${repo_name}

# 切换远程到国际站
git remote remove origin 2>/dev/null || true
git remote add modelscope https://oauth2:${AI_TOKEN}@www.modelscope.ai/studios/${owner}/${repo_name}.git

# 拉取合并
git fetch modelscope master 2>/dev/null || true
git merge modelscope/master --allow-unrelated-histories -m "Merge remote" 2>/dev/null || true

# 提交翻译后的代码
git add .
git commit -m "Sync from cn site with English UI translation"
git push -u modelscope master

Step 5: 同步环境变量

从 .cn 侧获取环境变量列表,在 .ai 侧逐一配置(值需向用户确认,不同站可能用不同的 key)。

Step 6: 部署并监控

curl -s -X POST "https://modelscope.ai/openapi/v1/studios/${owner}/${repo_name}/deploy" \
  -H "Authorization: Bearer ${AI_TOKEN}"

轮询状态直到 Running。

Step 7: 完成

两站 URL:

  • 国内站:https://modelscope.cn/studios/${owner}/${repo_name}
  • 国际站:https://modelscope.ai/studios/${owner}/${repo_name}

4. Docker 创空间参考

适用于 FastAPI、Golang、Node.js 等非 Gradio/Streamlit 应用。

前置:阿里云账号绑定+实名认证。

# Python 模板
FROM python:3.10
WORKDIR /home/user/app
COPY ./ /home/user/app
RUN pip install -r requirements.txt
ENTRYPOINT ["python", "-u", "app.py"]

端口:必须 0.0.0.0:7860,禁用 8080。 Header 限制:禁止 AuthorizationX-modelscope-*X-studio-*

5. 数据持久化

  • 默认重启丢失,持久化用 /mnt/workspace
  • 转移/重命名仍会丢失
  • 高可靠性需外部存储

6. 注意事项

  1. 默认分支 master,禁止 force push
  2. 超 100MB 必须 Git LFS
  3. Docker 首次构建 3-5 分钟
  4. 免费配额有时长限制
  5. 禁止硬编码敏感信息
  6. 两站 token 独立不互通,操作前先确认对应站的 token
  7. 搬运模式下 UI 文本必须翻译为英文,注释/日志可保留中文

7. HTTP API 速查

基础地址:https://${DOMAIN}/openapi/v1,Header: Authorization: Bearer ${TOKEN}

| 操作 | 方法 | 端点 | |-----|------|------| | 获取当前用户 | GET | /users/me | | 创建创空间 | POST | /studios | | 获取创空间详情 | GET | /studios/{owner}/{repo_name} | | 更新设置 | PATCH | /studios/{owner}/{repo_name}/settings | | 部署 | POST | /studios/{owner}/{repo_name}/deploy | | 停止 | POST | /studios/{owner}/{repo_name}/stop | | 获取日志 | GET | /studios/{owner}/{repo_name}/logs/{log_type} | | 环境变量列表 | GET | /studios/{owner}/{repo_name}/secrets | | 添加环境变量 | POST | /studios/{owner}/{repo_name}/secrets | | 更新环境变量 | PUT | /studios/{owner}/{repo_name}/secrets | | 删除环境变量 | DELETE | /studios/{owner}/{repo_name}/secrets |

完整文档:

  • 国内站:https://modelscope.cn/.well-known/openapi.json
  • 国际站:https://modelscope.ai/.well-known/openapi.json