Files
pyGoEdge-UserPanel/README.md

207 lines
7.8 KiB
Markdown
Raw Normal View History

2025-11-18 03:36:49 +08:00
# 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`
- `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` / `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_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用于自动获取 AccessToken
- `edge_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`
## 许可证
暂未指定,按企业内部或项目需要补充。