vaheed/CDNLite

GitHub: vaheed/CDNLite

CDNLite 是一套面向受控部署环境的自托管私有 CDN 控制平面,整合了边缘代理、DNS 发布、缓存、WAF 和 SSL 管理等核心 CDN 功能。

Stars: 1 | Forks: 0

# CDNLite 面向企业、托管服务提供商、内部基础设施团队以及受控生产环境部署的自托管私有 CDN 控制平面和边缘平台。 [![CI](https://github.com/vaheed/CDNLite/actions/workflows/ci.yml/badge.svg?branch=main)](https://github.com/vaheed/CDNLite/actions/workflows/ci.yml) [![文档](https://github.com/vaheed/CDNLite/actions/workflows/docs.yml/badge.svg?branch=main)](https://github.com/vaheed/CDNLite/actions/workflows/docs.yml) [![Docker Compose](https://img.shields.io/badge/deploy-docker%20compose-blue)](docker-compose.yml) [![许可证:MIT](https://img.shields.io/badge/license-MIT-green.svg)](LICENSE) ![展示私有 CDN 域名、边缘状态和操作视图的 CDNLite 仪表盘](https://static.pigsec.cn/wp-content/uploads/repos/cas/93/93fdef33f169dcd0cc0a2698810a2bc99fa3f7e626780b2ac64ca0a6f837bc7f.png) **快速链接:** [文档](docs/index.md) · [快速入门](docs/quickstart.md) · [架构](docs/architecture.md) · [安全](docs/security.md) · [部署](docs/deployment.md) · [路线图](docs/ROADMAP.md) 已发布的 OpenAPI YAML:https://vaheed.github.io/CDNLite/api/openapi.yaml CDNLite 允许运营商通过 PHP 控制平面、PostgreSQL 状态存储、Vue 仪表盘、OpenResty/Lua 边缘代理、PowerDNS/DNSGeo 发布、缓存与安全规则、SSL 工作流、分析、审计日志,以及基于签名的边缘代理同步,来运行一个私有 CDN 风格的平台。 它的定位是一个面向生产的私有 CDN 基础设施,并不承诺已经具备大型公共 CDN 或企业级身份认证的全部功能。 ## CDNLite 适用于哪些人? - 希望为内部或面向客户的应用拥有专属 CDN 层的私营企业。 - 正在探索托管边缘、DNS、WAF 和反向代理服务的托管服务提供商。 - 致力于构建受控私有边缘网络的 DevOps 和平台团队。 - CDN、DNS、WAF、PowerDNS、DNSGeo 和 OpenResty 的学习者。 - 需要可视化操作和简便默认设置的实验室、演示以及受控的生产环境实验。 ## CDNLite 不适用于哪些场景 - CDNLite 不是超大规模 Cloudflare、Fastly 或 Akamai 的替代品。 - CDNLite 目前还不是完整的企业级 SSO、RBAC、多租户隔离或计费平台。 - CDNLite 不是托管式 CDN 服务;你需要自行运营核心组件、DNS、仪表盘和边缘节点。 - 在生产环境中使用需要进行安全加固、外部身份验证、TLS 配置、备份、监控、密钥轮换以及操作审查。 ## 功能概述 **控制平面** - 域名生命周期、域名服务器验证、激活、删除和审计历史。 - 源站管理,支持主备源站及定时的健康检查。 - API、CLI、仪表盘工作流,中心化任务队列,就绪检查和运营报告。 - 针对原始活动、高频安全事件、DNS 同步干扰和终结的 SSL 任务提供有限的留存清理,并优先提供试运行的生产指导。 **边缘代理** - OpenResty/Lua 反向代理 runtime。 - 签名的边缘代理注册、心跳、配置轮询、指标和安全事件采集。 - 针对边缘同步的独立边缘 token、HMAC 签名、时间戳检查和重放保护。 **DNS 与 GeoDNS** - 基于 PowerDNS 的记录发布,支持 DNS-only 和代理模式。 - 支持 DNSGeo,实现具备健康感知的私有边缘路由。 - 代理的根域记录默认通过 PowerDNS `LUA` 发布直接的边缘池应答,而代理的子域名则发布稳定的 CDN CNAME。 - 针对根域和泛域名,初始的托管 SSL 会在域名服务器验证后异步排入队列。 **缓存与性能** - 缓存设置、缓存规则、清理工作流和缓存分析。 - 页面规则、重定向、响应头和源站回退行为。 **安全与 WAF** - WAF 规则、速率限制、IP 访问规则、安全事件、审计日志和保护配置文件。 - 面向常见入门级安全策略的仪表盘安全中心工作流。 **SSL 与证书** - ACME DNS-01 签发和续期调度。 - 手动证书导入和针对每个域名的 SSL 设置。 **可观测性** - 健康端点、边缘心跳、边缘指标、安全事件采集、审计日志、仪表盘报告和故障排除文档。 **运维与部署** - Docker Compose 部署、分离式部署示例、CI 冒烟/e2e 检查、PowerDNS 诊断、操作手册和压力测试工具。 ## 架构概述 ``` flowchart LR Dashboard[Browser Dashboard] --> Core[Core API] Core --> Postgres[(PostgreSQL)] Core --> DNS[PowerDNS / DNSGeo] EdgeAgent[Edge Agent] --> Core EdgeProxy[Edge Proxy] --> Origins[Origin Servers] EdgeProxy --> Events[Metrics / Security Events] Events --> Core ``` 正常的拓扑结构是根目录下的 [docker-compose.yml](docker-compose.yml)。分离式部署可以将核心 API、仪表盘、DNS 服务和边缘节点放置在不同的主机或网络上。 ## 快速入门 ``` cp .env.example .env docker compose up -d --build curl -fsS http://localhost:8080/health curl -fsS http://localhost:8081/health ``` 在 `http://localhost:8082` 打开仪表盘。本地引导凭据为 `admin` / `admin`;这仅限本地开发使用,绝不能在共享或生产部署中使用。 后续步骤: - [一分钟了解 CDN](docs/cdn-in-a-minute.md) - [快速入门指南](docs/quickstart.md) - [首个配置示例](docs/examples/index.md) - [生产环境加固](docs/production-hardening.md) ## 生产与私有部署 对于受控的生产环境实验或私营企业部署,请查阅 [部署](docs/deployment.md)、[生产环境加固](docs/production-hardening.md)、[安全模型](docs/security.md) 和 [企业级就绪状态](docs/enterprise-readiness.md)。 需要规划的事项: - 在适当情况下分离核心、边缘和 DNS 拓扑。 - 在公共和内部服务边界上配置 TLS。 - 针对 API token、边缘 token、数据库凭据、ACME 凭据和 PowerDNS API 密钥进行密钥轮换。 - 数据库备份和恢复演练。 - 在原生 SSO/RBAC 实现之前,在仪表盘前方部署外部身份验证。 - 网络隔离,避免 PowerDNS、PostgreSQL 和内部 API 被不必要地暴露。 ## 安全模型 CDNLite 为私有边缘部署包含了实用的安全基础: - 发送到核心的边缘请求均经过 HMAC 签名。 - 边缘节点使用独立的边缘 token。 - 时间戳和 nonce 检查为签名的边缘流量提供重放保护。 - 核心 API 使用 bearer token 身份验证进行自动化操作。 - 审计日志会记录操作变更。 - 默认凭据仅用于本地引导,在共享使用前必须替换。 有关漏洞报告,请参阅 [SECURITY.md](SECURITY.md);有关操作加固,请参阅 [docs/security.md](docs/security.md)。 ## 对比 | 选项 | 最适合场景 | 权衡 | | --- | --- | --- | | 仅使用 Nginx/OpenResty | 单个反向代理或自定义边缘脚本 | 快速且灵活,但没有内置的 CDN 控制平面、仪表盘、DNS 发布、审计跟踪或边缘同步工作流。 | | 公共 CDN 供应商 | 全球托管式 CDN、托管式 WAF、托管式边缘网络 | 成熟且高可用,但在路由、策略、日志和边缘行为方面私有化控制较少,且存在供应商依赖。 | | DIY 脚本 | 围绕 DNS 和代理配置的小型一次性自动化 | 初期简单,但后期难以在多个边缘节点上进行审计、测试、回滚或运维。 | | CDNLite | 用于私有边缘网络的自托管 CDN 控制平面 | 提供一个具有内聚性的控制平面、仪表盘、PowerDNS/DNSGeo、OpenResty 边缘、WAF、缓存规则、SSL、分析和签名边缘同步,但仍需进行生产环境加固,且目前缺乏原生的企业级 SSO/RBAC/计费功能。 | ## 成熟度 CDNLite 适用于实验室、私有部署、演示和受控的生产环境实验。对于企业级生产环境,在将其暴露给关键工作负载之前,请查阅安全加固清单和当前的限制。 当前已知的限制包括:原生 RBAC、OIDC/SAML SSO、完整的多租户隔离、计费工作流、签名的发布构件、Kubernetes 打包以及 HA(高可用)控制平面文档。 ## 路线图预览 - RBAC 和受限的 API 密钥。 - OIDC/SAML SSO 和外部身份集成。 - 更强的租户隔离和审计导出。 - Prometheus 指标和 Grafana 仪表盘。 - Helm/Kubernetes 部署和 Terraform 示例。 - HA(高可用)控制平面文档、备份/恢复自动化和边缘自动扩缩容。 - WAF 策略模板、速率限制、缓存规则和私有部署预设。 更详细的路线图请参阅 [docs/ROADMAP.md](docs/ROADMAP.md)。 ## 开发与验证 ``` docker compose config --quiet find core -name '*.php' -print0 | xargs -0 -n1 php -l pytest -q core/tests cd dash && npm ci && npm run typecheck && npm test && npm run build cd docs && npm ci && npm run docs:build ``` 冒烟测试和 e2e 检查使用根目录的 stack: ``` docker compose up -d --build --wait ./ci/smoke.sh ./ci/e2e.sh CDNLITE_EDGE_HEALTH_MODE=static ./ci/dns_e2e.sh ``` 仅在明确为一次性的环境中运行破坏性的 DNS 压力测试。 ## 安全披露 请阅读 [SECURITY.md](SECURITY.md)。请勿在公开的 issue 中发布漏洞利用细节、机密信息、token、生产环境域名或私有日志。 ## 许可证 CDNLite 基于 [MIT 许可证](LICENSE) 发布。
标签:CDN, ffuf, OpenVAS, PHP, rizin, Vue, Web缓存, 文件系统扫描, 测试用例, 版权保护, 边缘计算, 运维平台