git clone https://github.com/samson910022/OpenCode2API.git
cd OpenCode2APIcp .env.example .env
# 编辑 .env 文件,设置你的配置docker compose up -d# 健康检查
curl http://127.0.0.1:10000/health
# 获取模型列表
curl -H "Authorization: Bearer $API_KEY" http://127.0.0.1:10000/v1/models# 必需配置
API_KEY=change-me
OPENCODE_SERVER_PASSWORD=change-me-too
# 安全相关
DISABLE_TOOLS=true
# 可选配置
OPENCODE_PROXY_PROMPT_MODE=plugin-inject
OPENCODE_PROXY_OMIT_SYSTEM_PROMPT=true
OPENCODE_PROXY_AUTO_CLEANUP_CONVERSATIONS=true| 卷名 | 容器内路径 | 说明 |
|---|---|---|
opencode-data |
/home/node/.local/share/opencode |
OpenCode 数据目录 |
opencode-config |
/home/node/.config/opencode |
OpenCode 配置目录 |
| 项目目录 | /home/node/project |
项目源代码 |
docker build -t my-opencode2api .docker run -d \
-p 10000:10000 \
-e API_KEY=your-key \
-e OPENCODE_SERVER_PASSWORD=your-password \
-v opencode-data:/home/node/.local/share/opencode \
-v opencode-config:/home/node/.config/opencode \
my-opencode2api后端
10001仅容器内部使用,不要对外发布(compose 默认也只映射代理端口;改端口用OPENCODE_PROXY_PORT,legacy 别名PORT也生效,如8090;ports映射与healthcheck会同步跟随)。
compose 里所有配置项都写成空值(
${X:-}),默认值由代码持有:这样挂载进来的config.json与 legacy 别名不会被镜像/编排里的非空默认值遮蔽。端口类变量在entrypoint.sh启动时做1..65535校验,非法值告警后回落默认,不会把坏端口传给后端。
注意:镜像构建时不会把本地
config.json烘焙进去(多阶段构建只复制dist/与依赖,避免把本地密钥带进镜像)。容器内配置请用环境变量,或-v ./config.json:/home/node/project/config.json:ro挂载(代理会按dist/同层 → 项目根 → 工作目录顺序查找)。
ghcr.io/samson910022/opencode2api:latest 同时含 linux/amd64 与 linux/arm64,ARM 机器可直接 pull,无需本地 build(仅自带 custom-bin/opencode 二进制时才需按架构重建)。
compose 預設 mem_limit 768m(單容器含 proxy+後端)。大機要放寬或取消,用 override 檔:
# docker-compose.override.yml
services:
opencode2api:
mem_limit: 2g
mem_reservation: 512m
cpus: 4.0後端(Bun)認標準代理環境變數(ALL_PROXY / HTTP_PROXY / HTTPS_PROXY,大小寫皆可,NO_PROXY 跳過直連),用 compose environment 或 .env 傳入即可(不要提交帶值的 .env)。兩點注意:NO_PROXY 必須含 localhost,127.0.0.1,::1(否則 proxy↔後端的 loopback 也被送進代理而中斷);Bun 不支援 socks5(h)://(會報 UnsupportedProxyProtocol),只認 http/https 代理——SOCKS 需求先在外層轉成 HTTP CONNECT 入口。
compose 已内置 json-file 轮转(max-size: 10m、max-file: 3);裸 docker run 请自行加上 --log-opt max-size=10m --log-opt max-file=3。
docker compose logs -f服务配置了健康检查:
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:${OPENCODE_PROXY_PORT:-${PORT:-10000}}/health"]
interval: 30s
timeout: 10s
retries: 3
start_period: 200s
/health是浅检查(只确认代理活着,不测后端;start_period200s 覆盖 entrypoint 约 180s 的小机冷启动等待)。小机(1GB)另有mem_limit 768m/pids_limit 256保护,裸docker run请加等价旗(见docker-compose.yml注释)。
检查日志:
docker compose logs确保 PUID/PGID 配置正确 (默认 1000:1000)。
📖 Docs Index | 🚀 Getting Started