灵刻 (Linker) 是一个现代化、轻量级、自托管的服务器状态监控面板。它通过一个优雅且信息丰富的界面,帮助您实时了解所有服务器的关键性能指标。
- 多层安全防护: 服务器级配置保护 + PHP入口守卫双重保障
- 敏感文件保护: 自动阻止直接访问配置文件、数据库文件等敏感资源
- 访问控制: 严格的访问权限控制,防止未授权访问
- 安全配置: 内置.htaccess配置,保护核心目录和文件
- 实时状态监控: 实时查看 CPU、内存、硬盘使用率、系统负载、网络速度等关键指标。
- 全球地图视图: 在交互式世界地图上直观地展示您的服务器节点分布和在线状态。
- 历史数据图表: 查看单个服务器过去24小时的性能历史图表,帮助分析趋势和问题。
- 深度节点洞察: 在详情面板中实时查看可用率、性能摘要、累计流量以及最近的故障记录。
- 掉线告警: 当服务器离线时,可通过 Telegram Bot 自动发送通知,并在恢复时收到提醒。
- 多数据库支持: 支持 SQLite, MySQL 和 PostgreSQL,安装过程简单灵活。
- 轻量级探针: 客户端探针是一个简单的 Bash 脚本,资源占用极低,兼容性强。
- 响应式设计: 在桌面和移动设备上均有良好的浏览体验。
- 后端: PHP (无需框架)
- 数据库: SQLite / MySQL / PostgreSQL
- 前端: Vanilla JavaScript (ES6), HTML5, CSS3 (无前端框架)
- Web 服务器 (Nginx, Apache 等)
- PHP >= 7.4
- PHP 扩展:
pdo,pdo_sqlite(如果使用 SQLite),pdo_mysql(如果使用 MySQL),pdo_pgsql(如果使用 PostgreSQL)。
-
下载代码: 将项目文件上传到您的网站目录,例如
/var/www/linker。 -
配置 Web 服务器: 将网站的运行目录指向项目根目录。以下是一个 Nginx 配置示例:
server { listen 80; server_name your-domain.com; root /var/www/linker; # 根目录保持项目根 index index.html index.php; # 【新增】保护敏感文件和目录 location ~ ^/(includes|data)/ { deny all; } location ~* \.(db|sh|md|txt)$ { deny all; } location ~ (config|db_update|check_status)\.php$ { deny all; } location / { try_files $uri $uri/ /index.php?$query_string; } location ~ \.php$ { # ... 您的 fastcgi_pass 配置保持不变 ... include snippets/fastcgi-php.conf; fastcgi_pass unix:/var/run/php/php7.4-fpm.sock; } }
Apache 用户: 项目已包含
.htaccess文件,会自动保护敏感文件和目录。 -
运行安装程序: 打开浏览器,访问
http://your-domain.com/setup.php。按照页面提示完成以下操作:- 设置站点名称。
- 选择并配置数据库(对于大多数轻量级应用,SQLite 是最简单的选择)。
- 创建您的管理员账户。
-
安全设置: 安装成功后,为了安全起见,请务必删除项目根目录下的
setup.php文件。您可以点击安装成功页面上的按钮自动删除,或手动删除。 -
验证安全配置: 安装完成后,请验证以下安全措施是否生效:
- 尝试访问
http://your-domain.com/includes/database.php- 应返回 403 错误 - 尝试访问
http://your-domain.com/data/linker.db- 应返回 403 错误 - 尝试访问
http://your-domain.com/config.php- 应返回 403 错误
- 尝试访问
在您需要被监控的每一台服务器上执行以下步骤:
-
登录后台添加服务器: 访问
http://your-domain.com/admin,登录后添加一台新服务器,记下自动生成的 服务器ID 和 密钥(Secret)。 -
配置探针脚本: 编辑
update.sh脚本,填入您的信息:# API端点,用于接收状态报告 API_ENDPOINT="http://your-domain.com/report.php" # 服务器的唯一ID (与管理员后台设置的ID匹配) SERVER_ID="your-server-id" # 修改为您在后台设置的ID # 每个服务器独立的密钥 (从管理员后台复制) SECRET="your-secret-key" # 修改为您在后台获取的密钥
-
运行探针: 为脚本添加执行权限,并使用
nohup或systemd等工具使其在后台持续运行。使用 nohup (简单方法):
chmod +x update.sh nohup ./update.sh &使用 systemd (推荐方法):
- 创建一个 service 文件:
sudo nano /etc/systemd/system/linker-agent.service - 填入以下内容 (请修改
ExecStart的路径为update.sh的实际路径):[Unit] Description=Linker Monitor Agent After=network.target [Service] Type=simple ExecStart=/path/to/your/update.sh Restart=always User=root # 或者其他有权限的用户 [Install] WantedBy=multi-user.target
- 启动并设置开机自启:
sudo systemctl daemon-reload sudo systemctl start linker-agent.service sudo systemctl enable linker-agent.service
- 创建一个 service 文件:
此步骤在监控面板所在的服务器上执行,用于检查服务器是否掉线并发送告警。
-
编辑您的 crontab:
crontab -e
-
添加以下一行,使其每分钟执行一次检查脚本:
* * * * * /usr/bin/php /var/www/linker/check_status.php > /dev/null 2>&1
请确保上面的 PHP 和脚本路径正确。
-
为了防止数据库无限增长,建议每天清理一次旧的监控数据(例如,只保留最近30天)。添加以下一行,使其每天凌晨3点执行:
0 3 * * * /usr/bin/php /var/www/linker/prune_data.php > /dev/null 2>&1
请确保上面的 PHP 和脚本路径正确。
项目已包含 .htaccess 文件,提供以下安全保护:
- 敏感文件保护: 阻止访问
config.php、db_update.php、check_status.php等敏感文件 - 目录保护: 阻止访问
includes/和data/目录 - 数据库文件保护: 阻止访问
.db、.sqlite等数据库文件 - 备份文件保护: 阻止访问
.bak、.backup、.old、.tmp等备份文件 - 日志文件保护: 阻止访问
.log、.txt等日志文件
如果您使用 Nginx,请在服务器配置中添加以下规则:
# 保护敏感文件和目录
location ~ ^/(includes|data)/ {
deny all;
}
location ~* \.(db|sh|md|txt)$ {
deny all;
}
location ~ (config|db_update|check_status)\.php$ {
deny all;
}系统已实现多层安全防护:
- 服务器级保护: 通过 Web 服务器配置直接拒绝访问敏感路径
- 应用级保护: 在所有被包含的 PHP 文件顶部添加入口守卫
- 命令行保护: 关键脚本(如
check_status.php、db_update.php)只允许通过命令行执行
- 在 Telegram 上向 @BotFather 创建一个新的机器人,获取 Token。
- 获取您的 Chat ID。
- 如果是私聊,可以向 @userinfobot 发送消息获取。
- 如果是频道,先将机器人设为管理员,然后将频道设为公开,发送一条消息,复制消息链接,链接中的
c/后面的数字即为 Chat ID,前面加上-100。
- 登录灵刻监控后台,在"通用设置"中填入您的 Bot Token 和 Chat ID。
- 问题: 访问
http://your-domain.com/admin时出现 403 错误 - 解决: 检查 Web 服务器配置,确保允许访问
admin/index.php
- 问题: 探针脚本无法向监控面板发送数据
- 解决:
- 检查
update.sh中的API_ENDPOINT是否正确 - 确认服务器 ID 和密钥是否匹配
- 检查防火墙设置
- 检查
- 问题: 安装时提示数据库连接失败
- 解决:
- 检查数据库配置信息是否正确
- 确认数据库服务是否运行
- 检查 PHP 扩展是否已安装(pdo_sqlite、pdo_mysql、pdo_pgsql)
- 问题: 如何确认安全配置是否生效
- 解决: 尝试访问以下 URL,应返回 403 错误:
http://your-domain.com/includes/database.phphttp://your-domain.com/data/linker.dbhttp://your-domain.com/config.php
- Apache:
/var/log/apache2/error.log - Nginx:
/var/log/nginx/error.log - PHP: 检查
php.ini中的log_errors设置
本项目基于 MIT License 开源。