# 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 ) ``` ### 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