部署运维

Hoppscotch 开源 API 平台:自托管部署与团队协作实战

Hoppscotch 自托管部署全指南 — Docker Compose 部署、CLI 自动化测试、团队协作与 RBAC、Postman 迁移、Proxy 内网穿透,一站式开源 API 研发平台落地实践。

#API 平台 #Hoppscotch #自托管 #Docker #接口测试 #CI/CD #团队协作 #Postman 替代 #CLI
Hoppscotch 开源 API 平台:自托管部署与团队协作实战 封面图

Hoppscotch 自托管 API 平台

一、Hoppscotch 定位与选型逻辑

Hoppscotch 是一个 MIT 协议的开源 API 开发生态系统。它不只是 Postman 的免费替代品——更准确地说,它是一个可自托管的 API 研发协作平台,覆盖从单机调试到团队协作、从手工测试到 CI 自动化的完整链路。

选型时 vs Postman 的关键差异

维度 Hoppscotch Postman
协议 MIT 闭源 + 免费版限制
部署 自托管 / Cloud / PWA / Desktop Cloud-only(桌面端也走云端)
数据主权 数据在你自己服务器上 数据在 Postman 云
定价 免费 $12–$49/人/月
团队协作 RBAC + 无限团队 免费版 3 人团队
CLI @hoppscotch/cli Newman
内网 API 自托管天然支持 需要 Postman Agent
多协议 REST + GraphQL + WS + SSE + MQTT + Socket.IO REST + GraphQL + WS

核心选型理由:如果你的团队需要调试内网 API、对数据主权有要求、或不想为 10 人团队每月付 $200+,Hoppscotch 自托管是唯一正确解。


二、自托管部署

Docker Compose 一键部署

Hoppscotch 官方提供了完整的 Docker Compose 配置。以下为生产可用的精简版:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
version: '3.8'

services:
# PostgreSQL — 团队协作、用户数据存储
hoppscotch-db:
image: postgres:16-alpine
restart: unless-stopped
environment:
POSTGRES_USER: hoppscotch
POSTGRES_PASSWORD: <your_db_password>
POSTGRES_DB: hoppscotch
volumes:
- pgdata:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U hoppscotch"]
interval: 5s
retries: 5

# Backend — NestJS + GraphQL
hoppscotch-backend:
image: hoppscotch/hoppscotch-backend:latest
restart: unless-stopped
environment:
DATABASE_URL: postgresql://hoppscotch:<your_db_password>@hoppscotch-db:5432/hoppscotch
JWT_SECRET: <random_64_char_string>
TOKEN_SALT_COMPLEXITY: 10
MAGIC_LINK_TOKEN_VALIDITY: 3
REFRESH_TOKEN_VALIDITY: 604800000
SESSION_SECRET: <another_random_64_char_string>
VITE_ALLOWED_AUTH_PROVIDERS: EMAIL
ALLOW_SECURE_COOKIES: "false"
REDIRECT_HTTPS_TO_HTTP: "true"
RATE_LIMIT_TTL: 60
RATE_LIMIT_MAX: 100
WHITELISTED_ORIGINS: https://hoppscotch.your-domain.com
VITE_BASE_URL: https://hoppscotch.your-domain.com
depends_on:
hoppscotch-db:
condition: service_healthy

# Frontend — Vue 3 + Vite
hoppscotch-frontend:
image: hoppscotch/hoppscotch-frontend:latest
restart: unless-stopped
environment:
VITE_BACKEND_GQL_URL: https://hoppscotch.your-domain.com/graphql
VITE_BACKEND_WS_URL: wss://hoppscotch.your-domain.com/graphql
VITE_BACKEND_API_URL: https://hoppscotch.your-domain.com/v1
depends_on:
- hoppscotch-backend

# Admin dashboard — 用户和团队管理
hoppscotch-admin:
image: hoppscotch/hoppscotch-admin:latest
restart: unless-stopped
environment:
VITE_ADMIN_BACKEND_GQL_URL: https://hoppscotch.your-domain.com/graphql
VITE_ADMIN_BACKEND_API_URL: https://hoppscotch.your-domain.com/v1
depends_on:
- hoppscotch-backend

volumes:
pgdata:

Nginx 反向代理

自托管环境下建议通过 Nginx 统一入口并处理 HTTPS:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
server {
listen 443 ssl;
server_name hoppscotch.your-domain.com;

ssl_certificate /etc/ssl/certs/hoppscotch.pem;
ssl_certificate_key /etc/ssl/private/hoppscotch.key;

# Frontend
location / {
proxy_pass http://hoppscotch-frontend:3000;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-Proto $scheme;
}

# Backend GraphQL + REST
location /graphql {
proxy_pass http://hoppscotch-backend:3170;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}

location /v1 {
proxy_pass http://hoppscotch-backend:3170;
}

# Admin
location /admin {
proxy_pass http://hoppscotch-admin:3100;
}
}

初始化

1
2
3
4
docker compose up -d

# 等待 PostgreSQL 就绪后创建管理员
docker exec -it hoppscotch-backend npx prisma migrate deploy

然后访问 https://hoppscotch.your-domain.com 注册第一个账号(自动成为管理员),在 /admin 面板管理用户和团队。


三、核心使用场景

3.1 环境变量与动态请求

把不同环境的 API 地址抽象为环境变量是团队协作的基础:

1
2
3
4
5
6
// Environment: "Production"
{
"base_url": "https://api.your-company.com",
"auth_token": "eyJhbG...",
"user_id": "12345"
}

在请求中使用 <<variable>> 语法:

1
2
GET <<base_url>>/users/<<user_id>>
Authorization: Bearer <<auth_token>>

创建四套环境(dev / staging / prod / local),切换环境即切换所有请求的目标。

3.2 Pre-request Script — 动态签名

调试需要签名的 API 时(如 语音通知接口 的 MD5 鉴权),Pre-request Script 可以在发送前自动计算签名:

1
2
3
4
5
6
7
8
9
// 设置动态时间戳
const timestamp = Date.now().toString();
pw.env.set("timestamp", timestamp);

// 计算 HMAC-SHA256 签名
const body = pw.body.getRaw();
const secret = "your-app-secret";
const signature = CryptoJS.HmacSHA256(timestamp + body, secret).toString();
pw.env.set("signature", signature);

然后在 Headers 中引用 <<signature>> 即可。Postman 的 Pre-request Script 功能在 Hoppscotch 中完全有等价的实现。

3.3 集合管理 — API 文档即请求集

标准做法是给每个微服务/模块建一个 Collection:

1
2
3
4
5
6
7
8
9
10
11
Platform API
├── Auth
│ ├── POST /login
│ └── POST /refresh
├── Users
│ ├── GET /users
│ ├── GET /users/:id
│ └── POST /users
└── Orders
├── GET /orders
└── POST /orders

Collection 可以导出为 JSON 文件,纳入 Git 版本管理,或通过 GitHub Gist 分享给团队。


四、CLI 自动化测试

安装

1
npm install -g @hoppscotch/cli

编写测试脚本

Hoppscotch 使用 .hoppscotch.json 格式的集合文件(从 Web UI 导出):

1
2
3
4
5
6
7
# 导出集合
# Web UI → Collections → Export → 保存为 my-api.json

# 运行集合测试
hopp test my-api.json \
--env dev-env.json \
--delay 100

CI/CD 集成 — GitHub Actions

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
name: API Tests
on: [push, pull_request]

jobs:
api-test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4

- name: Setup Hoppscotch CLI
run: npm install -g @hoppscotch/cli

- name: Run API tests
run: |
hopp test api-tests/collections/*.json \
--env api-tests/envs/ci.json \
--reporter json \
> test-results.json

- name: Upload results
uses: actions/upload-artifact@v4
with:
name: api-test-results
path: test-results.json

测试断言

在集合的请求中通过 Headers 添加断言:

1
X-Hopp-Test: response.status == 200 && response.body.success == true

CLI 会根据断言判断测试通过/失败,返回非零退出码。


五、Proxy 模式 — 调试内网 API

自托管版最实用的功能之一是内置 Proxy:

启用方式:Settings → Enable Proxy → 填写自托管 Proxy URL

当你从本地浏览器访问 Hoppscotch Web UI 时,浏览器无法直接访问 http://192.168.1.100:8080 这样的内网地址(CORS 限制)。Proxy 模式让 Hoppscotch 后端代替浏览器发起请求:

1
浏览器 → Hoppscotch 前端 → Hoppscotch 后端(Proxy) → 内网 API

官方提供了 Proxyscotch 作为独立代理服务,自托管时也可以用同一个后端实例的 /v1/proxy 端点。


六、团队协作与权限控制

RBAC 模型

自托管版支持完整的角色权限:

角色 权限
Owner 完全控制:管理团队、成员、集合、删除团队
Editor 编辑集合、请求、环境变量
Viewer 只读:查看集合和请求,无法修改

工作流示例

1
2
3
4
5
1. 后端开发写完接口 → 在 Hoppscotch 中创建对应 Collection + 请求
2. 导出为 JSON → 提交到项目 Git 仓库(api-tests/ 目录)
3. 前端开发导入集合 → 配置本地环境变量 → 联调
4. QA 拉取集合 → 补充异常参数测试 → CI 中自动运行
5. 新成员 on-board → 一键导入所有集合和环境配置

「代码即文档」在这里变成了「请求集即接口文档」——可以拿来直接跑,不是死的 Markdown。


七、从 Postman 迁移

集合迁移

1
2
3
4
5
# 1. Postman 导出集合为 JSON (v2.1)
# Postman → Collections → Export → v2.1

# 2. Hoppscotch 导入
# Settings → Import/Export → 选择 Postman JSON 文件

环境和变量会自动转换,Pre-request Script 语法兼容(都是 JavaScript)。

迁移检查清单

  • Collections 全部导入,嵌套结构和文件夹层次保持
  • 环境变量逐环境导入确认
  • Pre-request Script 逐一验证(特别是 pm.* 写法需改为 pw.*
  • OAuth 2.0 flow 重新配置(两家的实现略有差异)
  • CLI 脚本从 newman 改为 hopp test

八、架构总览

Hoppscotch 架构

Hoppscotch 是一个 pnpm monorepo,核心分层:

1
2
3
4
5
6
7
8
9
10
11
12
13
前端层 (Vue 3 + Vite + PWA)

│ GraphQL / REST

后端层 (NestJS + GraphQL + Prisma)

│ SQL

数据层 (PostgreSQL)

├── CLI 层 (@hoppscotch/cli) — 独立 npm 包
├── Desktop 层 (Tauri) — 桌面端原生壳
└── Relay 层 — Agent 与 Proxy 辅助服务

主要 packages:

作用
hoppscotch-common 前端核心公共模块,多协议请求逻辑
hoppscotch-backend NestJS 后端,GraphQL API + 鉴权 + 数据管理
hoppscotch-selfhost-web 自托管 Web 版,对接自建后端
hoppscotch-cli CLI 测试工具,hopp test 命令
hoppscotch-desktop Tauri 桌面端,自带系统级代理能力
hoppscotch-sh-admin 自托管管理后台(用户管理、配置)

九、总结

Hoppscotch 解决了两个关键问题:

  1. 数据主权:API 请求日志、Token、内部 URL 全部留在你自己的服务器上,不经过第三方云
  2. 团队成本归零:一个 docker compose up,无限成员、无限集合、内网 API 原生可达,无需为此付费

如果团队规模 3 人以上、需要调试内网接口、或已经在用 Docker 做基础设施——Hoppscotch 自托管版是目前性价比最高的 API 平台选择。