host-yt/caddy-proxy-manager
GitHub: host-yt/caddy-proxy-manager
基于 Caddy 的自托管多租户反向代理管理平台,提供自动 HTTPS、WAF、GeoIP、WireGuard mesh 组网及 Terraform 自动化,是 Nginx Proxy Manager 的功能增强替代方案。
Stars: 2 | Forks: 0
# Hostyt Proxy Gateway
**一个 Caddy proxy manager - 自托管的、多租户的 Nginx Proxy Manager 替代方案,基于 [Caddy](https://caddyserver.com) 构建。**
[Caddy](https://caddyserver.com)
reverse-proxy 节点集群的自托管控制面板。通过 Web UI 将您的域名指向后端并实现
自动 HTTPS,或将其作为托管平台运行:客户获得一个具有
固定后端 IP 和固定公共端口范围的 VPS,并将自己的域名映射到
这些端口。控制平面通过 WireGuard 配置每个 Caddy 节点,
驱动 Let's Encrypt 证书签发,运行 WAF + GeoIP,并展示流量统计数据。
**状态:** v1.3.2。技术栈:Go 1.26.3、chi、MariaDB、Redis、Caddy 2.8。
单一二进制文件,约 21 MB 镜像,约 28 MB 空闲 RAM。
### 为什么选择 Caddy Proxy Manager 而不是 Nginx Proxy Manager?
- **是 Caddy,不是 nginx** - 自动 HTTPS、HTTP/3 以及实时的 JSON config API;无需
重载操作。
- **多节点 + 多租户** - 通过 WireGuard
mesh 管理代理节点集群,支持客户端、经销商、方案和配额。NPM 是单节点、
单租户的。
- **内置 WAF(Coraza/OWASP CRS)、GeoIP 屏蔽、L4 stream 代理、访问
分析以及 API + Terraform provider** - 不仅仅是一个反向代理表单。
- **单一约 21 MB 的 Go 二进制文件**,约 28 MB 空闲 RAM。
正在寻找 *caddy proxy manager* 或 *nginx proxy manager alternative*?就是这个。
## 核心亮点
- **类 NPM 的运营商界面**:`/admin/hosts` 是一个包含
每个客户端所有域名的扁平列表。只需在一个表单中**添加主机**(域名 +
后端 IP:port + 节点)- 隐含的客户端/方案/服务行将
在您的管理员账户下自动配置。
- **自启动面板路由**:安装向导会在第一个
节点上为公共 APP URL → app 容器推送一条虚拟
Caddy 路由,因此您可以通过 `https://proxy.example.com` 登录,而无需
先添加主机。
- **两种方案类型**:
- `restricted`(默认)- 管理员固定后端 IP + 端口范围,
客户端从范围中选择域名 + 端口。托管提供商
模式。
- `npm` - 完全自助服务:客户端可以从 `/app/services` 编辑后端 IP + 端口
范围。用于经销商 / 您自己的账户。
- **可审计的客户端模拟(Impersonation)**:超级管理员打开 `/admin/users`,
点击 Impersonate,以他们的身份查看客户端门户。每个操作都
归因于管理员的审计记录,meta 中包含 `impersonated_user_id`;
模拟横幅在每页都可见。通过
`/auth/end-impersonation` 恢复为管理员。
- **主机的批量操作**:在
扁平列表中启用/禁用/删除多行,每个受影响的节点仅需进行一次 Caddy 重新同步。
- **提交前**在添加主机表单上进行**内联 DNS 预检查**。
- **按主机重试**会触发 DNS 重新检查 + Caddy 重新推送,
当 Let's Encrypt 一直对某个 DNS 已经正确的主机
失败时,这是最简洁的解除阻止的方法。
- **单命令节点加入**(Docker-Swarm 风格):运营商在
面板中生成一个 token;新的 VPS 运行一行 `curl | sudo bash` 命令即可完成
配置,包括 WireGuard mesh 和 Caddy。
- **manager 上的 WireGuard sidecar** 通过
`wg syncconf` 自动应用对等节点的添加/删除 - 每次加入时无需
手动重启接口。
- **Caddy Admin API** 以 JSON 模式驱动,真实数据源是 DB。
- **On-Demand TLS** 带有 `/internal/ask` 白名单网关;当域名指向正确的
节点时,ACME 证书会自动签发。
- **2FA**:TOTP(QR 码注册 + 恢复码)、Email OTP、SMS OTP、
WebAuthn/passkeys(可发现登录)。**OIDC**(Authentik / Microsoft /
通用)、OAuth2 社交登录(GitHub、Google)。**Argon2id** 密码,
**基于 Redis 的暴力破解锁定**(10 次 / 15 分钟),**多提供商
CAPTCHA**(Turnstile / hCaptcha / reCAPTCHA v3),对所有静态 secret 使用 **AES-256-GCM**
加密。
- **REST API v1** 带有 bearer-token 认证,用于 FOSSBilling / Hostyt 风格的
配置集成。
- **实时管理统计**:KPI 卡片、环形/折线/条形图、每节点
流量(从 Caddy 抓取的 Prometheus 数据)。
- **深色/浅色模式** UI,采用 Inter 字体和一致的设计
系统。
- **暗黑控制台 UI**:命令面板(Cmd+K)、可折叠的导航组、右侧抽屉、青色设计系统。
- **AI 助手**:浮动气泡,多提供商(Anthropic / OpenAI / Gemini / OpenRouter),流式 SSE,受限的只读 tool-calling,每用户速率限制。
- **WAF (Coraza)**:按路由开关、规则抑制、事件确认、来自 node-agent 的实时事件。
- **GeoIP 屏蔽**:国家允许/拒绝、大洲屏蔽、CIDR 始终屏蔽/允许、可配置的响应代码、fail-closed 模式、全球流量地图。
- **每路由 mTLS**:每租户 CA、客户端证书签发/撤销、基于路径的 RBAC、强制审计日志。
- **L4 TCP/UDP streams**:SNI 路由、可配置的日志保留。
- **安装配置**:homelab / smallteam / advanced / provider 模式及向导。
- **实例同步**:用于 HA 设置的 master/slave HPG 配置复制。
- **多提供商 CAPTCHA**:Turnstile、hCaptcha、reCAPTCHA v3 按设置开关。
- **自定义字段**:供运营商为客户端和主机定义的字段(基于 JSON)。
- **高级负载均衡**:uri_hash、header、cookie(带有 HMAC secret),以及 round-robin/least-conn。
- **服务器端搜索/分页/排序**,在所有列表页面上保存过滤预设。
- **主机组**,支持过滤和徽章。
- **每小时日志汇总**(保留 14 天)+ 主机日志页面上的分析图表。
- **告警规则**:高错误率检测和自定义阈值告警。
- **客户端自助注册**,受设置开关控制。
- **备份/恢复**:S3/SFTP/FTP 目标、恢复演练 CLI。
- **经销商多租户**:经销商拥有受限的客户端/方案/品牌,暂停时 fail-closed。
- **Terraform provider** (`terraform-provider-hpg`):以代码形式管理节点、池、方案、客户端、服务、路由。
## 快速开始(单机版)
```
git clone https://github.com/host-yt/caddy-proxy-manager.git hostyt-proxy-gateway && cd hostyt-proxy-gateway
cp .env.example .env
$EDITOR .env # at minimum: APP_URL, APP_SECRET (openssl rand -hex 32), DB_PASSWORD
docker compose -f deploy/docker-compose.yml --env-file .env up -d
open http://localhost:8080 # walks through the install wizard
```
向导完成后,使用您刚刚创建的
管理员用户登录。
对于多节点部署,请启用 WireGuard sidecar 配置:
```
docker compose -f deploy/docker-compose.yml --env-file .env --profile mesh up -d
```
然后在 **Settings → WireGuard** 中,填写 `Public endpoint`
(`manager.example.com:51820`),保存 → 生成密钥对。
要添加远程 Caddy 节点:
1. **Admin → Caddy nodes → Auto-join → Generate join command** -
显示一次性的 `curl … | sudo bash …` 命令(TTL 30 分钟)。
2. 在新的 VPS 上以 root 身份粘贴运行。它将安装 WireGuard、Docker、
Caddy,加入 mesh,并完成自动注册。
完整指南:[docs/MULTI_NODE.md](docs/MULTI_NODE.md)。
## 仓库结构
```
cmd/server/ entrypoint (thin)
internal/
accesslog/ access log ingest, rollups, country/ASN enrichment
adminscope/ non-super-admin client scope enforcement
ai/ multi-provider AI client (Anthropic, OpenAI, Gemini, OpenRouter)
aichat/ chat session storage and SSE streaming handler
aitools/ scoped read-only DB tool-calling for AI assistant
alert/ alert rule evaluation and notification dispatch
audit/ audit-log writer (actor, IP, impersonator, timestamp)
auth/ Argon2id, sessions, TOTP, Email/SMS OTP, WebAuthn, API keys, password reset
backup/ S3/SFTP/FTP backup targets and restore drill
caddyapi/ Caddy Admin API client + JSON config builder
captcha/ multi-provider CAPTCHA verifier (Turnstile / hCaptcha / reCAPTCHA v3)
chatstore/ AI conversation persistence
cloudflare/ Cloudflare API token + CF-Connecting-IP trust toggle
config/ env loader + validation
customfields/ operator-defined metadata fields for clients and hosts
deployment/ installation profiles (homelab / smallteam / advanced / provider)
dns/ pre-flight DNS resolver + per-route resolver controls
domain/ business logic per aggregate (routes, plans, services, nodes, …)
geoip/ MaxMind GeoLite2-Country DB download and distribution to nodes
httpserver/ chi router, handlers, middleware (CSRF, CSP, security headers, etc.)
installstate/ wizard state file + AES-256-GCM crypto helpers
instasync/ master/slave HPG config replication
jobs/ background scheduler (key rotation, rollup, geoip update, …)
mail/ SMTP send + email templates
metrics/ Caddy /metrics Prometheus scraper + delta aggregator
mtls/ per-tenant CA management, cert issue/revoke, RBAC verifier
nodejoin/ one-time join-token mint + redeem
oauth2x/ OAuth2 social login (GitHub, Google)
oidc/ coreos/go-oidc wrapper, DB-backed config
security/ scoped security checks shared across handlers
store/ DB pool + goose migration runner
systemevents/ operational event history storage
view/ html/template sets per audience (install, auth, admin, app)
wafevents/ WAF audit log ingest and event storage
webhook/ outbound webhook delivery and retry
wireguard/ Curve25519 keypair gen, config writer, IP allocator
cmd/node-agent/ Go agent on each Caddy node (WG sync, log forward, WAF events, GeoIP)
deploy/
docker-compose.yml manager stack (app + mariadb + redis + caddy + node-agent + optional wg)
caddy/ Caddy node image (xcaddy with cache-handler + L4 modules)
remote-node/ drop-in compose for an external Caddy node
wireguard/ WG sidecar image (alpine + wg-tools + watch loop)
migrations/ 115 goose .sql files (auto-applied on boot)
scripts/ node-join.sh - bash bootstrap for remote nodes
docs/ all the docs you'll find linked below
```
## 截图
| 安装向导 | 管理后台 |
|---|---|
|  |  |
| 主机列表 | 新建主机表单 |
|---|---|
|  |  |
| 统计数据 | 世界地图 |
|---|---|
|  |  |
| AI 助手 | 审计日志 |
|---|---|
|  |  |
完整的安装向导演示:[`docs/install_video/install_wizard.webm`](docs/install_video/install_wizard.webm)
## 文档
| 文档 | 内容 |
| --- | ------------ |
| [`docs/INSTALL.md`](docs/INSTALL.md) | 逐步的首次部署说明 |
| [`docs/DEPLOY.md`](docs/DEPLOY.md) | 生产部署 + Portainer + reverse-proxy 技巧 |
| [`docs/MULTI_NODE.md`](docs/MULTI_NODE.md) | WireGuard mesh + 单命令节点加入 |
| [`docs/ARCHITECTURE.md`](docs/ARCHITECTURE.md) | 组件交互原理 |
| [`docs/API.md`](docs/API.md) | REST API v1 契约 |
| [`docs/SPEC.md`](docs/SPEC.md) | 功能规格说明书 |
| [`docs/SECURITY.md`](docs/SECURITY.md) | 威胁模型和安全模型 |
| [`docs/WAF.md`](docs/WAF.md) | Web Application Firewall (Coraza) |
| [`docs/GEOIP.md`](docs/GEOIP.md) | GeoIP 国家过滤 |
| [`docs/DNS_PROVIDERS.md`](docs/DNS_PROVIDERS.md) | 用于泛域名 TLS 的 DNS-01 challenge 提供商 |
| [`docs/MTLS.md`](docs/MTLS.md) | Mutual TLS / 客户端证书认证 |
| [`docs/TERRAFORM.md`](docs/TERRAFORM.md) | Terraform provider (hpg_node, hpg_client, hpg_service, ...) |
| [`docs/ANALYTICS.md`](docs/ANALYTICS.md) | 访问日志分析 |
| [`docs/ROADMAP.md`](docs/ROADMAP.md) | 已交付功能和计划工作 |
| [`docs/FEATURE_MATRIX.md`](docs/FEATURE_MATRIX.md) | HPG 与替代方案对比 |
| [`docs/TROUBLESHOOTING.md`](docs/TROUBLESHOOTING.md) | 常见问题 + 修复 |
| [`CHANGELOG.md`](CHANGELOG.md) | 重大更新日志 |
| [`CONTRIBUTING.md`](CONTRIBUTING.md) | 如何开发 / 提交更改 |
| [`SECURITY.md`](SECURITY.md) | 报告漏洞 |
## 许可证
参见 [LICENSE](LICENSE)。有关开源指南,请参见
[`docs/OPENSOURCING.md`](docs/OPENSOURCING.md)。
标签:AppImage, Caddy, EVTX分析, Go, Ruby工具, Web应用防火墙, Web服务器, WireGuard, 反向代理, 搜索引擎查询, 日志审计, 网络测绘, 自定义请求头, 请求拦截, 运维管理面板