Hook

自托管 AI 网关

一个控制面,统一模型路由、访问策略、计费和观测。

Hook 为团队提供私有化网关,用于统一供应商路由、令牌策略、钱包计费、用量记录和运行监控,覆盖 OpenAI 兼容、Claude 与 Gemini 接口。

简介

用户通过 Hook 令牌访问 /v1/v1beta。Hook 会按模型、供应商、分组、钱包余额和权限策略完成路由,然后记录用量、计费和运行状态。

后端

Axum、SeaORM、PostgreSQL、Redis、调度、计费、监控和管理接口。

前端

Next.js、React、MUI 和 TypeScript,提供用户控制台与管理后台。

适用场景

供应商管理、OpenAI 兼容代理、额度控制、请求记录和运营监控。

功能

统一 AI 代理

提供 OpenAI 风格 /v1 和 Gemini 风格 /v1beta,覆盖聊天、Responses、Claude Messages、图片、Embedding、Rerank、音频、Moderations 和 Realtime。

供应商与模型管理

管理供应商、端点、上游 API Key、模型绑定、模型成本、冷却释放和模型连通性测试。

令牌与权限

控制用户令牌、管理员令牌、RBAC 角色、菜单、API 权限、导航权限、分组和模型访问策略。

计费与监控

跟踪钱包、余额、流水、使用记录、活跃请求、模型状态检查、定时任务和系统健康。

安装部署

稳定版推荐使用 Docker Compose 预构建 GHCR 镜像部署。它会启动 PostgreSQL、Redis 和 ghcr.io/zzispp/hook:latest,执行迁移,并在 http://127.0.0.1:5555 提供前端和 API。

Docker Compose 预构建镜像
git clone https://github.com/zzispp/Hook.git
cd Hook
HOOK_COMPOSE_FILES=docker-compose.prebuilt.yml ./deploy.sh
首次运行

./deploy.sh 会创建 .env,要求输入管理员用户名、邮箱和密码,并自动生成 PostgreSQL 密码、JWT secret 和 provider key secret。

固定镜像 tag

稳定版会发布 latest 和版本 tag。main 分支构建会发布 edgenightly

HOOK_IMAGE_TAG=v1.0.1 HOOK_COMPOSE_FILES=docker-compose.prebuilt.yml ./deploy.sh

Docker Compose Source Build

如果你希望在服务器上从当前源码构建镜像,可以使用 Source Build 部署。

git clone https://github.com/zzispp/Hook.git
cd Hook
./deploy.sh

常用命令

docker compose --env-file .env -f docker-compose.prebuilt.yml logs -f hook
docker compose --env-file .env -f docker-compose.prebuilt.yml ps
docker compose --env-file .env -f docker-compose.prebuilt.yml down

docker compose down 只停止容器,不删除 Docker named volumes。只有明确要删除部署数据时才使用 docker compose down -v

更新

预构建镜像 Docker Compose 部署后,在部署目录直接运行更新脚本。

一键更新
HOOK_COMPOSE_FILES=docker-compose.prebuilt.yml ./update.sh

update.sh 会拉取最新的 ghcr.io/zzispp/hook:${HOOK_IMAGE_TAG:-latest} 镜像,拉取 PostgreSQL 和 Redis 基础镜像,并重建容器。它不会删除 Docker named volumes。

Source Build 部署可执行 ./update.sh。它会执行 git pull --ff-only,使用当前源码重新构建 Hook 镜像并重建容器。

GitHub Release 二进制包

Release 资产包含 Linux 与 macOS 二进制平台包、install.shSHA256SUMS。二进制包适合 PostgreSQL 与 Redis 已经由外部托管的部署方式。

安装最新 Release
curl -fsSL https://github.com/zzispp/Hook/releases/latest/download/install.sh | sudo bash

安装脚本会校验下载的包,安装到 /opt/hook/releases/<version>,更新 /opt/hook/current,写入 /etc/hook/config.example.yaml,并在配置不存在时创建 /etc/hook/config.yaml。运行 Hook 前需要先编辑 /etc/hook/config.yaml

/opt/hook/current/bin/generate_password_hash "your-password"
/opt/hook/current/bin/hook_backend --config /etc/hook/config.yaml migration up
/opt/hook/current/bin/hook_backend --config /etc/hook/config.yaml

本地开发

依赖:Rust edition 2024 toolchain、Node.js >=22.12.0、pnpm 10.33.4、PostgreSQL 和 Redis。

源码工作流
pnpm install
cp config/config.yaml config.yaml
scripts/generate-password-hash.sh "your-password"
cargo run -p hook_backend -- migration up
NEXT_PUBLIC_SERVER_URL=http://127.0.0.1:5555 pnpm build:frontend:embedded
NEXT_PUBLIC_SERVER_URL=http://127.0.0.1:5555 pnpm dev
后端http://127.0.0.1:5555
前端http://127.0.0.1:8082
检查cargo check -p hook_backendpnpm lint:frontendpnpm build:frontend

API 入口

GET /health健康检查接口。
/api/*控制台、管理后台、鉴权、钱包、计费、供应商、模型和监控接口。
/v1/*OpenAI、Claude 和 Jina 兼容代理入口。
/v1beta/*Gemini 兼容代理入口。

常见代理路由

  • /v1/models
  • /v1/chat/completions
  • /v1/responses
  • /v1/messages
  • /v1/images/generations
  • /v1/embeddings
  • /v1/rerank
  • /v1/realtime

配置与数据

.env首次 Docker Compose 部署时由 ./deploy.sh 创建。
POSTGRES_*PostgreSQL 容器的数据库名、用户和自动生成的密码。
HOOK_ADMIN_*初始管理员用户名、邮箱和 base64 编码后的密码值。
HOOK_JWT_SECRET后端令牌系统使用的自动生成签名密钥。
HOOK_PROVIDER_KEY_SECRET用于保护供应商密钥的自动生成密钥。
hook-postgres / hook-redis容器重建后仍保留部署数据的 Docker named volumes。

致谢

Hook 参考并受到以下开源项目启发。