Skip to content

Latest commit

 

History

History
166 lines (111 loc) · 4.45 KB

docker.md

File metadata and controls

166 lines (111 loc) · 4.45 KB

🐳 Docker 部署

Version


🚀 快速开始

1️⃣ 克隆项目

git clone https://github.com/samson910022/OpenCode2API.git
cd OpenCode2API

2️⃣ 配置环境变量

cp .env.example .env
# 编辑 .env 文件,设置你的配置

3️⃣ 启动服务

docker compose up -d

4️⃣ 验证

# 健康检查
curl http://127.0.0.1:10000/health

# 获取模型列表
curl -H "Authorization: Bearer $API_KEY" http://127.0.0.1:10000/v1/models

⚙️ 配置说明

.env 文件

# 必需配置
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

改變出口 IP(後端走代理)

後端(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_period 200s 覆盖 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