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

207 lines
7.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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`
## 许可证
暂未指定,按企业内部或项目需要补充。