logo
0
0
WeChat Login
feat: 添加版本管理与Docker镜像构建支持

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