跳到主要内容
CNode

CNode 换新了:老站已经迁移到 CNode Next

置顶精华分享
Tthonatos发布于 3 小时前
0390
本页目录

最近打开 CNode 的同学可能已经发现,网站和之前不太一样了。

没错,我们把运行多年的老站迁到了新的 CNode Next

这不是一次简单的页面改版。Web、API、数据库和部署方式都换成了新的实现,不过我们尽量保留了大家熟悉的账号、话题、回复、收藏、消息和 API 使用方式。

为什么要迁移

旧版 CNode 基于 nodeclub,使用 Express、MongoDB 和 EJS,从 2013 年前后一直运行到现在。

它很稳定,也承载了社区多年的内容,但代码和依赖确实已经比较老了。继续在原来的基础上修补,新功能、安全治理和日常维护都会越来越困难。

之前也有过一次基于 Egg.js 的迁移尝试,不过没有完整上线。这次我们没有继续补中间版本,而是重新梳理业务行为,直接做了一个新的实现。

现在用了什么

新站是一个 TypeScript monorepo,主要包括:

  • React Router SSR Web
  • Hono API
  • PostgreSQL
  • Redis
  • Drizzle ORM
  • Tailwind CSS 与 shadcn/ui
  • Docker Compose 和 GHCR 镜像部署

简单来说,浏览器访问 SSR Web,Web 和浏览器分别调用 API,业务数据进入 PostgreSQL,session、缓存和限流等状态交给 Redis。

这些变化对普通用户不需要额外操作,但对后续维护、新功能开发和问题排查会友好很多。

数据也迁过去了

这次同时把数据从 MongoDB 迁到了 PostgreSQL,包括:

  • 用户
  • 话题
  • 回复
  • 收藏
  • 消息
  • 回复点赞

迁移过程会先建立新旧 ID 的对应关系,再按依赖顺序导入数据,最后进行数量对账和功能检查。

因为旧站使用 MongoDB ObjectId,新站使用 PostgreSQL 整数 ID,一些带旧 ObjectId 的历史链接可能无法继续访问。这是目前已知的一项兼容差异。

账号登录、GitHub OAuth、话题回复、收藏、消息和主要 API v1 行为都做了兼容处理,但这么多年的历史数据里难免存在一些特殊情况。

如果你发现自己的账号或内容不对,请告诉我们。

页面也重新做了

新站没有逐像素复刻旧版,而是重新整理了页面结构和交互,主要希望改善:

  • 移动端浏览
  • Markdown 阅读和编辑
  • 用户主页
  • 招聘专区
  • 后台管理
  • 键盘操作和无障碍体验
  • 加载、错误和提交状态提示

站点的 favicon、分享预览和搜索引擎元数据最近也重新补齐了。现在分享话题时,会输出对应的 Open Graph、Twitter Card、canonical URL 和 JSON-LD。

导航栏中的经典 CNode 字标没有替换,新图标主要用于 favicon、manifest 和分享图片。

API 尽量保持兼容

CNode 有不少第三方客户端和脚本依赖 API v1,因此新 API 仍然保留主要的响应结构和 access token 使用方式。

不过这是一次完整重写,不敢保证所有边缘行为都和旧站完全一致。如果你的客户端在迁移后出现问题,欢迎带上请求路径、响应状态和可复现步骤反馈。

请不要在公开 issue 中粘贴 access token、cookie 或其他敏感信息。

发布方式也变了

现在每次发布会先在 CI 中完成 lint、类型检查、测试、构建和密钥扫描,再生成带 commit SHA 的 API/Web 镜像。

生产服务器只负责拉取指定镜像并启动服务,不会在服务器上临时构建。每次发布也会保留上一版镜像,方便出现问题时快速回滚。

数据库迁移不会跟着普通发布自动执行,避免一次日常部署意外修改生产数据。

还需要大家帮忙找问题

迁移已经完成,但这并不代表所有问题都已经被发现。

如果你遇到下面这些情况,欢迎反馈:

  • 无法登录或账号信息不正确
  • 话题、回复、收藏或消息缺失
  • Markdown 内容显示异常
  • 旧链接无法访问
  • API 响应和之前不一致
  • 移动端布局问题
  • 页面报错、加载失败或操作无响应
  • 分享卡片、头像或图片显示异常

项目仓库:

https://github.com/cnodejs/cnode-next

可以直接在 GitHub 提交 issue,也可以在社区里回复这篇话题。

CNode 的代码换新了,但社区还是原来的社区。感谢大家这些年的使用、讨论和内容积累,也欢迎继续帮我们把新站打磨得更好。

查看回复

回复 (0)

暂无回复,成为第一个参与讨论的人。

参与回复

登录后即可参与回复。登录