diff --git a/维护手册.txt b/维护手册.txt new file mode 100644 index 0000000..b0e2e62 --- /dev/null +++ b/维护手册.txt @@ -0,0 +1,242 @@ +# 运维告警监控平台 完整维护手册 +## 文档说明 +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 +"; +echo "加密哈希:".$hash."
"; +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. 长期不用的只读账号及时删除,最小权限管理。 \ No newline at end of file