保姆级教程:One API 从安装到配置的全流程详解
本文经过修改和调整,原文出处:https://blog.csdn.net/weixin_34620658/article/details/158143965
1. 简介
- 官方项目仓库位于 GitHub: github.com/songquanpeng/one-api
2. 环境准备与前置条件
别急着敲命令,先确认这几件事是否已就绪。这一步花 2 分钟,能避免后续 90% 的部署失败。
2.1 运行环境要求
- 硬件要求:2C2G即可
- 已安装 Docker 20.10+ 最新稳定版
- 时区设置:
Asia/Shanghai - OS:推荐Linux;Windows上推荐WSL2
2.3 目录规划
mkdir -p /data/oneapi/ ;cd /data/oneapi/
chmod -R 755 /data/oneapi
3. 部署:Docker compose
3.1、MySQL 前置准备(命令行执行)
1. 建数据库 oneapi
CREATE DATABASE IF NOT EXISTS oneapi DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
2. 创建专用账户(推荐)
替换自定义密码 OneApi@2026,按需修改
-- 创建用户,允许本地+容器访问
CREATE USER IF NOT EXISTS 'oneapi_user'@'%' IDENTIFIED BY 'OneApi@2026';
-- 赋予oneapi库全部权限
GRANT ALL PRIVILEGES ON oneapi.* TO 'oneapi_user'@'%';
-- 刷新权限
FLUSH PRIVILEGES;
如果你数据库跑在本机宿主机,容器访问不能写
localhost,要用宿主机内网IP。
3.2、docker-compose.yml 完整配置
新建:/data/oneapi/docker-compose.yml
version: "3.8"
services:
one-api:
image: justsong/one-api
container_name: one-api
restart: always
ports:
- "3000:3000" # 宿主机端口:容器端口,可改前面数字
environment:
TZ: Asia/Shanghai
# 格式:数据库账号:数据库密码@tcp(数据库地址:3306)/数据库名
# 重点:不要写localhost,填写宿主机真实内网IP
SQL_DSN: "oneapi_user:OneApi@2026@tcp(192.168.1.100:3306)/oneapi"
volumes:
# 持久化日志、配置,宿主机路径自行更换
- /data/oneapi/data:/data
networks:
- default
networks:
default:
启动&运维命令
- 进入yml所在目录启动
cd /data/oneapi
docker-compose up -d
- 查看运行日志(排错)
docker-compose logs -f one-api
- 重启服务
docker-compose restart one-api
- 更新镜像重启
docker-compose pull && docker-compose up -d
4. 首次登录与安全加固【极其重要】
部署完成后,打开浏览器,访问 http://你的服务器IP:13000(例如 http://192.168.1.100:13000)。
你会看到 One API 的登录页。系统预置了一个超级管理员账户:
- 用户名:
root - 密码:
123456
[!WARNING]
这是最高危操作!请务必在登录后的 30 秒内完成密码修改。
系统文档已明确强调:“使用 root 用户初次登录系统后,务必修改默认密码123456!” 这不是建议,是强制安全红线。
修改步骤:
- 成功登录后,右上角点击头像 → 选择【个人设置】
- 在【修改密码】区域,输入旧密码
123456,再输入两次新密码 - 点击【保存】,系统会立即登出。用新密码重新登录即可。
完成这一步,你的 One API 实例才真正具备基础安全性。后续所有配置,都将在这个安全账户下进行。
5. 核心配置四步走:从模型接入到对外服务
One API 的强大,在于其清晰的配置逻辑:渠道(Source)→ 令牌(Token)→ 用户(User)→ 调用(Call)。我们按这个顺序,一步步配置。
1、注册并获取大模型 API Key (关键!)
One API 本身不提供模型算力,它只是“管道”。你要先从各大平台获取自己的 API Key,才能让管道通起来。
| 平台 | 获取方式简述 | 注意事项 |
|---|---|---|
| OpenAI | 登录platform.openai.com,进入 API Keys 页面创建 | 需绑定支付方式,免费额度用完后会扣费 |
| 通义千问(阿里云) | 登录dashscope.console.aliyun.com,开通 DashScope 服务并创建 API Key | 免费额度充足,适合测试 |
| 文心一言(百度) | 登录cloud.baidu.com/wenxin,创建应用获取 Access Token | 注意是 Access Token,非 API Key,格式不同 |
| 讯飞星火 | 登录console.xfyun.cn,创建应用获取 AppID、APIKey、APISecret | 需三者组合生成签名,One API 已内置适配 |
| DeepSeek | 登录platform.deepseek.com,在 API Keys 中创建 | 支持 deepseek-chat 等主流模型 |
重要提醒:不要使用他人分享的公共 Key。不仅违反平台条款,更存在安全与额度失控风险。务必用自己的账号申请。
2、第一步:添加渠道(对接真实大模型)
渠道 = 你接入的每一个大模型服务商。这是整个系统的“水源”。
操作路径: 左侧菜单 → 【渠道管理】→ 【添加渠道】
关键字段填写指南(以通义千问为例):
| 字段 | 填写内容 | 说明 |
|---|---|---|
| 类型 | DashScope |
下拉选择,One API 已预置所有支持平台 |
| 名称 | 通义千问-免费版 |
自定义,用于识别,比如可写 qwen-max-付费、qwen-plus-测试 |
| 分组 | default |
表示该渠道对所有用户(包括新注册用户)开放。也可选 vip、svip 做权限隔离 |
| 模型 | qwen-max, qwen-plus |
勾选你希望开放的模型。选完类型后,列表会自动加载可用模型 |
| 密钥 | sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx |
从阿里云 DashScope 控制台获取的 API Key |
| 基础地址 | https://dashscope.aliyuncs.com/api/v1 |
默认值通常正确,无需修改 |
验证是否成功: 添加后,回到【渠道列表】,找到刚添加的条目,点击右侧【测试】按钮。如果显示 “测试成功”,说明网络连通、密钥有效、模型可用。
进阶技巧:
- 负载均衡:同一分组下添加多个同类型渠道(如两个 OpenAI 渠道),One API 会自动轮询分发请求,提升稳定性和并发能力。
- 模型重定向:用户请求
gpt-4-turbo,但你想让它实际走gpt-4o,开启此功能并填写映射关系即可。
3、第二步:创建令牌(生成对外调用凭证)
令牌 = 你分发给客户端、程序、合作伙伴的“钥匙”。它不等于你的原始 API Key,而是经过 One API 授权、限流、审计的中间凭证。
操作路径: 左侧菜单 → 【令牌管理】→ 【添加令牌】
关键字段填写指南:
| 字段 | 填写内容 | 说明 |
|---|---|---|
| 名称 | 内部测试令牌 |
自定义,描述用途,如 客服机器人、前端Demo |
| 过期时间 | 选择日期,如 2025-12-31 |
不填则永不过期,生产环境强烈建议设置 |
| 额度 | 1000 |
单位为“美元等价额度”,One API 会按各模型实际消耗折算(如 GPT-4 消耗快,Qwen 消耗慢) |
| 允许的模型 | qwen-max, gpt-3.5-turbo |
白名单机制,即使渠道开了 10 个模型,此令牌也只能调用勾选的这几个 |
生成后,你会看到三种格式的令牌:
sk-xxx(标准 OpenAI 格式)Bearer sk-xxx(HTTP Authorization 头格式)https://your-domain.com/v1(完整 API 地址)
这就是你对外提供的全部信息! 客户只需把他们的 OpenAI 代码里的 https://api.openai.com/v1 换成你的地址,sk-xxx 换成这个新令牌,一切照常运行。
4、第三步:(可选)创建用户与分组(面向多租户场景)
如果你只是自己用,这步可以跳过。但如果你想搭建一个小型 AI 服务平台,给不同客户分配不同额度和模型,就需要用户体系。
操作路径: 左侧菜单 → 【用户管理】→ 【添加用户】
关键字段:
- 用户名:
client_a(登录后台用) - 显示名称:
客户A公司(界面显示名) - 密码:
StrongPassw0rd!(必须符合强度要求) - 分组:
vip(决定他能用哪些渠道)
添加后,该用户即可用 client_a 和密码登录后台,查看自己的令牌、额度、日志。管理员可在【用户管理】中随时封禁、重置密码、调整分组。
5、第四步:配置系统全局设置(让服务更专业)
最后,让 One API 更贴合你的使用习惯。
操作路径: 左侧菜单 → 【设置】→ 【其他设置】
必配项推荐:
- 系统名称:
我的AI中台(替换掉默认的 “One API”) - 网站 Logo: 上传一张 120x120 px 的 PNG 图标
- 公告:
【重要】服务将于 2024-10-01 进行维护,请提前安排(向所有用户展示) - 首页自定义: 粘贴一段 Markdown,写上你的服务介绍、联系方式、使用文档链接
这些设置无需重启,保存后立即生效。一个属于你自己的、品牌化的 AI 网关就此诞生。
6. 实战调用:三行代码接入你的第一个应用
配置完成,现在来验证效果。我们用最简单的 Python requests 库,模拟一次标准的 OpenAI 风格调用。
6.1 准备工作
确保你已:
- 拥有一个有效的令牌(从【令牌管理】复制)
- 知道你的 One API 访问地址(如
http://192.168.1.100:13000)
6.2 Python 示例代码(复制即用)
import requests
import json
# 替换为你的实际地址和令牌
BASE_URL = "http://192.168.1.100:13000/v1"
API_KEY = "sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
headers = {
"Content-Type": "application/json",
"Authorization": f"Bearer {API_KEY}"
}
data = {
"model": "qwen-max", # 必须是你渠道中已启用的模型
"messages": [
{"role": "user", "content": "用一句话解释量子计算是什么?"}
],
"stream": False # 设为 True 可获得流式响应(打字机效果)
}
response = requests.post(f"{BASE_URL}/chat/completions", headers=headers, json=data)
print(json.dumps(response.json(), indent=2, ensure_ascii=False))
6.3 运行结果与解读
成功执行后,你将看到类似这样的 JSON 响应:
{
"id": "chatcmpl-xxx",
"object": "chat.completion",
"created": 1728000000,
"model": "qwen-max",
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "量子计算是利用量子力学原理(如叠加态和纠缠态)进行信息处理的新型计算范式,能在特定问题上远超经典计算机。"
},
"finish_reason": "stop"
}
],
"usage": {
"prompt_tokens": 15,
"completion_tokens": 32,
"total_tokens": 47
}
}
这意味着:
- 请求已成功抵达 One API;
- One API 已将请求准确转发给通义千问
qwen-max模型; - 响应被原样返回,且结构与 OpenAI 官方 API 完全一致;
usage字段中的 token 消耗,已被 One API 自动记录并扣减你的令牌额度。
7. 常见问题与避坑指南
在真实部署中,你可能会遇到这些高频问题。我们提前为你梳理清楚:
7.1 测试渠道失败:连接超时
- 原因: 服务器无法访问外网(如企业内网防火墙拦截)、或目标模型平台(如 OpenAI)在国内不可达。
- 解法:
- 在服务器上执行
curl -v https://dashscope.aliyuncs.com,确认能否连通国内平台; - 对于 OpenAI/Azure 等境外平台,需确保服务器已配置合规的网络环境(One API 本身不提供代理功能);
- 在渠道配置中,尝试填写代理地址(如
http://127.0.0.1:7890),前提是本地已运行合规代理服务。
- 在服务器上执行
7.2 调用返回 401 Unauthorized
- 原因: 令牌错误、过期、或额度已用尽。
- 解法:
- 回到【令牌管理】,检查该令牌状态是否为“启用”,过期时间是否有效;
- 点击【查看额度】,确认剩余额度 > 0;
- 检查代码中
Authorization头的格式是否为Bearer sk-xxx(注意空格)。
7.3 添加了渠道,但在牌里没有对应模型
- 原因: 渠道的【分组】与当前登录用户的【分组】不匹配。
- 解法:
- 确认你登录的是
root(超级管理员),它能看到所有分组; - 在【渠道管理】中,编辑该渠道,将【分组】改为
default(默认对所有用户开放); - 或在【用户管理】中,将目标用户加入该渠道所属的分组(如
vip)。
- 确认你登录的是
7.4 备份所有配置
- 答案: 只需备份
/opt/oneapi/data目录下的全部文件!
One API 使用 SQLite 数据库存储所有数据,该目录就是它的全部世界。定期压缩备份此目录,即可实现秒级恢复。