d17c7efb3cadb2f483fed55a123ae1594026ee0a
PyGoEdge 控制面板
基于 Python + Django + Bootstrap + MySQL 的按域名计费 CDN 加速控制面板,集成 GoEdge 管理员 API 作为底层 CDN 引擎。支持域名 CNAME 接入、配额与套餐管理、流量统计与账单、可运营的自定义管理面板。
主要特性
- 用户与认证:邮箱/用户名登录,用户中心与登录历史
- 域名接入:多子域名 CNAME 接入,源站配置向导,DNS 生效检测
- 套餐与功能:每域名包含流量、超量单价、功能开关(WAF、访问日志、HTTP/3、WebSocket、缓存/路径规则)
- 流量统计:日/小时流量与请求统计、带宽峰值、状态码聚合
- 计费与账单:按周期汇总套餐费与超量费用,生成账单与明细
- 运营管理:自定义运营面板(/admin-panel/),系统级默认配置、策略资源引用、异常流量检测
- GoEdge 集成:管理员 AccessKey → AccessToken 自动获取与缓存;网站创建与功能变更;日志检索
- 界面:Django 模板 + Bootstrap,Cloudflare 风格导航与模块布局
目录结构概览
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.txtpython-dotenv(加载.env)requests(GoEdge API)dnspython(DNS 检测)PyMySQL(Windows 下连接 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_ENV:dev/prodDJANGO_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:portGOEDGE_ACCESS_KEY_ID/GOEDGE_ACCESS_KEY(用于换取 AccessToken)GOEDGE_ACCESS_TOKEN(可选,若直接提供现成令牌)GOEDGE_DEFAULT_NODE_CLUSTER_ID(创建站点所需集群 ID)
- 运营默认:
DEFAULT_FREE_TRAFFIC_GB_PER_DOMAIN(每域名默认免费流量,默认 15)CNAME_TEMPLATE(CNAME 目标模板,如{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_url:GoEdge 管理员 API 基础地址(与.env中GOEDGE_ADMIN_API_BASE_URL一致)admin_access_key_id/admin_access_key:管理员 AccessKey,用于自动获取 AccessTokenedge_access_token/edge_token_expires_at:AccessToken 缓存与过期时间(自动维护)default_node_cluster_id:创建站点使用的节点集群 ID(可被.env覆盖)default_free_traffic_gb_per_domain:每域名默认免费流量(默认 15GB)default_overage_policy:超量策略(允许访问/限速/停服等 JSON 配置)cname_template:CNAME 目标模板(如{sub}.cdn.example.com)- 默认策略引用:
default_http_access_log_policy_id/default_http_firewall_policy_id - 异常流量检测:开关、阈值倍数、窗口天数、最小触发 GB
- 易支付预留:
epay_api_base_url、epay_pid、epay_key
GoEdge 集成说明
- 令牌策略:优先使用有效
edge_access_token;过期或缺失时用 AccessKey 获取并缓存 - 站点创建:
ServerService/createBasicHTTPServer或ServerService/createServer(httpProxy) - 功能同步:访问日志 / 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=dev、DEBUG=True,ALLOWED_HOSTS=* - 生产环境:
DJANGO_ENV=prod、DEBUG=False,明确DJANGO_ALLOWED_HOSTS与CSRF_TRUSTED_ORIGINS - 静态文件:生产执行
collectstatic,由前置代理服务静态目录STATIC_ROOT - 数据库连接复用:设置
DB_CONN_MAX_AGE=60(或更高)提高性能 - 安全:不在前端暴露任何 GoEdge AccessToken;所有变更走后端 API;关键操作写入 OperationLog
常见问题
- Windows 下 MySQL 连接:默认使用
PyMySQL,无需编译;如需mysqlclient,请确保编译环境与 MySQL 开发库完整 - AccessToken 获取失败:检查
GOEDGE_ADMIN_API_BASE_URL、GOEDGE_ACCESS_KEY_ID、GOEDGE_ACCESS_KEY是否正确,网络与证书是否可达 - 节点集群 ID 未配置:在 SystemSettings 或
.env中填写GOEDGE_DEFAULT_NODE_CLUSTER_ID - CSRF 相关错误:生产环境设置
DJANGO_CSRF_TRUSTED_ORIGINS与正确的ALLOWED_HOSTS
许可证
暂未指定,按企业内部或项目需要补充。
Description
Languages
Python
96.4%
HTML
1.7%
JavaScript
1%
CSS
0.7%
PowerShell
0.2%