1. 基本信息

项目 说明
项目 Moon Bridge — Go 实现的协议转换代理
仓库 https://github.com/ZhiYi-R/moon-bridge
部署目标 192.168.109.200:22 (root)
部署路径 /home/wucf/docker/codex-bridge/
监听端口 4446
上游模型 DeepSeek V4 Pro + MiniMax M1

2. 架构

本地 Codex (Windows)                    远程服务器 (192.168.109.200)
┌───────────────────────┐   HTTP      ┌──────────────────────────────────┐
│ config.toml            │────────────▶│ Docker: moonbridge               │
│ base_url: 192.168.     │             │ - 4446:4446                     │
│   109.200:4446/v1      │             │   Transform 模式自动路由:         │
│                        │             │                                  │
│ model: deepseek-v4-pro │────────────▶│   deepseek → api.deepseek.com    │
│ model: MiniMax-M2.7-highspeed      │────────────▶│   minimax  → api.minimax.chat   │
└───────────────────────┘              └──────────────────────────────────┘

Codex 端改 model 字段即可切换,无需改 Moon Bridge。

3. 配置文件

3.1 config.yml

mode: "Transform"

log:
  level: "info"
  format: "text"

server:
  addr: "0.0.0.0:4446"

persistence:
  active_provider: db_sqlite

extensions:
  deepseek_v4:
    config:
      reinforce_instructions: true
  db_sqlite:
    enabled: true
    config:
      path: /app/data/moonbridge.db
      wal: true
      busy_timeout_ms: 5000
      max_open_conns: 1
  metrics:
    enabled: true
    config:
      default_limit: 100
      max_limit: 1000

cache:
  mode: "explicit"
  ttl: "5m"
  prompt_caching: true

defaults:
  model: "deepseek-v4-pro"
  max_tokens: 65536

models:
  deepseek-v4-pro:
    context_window: 262144
    max_output_tokens: 384000
    display_name: "DeepSeek V4 Pro"
    extensions:
      deepseek_v4:
        enabled: true

  MiniMax-M2.7-highspeed:
    context_window: 262144
    max_output_tokens: 65536
    display_name: "MiniMax M1"

providers:
  deepseek:
    base_url: "https://api.deepseek.com/v1"
    api_key: "sk-xxxxxxx"
    protocol: "openai-chat"

  minimax:
    base_url: "https://api.minimax.chat/v1"
    api_key: "sk-xxxxx"
    protocol: "openai-chat"

routes:
  deepseek-v4-pro:
    model: deepseek-v4-pro
    provider: deepseek
  MiniMax-M2.7-highspeed:
    model: MiniMax-M2.7-highspeed
    provider: minimax

3.2 docker-compose.yml

services:
  moonbridge:
    build:
      context: .
      dockerfile: Dockerfile
    image: moonbridge:latest
    container_name: moonbridge
    restart: unless-stopped

    command:
      - -config
      - /app/config.yml
      - -addr
      - 0.0.0.0:4446

    ports:
      - "4446:4446"

    volumes:
      - /home/wucf/docker/codex-bridge/config.yml:/app/config.yml:ro
      - /home/wucf/docker/codex-bridge/data:/app/data
      - /home/wucf/docker/codex-bridge/logs:/app/logs

    environment:
      - TZ=Asia/Shanghai

    healthcheck:
      test: ["CMD", "/app/moonbridge", "-config", "/app/config.yml", "-print-addr"]
      interval: 30s
      timeout: 5s
      retries: 3
      start_period: 10s

3.3 Dockerfile

FROM golang:1.25-bookworm AS builder
ENV GOPROXY=https://goproxy.cn,direct
WORKDIR /src
COPY go.mod go.sum ./
RUN go mod download
COPY . .
RUN CGO_ENABLED=0 GOOS=linux go build -trimpath -ldflags="-s -w" -o /out/moonbridge ./cmd/moonbridge

FROM alpine:3.21
RUN apk add --no-cache ca-certificates tzdata
WORKDIR /app
COPY --from=builder /out/moonbridge /app/moonbridge
EXPOSE 4446
#RUN adduser -D -u 1000 moonbridge
USER nobody
ENTRYPOINT ["/app/moonbridge"]
CMD ["-config", "/app/config.yml", "-addr", "0.0.0.0:4446"]

4. 部署

4.1 首次部署

# 1. 上传项目
scp -r E:/usr/data/AppData/.codex/moon-bridge/ root@192.168.109.200:/home/wucf/docker/codex-bridge/

# 2. 确保 config.yml 填好了 MiniMax API Key(见 3.1)

### 4.2 验证

```bash
docker compose ps
curl http://127.0.0.1:4446/health
curl http://127.0.0.1:4446/v1/models   # 应列出 deepseek-v4-pro 和 MiniMax-M2.7-highspeed

4.3 仅更新配置

scp config.yml root@192.168.109.200:/home/wucf/docker/codex-bridge/
ssh root@192.168.109.200 'cd /home/wucf/docker/codex-bridge && docker compose restart'

5. 运维

cd /home/wucf/docker/codex-bridge

docker compose ps                     # 状态
docker compose logs -f                # 实时日志
docker compose logs --tail=50         # 最近 50 行
docker compose restart                # 重启
docker compose up -d --build          # 重建
docker compose down                   # 停止并删除容器

6. 本地 Codex 配置

C:\Users\wucf\.codex\config.toml

model = "deepseek-v4-pro"
model_provider = "moonbridge"

[model_providers.moonbridge]
name = "MoonBridge"
base_url = "http://192.168.109.200:4446/v1"
wire_api = "responses"
request_max_retries = 4
stream_max_retries = 5
stream_idle_timeout_ms = 600000

切换模型:只需改 model 字段:

model = "deepseek-v4-pro"    # DeepSeek
model = "MiniMax-M2.7-highspeed"         # MiniMax

7. 故障排查

构建阶段

现象 原因 解决
gcr.io 超时 国内无法访问 已改用 alpine:3.21
docker.io 拉取慢 未配镜像加速 见 7.3
go mod download Go 代理 Dockerfile 已设 GOPROXY=https://goproxy.cn

运行时

现象 原因 解决
401 / 403 API Key 错误 检查对应 provider 的 api_key
端口不通 防火墙 firewall-cmd --add-port=4446/tcp --permanent && firewall-cmd --reload
容器反复重启 配置错误 docker compose logs
connection refused 容器未启动 docker compose ps

Docker 镜像加速

# /etc/docker/daemon.json
{
  "registry-mirrors": [
    "https://docker.m.daocloud.io",
    "https://dockerhub.timeweb.cloud"
  ]
}
# systemctl restart docker
Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐