# 运维告警监控平台 完整维护手册
## 文档说明
1. 适用人员：服务器运维工程师
2. 技术栈：Nginx + PHP-FPM(原生PHP) + MariaDB
3. 项目两套体系：
   - 新版：`dashboard.php` + `/api/index.php` 带Session登录鉴权（安全正式环境使用）
   - 旧版兼容：所有`.html`静态面板 + `/oldapi/index.php` 无登录校验（历史页面专用，内网临时查看）
4. 数据库：`alert_mail_stat`
5. 登录用户表：`sys_user`

# 一、项目目录结构
```
/usr/share/nginx/html/
├─ login.php            # 新版登录页面（Session会话）
├─ logout.php           # 退出登录，销毁Session
├─ dashboard.php        # 新版监控首页（带登录校验、展示当前用户）
├─ gen.php              # 密码哈希生成工具，用完建议删除
├─ dashboard2.0.html    # 历史静态面板
├─ dashboard3.0.html
├─ dashboard4.0.html
├─ dashboard5.0.html
├─ api/
│  └─ index.php         # 新版接口，强制登录Session校验
├─ oldapi/
│  └─ index.php         # 旧页面专用接口，无登录限制
```

# 二、数据库维护操作
## 2.1 登录用户表建表语句
```sql
USE alert_mail_stat;
CREATE TABLE IF NOT EXISTS sys_user (
    id INT PRIMARY KEY AUTO_INCREMENT COMMENT '自增主键',
    username VARCHAR(32) NOT NULL UNIQUE COMMENT '登录账号',
    password VARCHAR(72) NOT NULL COMMENT 'BCrypt加密密码',
    role ENUM('admin','read') NOT NULL DEFAULT 'read' COMMENT '权限 admin管理员/read只读',
    last_login DATETIME NULL COMMENT '最后登录时间',
    create_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='平台登录用户表';
```

## 2.2 用户账号管理SQL
### 初始化管理员账号
账号：admin 密码：Admin@2026
```sql
INSERT INTO sys_user (username, password, role)
VALUES ('admin', '$2y$10$0/620vN3sCKVUfejEmZj3O/gS11T2QKCea3d07RkTpojKom9K8zye', 'admin');
```

### 查询所有账号
```sql
SELECT id,username,role,last_login,create_at FROM sys_user;
```

### 重置账号密码
1. 访问 `gen.php` 生成新哈希；
2. 执行SQL替换哈希串：
```sql
UPDATE sys_user 
SET password='新生成的完整哈希字符串' 
WHERE username='admin';
```

### 新增只读账号
```sql
INSERT INTO sys_user (username,password,role) VALUES ('guest','哈希串','read');
```

### 删除账号
```sql
DELETE FROM sys_user WHERE username='guest';
```

## 2.3 业务数据表说明
`alert_log`：告警记录表，存储所有触发/恢复告警
字段核心用途：
- alert_type=1 触发告警；alert_type=2 恢复告警
- receive_time 告警接收时间，统计默认按当日日期筛选
- instance 实例名称、alert_name 告警名称、severity 告警级别

## 2.4 数据库备份&恢复
### 备份全库
```bash
mysqldump -uroot -hp93000 alert_mail_stat > /data/backup/alert_$(date +%Y%m%d).sql
```
### 恢复库
```bash
mysql -uroot -hp93000 alert_mail_stat < 备份文件.sql
```

# 三、Nginx服务维护
## 3.1 完整可用站点配置
```nginx
server {
    listen 80;
    server_name localhost;
    root /usr/share/nginx/html;
    index index.html index.htm index.php;

    location ~ \.php$ {
        fastcgi_pass php:9000;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }

    location / {
        try_files $uri $uri/;
    }
    location /api/ {
        try_files $uri $uri/;
    }
    location /oldapi/ {
        try_files $uri $uri/;
    }
}
```

## 3.2 Nginx常用运维命令
```bash
# 校验配置语法
nginx -t
# 重载配置（不中断业务）
nginx -s reload
# 查看访问日志
tail -f /var/log/nginx/access.log
# 查看错误日志（接口500、404、PHP下载源码排查）
tail -f /var/log/nginx/error.log
```

## 3.3 常见Nginx故障
1. 访问php文件直接下载源码
   原因：缺少全局`.php`正则解析块，复制上方完整配置重载即可；
2. 接口401未登录
   新版页面必须走`dashboard.php`登录生成Session；旧html页面使用`oldapi`接口；
3. 页面空白/500报错
   查看nginx error日志 + php-fpm日志定位SQL、语法错误。

# 四、PHP服务维护
## 4.1 Session会话说明
1. 登录后Session存储PHP默认会话目录，记录用户ID、账号、权限、登录时间；
2. 会话超时：30分钟无操作自动登出；
3. 连续输错密码5次锁定5分钟，IP隔离锁定。

## 4.2 密码哈希工具 gen.php
```php
<?php
$rawPwd = "Admin@2026";
$hash = password_hash($rawPwd, PASSWORD_DEFAULT);
echo "明文密码：".$rawPwd."<br>";
echo "加密哈希：".$hash."<br>";
var_dump(password_verify($rawPwd, $hash));
?>
```
使用规范：密码修改完成后删除该文件，防止泄露。

## 4.3 PHP常见故障处理
1. 数据库连接失败
   核对文件内 `$dbHost/$dbUser/$dbPass/$dbName` 数据库账号密码；
2. 登录提示账号密码错误
   - 用gen.php重新生成哈希更新数据库；
   - 确认输入密码大小写、英文符号；
3. 接口无数据/统计为0
   复制接口act参数，单独执行对应SQL核对数据库当日数据；
4. CSV导出下载失败
   检查PHP输出缓冲区代码，关闭前端缓存拦截。

# 五、两套接口区分&使用规范
## 5.1 /api/index.php（正式新版接口）
- 鉴权：强制校验PHP Session，未登录返回401；
- 使用者：`dashboard.php`；
- 安全：线上、公网环境唯一推荐使用；
- 禁止：旧静态html直接调用此接口。

## 5.2 /oldapi/index.php（兼容历史页面）
- 鉴权：无任何登录校验，直接返回数据；
- 使用者：所有`.html`历史静态面板；
- 安全规范：仅内网办公网段访问，禁止对公网开放；
- 改造方式：页面顶部api地址修改为 `/oldapi` 即可恢复数据。

# 六、页面访问使用规范
## 6.1 正式安全访问流程（推荐）
1. 访问 `http://服务器IP/login.php`
2. 输入账号密码登录，自动跳转 `dashboard.php`
3. 页面展示：今日告警统计、TOP10图表、未恢复告警列表、全量告警明细
4. 右上角：显示当前登录用户、权限、退出按钮；点击退出销毁Session回到登录页

## 6.2 历史静态页面访问流程（兼容）
1. 直接访问 `dashboard5.0.html` 等静态文件，无需登录；
2. 页面JS接口地址指向 `/oldapi/index.php`；
3. 限制：仅内网查看，无权限隔离，多人可直接查看全部数据。

# 七、日常运维巡检清单（每日）
1. Nginx进程运行状态，error日志无大量500/404报错；
2. PHP-FPM进程无崩溃、无超时报错；
3. MariaDB服务正常，数据库可正常连接；
4. 告警数据正常入库，页面统计数值与数据库一致；
5. 登录功能正常，无频繁密码校验失败；
6. CSV导出功能可正常下载报表；
7. 磁盘空间充足，日志定时清理避免占满磁盘。

# 八、故障快速排查流程
## 场景1：页面打不开/404
1. 核对访问路径文件名；
2. 检查Nginx站点根目录配置；
3. 查看nginx access日志确认请求是否到达服务器。

## 场景2：页面空白、接口500错误
1. 查看nginx error.log；
2. 复制报错行给到AI修复PHP语法、SQL错误；
3. 核对数据库账号密码、表名是否正确。

## 场景3：登录一直提示账号密码错误
1. 执行gen.php生成对应明文的哈希；
2. UPDATE更新数据库sys_user表password字段；
3. 无痕浏览器重试，清除IP登录锁定Session。

## 场景4：旧html页面无数据
1. 确认页面JS接口地址为 `/oldapi`；
2. 直接浏览器访问 `http://IP/oldapi/index.php?act=day_total` 看是否返回JSON；
3. 无返回则检查oldapi目录权限、PHP解析配置。

## 场景5：新版dashboard.php接口401
1. 必须从login.php登录生成Session；
2. 清除浏览器缓存，无痕窗口重新登录；
3. 确认api/index.php头部session_start()鉴权代码存在。

# 九、版本更新&上线维护规范
1. 文件更新：直接覆盖对应php/html文件，无需编译；
2. 更新后执行 `nginx -s reload` 重载配置；
3. 数据库变更：提前备份库，执行SQL后核对表结构；
4. 上线验证顺序：登录页面 → 新版dashboard → 旧html面板 → 导出功能；
5. 回滚方案：保留旧文件备份，出现异常直接覆盖回退。

# 十、安全运维规范
1. 公网环境仅开放新版`login.php/dashboard.php/api`，禁止暴露oldapi无鉴权接口；
2. 定期修改admin管理员密码，使用复杂度高密码（大小写+数字+特殊符号）；
3. gen.php工具使用完成立即删除，避免密码哈希泄露；
4. 限制服务器访问IP，Nginx配置网段白名单；
5. 定期备份alert_mail_stat数据库，保留7天以上备份文件；
6. 不要将数据库账号密码明文暴露在前端静态html中；
7. 长期不用的只读账号及时删除，最小权限管理。