mirror of
https://github.com/zhang-pu/tpanel.git
synced 2026-10-02 16:29:29 +08:00
✨ v1.3.44 更新内容: - 🔧 修复:强制刷新页面后链接点不了的 bug - 修复:DOMContentLoaded 中添加 checkAuth() 调用,自动验证登录态
12 KiB
12 KiB
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 数据库表
-- 管理员账号
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 安全机制
- 站点隔离:每个站点一个 Linux 用户,Home 目录即网站根目录,禁 shell
- 最小权限原则:MySQL 用户权限精确到站点数据库
- CSRF 防护:所有 POST 请求带 token 验证
- 命令白名单:仅允许预设的 shell 命令,无 shell 注入
- HTTPS:面板强制 HTTPS,API 只能用 Token 认证
- 文件上传限制:仅允许 .zip/.tar.gz 上传,自动解压到站点目录
- 日志审计:所有操作写 security_logs
- 自动修复:每日 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 一键安装脚本
wget -O install.sh https://tpanel.cn/install.sh
bash install.sh
安装脚本做的事情:
- 检测系统(Debian 10+ / Ubuntu 20.04+)
- 安装 Nginx、MySQL、Python3、certbot
- 创建 tpanel 用户和目录
- 初始化 SQLite 数据库
- 配置 systemd 服务
- 配置 Nginx 反向代理
- 申请 Let's Encrypt 面板证书
- 启动服务
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.14(2026-06-07)
- ✅ 修复 ssl_manager.py 裸调 nginx -t / nginx -s reload(v1.3.11 漏改)
- ✅ 新增 tpanel-static-check.py 静态分析工具(10 项检查,不装机能抱 80% 装完才暴露的 bug)
- ✅ 提供 run-static-check.sh 入口脚本,发布前必跑
v1.3.13(2026-06-07)
- ✅ 修复 sudo NOPASSWD 没生效(requiretty 阻挡 / 命令路径不一致)问题
- ✅ install.sh 用
command -v动态探测真实路径,加!requiretty声明,加visudo -c验证,加 NOPASSWD 试跑 - ✅ 提供
tpanel-fix-sudo.sh紧急补丁脚本 - ✅ 提供
tpanel-install-test.sh装完自检脚本(6 节检查覆盖 v1.3.10~v1.3.12 全部隐藏问题)
v1.3.12(2026-06-07)
- ✅ 修复软件安装 / 安全更新 SSE 流 “连接断开” 问题
- ✅ Nginx 为
/api/tasks/<id>/stream拉专用 location:proxy_read_timeout 1800s+proxy_buffering off+X-Accel-Buffering: no - ✅ 提供
tpanel-fix-sse.sh紧急补丁脚本,老用户一键修复(只 reload nginx,不动 tpanel 服务)
v1.3.11(2026-06-07)
- ✅ 修复全新装机后新建站点
useradd: Permission denied的 bug(sudoers 漏授权) - ✅ install.sh 新增
/etc/sudoers.d/tpanel-admin:useradd/userdel/usermod/chown/chmod/nginx/systemctl NOPASSWD - ✅ system.py 全面加
sudo前缀(useradd/userdel/set_site_permissions 的 chown/chmod/nginx -t + reload/nginx stop + start/apt-get update)
v1.3.10(2026-06-07)
- ✅ 修复 phpMyAdmin 装完无 Nginx 8443 反代导致点 🐘 死循环 confirm 的 bug
- ✅
task_manager.create_task新增on_complete(task_id, status)钩子(success/failed 都调,通用联动机制) - ✅ 新增
task_manager.setup_phpmyadmin_nginx():自动探 PMA 路径 →sudo mv写/etc/nginx/sites-enabled/phpmyadmin.conf→nginx -t→systemctl reload nginx(含安全加固) - ✅
api_phpmyadmin_status改三维判断(sw_installed AND files_exist AND nginx_ok),返回详细字段 - ✅ 前端
openPhpMyAdmin改轮询_pollPhpMyAdminReady(30s),等 nginx_ok=true 再跳
v1.3.9(2026-06-06,super release)
- ✅ 修复登录后必须强制刷新才能看到后台的 bug
- ✅ 仪表盘显示 CPU 核心数 + 型号
- ✅ 负载颜色按核心数判断
v1.3.x(2026-06-05)
- ✅ PHP 5.6 / 7.0 / 7.4 / 8.0 / 8.1 / 8.2 / 8.3 软件市场一键装
- ✅ phpMyAdmin UI 一键装(之前无反代配置,v1.3.10 修)
- ✅ 软件市场后台任务流(SSE 实时进度)
v1.3.0(待开发)
- Node.js 支持
- 日志查看器(nginx access/error log)
8. 开源协议
MIT License
9. 作者
- 作者:Zhang Pu
- 网站:https://zhangpu.dev
- 面板官网:https://tpanel.cn