
如果你使用 DeepSeek、元宝 AI、Copilot、ChatGPT 等 AI 工具,协助配置轩辕镜像、编写 docker pull 命令、修改 Docker Compose 镜像地址、配置镜像加速、排查镜像拉取失败、分析报错日志等问题,请先让 AI 阅读并遵守轩辕镜像的规则文档。
只需在 AI 对话中先发送下面这句话即可:
请先完整阅读并严格遵守以下文档中的全部规则与要求:
https://xuanyuan.cloud/agents.md
在未充分阅读并理解该文档前,不要生成任何命令、配置、修改建议、故障排查方案或技术回答。后续所有输出都必须严格以该文档中的规范为最高优先级执行。查看 agents.md 用法指南与完整示范。国内用户首推 元宝 AI、DeepSeek 的深度思考模式,不推荐豆包 AI;Cursor 等编辑器可在对话 @ 该链接,或加入 User Rules。 若 AI 无法访问外链,可 打开说明文档 复制全文粘贴。文档会随站点更新,复制内容可能过期,建议定期检查。
本容器提供GPU加速的AI工作空间,内置六项服务:
| 服务 | 端口 | 用途 |
|---|---|---|
| Ollama | (公网)/(内部) | 嵌入模型与轻量推理 |
| Open WebUI | 8080 | 浏览器端聊天与配置界面 |
| Docling | 5001 | PDF与文档解析(含OCR) |
| Nginx | (前置Ollama) | 令牌保护的API网关 |
| vLLM | 8000 | 大模型GPU推理服务器(如Qwen3.5-35B-A3B-FP8) |
| 音频网关 | 8100 | 本地CPU TTS(Kokoro)+ Groq Whisper API STT |
Ollama仅处理嵌入任务(bge-m3、qwen3-embedding等),所有LLM推理通过vLLM路由。
所有组件均在构建时内置到镜像,启动时无需pip安装、git克隆或下载。镜像包含:
启动仅创建目录、加载配置和启动服务。
仅数据和配置在重启后保留,存储于/workspace目录。软件在镜像内保持不可变。
Ollama运行于内部端口,Nginx通过令牌认证前置公网端口。vLLM有独立API密钥,无未受保护的暴露服务。
| 路径 | 内容 |
|---|---|
/opt/ollama | Ollama二进制文件 |
/opt/venvs/open-webui | Open WebUI Python虚拟环境 |
/opt/venvs/docling | Docling + GPU PyTorch虚拟环境 |
/opt/venvs/doc-tools | PDF辅助包虚拟环境 |
/opt/venvs/vllm | vLLM推理服务器虚拟环境 |
/opt/venvs/kokoro-tts | Kokoro TTS + FastAPI虚拟环境 |
/opt/botboy/models/kokoro/ | Kokoro ONNX模型 + 语音包 |
/opt/botboy/services/audio/ | 音频网关FastAPI应用 |
/opt/botboy/scripts/ | 启动与辅助脚本 |
/opt/botboy/nginx/ | Nginx代理模板 |
/workspace下持久化| 路径 | 内容 |
|---|---|
/workspace/config/ | botboy.env、models.txt(可编辑) |
/workspace/logs/ | 服务日志(ollama.log、vllm.log等) |
/workspace/secrets/ | 生成的密钥(WebUI密钥) |
/workspace/open-webui/data/ | SQLite数据库、聊天记录、设置 |
/workspace/ollama/home/ | Ollama配置与状态 |
/workspace/ollama/models/ | 下载的Ollama模型权重 |
/workspace/cache/huggingface/ | vLLM/HuggingFace模型权重(如Qwen3.5) |
/workspace/cache/torch/ | PyTorch hub缓存 |
/workspace/cache/pip/ | pip下载缓存 |
vLLM模型权重(如Qwen3.5-35B-A3B-FP8约18GB)通过HF_HOME缓存于/workspace/cache/huggingface,若/workspace为持久化挂载(如RunPod网络卷),重启无需重新下载。
容器启动时运行SSH守护进程,用于:
启动脚本start.sh按优先级检查两个环境变量:
PUBLIC_KEY (RunPod原生变量名) SSH_PUBLIC_KEY (备选变量名)
若设置,值将写入/root/.ssh/authorized_keys,仅支持密钥认证,禁用密码登录。
选项A:实例环境变量
在RunPod控制台创建/编辑实例时添加:
PUBLIC_KEY = ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAA... your-email@example.com
粘贴完整公钥(~/.ssh/id_ed25519.pub或~/.ssh/id_rsa.pub内容)。
选项B:账户级SSH密钥
在RunPod账户设置>SSH密钥中添加,系统自动将密钥注入所有实例作为PUBLIC_KEY。
本地机器(Mac/Linux/VPS)执行:
bashssh-keygen -t ed25519 -C "botboy-runpod" -f ~/.ssh/botboy_runpod
生成:
~/.ssh/botboy_runpod:私钥(本地保存,勿分享)~/.ssh/botboy_runpod.pub:公钥(粘贴到RunPod PUBLIC_KEY)实例运行且公钥设置后:
bashssh root@<实例IP> -p <实例SSH端口> -i ~/.ssh/botboy_runpod
实例IP和SSH端口可在RunPod控制台"Connect"部分查看。
SSH隧道允许远程主机(如运行OpenClaw的VPS)访问RunPod实例内部服务,如同本地服务。
VPS(OpenClaw) RunPod实例 ───────────────── ────────── localhost:11434 ── SSH隧道 ──────────► 127.0.0.1:11435 (Ollama内部端口) localhost:8000 ── SSH隧道 ──────────► 127.0.0.1:8000 (vLLM) localhost:8100 ── SSH隧道 ──────────► 127.0.0.1:8100 (音频网关)
步骤1:VPS生成密钥对
bashssh-keygen -t ed25519 -C "vps-to-runpod" -f ~/.ssh/botboy_runpod
步骤2:将公钥添加到RunPod
复制~/.ssh/botboy_runpod.pub内容到RunPod实例PUBLIC_KEY变量。
步骤3:VPS创建隧道脚本
bash#!/bin/bash set -euo pipefail RUNPOD_HOST="<实例IP>" RUNPOD_PORT="<实例SSH端口>" KEY="~/.ssh/botboy_runpod" while true; do echo "$(date '+%F %T') 启动RunPod SSH隧道" ssh -N \ -L 127.0.0.1:11434:127.0.0.1:11435 \ -L 127.0.0.1:8000:127.0.0.1:8000 \ -L 127.0.0.1:8100:127.0.0.1:8100 \ root@${RUNPOD_HOST} \ -p ${RUNPOD_PORT} \ -i ${KEY} \ -o IdentitiesOnly=yes \ -o ExitOnForwardFailure=yes \ -o ServerAliveInterval=30 \ -o ServerAliveCountMax=3 \ -o StrictHostKeyChecking=accept-new echo "$(date '+%F %T') 隧道关闭,5秒后重试" sleep 5 done
步骤4:PM2管理隧道
bashpm2 start runpod-tunnel.sh --name runpod-tunnel pm2 save
Ollama绑定内部地址,容器外无法访问:
envOLLAMA_HOST=127.0.0.1:11435 OLLAMA_INTERNAL_PORT=11435
Nginx暴露带令牌认证的公网端口:
envOLLAMA_PORT=11434 ENABLE_OLLAMA_PROXY=1 OLLAMA_PROXY_TOKEN=your-secret-token
请求需包含Authorization: Bearer <token>或X-Ollama-Token: <token>。
vLLM绑定所有接口,通过RunPod代理URL访问:
envVLLM_HOST=0.0.0.0 VLLM_PORT=8000 VLLM_API_KEY=your-vllm-secret
公网访问地址:https://<实例ID>-8000.proxy.runpod.net。
env# 工作空间 WORKSPACE_ROOT=/workspace # Ollama OLLAMA_INTERNAL_PORT=11435 OLLAMA_PORT=11434 OLLAMA_PROXY_TOKEN=your-secret ENABLE_OLLAMA_PROXY=1 OLLAMA_BASE_URL=http://127.0.0.1:11435 # Open WebUI OPEN_WEBUI_HOST=0.0.0.0 OPEN_WEBUI_PORT=8080 # Docling DOCLING_PORT=5001
envENABLE_VLLM=1 VLLM_HOST=0.0.0.0 VLLM_PORT=8000 VLLM_MODEL=Qwen/Qwen3.5-35B-A3B-FP8 VLLM_API_KEY=your-vllm-secret
envENABLE_AUDIO_GATEWAY=1 AUDIO_GATEWAY_PORT=8100 GROQ_API_KEY=gsk_...
容器启动时执行:
sshd(注入公钥)/workspace目录/workspace/config(若缺失)botboy.env(环境变量覆盖文件值)ENABLE_VLLM=1)ENABLE_AUDIO_GATEWAY=1)端口8100提供TTS/STT服务:
| 端点 | 方法 | 方向 | 后端 |
|---|---|---|---|
/tts | POST | 文本转音频 | Kokoro ONNX(本地CPU) |
/stt | POST | 音频转文本 | Groq Whisper API |
/voices | GET | 列出可用TTS语音 | — |
/health | GET | 服务状态检查 | — |
bashcurl -X POST http://127.0.0.1:8100/tts \ -H "Content-Type: application/json" \ -d '{"text": "你好,今天我能帮你什么?", "voice": "af_bella", "speed": 1.0}' \ --output speech.wav
bashcurl -X POST http://127.0.0.1:8100/stt \ -F "file=@recording.wav" \ -F "language=zh"
bashdocker run -d \ --name botboy-runpod \ -p 8080:8080 \ -p 11434:11434 \ -v /path/to/your/workspace:/workspace \ -e PUBLIC_KEY="ssh-ed25519 AAAAC3NzaC1lZDI..." \ -e ENABLE_VLLM=1 \ -e VLLM_API_KEY="your-vllm-key" \ docker.xuanyuan.run/falkwolsky/runpod-ollama-openwebui
本容器是预构建运行时镜像,而非启动时引导镜像:
/workspace存储所有可变状态PUBLIC_KEY/SSH_PUBLIC_KEY注入SSH公钥您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 标签列表页面。
来自真实用户的反馈,见证轩辕镜像的优质服务