vm2api README

The project's README from github.com/dofastted/vm2api. As one markdown file: README.md.

vm2api

虚拟机拟真 + Claude Code。0 提示词注入。

Release License Telegram

许可:个人学习与非商用自建可用。商用必须先取得书面授权。联系 Telegram @VM2API。全文见 LICENSE。

💬 加入讨论:Telegram @VM2API

主路线图解:技术路线 · 自建:部署说明 · 打二进制:版本构建

核心能力


快速开始

环境要求

项 建议
OS Ubuntu 24.04(glibc 够新;Debian 12 上新内核常常起不来)
运行时 Node 22、Docker、iptables
本机构建 Rust stable、Go 1.25、pnpm 10
网 每槽一条出口:远程 SOCKS5,或本地出口

Docker Compose(推荐)

生产就用这条。拉预构建镜像,不在服务器上构建;安装目录任意。

一键安装 / 更新(保留已有非空 .env 字段 / vms/ / data/,不 docker rm 槽)。空密码默认 admin / 123456,登录 http://<ip>:8787/cc#/login。

curl -sSL https://raw.githubusercontent.com/dofastted/vm2api/main/deploy/install.sh | sudo bash
# 以后更新
curl -sSL https://raw.githubusercontent.com/dofastted/vm2api/main/deploy/install.sh | sudo bash -s -- upgrade
sudo bash /opt/vm2api/deploy/install.sh check

管理台 设置 → 关于 会对照 GitHub Release,并给出同一条命令。

运行形态(不是一个父容器里一堆子进程):

mkdir -p /opt/vm2api && cd /opt/vm2api
curl -sSLO https://raw.githubusercontent.com/dofastted/vm2api/main/docker-compose.yml
curl -sSL -o .env https://raw.githubusercontent.com/dofastted/vm2api/main/.env.example
chmod 600 .env
# 空密码默认 admin / 123456;空 API key / DB secret 由入口生成

docker compose pull && docker compose up -d
curl -sS --noproxy '*' http://127.0.0.1:8787/health

镜像自带 bin/kin-{kernel,egress,worker,codex-kernel,cookie-auth} 与 share/wrap-cli,入口写进挂载目录,服务器上不编 Rust/Go/前端。槽位 OS 镜像先 docker pull ghcr.io/dofastted/kin-os-*,拉不到时建槽阶段兜底构建。槽 UID 是 10000+序号,bin/kin-* 必须 755。

改代码自己构建:docker compose -f docker-compose.yml -f docker-compose.build.yml up -d --build(一键脚本用 --from-source)。

Docker Desktop(含 WSL2)的 host 网络在 Desktop Linux VM 里,WSL/macOS 的 127.0.0.1:8787 可能连不上。改用:

docker exec vm2api python3 -c 'import urllib.request; print(urllib.request.urlopen("http://127.0.0.1:8787/health").read().decode())'

生产请用 Ubuntu 24.04 + Docker Engine。完整约束:DEPLOY.md · Docker。

本机 Node

  1. 克隆并安装

    git clone https://github.com/dofastted/vm2api.git /opt/vm2api
    cd /opt/vm2api
    npm ci
    pnpm -C web install --frozen-lockfile
    npm run build:web
    

    内核 / 网关:仓内 bin/kin-* 已是 linux amd64。也可本机重编或从 Release 覆盖。

  2. 写环境变量和占位槽

    cp docs/deploy/env.example /etc/vm2api.env
    chmod 600 /etc/vm2api.env
    # 必填:VM2API_API_KEY / VM2API_ADMIN_PASSWORD / VM2API_DB_SECRET
    # 自建请把 KIN_*_BIN 指到 /opt/vm2api/bin/
    
    mkdir -p vms data bin
    printf '%s\n' '{ "active_vm": "vm-01" }' > vms/active.json
    

    还要有 vms/vm-01.json,抄本见 部署说明。没有 vms/active.json 进程会退出。

  3. 启动

    set -a && source /etc/vm2api.env && set +a
    node src/server.mjs
    

    生产用 systemd:docs/deploy/vm2api.service。

访问

启动成功后:

入口 地址
探活 http://127.0.0.1:8787/health
管理台 http://127.0.0.1:8787/console(VM2API_ADMIN_PASSWORD)
协议 POST /v1/messages(master key 或 sk-vm-…)

上线后:代理池绑出口 → 建 Claude 槽 → 导入 Setup Token → 官方初装 → 再打 /v1。完整步骤:DEPLOY.md。

curl -sS http://127.0.0.1:8787/v1/messages \
  -H "Authorization: Bearer $VM2API_API_KEY" \
  -H "content-type: application/json" \
  -d '{"model":"claude-sonnet-5","max_tokens":128000,"messages":[{"role":"user","content":"hello"}]}'

技术路线

用户请求
  → 协议清洗
  → POST /v1/messages
  → 接入 Claude Code 
  → TCP 转发
  → endpoint
  → 透明转发给用户

Docker / 真虚拟机、物理指纹、20 路原生 subagent

全量遥测,独立电脑,无其余特征

遥测全量发送。一槽一台机器。身份、遥测、指纹都按单机收敛。

展开说明:docs/技术路线.md


架构

客户端 / Claude Code / 兼容 SDK
        │  Bearer / x-api-key
        ▼
Node 控制面  :8787
  协议清洗 · 调度 · 管理台 /console
        │  cli-hop
        ▼
槽(Docker 或真虚拟机)
  Rust 内核 + Claude Code 原生 subagent(≤20)
        │  SOCKS5 或本地出口
        ▼
Console API endpoint  →  原样回传给调用方
目录 做什么
src/config/routing.json 控制面开关。设置页只写这里
vms/<id>/run/kernel.json 槽内 kernel 热读副本。只投影人设、system_layout、缓存 TTL、时区
src/ Node 控制面、/v1、面板 API
web/ Vite 管理台,构建后 GET /console
bin/kin-kernel Claude Code 槽内核(预编译 ELF)
worker/cmd/kin-egress 远程 SOCKS5 透明网关
worker/cmd/kin-worker 只 telemetry,不是推理 hop
docs/ 路线、部署、构建、契约

kernel / wrap 只带预编译 ELF。不要提交凭证。


部署与配置

生产推荐:仓库放到 /opt/vm2api,写 .env,docker compose up -d --build。前面可以 nginx 反代 /v1 /api /console /health。本机 Node + systemd 是备选,见 DEPLOY.md。

最少三项,缺 VM2API_API_KEY 或面板密码进程起不来:

VM2API_API_KEY=         # master key,/v1 + 面板 + /admin
VM2API_ADMIN_PASSWORD=  # 管理台登录
VM2API_DB_SECRET=       # 库加密

VM2API_* 优先,没有再读 KIN_*。完整表和 nginx 抄本:DEPLOY.md · env.example


版本与构建

当前发布:v1.3.14

git tag -a v1.3.14 -m "vm2api v1.3.14"
git push origin v1.3.14

v* tag 会触发 Release 工作流,再挂一份 linux amd64 ELF。仓内 bin/ 已可直接部署。步骤:BUILD.md


文档

文档 内容
技术路线 产品主路线(图)
DEPLOY.md Docker Compose(推荐)、环境变量、占位槽、systemd、反代
BUILD.md 本机构建、Release、升级
API.md /v1 客户端契约
PROTOCOL.md 协议行为
PANEL_API.md 管理台 API
OAUTH.md 导入与换票(主凭证是 Setup Token)
CHANGELOG.md 版本记录

FAQ

  1. 进程立刻退出,提示 VM2API_API_KEY not set 或读不到 JSON?
    Compose 写仓库 .env;本机 Node 写 /etc/vm2api.env,再准备 vms/active.json。抄本在 DEPLOY.md。

  2. /console 是空白或 404?
    Compose 镜像里已带 web/dist。本机 Node 先 npm run build:web。静态页更新不必重启 Node。

  3. 槽建好了但不调度?
    先绑出口(远程 SOCKS5 或管理台 添加本地出口),再导入 Setup Token。没凭证是 no_credential,不会入池。

  4. Debian 12 上内核起不来?
    优先 Ubuntu 24.04。过旧的 glibc 跑不了当前 wrap / Claude kernel。

  5. 还要不要跑 Go hop / kin-worker 当推理?
    不要。hop 服务端已删除。kin-worker 不带参数会退出,只接受 telemetry。

  6. 密钥写进 git 了怎么办?
    立刻轮换 VM2API_*、Setup Token、面板密码。不要把密钥贴到 Issue。

  7. Compose 起来了但建不了槽 / egress network missing?
    bin/kin-* 为 755、挂了 docker.sock、控制面容器名与 VM2API_CONTAINER_NAME 一致(自省宿主路径用)。先添加本地出口再启动槽——首次启动会自动补一个本机出口 px-local。

  8. exec: "/usr/local/bin/kin-kernel": permission denied?
    chmod 755 bin/kin-kernel bin/kin-egress bin/kin-worker bin/kin-codex-kernel。不要用 700。

  9. 本机 curl 127.0.0.1:8787 失败,容器却是 healthy?
    Docker Desktop 的 network_mode: host 不在 WSL/macOS localhost。用 docker exec vm2api … 探活,或改 Ubuntu + Docker Engine。

  10. docker ps 怎么这么多容器?
    vm2api 只要 vm2api + 每个已启动槽一个 kin-*。postgres / newapi / hermes 等同机其它栈,不是本项目子进程。不能把多槽塞进一个容器当多进程,否则指纹/遥测糊成一台。


交流与支持

Telegram 群组:t.me/VM2API(@VM2API)

开源维护需要时间。扫码进群或支持一下,谢谢。

Telegram @VM2API 支持收款码

感谢 liunx do 论坛支持。

欢迎 Issue / PR。提交前请勿带上 .env、槽 JSON 里的票、或 Release 二进制。


Star History

Star History Chart

许可证

开源版仅覆盖个人学习、研究与非商用自建,须保留 LICENSE 全文。

商用必须先取得书面授权(对外收费、作为付费服务、公司生产营收、收费再分发等)。未授权商用禁止。申请:Telegram @VM2API。

vm2api 不是 Anthropic 官方项目,与其无关联。Claude、Claude Code、Anthropic 等均为其权利人的商标。

vm2api (dofastted/vm2api)

Searching Database…

1.2K ·GitHub
Что это?vm2api — самостоятельно размещаемый прокси, который пропускает ваш API-трафик Claude/Anthropic (или совместимый с OpenAI) через правдоподобную виртуальную машину или Docker-«слот», чтобы аккаунт выглядел как настоящий клиент Claude Console, вместо того чтобы полагаться на трюки с системными промптами или инъекцией персоны.
Это прокси-сервис или реальный образ виртуальной машины, который я запускаю?Это управляющая плоскость на Node, которую вы разворачиваете через Docker Compose; каждый «слот» аккаунта может быть либо Docker-контейнером, либо настоящей виртуальной машиной, а управляющая плоскость предоставляет админ-консоль и эндпоинты, совместимые с Anthropic/OpenAI.
Как это запустить?Склонируйте репозиторий, задайте необходимые значения в .env (VM2API_API_KEY и пароль панели), затем выполните рекомендуемую однострочную команду установки/обновления Docker Compose, которая подтягивает готовый образ, а не собирает его на сервере.
Какая ОС и среда выполнения ему нужны?Продакшен рассчитан на Ubuntu 24.04 с Node 22, Docker и iptables; для сборки из исходников дополнительно нужны Rust stable, Go 1.25 и pnpm 10.
Есть ли известные недоработки?Подделка отпечатка физической машины пока не решена, устаревшая glibc в Debian 12 часто не может запустить бинарники ядра, а коммерческая лицензия прямо запрещает платное/продакшен-использование без письменного разрешения.
Где это должно работать?Это рассчитано на самостоятельно размещаемые Linux-серверы (именно Ubuntu 24.04) под Docker, причём исходящий трафик каждого слота маршрутизируется через выделенное удалённое SOCKS5-соединение или локально добавленный выход.
Что означает префикс «kin-» в бинарниках?kin-kernel, kin-egress и kin-worker — предкомпилированные ELF-бинарники в составе Docker-образа, отвечающие соответственно за ядро слота Claude Code, шлюз исходящего трафика SOCKS5 и задачи воркера, занимающегося только телеметрией.
Сколько подагентов Claude Code может работать на один слот?Каждый слот запускает нативную конфигурацию подагентов Claude Code с максимум 20 одновременно работающими подагентами.
Это официальный продукт Anthropic или Claude?Нет, в README прямо сказано, что vm2api не является официальным проектом Anthropic и никак с ним не связан; Claude, Claude Code и Anthropic — товарные знаки их владельцев.
Как именно аутентифицировать слот в Claude?После привязки egress и запуска слота нужно импортировать Setup Token (основной тип учётных данных) через официальный процесс первоначальной настройки, прежде чем слот сможет обслуживать трафик /v1.
Creator
dofastted
Size
12.9 MB
Stars
1.2K
Age
1mo
Commits · 90 Days