自托管服务
amruthpillai/reactive-resume avatar
amruthpillai/reactive-resume

Reactive Resume 评测:自托管简历工具,PDF 生成已彻底移入浏览器端

Reactive Resume 是一个自托管的简历生成器,具有可编辑布局、PDF 导出、导入工具和注重隐私的本地控制。

42,957 个 Star4,748 个 ForkTypeScriptMIT

秒懂

它是什么?
Reactive Resume 是一个 MIT 许可的简历构建器,支持自托管、多模板与多格式导出。本文基于其 README 与发布记录,分析它的机制、部署方式与适用边界。
适合谁用?
适合需要完全掌控简历数据的人,比如对隐私敏感的自由职业者、拒绝把简历存进商业 SaaS 的求职者,以及想给团队提供内部简历工具的开发者。不适合只想快速生成一份 PDF、不愿碰 Docker 或 PostgreSQL 的普通用户,官方托管版虽然存在,但 README 没有给出它的数据保留承诺。
能商用吗?
可以。MIT 是宽松许可证:你可以使用、修改并销售基于它的软件,只需保留版权和许可证声明。
还在维护吗?
在维护。仓库最近一次提交在 3 天前。
用什么语言写的?
主要是 TypeScript(依据 GitHub 的语言统计)。

以上回答依据项目的 GitHub 数据(最近同步于 2026年9月15日)和我们的分析,不构成法律意见。

开源项目深度解析

它解决的是简历数据的归属问题

大多数在线简历编辑器把用户输入的内容存在别人的服务器上,导出 PDF 时还要经过云端渲染。Reactive Resume 的定位很直接:把整个应用搬到你自己的机器上,数据留在本地。README 明确写了基本使用不需要账号,想更多控制就跑自己的实例。这个项目的目标用户是那些不愿意把简历这种敏感文档交给第三方平台的人,以及需要为团队提供统一简历工具的内部运维者。它不是一个面向所有人的产品,而是一个把控制权放在第一位的工具。

v5.1.0 之后 PDF 生成不再依赖外部服务

早期版本的 Reactive Resume 需要 Browserless 或 Chromium 来打印 PDF,这给自托管增加了不少运维负担。从 v5.1.0 开始,PDF 生成完全通过 @react-pdf/renderer 在客户端完成。README 特别指出,新的部署不再需要 Browserless、Chromium 或任何外部打印服务,PRINTER_* 和 BROWSERLESS_* 环境变量已经不再被读取,可以从 .env 里删除。这是一个实质性的架构变化,意味着导出 PDF 时数据不会离开浏览器,也少了一个可能出故障的中间环节。对自托管用户来说,这降低了部署复杂度,也减少了隐私泄露的路径。

数据流与存储结构

整个应用的技术栈在 README 里有明确列出:前端是 TanStack Start(React 19 加 Vite),后端是 Node.js 和 TypeScript。数据持久化依赖 PostgreSQL 加 Drizzle ORM,API 层用 ORPC 做类型安全 RPC,认证走 Better Auth。文件上传是可选的,用 SeaweedFS 提供 S3 兼容存储。这意味着如果你只存简历文本,不传图片或附件,可以只跑 PostgreSQL。用户数据、简历内容、模板配置都存在数据库里,导出时前端把数据交给 @react-pdf/renderer 渲染成 PDF。这个架构比传统的服务端打印方案更简单,但前提是你的浏览器需要承担渲染工作。

部署步骤与配置要点

最快的方式是克隆仓库后直接启动 Docker Compose。README 给出的命令是 git clone --depth=1 加 docker compose up -d,然后访问 localhost:3000。镜像可以从 Docker Hub 或 GitHub Container Registry 拉取,标签都是 latest。完整的自托管指南在 docs.rxresu.me 的 self-hosting/docker 页面。如果你是从旧版本升级,需要留意 v5.1.0 的变更,把不再使用的 PRINTER_* 和 BROWSERLESS_* 变量从环境配置里删掉。PostgreSQL 是硬依赖,SeaweedFS 才是可选的,这一点在规划存储时要注意。

模板与导出格式的边界

Reactive Resume 提供 15 个模板,名字都是宝可梦风格,比如 Azurill、Gengar、Pikachu。支持 A4 和 Letter 两种页面尺寸,颜色、字体、间距都可以自定义,还有结构化样式规则来控制段落和文字的排版。导出格式有 PDF、JSON、DOCX 三种。但这里有一个需要自己验证的地方:15 个模板在两种纸张尺寸下的分页效果是否都令人满意,README 没有给出任何截图或对比。模板数量不算多,如果你对版式有非常具体的要求,可能找不到完全匹配的选项。自定义样式规则能缓解这个问题,但需要花时间熟悉它的写法。

导入与 AI 功能的实际价值

项目支持从 JSON Resume 格式导入,这对已经用其他工具维护过简历的人来说是条省事的路。AI 集成支持 OpenAI、Google Gemini 和 Anthropic Claude,但 README 只说有这项功能,没有说明它能做什么,是帮你润色文字还是生成新内容,材料里没有细节。如果你指望 AI 能自动排版或优化模板,目前看不到这样的承诺。多语言支持有,共享简历用唯一链接,还有暗色模式和 passkey 加两步验证。这些功能的方向是对的,但 AI 部分的具体能力需要去文档里进一步确认,README 的表述比较含糊。

许可证与维护成本

项目使用 MIT 许可证,这意味着你可以自由修改、商用、再分发,只要保留版权声明。README 强调没有追踪、没有广告、没有隐藏成本,赞助商承担托管和维护费用。维护节奏从最近的发布记录看是正常的,v5.2.9、v5.2.8、v5.2.7 分别在八月的不同日期发布,间隔大约一周到十天。升级成本主要来自两点:一是 PostgreSQL 数据库需要备份和迁移,二是前端框架是 TanStack Start,这个相对较新的框架如果遇到问题,社区资料可能不如老牌框架丰富。整体来说,MIT 许可加活跃的发布节奏,对自托管用户是友好的。

与云端简历服务的本质区别

像 Canva 或传统在线简历编辑器,核心模式是用户把数据交给平台,平台负责渲染和存储,用户换平台时数据迁移往往很麻烦。Reactive Resume 走的是相反的路:数据存在你自己的 PostgreSQL 里,导出 PDF 在浏览器端完成,换服务器时只要导出 JSON 再导入新实例。这个差异不是功能多少的问题,而是数据控制权的归属问题。代价是你必须自己维护数据库和升级,没有平台帮你处理备份和故障恢复。如果你不在乎数据存在哪里,云端服务可能更省心;如果你在意,Reactive Resume 的架构设计确实把数据边界划得很清楚。

编辑结论

适合需要完全掌控简历数据的人,比如对隐私敏感的自由职业者、拒绝把简历存进商业 SaaS 的求职者,以及想给团队提供内部简历工具的开发者。不适合只想快速生成一份 PDF、不愿碰 Docker 或 PostgreSQL 的普通用户,官方托管版虽然存在,但 README 没有给出它的数据保留承诺。部署前先确认两件事:一是你的服务器能否稳定运行 PostgreSQL,二是你需要的模板在 A4 和 Letter 两种纸张下的分页效果是否都能接受。如果接受这些前提,Reactive Resume 是目前少数把 PDF 导出完全放在浏览器端的自托管简历方案,这一点在 v5.1.0 之后已经不需要任何外部打印服务。

官方来源

  1. Official documentation
  2. Official README
  3. Project repository
  4. Release notes
社区笔记

社区笔记