告别文件夹同步:用 igng_global_db 管住所有页面与访客统计

第一代 Node.js + 本地 Markdown 文件夹的方案刚跑了十来天,弊端就暴露出来了:5 个站点各自挂着目录同步,文件一多很容易搞混;而且因为没有数据库,我想在总站底部放一个“全站累计总字数”和“真实总浏览量”的实时统计,纯靠扫本地文件根本算不过来。

于是到了 2026 年 1 月 13 日,我一不做二不休,把总站、MC 站、Hist 站、Wiki 站和云推广站全部从 Node.js 重构成了 PHP 8 + MySQL 共享数据库架构(v2)。

我建了一个名叫 igng_global_db 的中心数据库,核心就三张表:

  • sites:登记各个子站点的基本信息和代号;
  • pages:存放所有站点的 Markdown 正文、标题和字数,靠 site_id 字段区分归属;
  • visit_logs:记录每一次页面访问,而且专门写了 User-Agent 识别逻辑,能自动把真实人类访客和 Google、Bing 等搜索引擎爬虫区分开统计。

界面做减法与自制 Python 页面上传器

在重构后端的同时,我也给前端界面做了一次“去浮夸化”的减法:

  • 总站 v2:撤掉了吃性能的 3D 宇宙星球,改成了清爽利落的 Bento 四宫格布局 + 胶囊按钮,信息一眼就能看全;
  • MC 站 v2:在首页加上了异步 Ping 接口,打开网页就能实时看到服务器当前的在线人数和延迟绿灯;
  • 专用上传工具:既然正文进了数据库,就不能再用 rclone 传文件了。我专门用 Python 写了一个带界面的《IGNG 网站页面上传器》(uploader.py),在本地选好写完的 Markdown 文件,一键就能解析入库、更新到对应的 site_id 下。

突发奇想的复古实验:纯 HTML 4.01 的 IGNG兼容站

在折腾 PHP 服务端渲染的那几天,我突然冒出了一个特别极客的念头:“现在的网页动不动就是几十兆的现代框架,如果有人拿二十年前的老古董电脑或者旧手机浏览器访问我们,会看到什么?”

说干就干,我专门开了一个名叫 IGNG兼容站 的特殊镜像站。在这个站里,我严禁自己使用任何现代 CSS3 特性和 ES6 脚本,严格按照二十年前的 HTML 4.01 + CSS 2.1 标准手写表格布局和内联样式,直接从 igng_global_db 读出纯文本内容输出。写完之后我专门找来古老的 Internet Explorer 6(IE6) 虚拟机测试——当看到那个带着经典蓝白边框的页面在 IE6 里毫秒级刷出来、排版分毫不差的时候,真是乐了好半天。