Files
pyGoEdge-UserPanel/README.md
2025-11-18 03:36:49 +08:00

7.8 KiB
Raw Blame History

PyGoEdge 控制面板

基于 Python + Django + Bootstrap + MySQL 的按域名计费 CDN 加速控制面板,集成 GoEdge 管理员 API 作为底层 CDN 引擎。支持域名 CNAME 接入、配额与套餐管理、流量统计与账单、可运营的自定义管理面板。

主要特性

  • 用户与认证:邮箱/用户名登录,用户中心与登录历史
  • 域名接入:多子域名 CNAME 接入源站配置向导DNS 生效检测
  • 套餐与功能每域名包含流量、超量单价、功能开关WAF、访问日志、HTTP/3、WebSocket、缓存/路径规则)
  • 流量统计:日/小时流量与请求统计、带宽峰值、状态码聚合
  • 计费与账单:按周期汇总套餐费与超量费用,生成账单与明细
  • 运营管理:自定义运营面板(/admin-panel/),系统级默认配置、策略资源引用、异常流量检测
  • GoEdge 集成:管理员 AccessKey → AccessToken 自动获取与缓存;网站创建与功能变更;日志检索
  • 界面Django 模板 + BootstrapCloudflare 风格导航与模块布局

目录结构概览

pygoedge/
├─ manage.py
├─ requirements.txt
├─ .env.example / .env
├─ pygoedge_panel/
│  ├─ settings.py
│  ├─ settings/
│  │  ├─ base.py
│  │  ├─ dev.py
│  │  └─ prod.py
│  ├─ urls.py
│  ├─ wsgi.py / asgi.py
├─ core/
│  ├─ models.py (SystemSettings, OperationLog)
│  └─ goedge_client.py (GoEdge API 封装)
├─ accounts/ domains/ plans/ billing/ admin_panel/
│  └─ urls.py + views.py + models.py + templates
├─ templates/ static/
└─ ...

环境要求

  • Python 3.10+(推荐 3.11
  • Django 5.2.x
  • 数据库:默认 SQLite生产推荐 MySQL 8.x
  • 依赖:详见 requirements.txt
    • python-dotenv(加载 .env
    • requestsGoEdge API
    • dnspythonDNS 检测)
    • PyMySQLWindows 下连接 MySQL
    • mysqlclient(非 Windows 平台可选,性能更优)

安装与启动

1. 克隆与依赖安装

python -m venv .venv
.\.venv\Scripts\activate           # Windows
# 或 source .venv/bin/activate      # Linux/macOS
pip install -r requirements.txt

2. 配置环境变量

复制示例:

cp .env.example .env   # Windows 可手动复制

关键项:

  • DJANGO_ENVdev / prod
  • DJANGO_SECRET_KEY:随机安全字符串
  • DJANGO_ALLOWED_HOSTS:逗号分隔主机名,生产必填
  • DJANGO_CSRF_TRUSTED_ORIGINS:例如 https://panel.example.com
  • 数据库(默认 SQLite如用 MySQL设置 DB_ENGINE=mysql 与连接参数
  • GoEdge 管理员 API
    • GOEDGE_ADMIN_API_BASE_URL=https://your-goedge-host:port
    • GOEDGE_ACCESS_KEY_ID / GOEDGE_ACCESS_KEY(用于换取 AccessToken
    • GOEDGE_ACCESS_TOKEN(可选,若直接提供现成令牌)
    • GOEDGE_DEFAULT_NODE_CLUSTER_ID(创建站点所需集群 ID
  • 运营默认:
    • DEFAULT_FREE_TRAFFIC_GB_PER_DOMAIN(每域名默认免费流量,默认 15
    • CNAME_TEMPLATECNAME 目标模板,如 {sub}.cdn.example.com

.env.example 内容参考:

DJANGO_ENV=dev
DJANGO_SECRET_KEY=change-me
DJANGO_ALLOWED_HOSTS=localhost,127.0.0.1
DJANGO_DEBUG=True
DJANGO_CSRF_TRUSTED_ORIGINS=
# DB_ENGINE=mysql
# DB_NAME=pygoedge
# DB_USER=root
# DB_PASSWORD=your-password
# DB_HOST=127.0.0.1
# DB_PORT=3306
# DB_CONN_MAX_AGE=60
GOEDGE_ADMIN_API_BASE_URL=https://your-goedge-host:port
GOEDGE_ACCESS_KEY_ID=your-access-key-id
GOEDGE_ACCESS_KEY=your-access-key
GOEDGE_ACCESS_TOKEN=
GOEDGE_DEFAULT_NODE_CLUSTER_ID=1

3. 初始化数据库

python manage.py migrate
python manage.py createsuperuser

如使用 MySQL

  • Windows 推荐 PyMySQL(已在 requirements.txt),无需额外编译;
  • Linux/macOS 可使用 mysqlclient 以获得更好性能(确保 MySQL 开发库已安装)。

4. 启动开发服务

python manage.py runserver 0.0.0.0:8000

生产环境请结合反向代理(如 NGINX与 WSGI/ASGI 服务部署,并在 DJANGO_ENV=prod 下启用安全项与静态资源收集:

python manage.py collectstatic

运营配置

管理入口

  • Django 管理后台:/admin/
  • 自定义运营面板:/admin-panel/

SystemSettings系统设置

通过 Django Admin → SystemSettings 配置下列项:

  • goedge_base_urlGoEdge 管理员 API 基础地址(与 .envGOEDGE_ADMIN_API_BASE_URL 一致)
  • admin_access_key_id / admin_access_key:管理员 AccessKey用于自动获取 AccessToken
  • edge_access_token / edge_token_expires_atAccessToken 缓存与过期时间(自动维护)
  • default_node_cluster_id:创建站点使用的节点集群 ID可被 .env 覆盖)
  • default_free_traffic_gb_per_domain:每域名默认免费流量(默认 15GB
  • default_overage_policy:超量策略(允许访问/限速/停服等 JSON 配置)
  • cname_templateCNAME 目标模板(如 {sub}.cdn.example.com
  • 默认策略引用:default_http_access_log_policy_id / default_http_firewall_policy_id
  • 异常流量检测:开关、阈值倍数、窗口天数、最小触发 GB
  • 易支付预留:epay_api_base_urlepay_pidepay_key

GoEdge 集成说明

  • 令牌策略:优先使用有效 edge_access_token;过期或缺失时用 AccessKey 获取并缓存
  • 站点创建:ServerService/createBasicHTTPServerServerService/createServerhttpProxy
  • 功能同步:访问日志 / WebSocket / WAF / HTTP/3 / 缓存 / 路径规则 / 重写 / HTTPS 跳转 / 防盗链 / 客户端 IP / 停服 / 请求限速
  • 统计读取:日/小时请求数、带宽峰值;访问日志分页检索与状态码聚合

业务功能与页面

  • /accounts/:账号注册 / 登录 / 资料 / 登录历史
  • /domains/:域名列表与接入向导(子域名、源站、套餐、生成 CNAME、DNS 检测)
  • /domains/<id>/:域名详情(概览、统计、接入信息、功能设置)
  • /plans/:套餐列表与升级(公开套餐对比)
  • /billing/:账单列表与详情(套餐费、超量费用、调整)
  • /admin-panel/:运营后台(系统设置、套餐管理、用户与域名管理、配额调整、计费与风控)

任务与定时(建议)

通过系统任务计划Linux cron / Windows 任务计划)周期运行:

  • 拉取每日统计:
    • python manage.py pull_daily_stats
  • 拉取流量数据:
    • python manage.py pull_traffic
  • 账单生成(周期结束时触发):
    • python manage.py generate_invoices
  • 演示数据初始化(可选):
    • python manage.py seed_demo_data

建议频率:

  • 每日统计:每小时或每日
  • 流量拉取:每日 1 次(或按需更频繁)
  • 账单生成:每月周期结束时运行

开发与部署建议

  • 开发环境:DJANGO_ENV=devDEBUG=TrueALLOWED_HOSTS=*
  • 生产环境:DJANGO_ENV=prodDEBUG=False,明确 DJANGO_ALLOWED_HOSTSCSRF_TRUSTED_ORIGINS
  • 静态文件:生产执行 collectstatic,由前置代理服务静态目录 STATIC_ROOT
  • 数据库连接复用:设置 DB_CONN_MAX_AGE=60(或更高)提高性能
  • 安全:不在前端暴露任何 GoEdge AccessToken所有变更走后端 API关键操作写入 OperationLog

常见问题

  • Windows 下 MySQL 连接:默认使用 PyMySQL,无需编译;如需 mysqlclient,请确保编译环境与 MySQL 开发库完整
  • AccessToken 获取失败:检查 GOEDGE_ADMIN_API_BASE_URLGOEDGE_ACCESS_KEY_IDGOEDGE_ACCESS_KEY 是否正确,网络与证书是否可达
  • 节点集群 ID 未配置:在 SystemSettings 或 .env 中填写 GOEDGE_DEFAULT_NODE_CLUSTER_ID
  • CSRF 相关错误:生产环境设置 DJANGO_CSRF_TRUSTED_ORIGINS 与正确的 ALLOWED_HOSTS

许可证

暂未指定,按企业内部或项目需要补充。