服务器监测开关机网页
Go to file
2026-05-30 15:06:24 +08:00
app bug修复 2026-05-30 15:06:24 +08:00
src 修复错误 2026-05-24 03:07:07 +08:00
static V1.0正式版更新 2026-05-29 23:09:58 +08:00
config_add.php bug修复 2026-05-30 09:34:47 +08:00
index.php bug修复 2026-05-30 15:06:24 +08:00
mofangidc.php bug修复 2026-05-30 15:06:24 +08:00
README.md 小更新 2026-05-29 23:41:45 +08:00
view_log.php bug修复 2026-05-30 15:06:24 +08:00
新开发文档.md V1.0正式版更新 2026-05-29 23:09:58 +08:00

VPS Hub - 多平台VPS监控与管理系统

License

一个强大的多平台VPS监控、管理和自动重启系统

功能特性快速开始架构设计API文档常见问题


📋 目录


功能特性

🎯 核心功能

  • 多平台支持支持魔方平台智简魔方、阿里云、腾讯云等主流VPS平台
  • 实时监控每5分钟自动Ping检测所有VPS的可用性
  • 自动开机检测到VPS关机时自动执行开机操作
  • 状态管理实时显示VPS的运行状态开机/关机/未知)
  • 详细信息展示CPU、内存、磁盘、带宽、操作系统等配置信息

🔧 管理功能

  • Web管理面板美观的响应式Web界面
  • 手动刷新一键刷新VPS列表和详细信息
  • 远程控制:支持开机、关机、硬重启操作
  • 配置管理轻松添加和管理多个VPS平台配置
  • 统计信息实时统计VPS总数、运行中数量、已关机数量

📊 监控功能

  • Ping检测定期检测VPS网络可达性
  • 延迟记录记录每次Ping的延迟时间
  • 状态持久化将VPS状态保存到SQLite数据库
  • 历史数据保留30天的Ping历史记录
  • 每日摘要每天0点生成前一天的可用性统计报告

🚀 智能优化

  • API调用优化Ping成功时不调用API减少不必要的请求
  • Token缓存JWT Token缓存2小时避免频繁登录
  • 动态更新:只更新实际变化的字段,避免数据覆盖
  • 防重复机制:使用唯一约束防止重复数据
  • 错误重试:开机失败后自动重试并记录真实状态

🏗️ 系统架构

┌─────────────────────────────────────────────────────┐
│                  Web前端 (index.php)                 │
│  ┌──────────┐  ┌──────────┐  ┌──────────────────┐  │
│  │ VPS列表  │  │ 操作控制 │  │  统计信息展示    │  │
│  └──────────┘  └──────────┘  └──────────────────┘  │
└──────────────────────┬──────────────────────────────┘
                       │ HTTP POST/GET
┌──────────────────────▼──────────────────────────────┐
│              PHP后端 (mofangidc.php)                 │
│  ┌──────────┐  ┌──────────┐  ┌──────────────────┐  │
│  │ API封装  │  │Token管理 │  │  数据库操作      │  │
│  └──────────┘  └──────────┘  └──────────────────┘  │
└──────────────────────┬──────────────────────────────┘
                       │ SQLite
┌──────────────────────▼──────────────────────────────┐
│              数据库层 (SQLite)                        │
│  ┌──────────┐  ┌──────────┐  ┌──────────────────┐  │
│  │ vps.db   │  │vpslist.db│  │   status.db      │  │
│  │(配置)    │  │ (VPS列表)│  │  (监控记录)      │  │
│  └──────────┘  └──────────┘  └──────────────────┘  │
└──────────────────────┬──────────────────────────────┘
                       │
┌──────────────────────▼──────────────────────────────┐
│          Python监控服务 (monitor.py)                 │
│  ┌──────────┐  ┌──────────┐  ┌──────────────────┐  │
│  │ Ping检测 │  │ API调用  │  │  定时任务        │  │
│  └──────────┘  └──────────┘  └──────────────────┘  │
└─────────────────────────────────────────────────────┘

架构特点

  1. 前后端分离PHP负责Web界面和API调用Python负责后台监控
  2. 多数据库设计三个独立的SQLite数据库职责清晰
  3. 混合架构PHP处理用户交互Python处理定时任务
  4. 适配器模式:支持多平台扩展,易于添加新平台

💻 技术栈

后端

  • PHP 7.4+Web服务器端逻辑
  • Python 3.6+:后台监控服务
  • SQLite 3:轻量级数据库

前端

  • HTML5/CSS3:页面结构和样式
  • JavaScript:交互逻辑
  • 响应式设计:支持移动端访问

依赖库

  • PHP: cURL, PDO-SQLite
  • Python: requests, schedule, sqlite3

🚀 快速开始

环境要求

  • PHP 7.4 或更高版本
  • Python 3.6 或更高版本
  • SQLite 3
  • Linux/Windows/macOS

安装步骤

1. 克隆项目

git clone https://git.masonliu.com/MasonLiu/VPSHUB.git
cd VPSHUB

2. 配置Web

直接将VPSHUB文件夹下的所有文件放置于网站路径下即可

温馨提示

请将app路径设置为禁止外网访问或添加Basic认证

3. 一键快速启动

chmod 755 app/install.sh
./app/install.sh

4. 访问Web界面

浏览器访问:http://your-domain.com/

首次访问会自动跳转到配置页面添加第一个VPS平台配置。


⚙️ 配置说明

添加VPS平台配置

  1. 访问 config_add.php?pass=YOUR_API_PASS

  2. 填写配置信息:

    • API标识:自定义名称(唯一)
    • 网站类型:选择平台(目前支持魔方平台)
    • 网站链接API根域名不要包含路径
    • 账户:登录账号
    • API密钥登录密码或API Key
    • 自动监控:是否启用自动监控
  3. 点击"保存配置"

配置示例

魔方平台配置

API标识: 核云IDC
网站类型: 魔方平台
网站链接: https://www.heyunidc.cn
账户: 邮箱或电话号码
API密钥: your_api_key
自动监控: ✓

API_KEY

⚠️ 重要提示

  • 网站链接只填写根域名,不要包含 /v1/api 等路径
  • API标识必须唯一不能重复
  • 确保账户和密码正确

📖 使用指南

Web管理面板

查看VPS列表

访问 index.php?pass=YOUR_API_PASS,可以看到:

  • 按配置分组的VPS列表
  • 每个VPS的状态、IP、配置信息
  • 实时统计数据

操作VPS

每个VPS卡片提供三个操作按钮

  • 开机启动VPS
  • 🔴 关机关闭VPS
  • 🔄 硬重启强制重启VPS

操作后会显示成功/失败提示5秒后自动消失。

刷新VPS列表

点击顶部工具栏的 "🔄 手动刷新VPS列表" 按钮:

  1. 从API获取最新的VPS列表
  2. 更新数据库中的VPS信息
  3. 获取每个VPS的详细配置CPU、内存、磁盘、带宽、系统

监控服务

启动监控

sudo systemctl start idc_monitor

查看状态

sudo systemctl status idc_monitor

停止监控

sudo systemctl stop idc_monitor

重启监控

sudo systemctl restart idc_monitor

监控流程

每5分钟执行一次监控循环
  ↓
1. Ping所有VPS
  ├─ Ping成功 → 标记status='on'不调用API
  └─ Ping失败 → 标记为abnormal等待下一步
  ↓
2. 检查Ping失败的VPS
  ├─ 全部正常 → 跳过
  └─ 有失败的 → 调用API查询真实状态
      ├─ 状态为'on' → 可能是禁Ping更新数据库
      └─ 状态为'off' → 执行开机操作
          ├─ 等待60秒
          └─ 验证开机结果最多重试2次
  ↓
3. 清理30天前的旧数据
  ↓
等待5分钟后下一次循环

🗄️ 数据库设计

数据库文件

文件名 用途 主要表
vps.db 存储平台配置 configs
vpslist.db 存储VPS列表 vps_list
status.db 存储监控记录 ping_status, vps_summary

表结构

configs 表 (vps.db)

CREATE TABLE configs (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    api_label TEXT NOT NULL UNIQUE,  -- API标识
    site_type TEXT NOT NULL,         -- 平台类型
    site_url TEXT,                   -- API地址
    account TEXT NOT NULL,           -- 账户
    api_key TEXT NOT NULL,           -- API密钥
    auto_monitor BOOLEAN DEFAULT 1,  -- 是否自动监控
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

vps_list 表 (vpslist.db)

CREATE TABLE vps_list (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    config_id INTEGER NOT NULL,      -- 配置ID
    vps_id INTEGER NOT NULL,         -- VPS平台ID
    domain TEXT,                     -- 域名
    ip_address TEXT,                 -- IP地址
    product_name TEXT,               -- 产品名称
    cpu_cores INTEGER,               -- CPU核数
    memory_size TEXT,                -- 内存大小
    disk_size TEXT,                  -- 磁盘大小
    bandwidth TEXT,                  -- 带宽
    os_type TEXT,                    -- 操作系统
    status TEXT,                     -- 状态(on/off/unknown)
    section BOOLEAN DEFAULT 0,       -- 是否监控
    last_check TIMESTAMP,            -- 最后检查时间
    FOREIGN KEY (config_id) REFERENCES configs(id),
    UNIQUE(config_id, vps_id)
);

ping_status 表 (status.db)

CREATE TABLE ping_status (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    vps_id INTEGER NOT NULL,         -- VPS ID
    target TEXT NOT NULL,            -- 目标(IP或域名)
    status TEXT NOT NULL,            -- 状态(normal/abnormal)
    latency_ms REAL,                 -- 延迟(ms)
    check_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

vps_summary 表 (status.db)

CREATE TABLE vps_summary (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    vps_id INTEGER NOT NULL,         -- VPS ID
    date DATE NOT NULL,              -- 日期
    avg_latency_ms REAL,             -- 平均延迟
    max_latency_ms REAL,             -- 最大延迟
    min_latency_ms REAL,             -- 最小延迟
    count_under_100 INTEGER,         -- <100ms次数
    count_100_to_300 INTEGER,        -- 100-300ms次数
    count_300_to_500 INTEGER,        -- 300-500ms次数
    count_abnormal INTEGER,          -- 异常次数
    availability TEXT,               -- 可用性评分
    UNIQUE(vps_id, date)
);

📡 API文档

魔方平台API

  • POST /login_api?account={acc}&password={api key} - 登录获取JWT Token

以下接口通过请求头进行认证 Authorization: JWT {token}

  • GET /hosts?page=&limit= - 获取VPS列表
  • GET /hosts/{id} - 获取VPS详情
  • GET /hosts/{id}/module/status?type=host - 获取VPS状态
  • PUT /hosts/{id}/module/on - 开机
  • PUT /hosts/{id}/module/off - 关机
  • PUT /hosts/{id}/module/hard_reboot - 硬重启

🔍 监控服务

配置文件

监控服务配置文件位于:/etc/systemd/system/idc_monitor.service

[Unit]
Description=VPS Hub Monitor Service
After=network.target

[Service]
Type=simple
User=www-data
WorkingDirectory=/path/to/VPSHUB/app
ExecStart=/usr/bin/python3 monitor.py
Restart=always
RestartSec=10

[Install]
WantedBy=multi-user.target

日志文件

  • 正常日志app/logs/monitor.log
  • 错误日志app/logs/error.log

定时任务

  • 监控循环每5分钟执行一次
  • 每日摘要每天00:00生成前一天的统计报告
  • 数据清理每次循环清理30天前的Ping记录

🔒 安全说明

访问控制

  • API密码保护:所有页面都需要通过 ?pass=API_PASS 验证
  • 密码文件:存储在 app/pass.php,权限设置为 600
  • 数据库保护Nginx配置禁止直接访问 .db 文件或者限制访问app路径需要basic认证

Token安全

  • Token缓存JWT Token缓存2小时减少登录次数
  • 自动刷新Token失效时自动重新登录
  • 缓存文件app/token.php,权限设置为 600

最佳实践

  1. 修改默认密码首次使用后立即修改API密码
  2. HTTPS生产环境务必使用HTTPS
  3. 防火墙限制访问IP范围
  4. 定期备份:定期备份数据库文件
  5. 日志审计:定期检查日志文件

常见问题

Q1: 页面显示"0台VPS"怎么办?

A:

  1. 点击"手动刷新VPS列表"按钮
  2. 检查配置是否正确特别是site_url不要包含路径
  3. 查看PHP错误日志tail -f /var/log/php/error.log

Q2: 监控服务无法启动?

A:

# 检查服务状态
sudo systemctl status idc_monitor

# 查看详细日志
journalctl -u idc_monitor -n 50

# 常见原因:
# 1. Python依赖未安装pip install -r requirements.txt
# 2. 数据库文件权限问题chown www-data:www-data app/db/*.db
# 3. 配置文件路径错误检查service文件中的WorkingDirectory

Q3: exec函数被禁用怎么办

A: 系统已经做了兼容处理:

  • 如果exec被禁用会显示友好提示
  • 需要手动执行安装脚本:sudo bash app/install.sh
  • 监控服务仍然可以正常运行

Q4: VPS状态显示"未知"

A: 可能原因:

  1. 数据库中还没有该VPS的记录
  2. 多次调用导致状态被覆盖(已修复)
  3. API返回异常

解决方法:

  • 手动刷新VPS列表
  • 检查日志确认API调用是否正常
  • 等待下一次监控循环

Q5: 如何添加新的VPS平台

A:

  1. app/monitor.py 中创建新的适配器类
  2. 继承 PlatformAdapter 基类
  3. 实现必要的方法login, get_vps_list, get_vps_status等
  4. load_configs_and_create_adapters() 中添加判断逻辑

示例:

class AliyunAdapter(PlatformAdapter):
    def login(self):
        # 实现阿里云登录逻辑
        pass
    
    def get_vps_list(self):
        # 实现获取VPS列表逻辑
        pass

Q6: 数据库文件在哪里?

A:

  • app/db/vps.db - 配置数据库
  • app/db/vpslist.db - VPS列表数据库
  • app/db/status.db - 监控状态数据库

可以使用SQLite工具查看

sqlite3 app/db/vpslist.db
.tables
SELECT * FROM vps_list;

Q7: 如何备份数据?

A:

# 备份所有数据库
cp app/db/*.db backup/$(date +%Y%m%d)/

# 或使用sqlite3导出
sqlite3 app/db/vpslist.db ".dump" > backup/vpslist.sql

📄 许可证

本项目采用 MIT 许可证 - 详见 LICENSE 文件


📧 联系方式


🙏 致谢

感谢以下开源项目:


如果这个项目对您有帮助请给个Star

Made with ❤️ by MasonLiu