Initial commit
This commit is contained in:
207
README.md
Normal file
207
README.md
Normal file
@@ -0,0 +1,207 @@
|
||||
# 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.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`
|
||||
|
||||
## 许可证
|
||||
|
||||
暂未指定,按企业内部或项目需要补充。
|
||||
Reference in New Issue
Block a user