返回 AI 资讯
技术社区CNode

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

最近打开 CNode 的同学可能已经发现,网站和之前不太一样了。 没错,我们把运行多年的老站迁到了新的 CNode Next 。 这不是一次简单的页面改版。Web、API、数据库和部署方式都换成了新的实现,不过我们尽量保留了大家熟悉的账号、话题、回复、收藏、消息和 API 使用方式。 为什么要迁移 旧版 CNode 基于 nodeclub,使用 Express、MongoDB 和 EJS,从 2013 年前后一直运行到现在。 它很稳定,也承载了社区多年的内容,但代码和依赖确实已经比较老了。继续在原来的基础上修补,…

内容摘要

最近打开 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 的代码换新了,但社区还是原来的社区。感谢大家这些年的使用、讨论和内容积累,也欢迎继续帮我们把新站打磨得更好。

资讯来源

CNode

原文链接

打开原文