在 OCI 容器实例上运行 Ollama:5 分钟构建私有 LLM API,无需 Kubernetes
- 作者

- 姓名
- Nino
- 职业
- Senior Tech Editor
对于许多企业开发团队而言,拥有一个私有的大语言模型 (LLM) 接口已成为刚需。无论是出于数据合规性、隐私保护,还是为了处理核心业务逻辑,将敏感代码或数据发送到公有云 API 往往面临巨大的合规风险。然而,传统的私有化方案通常涉及管理复杂的 Kubernetes 集群 (如 OKE),这对于中小型团队或单个项目组来说,运维成本过于高昂。
本教程将介绍一种“轻量级”的替代方案:在 Oracle Cloud Infrastructure (OCI) Container Instances (容器实例) 上运行 Ollama。这种方案可以在 5 分钟内为你提供一个受 GPU 加速、兼容 OpenAI 接口的私有 LLM 环境,且完全无需触碰 Kubernetes。虽然像 n1n.ai 这样的平台提供了极其便捷的多模型聚合访问,但在某些必须完全物理隔离的场景下,在自己的租户内构建环境是唯一的选择。
为什么选择 OCI 容器实例运行 Ollama?
Ollama 因其极简的设计而成为本地 LLM 编排的首选工具。它将模型管理、硬件加速驱动和 API 服务器封装在一起。结合 OCI 的容器实例服务,你可以获得以下优势:
- 零 Kubernetes 运维:无需管理 Master 节点、节点池或编写复杂的 YAML 文件。你只需按容器使用的资源付费。
- 原生 GPU 支持:OCI 允许将 NVIDIA A10 GPU 直接分配给容器实例,提供 24GB 的显存 (VRAM),足以流畅运行 Llama 3.1 8B 或 Mistral 等主流模型。
- OpenAI 协议兼容:Ollama 原生支持
/v1/chat/completions路径,这意味着你可以直接替换现有代码中的 OpenAI 基础 URL,无需重构代码。 - 网络安全性:部署在私有子网中,确保模型接口仅能通过内部 VCN、VPN 或专线访问,彻底杜绝公网泄露风险。
部署前的准备工作
在开始之前,请确保你具备以下条件:
- 一个具有 GPU 配额的 OCI 账号 (推荐
CI.Standard.GPU.A10.1)。 - 已配置好的 OCI CLI 命令行工具。
- 一个现有的 VCN 和私有子网。
第一步:创建容器实例
我们将通过 OCI CLI 创建一个运行最新版 Ollama 镜像的实例。我们选择了 A10 GPU 形状,它拥有 15 个 OCPU 和 240GB 内存,性能非常强劲。
oci container-instances container-instance create \
--compartment-id $COMPARTMENT_ID \
--availability-domain "Uocm:US-ASHBURN-AD-1" \
--display-name "team-private-ollama" \
--shape "CI.Standard.GPU.A10.1" \
--shape-config '{"ocpus": 15, "memoryInGBs": 240}' \
--containers '[{
"imageUrl": "docker.io/ollama/ollama:latest",
"displayName": "ollama-core",
"resourceConfig": {
"vcpusLimit": 15,
"memoryLimitInGBs": 240
},
"environmentVariables": {
"OLLAMA_HOST": "0.0.0.0"
},
"healthChecks": [{
"healthCheckType": "HTTP",
"port": 11434,
"path": "/",
"intervalInSeconds": 30
}]
}]' \
--vnics '[{
"subnetId": "'$PRIVATE_SUBNET_ID'",
"isPublicIpAssigned": false
}]'
技术要点:必须将环境变量 OLLAMA_HOST 设置为 0.0.0.0。默认情况下,Ollama 仅监听 127.0.0.1,这会导致容器外部无法访问 API。在 n1n.ai 的架构设计中,这种网络可达性也是多模型调度的基础。
第二步:模型持久化与加载
OCI 容器实例在删除后是不可持续的,但其内部存储在重启期间会保留。为了避免每次启动都重新下载数 GB 的模型文件,建议挂载 OCI Block Volume 或 File Storage (FSS)。
对于追求极致简单的情况,可以使用 EMPTYDIR 卷,它在容器实例生命周期内有效:
# 在创建命令中加入卷配置
--volumes '[{
"name": "ollama-data",
"volumeType": "EMPTYDIR",
"backingStore": "EPHEMERAL_STORAGE"
}]'
部署完成后,通过内网机器调用 API 下载模型:
# 假设容器私有 IP 为 10.0.1.50
curl http://10.0.1.50:11434/api/pull -d '{"name": "llama3.1:8b"}'
第三步:性能分析与成本对比
在决定是自建还是使用 n1n.ai 这样的聚合器时,成本是一个关键因素。以下是不同方案的对比:
| 维度 | OCI 容器实例 (A10) | OpenAI 公有云 | n1n.ai 聚合 API |
|---|---|---|---|
| 月度成本 | 约 $1,094 (固定) | 按 Token 计费 | 按 Token 计费 (更具竞争力) |
| 隐私性 | 绝对私有 (内网) | 第三方处理 | 多供应商隐私保护 |
| 响应速度 | 极快 (< 50ms) | 受网络波动影响 | 节点优化加速 |
| 维护成本 | 低 | 无 | 无 |
专业建议:如果你的团队每天有数千次推理请求,固定成本的 OCI 实例非常划算。但如果你需要频繁在 DeepSeek-V3、Claude 3.5 和 GPT-4 之间切换,n1n.ai 提供的单一 API 接口将为你节省大量的部署和维护时间。
第四步:自动化运维脚本
为了确保容器在意外重启后能自动恢复服务,我们可以编写一个简单的“预热”脚本。该脚本会检查模型是否存在,如果不存在则自动触发下载:
#!/bin/bash
# ollama-warmup.sh
OLLAMA_IP=$1
TARGET_MODEL="llama3.1:8b"
# 等待 API 就绪
while ! curl -s http://$OLLAMA_IP:11434/ > /dev/null; do
echo "正在等待 Ollama 服务启动..."
sleep 2
done
# 检查模型是否已下载
CHECK=$(curl -s http://$OLLAMA_IP:11434/api/tags | grep "$TARGET_MODEL")
if [ -z "$CHECK" ]; then
echo "模型未找到,开始下载 $TARGET_MODEL..."
curl -X POST http://$OLLAMA_IP:11434/api/pull -d "{\"name\":\"$TARGET_MODEL\"}"
else
echo "模型 $TARGET_MODEL 已就绪。"
fi
进阶:引入 OCI API 网关
虽然直接访问私有 IP 很方便,但在企业环境中,建议在 Ollama 前端部署一个 OCI API Gateway。这可以带来以下增强:
- 身份验证:通过 API Key 或 OAuth2 保护你的模型,防止内网滥用。
- 流量控制:限制每个部门的每分钟请求数 (RPM),保证核心业务的可用性。
- 请求审计:记录所有请求的 Meta Data,便于后续的合规性审计。
总结
通过 OCI 容器实例部署 Ollama,是目前在 Oracle Cloud 上构建私有 LLM 接口最快、最简便的方法。它规避了 Kubernetes 的复杂性,同时充分利用了 A10 GPU 的硬件性能。对于那些对数据隐私有极端要求,但又不想陷入运维泥潭的开发团队来说,这是一个完美的平衡点。
当然,如果你希望以更低的成本体验全球顶尖的模型,或者需要一个更稳定的生产级聚合网关,n1n.ai 始终是你的最佳伙伴。我们通过先进的调度算法,确保你在任何时候都能以最优的价格获取最强的 AI 能力。
立即在 n1n.ai 获取免费 API 密钥。