适用场景:你需要在自己的服务器上部署 CLIProxyAPI,用一个入口管理多个模型渠道,并给客户端提供统一的 OpenAI 兼容接口。

安全提醒:不要把管理密钥、客户端 API Key、上游模型 Key 写进公开仓库。示例中的密钥都要替换成你自己的强随机字符串。

#项目地址

https://github.com/router-for-me/CLIProxyAPI

#部署步骤

#1. 安装 Docker

curl -fsSL https://get.docker.com | sh

如果服务器已经安装 Docker,可以跳过这一步。

#2. 创建工作目录

mkdir -p CLIProxyAPI && cd CLIProxyAPI
mkdir -p auths
touch config.yaml

config.yaml 存放服务配置,auths 用来持久化 CLI OAuth / 认证数据。

#3. 写入最小配置

下面是一个偏保守的最小配置:服务只监听本机 127.0.0.1,再通过 Caddy 或其他反向代理暴露 HTTPS。

host: "127.0.0.1"
port: 8317

auth-dir: "~/.cli-proxy-api"

# 调用本代理时使用的客户端密钥。
api-keys:
  - "replace-with-your-client-api-key"

# 管理页面 / 管理 API。
remote-management:
  allow-remote: false
  secret-key: "replace-with-a-long-random-admin-secret"
  disable-control-panel: false

# 示例:Gemini API Key。按需替换或添加其他渠道。
gemini-api-key:
  - api-key: "replace-with-your-gemini-api-key"
    base-url: "https://generativelanguage.googleapis.com"

# 示例:OpenAI 兼容渠道。用不到可以删除这一段。
openai-compatibility:
  - name: "openrouter"
    base-url: "https://openrouter.ai/api/v1"
    api-key-entries:
      - api-key: "replace-with-your-openrouter-key"

几个优先检查的字段:

字段说明
host建议先用 127.0.0.1,只允许本机访问
port服务监听端口,默认示例为 8317
api-keys客户端请求代理服务时使用的密钥
remote-management.secret-key管理页面密码,务必使用强随机字符串
gemini-api-key / openai-compatibility上游模型渠道,按需保留即可

#4. 启动容器

docker pull eceasy/cli-proxy-api:latest

docker run -d \
  --name cli-proxy-api \
  -p 127.0.0.1:8317:8317 \
  -v $(pwd)/config.yaml:/CLIProxyAPI/config.yaml \
  -v $(pwd)/auths:/root/.cli-proxy-api \
  --restart unless-stopped \
  eceasy/cli-proxy-api:latest

这里把服务绑定在本机地址,公网访问交给反向代理处理;同时把配置和认证目录挂载到宿主机,方便更新容器时保留数据。

#5. 配置 Caddy 反向代理

如果你有域名,可以用 Caddy 提供 HTTPS:

example.com {
    encode gzip
    reverse_proxy 127.0.0.1:8317
    header {
        Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
        X-Content-Type-Options "nosniff"
        X-Frame-Options "DENY"
        Referrer-Policy "strict-origin-when-cross-origin"
    }
}

example.com 替换为你的真实域名。

#6. 访问管理页面

浏览器打开:

https://example.com/management.html

登录时填写 remote-management.secret-key 中设置的管理密钥。

#7. 客户端调用

客户端侧把接口地址指向你的域名,并使用 api-keys 中配置的客户端密钥。例如:

Base URL: https://example.com/v1
API Key: replace-with-your-client-api-key

模型名称和渠道映射以你的 config.yaml 为准。

#更新项目

进入工作目录后拉取新镜像,并用同样的挂载参数重建容器:

cd CLIProxyAPI

docker pull eceasy/cli-proxy-api:latest
docker stop cli-proxy-api && docker rm cli-proxy-api

docker run -d \
  --name cli-proxy-api \
  -p 127.0.0.1:8317:8317 \
  -v $(pwd)/config.yaml:/CLIProxyAPI/config.yaml \
  -v $(pwd)/auths:/root/.cli-proxy-api \
  --restart unless-stopped \
  eceasy/cli-proxy-api:latest

配置文件和认证数据都在宿主机目录中,重建容器不会丢失。

#排查建议

问题检查点
管理页打不开容器是否运行、Caddy 是否反代到 127.0.0.1:8317
认证失败客户端是否使用了 api-keys,管理页是否使用了 secret-key
模型不可用上游 Key 是否有效,模型名 / alias 是否配置正确
更新后数据丢失是否挂载了 config.yamlauths 目录

#安全建议

  • 不要直接把服务暴露在公网端口上,优先使用反向代理和 HTTPS。
  • secret-keyapi-keys 使用强随机字符串。
  • 不要在文章、截图、Git 仓库中泄露任何真实 Key。
  • 如果开启远程管理,务必配合 HTTPS、强密码和访问限制。