logo
1
0
WeChat Login

CDN 静态资源加速服务

类似 jsDelivr 的静态资源 CDN 加速服务,支持多源站代理和国内合规管理。

当前版本: v1.9.0 (Frontend: 1.9.0+fe21a1d2.20260202, Backend: 1.9.8+fe21a1d2.20260202)

功能特性

  • 多源站支持: GitHub、unpkg、jsDelivr、BootCDN、cdnjs、Google Hosted Libraries、cnb.cool、StaticFile,支持动态添加新源站
  • 智能重定向: 302 重定向到真实源站,EdgeOne 边缘缓存
  • 合规管理: 域名白名单、路径黑名单、180天日志保存
  • 可视化管理: Vue3 + Element Plus 管理后台
  • 实时监控: EdgeOne 日志投递 + 实时统计分析
  • 日志筛选: 支持按 URL 前缀、安全动作、状态码筛选日志
  • 实时测速: 链接转换后实时对比原始链接与 CDN 链接速度
  • WAF 集成: EdgeOne WAF 规则自动同步
  • 站点配置: 动态站点标题、描述、备案信息管理
  • Docker 部署: 一键启动,内置 PostgreSQL + Redis(可选)

架构概览

用户 → EdgeOne (WAF+缓存+日志) → [缓存HIT] → 直接返回
                            ↓
                      [缓存MISS] → Go回源服务 → 白名单校验 → 302重定向 → 源站
                            ↓
                      HTTP日志投递 → /api/logs/edgeone → PostgreSQL(90天) → >90天gzip归档

技术栈

层级技术
CDN/边缘层腾讯云 EdgeOne
后端服务Go + Gin
数据库PostgreSQL 18+
缓存Redis 7+
前端管理台Vue3 + Element Plus

快速开始

方式一:Docker 部署(推荐)

环境要求

  • Docker 20.10+
  • Docker Compose 2.0+ (可选)

1. 使用完整镜像(内置 PostgreSQL + Redis)

# 拉取或构建镜像
docker pull edgeone-static:1.9.0-pgrs

# 一键启动(包含数据库和缓存)
docker run -d \
  --name edgeone-static \
  -p 8080:8080 \
  -p 5432:5432 \
  -p 6379:6379 \
  edgeone-static:1.9.0-pgrs

# 访问服务
# 主页: http://localhost:8080
# 管理后台: http://localhost:8080/admin
# 默认账号: admin / admin123

2. 使用基础镜像(需外部数据库)

# 启动 PostgreSQL 和 Redis
docker run -d --name postgres -p 5432:5432 -e POSTGRES_USER=cdn_user -e POSTGRES_PASSWORD=cdn_pass -e POSTGRES_DB=cdn_service postgres:16
docker run -d --name redis -p 6379:6379 redis:7

# 启动应用
docker run -d \
  --name edgeone-static \
  -p 8080:8080 \
  -e DB_HOST=host.docker.internal \
  -e DB_PORT=5432 \
  -e DB_USER=cdn_user \
  -e DB_PASSWORD=cdn_pass \
  -e DB_NAME=cdn_service \
  -e REDIS_HOST=host.docker.internal \
  -e REDIS_PORT=6379 \
  edgeone-static:1.9.0

方式二:源码部署

环境要求

  • Go 1.24+
  • PostgreSQL 16+
  • Redis 7+
  • Node.js 18+ (前端开发)

后端部署

cd backend

# 安装依赖
go mod download

# 配置环境变量
export DB_HOST=localhost
export DB_PORT=5432
export DB_NAME=cdn_service
export DB_USER=cdn_user
export DB_PASSWORD=secret
export REDIS_HOST=localhost
export REDIS_PORT=6379
export JWT_SECRET=your-jwt-secret

# 启动服务(自动初始化数据库)
go run cmd/server/main.go

服务默认运行在 :8080 端口。

前端部署

项目已融合主页和管理后台,统一在 frontend/admin 目录下:

cd frontend/admin

# 安装依赖
npm install

# 开发模式
npm run dev

# 生产构建
npm run build

访问地址:

默认管理员账号:

  • 用户名: admin
  • 密码: admin123

支持的源站

内置源站

前缀源站示例
/gh/GitHub Raw/gh/user/repo/file.jshttps://raw.githubusercontent.com/user/repo/file.js
/npm/unpkg/jsDelivr/npm/package@version/file.jshttps://unpkg.com/package@version/file.js
/cdnjs/cdnjs/cdnjs/library/version/file.jshttps://cdnjs.cloudflare.com/ajax/libs/library/version/file.js
/google/Google Hosted/google/library/file.jshttps://ajax.googleapis.com/ajax/libs/library/file.js
/bootcdn/BootCDN/bootcdn/library/file.jshttps://cdn.bootcdn.net/ajax/libs/library/file.js
/cnb/cnb.cool/cnb/project/file.jshttps://cnb.cool/project/file.js
/staticfile/StaticFile/staticfile/library/file.jshttps://cdn.staticfile.org/library/file.js

动态添加源站

在管理后台的 "CDN 源站管理" 页面,可以动态添加新的源站:

  1. 访问 http://localhost:8080/admin/cdn-sources
  2. 点击"新增源站"
  3. 填写信息:
    • 名称: 源站标识(如 jsdelivr
    • 前缀: URL 前缀(如 /jsdelivr/
    • BaseURL: 源站基础 URL(如 https://cdn.jsdelivr.net/npm
    • 域名: 源站域名(如 cdn.jsdelivr.net
  4. 保存后立即生效,无需重启服务

示例: 添加 jsdelivr 源站后

curl -I http://localhost:8080/jsdelivr/vue@3/dist/vue.global.js
# HTTP/1.1 302 Found
# Location: https://cdn.jsdelivr.net/npm/vue@3/dist/vue.global.js

管理后台功能

1. 仪表盘

  • 实时访问统计
  • 缓存命中率趋势图
  • 源站分布统计
  • 状态码分布

2. CDN 源站管理

  • 查看/添加/编辑/删除源站配置
  • 启用/禁用源站
  • 配置源站前缀和基础 URL

3. 白名单管理

  • 域名白名单 CRUD
  • 白名单启用/禁用

4. 黑名单管理

  • 路径黑名单 CRUD(支持精确、包含、通配符、正则匹配)
  • 黑名单同步到 EdgeOne WAF
  • 批量同步功能

5. 日志查询

  • 访问日志查询(支持时间范围、URL前缀、状态码、安全动作筛选)
  • 审计日志查询(管理员操作记录)
  • 日志统计分析

6. 站点管理

  • 站点基本信息(标题、描述、域名)
  • 备案信息(ICP备案号、公安备案号)
  • EdgeOne 配置
  • 日志投递鉴权配置

7. 后端/前端日志

  • 内存日志查看
  • 日志级别配置
  • 日志保留策略

合规功能

  • 日志保存: 90天 PostgreSQL 分区表 + 90天 gzip 归档
  • 域名白名单: 仅允许列表内域名加速
  • 路径黑名单: 违规资源路径实时拦截
  • 审计日志: 管理员操作全程记录
  • 数据脱敏: IP 和 User-Agent MD5 哈希存储

版本管理

查看当前版本

# 查看完整版本信息
./scripts/gen-version.sh all

# 输出示例:
# ================================
# 📦 EdgeOne Static 版本信息
# ================================
# Frontend:   1.9.0+fe21a1d2.20260202
# Backend:    1.9.8+fe21a1d2.20260202
# Docker Tag: 1.9.0
# Git Hash:   fe21a1d2
# Build Date: 20260202
# ================================

一键更新版本号

# 更新所有 package.json 和后端版本文件
./scripts/update-version.sh

版本号格式

  • Frontend: 1.9.0+{git_hash}.{build_date}
  • Backend: 1.9.8+{git_hash}.{build_date}
  • Docker Tag: 1.9.0

配置说明

数据库配置

database:
  host: localhost
  port: 5432
  name: cdn_service
  user: cdn_user
  password: your_password
  max_connections: 20

EdgeOne 配置

edgeone:
  zone_id: your_zone_id
  secret_id: your_secret_id
  secret_key: your_secret_key

日志投递鉴权配置

在管理后台的"站点管理"中配置:

  • SecretId: EdgeOne 日志投递使用的 Secret ID
  • SecretKey: EdgeOne 日志投递使用的 Secret Key

Docker 构建

构建镜像

# 构建基础镜像(无环境)
make docker-build-minimal

# 构建完整镜像(含 PostgreSQL + Redis)
make docker-build-full

# 构建所有镜像
make docker-build

# 查看版本信息
make version

运行容器

# 运行基础镜像(需外部数据库)
make docker-run-minimal

# 运行完整镜像(自带数据库)
make docker-run-full

# 停止并清理容器
make docker-clean

文档

项目结构

/workspace/
├── README.md                       # 项目说明文档
├── ProjectStructurePlan.md         # 项目架构规划
├── version.json                    # 版本配置文件
├── Dockerfile                      # Docker 基础镜像构建
├── Dockerfile.full                 # Docker 完整镜像构建(含数据库)
├── Makefile                        # 常用命令脚本
├── DevelopmentOperations/          # 对话操作记录目录
│
├── backend/                        # Go 后端服务
│   ├── cmd/server/main.go          # 主服务入口
│   ├── internal/
│   │   ├── handler/                # HTTP 处理器
│   │   ├── service/                # 业务逻辑层
│   │   ├── repository/             # 数据访问层
│   │   ├── middleware/             # 中间件
│   │   └── version/                # 版本信息
│   ├── configs/                    # 配置文件
│   └── deployments/                # 部署配置
│
├── frontend/admin/                 # Vue3 管理后台(融合主页)
│   ├── src/
│   │   ├── views/                  # 页面视图
│   │   ├── api/                    # API 接口
│   │   ├── components/             # 公共组件
│   │   └── router/                 # 路由配置
│   └── package.json
│
├── docs/api/                       # API 文档
└── scripts/                        # 运维脚本
    ├── gen-version.sh              # 版本号生成工具
    ├── update-version.sh           # 一键更新版本
    ├── docker-entrypoint.sh        # Docker 容器启动脚本
    └── supervisord.conf            # 进程管理配置

开发计划

第一阶段: 基础服务 ✅ 已完成

  • 项目脚手架搭建
  • 数据库表结构创建
  • 302 重定向服务
  • 白名单/黑名单基础 CRUD
  • CDN 源站管理

第二阶段: 日志系统 ✅ 已完成

  • 日志接收 API
  • 日志解析与存储
  • 日志归档脚本
  • 统计查询接口
  • 访问日志统计分析

第三阶段: 管理后台 ✅ 已完成

  • Vue3 项目搭建
  • 主页与管理后台融合
  • 登录认证
  • 站点管理与主页同步
  • 白名单/黑名单管理页面
  • 日志查询页面
  • 实时测速功能

第四阶段: EdgeOne 集成 🔄 进行中

  • WAF Custom Rules 集成
  • 黑名单同步到 WAF
  • 域名配置指南
  • 缓存规则配置
  • 日志投递配置

第五阶段: Docker 与版本管理 ✅ 已完成

  • Dockerfile 构建脚本
  • 版本号自动生成(Git Hash + Date)
  • 一键版本更新脚本
  • 基础镜像(无环境)
  • 完整镜像(含 PostgreSQL + Redis)
  • 自动化环境配置测试

第六阶段: 测试上线

  • 集成测试
  • 压力测试
  • 文档完善
  • 生产部署

性能指标

指标目标值说明
302 重定向响应< 10ms白名单校验+URL解析
日志接收处理> 10000 条/秒批量写入优化
数据库写入> 10000 条/天单服务器轻松支撑
缓存命中率> 80%EdgeOne 边缘缓存
WAF 拦截响应< 1ms边缘实时拦截

许可证

MIT

About

No description, topics, or website provided.
Language
Go46.5%
Vue38.5%
TypeScript6.6%
Shell3.6%
Others4.8%