English | 中文 | 日本語
一款高性能、企业级的AI API透明代理服务,专为需要集成多个AI服务的企业和开发人员设计。基于Go构建,具备智能密钥管理、负载均衡和全面监控能力,适用于高并发生产环境。
详细文档请访问官方文档
GPT-Load作为透明代理服务,完全保留各AI服务提供商的原生API格式:
docker run -d --name gpt-load \
-p 3001:3001 \
-e AUTH_KEY=your-secure-key-here \
-v "$(pwd)/data":/app/data \
ghcr.io/tbphp/gpt-load:latest
[!NOTE] 请将
your-secure-key-here替换为强密码(切勿使用默认值),然后即可登录管理界面:
安装命令:
# 创建目录
mkdir -p gpt-load && cd gpt-load
# 下载配置文件
wget https://raw.githubusercontent.com/tbphp/gpt-load/refs/heads/main/docker-compose.yml
wget -O .env https://raw.githubusercontent.com/tbphp/gpt-load/refs/heads/main/.env.example
# 编辑.env文件,将AUTH_KEY修改为强密码。切勿使用默认值或sk-123456等简单密钥。
# 启动服务
docker compose up -d
部署前必须修改默认管理员密钥(AUTH_KEY)。推荐格式:sk-prod-[32位随机字符串]。
默认安装使用SQLite版本,适用于轻量级单实例应用。
如需安装MySQL、PostgreSQL和Redis,请在docker-compose.yml文件中取消所需服务的注释,配置相应环境变量并重启。
其他命令:
# 检查服务状态
docker compose ps
# 查看日志
docker compose logs -f
# 重启服务
docker compose down && docker compose up -d
# 更新到最新版本
docker compose pull && docker compose down && docker compose up -d
部署后:
[!NOTE] 使用修改后的AUTH_KEY登录管理界面。
源码构建需要本地安装数据库(SQLite、MySQL或PostgreSQL)和Redis(可选)。
# 克隆并构建
git clone https://github.com/tbphp/gpt-load.git
cd gpt-load
go mod tidy
# 创建配置
cp .env.example .env
# 编辑.env文件,将AUTH_KEY修改为强密码。切勿使用默认值或sk-123456等简单密钥。
# 修改.env中的DATABASE_DSN和REDIS_DSN配置
# REDIS_DSN为可选配置,若不配置则启用内存存储
# 运行
make run
部署后:
[!NOTE] 使用修改后的AUTH_KEY登录管理界面。
集群部署要求所有节点连接到同一个MySQL(或PostgreSQL)和Redis,且Redis为必填项。建议使用统一的分布式MySQL和Redis集群。
部署要求:
AUTH_KEY、DATABASE_DSN、REDIS_DSNIS_SLAVE=true详细信息请参考集群部署文档
GPT-Load采用双层配置架构:
系统设置 环境配置
静态配置(环境变量)
服务器配置:
安全配置:
| 设置项 | 环境变量 | 默认值 | 描述 |
|---|---|---|---|
| 管理密钥 | AUTH_KEY | - | 管理端访问认证密钥,请更改为强密码 |
| 加密密钥 | ENCRYPTION_KEY | - | 加密存储API密钥。支持任意字符串,留空则禁用加密。详见数据加密迁移 |
数据库配置:
| 设置项 | 环境变量 | 默认值 | 描述 |
|---|---|---|---|
| 数据库连接 | DATABASE_DSN | ./data/gpt-load.db | 数据库连接字符串(DSN)或文件路径 |
| Redis连接 | REDIS_DSN | - | Redis连接字符串,留空时使用内存存储 |
性能与跨域配置:
| 设置项 | 环境变量 | 默认值 | 描述 |
|---|---|---|---|
| 最大并发请求数 | MAX_CONCURRENT_REQUESTS | 100 | 系统允许的最大并发请求数 |
| 启用跨域资源共享 | ENABLE_CORS | false | 是否启用跨域资源共享(CORS) |
| 允许的源 | ALLOWED_ORIGINS | - | 允许的源,逗号分隔 |
| 允许的方法 | ALLOWED_METHODS | GET,POST,PUT,DELETE,OPTIONS | 允许的HTTP方法 |
| 允许的请求头 | ALLOWED_HEADERS | * | 允许的请求头,逗号分隔 |
| 允许凭据 | ALLOW_CREDENTIALS | false | 是否允许发送凭据 |
日志配置:
| 设置项 | 环境变量 | 默认值 | 描述 |
|---|---|---|---|
| 日志级别 | LOG_LEVEL | info | 日志级别:debug、info、warn、error |
| 日志格式 | LOG_FORMAT | text | 日志格式:text、json |
| 启用文件日志 | LOG_ENABLE_FILE | false | 是否启用文件日志输出 |
| 日志文件路径 | LOG_FILE_PATH | ./data/logs/app.log | 日志文件存储路径 |
代理配置:
GPT-Load会自动从环境变量读取代理设置,以向上游AI服务提供商发起请求。
| 设置项 | 环境变量 | 默认值 | 描述 |
|---|---|---|---|
| HTTP代理 | HTTP_PROXY | - | HTTP请求的代理服务器地址 |
| HTTPS代理 | HTTPS_PROXY | - | HTTPS请求的代理服务器地址 |
| 不使用代理 | NO_PROXY | - | 逗号分隔的主机或域名列表,用于绕过代理 |
支持的代理协议格式:
http://user:pass@host:porthttps://user:pass@host:portsocks5://user:pass@host:port动态配置(热重载)
基本设置:
| 设置项 | 字段名 | 默认值 | 分组覆盖 | 描述 |
|---|---|---|---|---|
| 项目URL | app_url | http://localhost:3001 | ❌ | 项目基础URL |
| 全局代理密钥 | proxy_keys | 初始值来自AUTH_KEY | ❌ | 全局有效的代理密钥,逗号分隔 |
| 日志保留天数 | request_log_retention_days | 7 | ❌ | 请求日志保留天数,0表示不清理 |
| 日志写入间隔 | request_log_write_interval_minutes | 1 | ❌ | 日志写入数据库周期(分钟) |
| 启用请求体日志 | enable_request_body_logging | false | ✅ | 是否在请求日志中记录完整请求体内容 |
请求设置:
| 设置项 | 字段名 | 默认值 | 分组覆盖 | 描述 |
|---|---|---|---|---|
| 请求超时时间 | request_timeout | 600 | ✅ | 转发请求完整生命周期超时时间(秒) |
| 连接超时时间 | connect_timeout | 15 | ✅ | 与上游服务建立连接的超时时间(秒) |
| 空闲连接超时时间 | idle_conn_timeout | 120 | ✅ | HTTP客户端空闲连接超时时间(秒) |
| 响应头超时时间 | response_header_timeout | 600 | ✅ | 等待上游响应头的超时时间(秒) |
| 最大空闲连接数 | max_idle_conns | 100 | ✅ | 连接池最大总空闲连接数 |
| 每主机最大空闲连接数 | max_idle_conns_per_host | 50 | ✅ | 每个上游主机的最大空闲连接数 |
| 代理URL | proxy_url | - | ✅ | 用于转发请求的HTTP/HTTPS代理,为空时使用环境变量配置 |
密钥配置:
| 设置项 | 字段名 | 默认值 | 分组覆盖 | 描述 |
|---|---|---|---|---|
| 最大重试次数 | max_retries | 3 | ✅ | 单个请求使用不同密钥的最大重试次数 |
| 黑名单阈值 | blacklist_threshold | 3 | ✅ | 密钥累计失败多少次后被列入黑名单 |
| 密钥验证间隔 | key_validation_interval_minutes | 60 | ✅ | 后台定时密钥验证周期(分钟) |
| 密钥验证并发数 | key_validation_concurrency | 10 | ✅ | 后台验证无效密钥的并发数 |
| 密钥验证超时时间 | key_validation_timeout_seconds | 20 | ✅ | 后台验证单个密钥的API请求超时时间(秒) |
GPT-Load支持API密钥的加密存储。您可以随时启用、禁用或更改加密密钥。
查看数据加密迁移详情
[!IMPORTANT] 重要提醒:
- 一旦ENCRYPTION_KEY丢失,加密数据将无法恢复! 请安全备份此密钥。建议使用密码管理器或安全密钥管理系统。
- 迁移前必须停止服务,以避免数据不一致。
- 强烈建议备份数据库,以防迁移失败需要恢复。
- 为确保安全,密钥应使用32个字符或更长的随机字符串。
- 迁移后确保
.env中的ENCRYPTION_KEY与--to参数匹配。- 如果禁用加密,请移除或清空
ENCRYPTION_KEY配置。
# 生成安全随机密钥(32个字符)
openssl rand -base64 32 | tr -d "=+/" | cut -c1-32
访问管理控制台的地址:(默认地址)
Web管理界面提供以下功能:
OpenAI 聊天补全格式 (openai):
/v1/chat/completions - 聊天对话/v1/completions - 文本补全/v1/embeddings - 文本嵌入/v1/models - 模型列表OpenAI 响应格式 (openai-response):
/v1/responses - 统一响应生成/v1/models - 模型列表Gemini 格式:
/v1beta/models/*/generateContent - 内容生成/v1beta/models - 模型列表Anthropic 格式:
/v1/messages - 消息对话/v1/models - 模型列表(如可用)OpenAI Python SDK:
from openai import OpenAI
client = OpenAI(
api_key="your-proxy-key", # 使用代理密钥
base_url="http://localhost:3001/proxy/openai" # 使用代理端点
)
response = client.chat.completions.create(
model="gpt-4.1-mini",
messages=[{"role": "user", "content": "Hello"}]
)
Google Gemini SDK (Python):
import google.generativeai as genai
# 配置 API 密钥和基础 URL
genai.configure(
api_key="your-proxy-key", # 使用代理密钥
client_options={"api_endpoint": "http://localhost:3001/proxy/gemini"}
)
model = genai.GenerativeModel('gemini-2.5-pro')
response = model.generate_content("Hello")
Anthropic SDK (Python):
from anthropic import Anthropic
client = Anthropic(
api_key="your-proxy-key", # 使用代理密钥
base_url="http://localhost:3001/proxy/anthropic" # 使用代理端点
)
response = client.messages.create(
model="claude-sonnet-4-20250514",
messages=[{"role": "user", "content": "Hello"}]
)
[!IMPORTANT] 作为透明代理服务,GPT-Load 完全保留了各类 AI 服务的原生 API 格式和认证方式。您只需替换端点地址,并使用管理界面中配置的 代理密钥 即可实现无缝迁移。
感谢所有为 GPT-Load 做出贡献的开发者!
非常感谢 LINUX DO 社区的支持!
本项目由 DigitalOcean 支持。
MIT 许可证 - 详见 LICENSE 文件。
探索更多轩辕镜像的使用方法,找到最适合您系统的配置方式
通过 Docker 登录认证访问私有仓库
无需登录使用专属域名
Kubernetes 集群配置 Containerd
K3s 轻量级 Kubernetes 镜像加速
VS Code Dev Containers 配置
Podman 容器引擎配置
HPC 科学计算容器配置
ghcr、Quay、nvcr 等镜像仓库
Harbor Proxy Repository 对接专属域名
Portainer Registries 加速拉取
Nexus3 Docker Proxy 内网缓存
需要其他帮助?请查看我们的 常见问题Docker 镜像访问常见问题解答 或 提交工单
docker search 限制
站内搜不到镜像
离线 save/load
插件要用 plugin install
WSL 拉取慢
安全与 digest
新手拉取配置
镜像合规机制
不支持 push
manifest unknown
no matching manifest(架构)
invalid tar header(解压)
TLS 证书失败
DNS 超时
域名连通性排查
410 Gone 排查
402 与流量用尽
401 认证失败
429 限流
D-Bus 凭证提示
413 与超大单层
来自真实用户的反馈,见证轩辕镜像的优质服务