mirror of
https://github.com/zhang-pu/tpanel.git
synced 2026-10-03 00:39:28 +08:00
326 lines
No EOL
9.1 KiB
Markdown
326 lines
No EOL
9.1 KiB
Markdown
# T面板 - 规格说明书
|
||
|
||
## 1. 项目概述
|
||
|
||
- **名称**:T面板(tpanel)
|
||
- **官方网址**:https://tpanel.cn
|
||
- **定位**:轻量级 Linux 网站管理面板,聚焦建站核心功能
|
||
- **目标用户**:个人站长、中小型网站管理者
|
||
|
||
## 2. 核心功能
|
||
|
||
### 2.1 网站管理
|
||
- 创建站点(绑定域名、选择PHP版本、设置目录)
|
||
- 删除站点(含数据确认)
|
||
- 站点列表(域名、状态、创建时间、备份状态)
|
||
- 站点起停(nginx reload/restart)
|
||
- 流量统计(nginx access log 解析)
|
||
|
||
### 2.2 SSL 证书
|
||
- Let's Encrypt 免费证书申请(HTTP验证)
|
||
- 证书自动续期(systemd timer 触发 certbot)
|
||
- 一键部署到站点
|
||
- 证书状态监控(剩余天数)
|
||
|
||
### 2.3 数据库管理
|
||
- 创建 MySQL 数据库 + 用户
|
||
- 删除数据库
|
||
- phpMyAdmin 一键安装(可选)
|
||
- 数据库列表(名称、大小、字符集)
|
||
|
||
### 2.4 备份系统
|
||
- 本地备份(tar + mysql dump)
|
||
- 远程备份(rsync 到另一台服务器)
|
||
- 定时备份(cron 表达式)
|
||
- 下载备份文件
|
||
- 恢复备份
|
||
|
||
### 2.5 安全功能
|
||
- 系统更新(apt-get security update)
|
||
- 站点数据隔离(Linux 用户分离)
|
||
- SSH 密钥管理(可选)
|
||
- 防火墙规则(UFW)
|
||
- 异常登录告警
|
||
- 自动漏洞修复(cron 定期执行)
|
||
|
||
### 2.6 文件管理
|
||
- 在线文件浏览
|
||
- 上传文件(压缩包自动解压)
|
||
- 编辑配置文件(高亮)
|
||
- 权限管理
|
||
|
||
## 3. 技术架构
|
||
|
||
### 3.1 目录结构
|
||
```
|
||
/opt/tpanel/
|
||
├── backend/
|
||
│ ├── main.py # Flask 入口
|
||
│ ├── system.py # 系统操作(nginx/mysql/backup)
|
||
│ ├── site.py # 站点管理
|
||
│ ├── database.py # 数据库管理
|
||
│ ├── ssl.py # SSL 管理
|
||
│ ├── firewall.py # 防火墙
|
||
│ ├── security.py # 安全更新
|
||
│ ├── config.py # 配置读写
|
||
│ └── utils.py # 工具函数
|
||
├── frontend/
|
||
│ ├── index.html # 主面板
|
||
│ ├── css/
|
||
│ ├── js/
|
||
│ └── assets/
|
||
├── data/ # SQLite 数据库
|
||
├── sites/ # 站点目录 /www/tpanel/sites/
|
||
├── backups/ # 备份目录
|
||
├── logs/ # 日志
|
||
├── ssl/ # SSL 证书目录
|
||
└── config/ # Nginx 配置 /etc/nginx/tpanel/
|
||
|
||
/etc/systemd/system/tpanel.service
|
||
/etc/nginx/tpanel-api.conf # Nginx 反向代理
|
||
```
|
||
|
||
### 3.2 数据库表
|
||
|
||
```sql
|
||
-- 管理员账号
|
||
CREATE TABLE admin (
|
||
id INTEGER PRIMARY KEY,
|
||
username TEXT NOT NULL UNIQUE,
|
||
password_hash TEXT NOT NULL, -- bcrypt
|
||
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
||
last_login DATETIME
|
||
);
|
||
|
||
-- 站点
|
||
CREATE TABLE sites (
|
||
id INTEGER PRIMARY KEY,
|
||
name TEXT NOT NULL,
|
||
domain TEXT NOT NULL UNIQUE,
|
||
site_user TEXT NOT NULL UNIQUE, -- Linux 用户名
|
||
site_path TEXT NOT NULL,
|
||
php_version TEXT DEFAULT '8.1',
|
||
status TEXT DEFAULT 'running', -- running/stopped
|
||
ssl_enabled INTEGER DEFAULT 0,
|
||
ssl_cert_path TEXT,
|
||
ssl_key_path TEXT,
|
||
created_at DATETIME DEFAULT CURRENT_TIMESTAMP
|
||
);
|
||
|
||
-- 数据库
|
||
CREATE TABLE databases (
|
||
id INTEGER PRIMARY KEY,
|
||
site_id INTEGER REFERENCES sites(id),
|
||
name TEXT NOT NULL UNIQUE,
|
||
db_user TEXT NOT NULL UNIQUE,
|
||
db_pass TEXT NOT NULL,
|
||
charset TEXT DEFAULT 'utf8mb4',
|
||
created_at DATETIME DEFAULT CURRENT_TIMESTAMP
|
||
);
|
||
|
||
-- 备份记录
|
||
CREATE TABLE backups (
|
||
id INTEGER PRIMARY KEY,
|
||
site_id INTEGER REFERENCES sites(id),
|
||
type TEXT DEFAULT 'local', -- local/remote
|
||
file_path TEXT,
|
||
size INTEGER,
|
||
status TEXT DEFAULT 'success', -- success/failed
|
||
created_at DATETIME DEFAULT CURRENT_TIMESTAMP
|
||
);
|
||
|
||
-- SSL 证书
|
||
CREATE TABLE ssl_certs (
|
||
id INTEGER PRIMARY KEY,
|
||
site_id INTEGER REFERENCES sites(id),
|
||
domain TEXT NOT NULL,
|
||
cert_path TEXT NOT NULL,
|
||
key_path TEXT NOT NULL,
|
||
expire_date DATETIME,
|
||
auto_renew INTEGER DEFAULT 1,
|
||
created_at DATETIME DEFAULT CURRENT_TIMESTAMP
|
||
);
|
||
|
||
-- 定时任务
|
||
CREATE TABLE cron_jobs (
|
||
id INTEGER PRIMARY KEY,
|
||
site_id INTEGER REFERENCES sites(id),
|
||
name TEXT NOT NULL,
|
||
schedule TEXT NOT NULL, -- cron 表达式
|
||
command TEXT NOT NULL,
|
||
enabled INTEGER DEFAULT 1,
|
||
last_run DATETIME,
|
||
created_at DATETIME DEFAULT CURRENT_TIMESTAMP
|
||
);
|
||
|
||
-- 安全日志
|
||
CREATE TABLE security_logs (
|
||
id INTEGER PRIMARY KEY,
|
||
event_type TEXT NOT NULL,
|
||
details TEXT,
|
||
ip TEXT,
|
||
created_at DATETIME DEFAULT CURRENT_TIMESTAMP
|
||
);
|
||
|
||
-- 设置
|
||
CREATE TABLE settings (
|
||
key TEXT PRIMARY KEY,
|
||
value TEXT
|
||
);
|
||
```
|
||
|
||
### 3.3 安全机制
|
||
|
||
1. **站点隔离**:每个站点一个 Linux 用户,Home 目录即网站根目录,禁 shell
|
||
2. **最小权限原则**:MySQL 用户权限精确到站点数据库
|
||
3. **CSRF 防护**:所有 POST 请求带 token 验证
|
||
4. **命令白名单**:仅允许预设的 shell 命令,无 shell 注入
|
||
5. **HTTPS**:面板强制 HTTPS,API 只能用 Token 认证
|
||
6. **文件上传限制**:仅允许 .zip/.tar.gz 上传,自动解压到站点目录
|
||
7. **日志审计**:所有操作写 security_logs
|
||
8. **自动修复**:每日 3:00 执行 apt-get update && apt-get upgrade -y
|
||
|
||
### 3.4 防火墙规则(UFW)
|
||
|
||
- 默认只开放 22(SSH)、80(HTTP)、443(HTTPS)
|
||
- 管理面板端口(例如 8848)仅限 localhost 访问
|
||
- Nginx 反向代理到面板后端
|
||
|
||
## 4. 面板设计
|
||
|
||
### 4.1 界面风格
|
||
|
||
- 风格:深色主题 + 绿色点缀(科技感、安全感)
|
||
- 字体:JetBrains Mono(代码)+ Inter(界面)
|
||
- 配色:主色 #22c55e(绿色),背景 #0f172a(深蓝黑),卡片 #1e293b
|
||
|
||
### 4.2 布局
|
||
|
||
```
|
||
┌─────────────────────────────────────────────────┐
|
||
│ [Logo] T面板 [站点数] [状态] [安全更新] │
|
||
├─────────────────────────────────────────────────┤
|
||
│ │
|
||
│ [仪表盘] [网站] [数据库] [SSL] [备份] [安全] │
|
||
│ │
|
||
│ ┌─────────────────────────────────────────┐ │
|
||
│ │ 内容区域 │ │
|
||
│ └─────────────────────────────────────────┘ │
|
||
└─────────────────────────────────────────────────┘
|
||
```
|
||
|
||
## 5. API 设计
|
||
|
||
### 5.1 认证
|
||
|
||
```
|
||
POST /api/auth/login { username, password }
|
||
POST /api/auth/logout
|
||
GET /api/auth/check (Header: Authorization: Bearer <token>)
|
||
```
|
||
|
||
### 5.2 站点
|
||
|
||
```
|
||
GET /api/sites 列表
|
||
POST /api/sites 创建 { domain, php_version, path }
|
||
GET /api/sites/:id 详情
|
||
PUT /api/sites/:id 更新 { status, ssl }
|
||
DELETE /api/sites/:id 删除
|
||
POST /api/sites/:id/start 启动
|
||
POST /api/sites/:id/stop 停止
|
||
POST /api/sites/:id/backup 触发备份
|
||
```
|
||
|
||
### 5.3 数据库
|
||
|
||
```
|
||
GET /api/databases
|
||
POST /api/databases 创建 { site_id, name, user, pass }
|
||
DELETE /api/databases/:id
|
||
```
|
||
|
||
### 5.4 SSL
|
||
|
||
```
|
||
POST /api/ssl/apply { site_id, domain }
|
||
GET /api/ssl/certs 列表
|
||
POST /api/ssl/renew/:id 续期
|
||
```
|
||
|
||
### 5.5 备份
|
||
|
||
```
|
||
GET /api/backups 列表
|
||
POST /api/backups 创建 { site_id, type }
|
||
GET /api/backups/:id/download
|
||
POST /api/backups/:id/restore
|
||
DELETE /api/backups/:id
|
||
```
|
||
|
||
### 5.6 安全
|
||
|
||
```
|
||
GET /api/security/logs 安全日志
|
||
POST /api/security/update 执行系统更新
|
||
GET /api/security/status 安全状态(已安装更新数、漏洞数)
|
||
```
|
||
|
||
## 6. 安装流程
|
||
|
||
### 6.1 一键安装脚本
|
||
|
||
```bash
|
||
wget -O install.sh https://tpanel.cn/install.sh
|
||
bash install.sh
|
||
```
|
||
|
||
安装脚本做的事情:
|
||
1. 检测系统(Debian 10+ / Ubuntu 20.04+)
|
||
2. 安装 Nginx、MySQL、Python3、certbot
|
||
3. 创建 tpanel 用户和目录
|
||
4. 初始化 SQLite 数据库
|
||
5. 配置 systemd 服务
|
||
6. 配置 Nginx 反向代理
|
||
7. 申请 Let's Encrypt 面板证书
|
||
8. 启动服务
|
||
|
||
### 6.2 默认端口
|
||
|
||
- 面板访问:https://localhost:8848 (仅本地访问)
|
||
- 通过 Nginx 反代到域名,例如 https://tpanel.cn
|
||
|
||
## 7. 版本规划
|
||
|
||
### v1.0.0(首发)
|
||
- 站点 CRUD
|
||
- MySQL 数据库 CRUD
|
||
- Let's Encrypt SSL
|
||
- 本地备份
|
||
- 系统安全更新
|
||
|
||
### v1.1.0
|
||
- 远程备份(rsync)
|
||
- 定时任务
|
||
- 文件管理
|
||
|
||
### v1.2.0
|
||
- Cron 表达式验证
|
||
- 远程 rsync 备份 + 恢复
|
||
- 连接测试工具
|
||
- 备份统计面板
|
||
|
||
### v1.3.0(待开发)
|
||
- 多 PHP 版本切换
|
||
- Node.js 支持
|
||
- 日志查看器(nginx access/error log)
|
||
|
||
## 8. 开源协议
|
||
|
||
MIT License
|
||
|
||
## 9. 作者
|
||
|
||
- 作者:Zhang Pu
|
||
- 网站:https://zhangpu.dev
|
||
- 面板官网:https://tpanel.cn |