一份 igngbbs_top.sql 与不丢一人的数据搬家

虽然年初我们已经用上了自研的展示站群,但玩家平时发帖交流的论坛还一直挂在 2025 年搭的那套笨重的 WordPress 上。每次看到用户在两套系统之间来回切账号,我就浑身难受。

到了 2026 年 3 月底,我终于腾出手来把最后这块硬骨头啃了下来。3 月 26 日那天,我先把旧 WordPress 数据库完整导出成一份 igngbbs_top.sql,然后专门写了一个 Python 迁移脚本 wp-migrate.py,把老论坛里的用户账号、邮箱、注册时间和历史帖子清洗干净后,一条不落地导入了全新的 Prisma MySQL 数据库里。老用户甚至不需要重新注册,就能直接在新系统里找回自己的身份。

从零手搓的 IGNG账户系统

为了不再让各个子站各管各的账号,我用 Next.js + Prisma 先把统一的身份底座——IGNG账户系统 搭了起来:

  • OAuth2 授权码单点登录:自己实现了标准的 OAuth2 授权跳转流程,只要在账户中心登一次,跳去论坛或其他子站就能自动认出身份;
  • 防刷与发信闭环:注册和敏感操作接入了 Cloudflare Turnstile 无感人机验证,配合自建的 SMTP 邮件服务 发送 6 位数字验证码,彻底告别了以前依靠第三方插件发信的不稳定。

新版 IGNGbbs 的几个得意小设计

同一天上线的自研版 IGNGbbs 采用了双数据库连接架构(一边连公共账户库认人,一边连论坛业务库读写帖子),在阅读和排版体验上我也塞了不少自己的小心思:

  • 黄金比例卡片:首页的帖子流卡片长宽比和内边距全部按黄金比例调校过,看久了眼睛不累;
  • 正文块级蓝色光点追踪(Block-level tracking):这是我写得最开心的一个前端交互——当你上下滚动阅读长文章时,文章左侧边缘会有一颗柔和的蓝色小光点,自动随着你的视线吸附到当前正在读的那一段(Paragraph / Block)旁边,读到哪儿亮到哪儿;
  • “纯人工 / AI 辅助”创作声明标签:那阵子 AI 生成内容越来越多,我干脆在发帖编辑器里加了一个显眼的创作声明开关,作者可以坦诚标出这篇文章是“纯人工手写”还是“有 AI 辅助润色”,既尊重原创,也不用大家猜来猜去。