# LTM_Monitor_Website **Repository Path**: xiaopengyouGU/LTM_Monitor_Website ## Basic Information - **Project Name**: LTM_Monitor_Website - **Description**: 这是LTM_Monitor监控调试软件的项目介绍的前端实现。 - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 1 - **Created**: 2026-09-17 - **Last Updated**: 2026-10-09 ## Categories & Tags **Categories**: Uncategorized **Tags**: CSS, HTML ## README # LTM_Monitor_Website [LTM_Monitor](https://gitee.com/xiaopengyouGU/LTM_Monitor)(基于 Qt 6 的监控调试上位机)的项目主页与下载跳转站点。 - 线上地址:(闽ICP备2026039032号) - 纯静态单页,CSS / JS 全部内联,不依赖任何外部资源 - 下载按钮跳转 Gitee Release,安装包不占用服务器带宽 - 界面截图:桌面版 + 900px 手机版各一套,浏览器按屏幕宽度自动选择 ## 目录结构 | 路径 | 说明 | |---|---| | `index.html` | 整站单页(含右下角「本次更新纪要」控件) | | `assets/img/` | 界面截图,桌面版 4 张 + 手机版 4 张(WebP) | | `favicon.ico` / `favicon-32.png` | 浏览器标签页图标,取自软件仓库 `src/ui_widgets/main_window/images/icon.ico`(32×32) | | `robots.txt` | 爬虫声明:放行搜索引擎,屏蔽 AI 训练与 SEO 采集类 | | `tools/optimize_images.py` | 截图压缩脚本,换图后重跑 | | `server/counter.py` | 访问量统计服务(Python 标准库,无依赖) | | `server/ltm-counter.service` | 统计服务 systemd 单元 | | `deploy/nginx.conf` | nginx 站点配置 | | `deploy/setup.sh` | 服务器端部署脚本(幂等,含自检) | | `deploy/update.ps1` | 本地一键更新:上传 + 部署 | ## 本地预览 浏览器直接打开 `index.html`。 ## 更新流程 改完内容后,在 PowerShell 里运行: ```powershell .\deploy\update.ps1 ``` 它会上传仓库到服务器、执行 `deploy/setup.sh`(同步站点文件、重载 nginx、重启统计服务并自检)。 换截图时先跑一次压缩脚本,它会同时产出桌面版和手机版: ```powershell python tools\optimize_images.py ``` ## 开启 HTTPS 前提:`www.ltm-monitor.com` 的 A 记录已指向本站服务器,且 80/443 对公网开放(大陆服务器需备案通过后才不被拦截)。 ```bash ssh root@www.ltm-monitor.com "LTM_ACME_EMAIL=你的邮箱 bash /root/LTM_Monitor_Website/deploy/enable-https.sh" ``` 脚本会安装 certbot、签发 Let's Encrypt 证书、配置 nginx 把 HTTP 跳转到 HTTPS,并启用 `certbot.timer` 自动续期(每天检查两次,到期前 30 天自动续,续完自动重载 nginx)。想连裸域一起签,加参数:`LTM_DOMAINS="www.ltm-monitor.com ltm-monitor.com"`。 > 注意:certbot 会直接改写服务器上的 nginx 配置。`deploy/setup.sh` 检测到配置里已有 443 时会跳过覆盖,以免把证书配置冲掉;确实需要重新同步基础配置时,先删掉服务器上的 `/etc/nginx/sites-available/ltm-monitor` 再跑。 ## 访问量 页脚数据来自 `/api/count`:PV 每次加载计一次,UV 用一年期 Cookie 按天去重。 ```powershell ssh root@www.ltm-monitor.com "curl -s http://127.0.0.1/api/stats" ``` 原始日志在 `/var/log/nginx/ltm-monitor.access.log`,需要图表的话可以装 goaccess 生成报表。 ## 服务器安全 SSH 端口已经在阿里云安全组限制为只允许自己的 IP 访问;服务器上再叠一层 fail2ban:**10 分钟内密码失败 5 次,封禁该 IP 10 分钟**。 **80 / 443 必须对 `0.0.0.0/0` 开放**——这两个端口是给所有人看的。如果连它们也按来源 IP 限制,会同时坏两件事: - 站点只有你自己的网络能打开,别人(含分享卡片的抓取方)访问不到; - Let's Encrypt 的多点验证连不上,`certbot renew --dry-run` 间歇失败,表现为 `Timeout during connect (likely firewall problem)`。 配置在 `deploy/fail2ban-sshd.local`,服务器上位于 `/etc/fail2ban/jail.d/ltm-sshd.local`。**故意不写公网 IP 白名单**——出口 IP 会变,硬编码白名单等于留下过期的信任,改安全组更直接。 ```bash # 查看封禁情况 ssh root@www.ltm-monitor.com "fail2ban-client status sshd" # 解封某个 IP ssh root@www.ltm-monitor.com "fail2ban-client set sshd unbanip 1.2.3.4" # 换新服务器时安装 scp deploy/fail2ban-sshd.local root@www.ltm-monitor.com:/etc/fail2ban/jail.d/ ssh root@www.ltm-monitor.com "apt-get install -y fail2ban && systemctl restart fail2ban" ``` > 注意:把密码连错 5 次会把自己也封 10 分钟(所以尽量用密钥登录)。被封时 SSH 进不去,只能等自动解封,或从阿里云控制台的 VNC 登录处理。 另外两项服务器侧改动: - **Docker 已停用**(站点用不到容器,2 GB 内存的机器上省一点)。软件包和配置都保留着,需要时 `systemctl enable --now docker` 就能恢复。注意停用后 iptables 里 docker 的几条链会留到下次重启,属于残留空链,不影响。 - **SSH 的 X11Forwarding 已关闭**,配置在 `deploy/sshd-hardening.conf`,服务器上位于 `/etc/ssh/sshd_config.d/99-ltm-hardening.conf`,改完 `sshd -t && systemctl reload ssh` 生效。 仍在待办:SSH 密码登录尚未关闭(`PasswordAuthentication yes`),系统有 10 个待更新包且挂着 libc6 的重启标记。 ## 防爬虫与限速 静态站出口只有 3 Mbps,被采集或扫描跑满时正常访客就打不开页面,所以做了三层: | 层 | 手段 | 位置 | |---|---|---| | 约定 | `robots.txt`:允许搜索引擎收录,禁止 AI 训练类(GPTBot / ClaudeBot / Bytespider / CCBot 等)与商业 SEO 爬虫(AhrefsBot / SemrushBot 等),并禁止抓取 `/api/` | 站点根目录 | | 限速 | nginx 按来源 IP 限速:页面 30 次/分、静态资源 120 次/分、计数接口 30 次/分,超限返回 429;静态资源另外限制单 IP 并发 16 | `deploy/nginx-limits.conf` + `deploy/nginx.conf` | | 封禁 | fail2ban 的 `nginx-limit-req` 规则:5 分钟内触发 10 次限速,封该 IP 30 分钟 | `deploy/fail2ban-nginx.conf` | 参数都在 `deploy/` 里,改完重跑 `deploy/update.ps1` 即可。 > `robots.txt` 只对守规矩的爬虫有效——百度和 Google 会遵守,字节的 Bytespider 经常不理。所以真正兜底的是限速那一层:它不区分对方是谁,只看请求频率。 ## 说明 - **命名约定**:对外展示一律用 `LTM-Monitor`(横杠,与域名 ltm-monitor.com 一致);仓库名、代码标识、文件名保持 `LTM_Monitor`(下划线,代码风格)。页面上除链接地址与文件名外,展示位都用横杠版。 - 站点部署在阿里云 ECS(Ubuntu 22.04 + nginx),站点目录 `/var/www/ltm-monitor` - 安装包一律走 Gitee,**不要**放到这台服务器上:3 Mbps 的出口会被单个下载占满 - 绑自定义域名访问 80/443 需要先完成 ICP 备案