news 2026/9/26 2:16:25

AFFiNE 自托管部署实战:开源 Notion 替代品的本地优先知识库搭建

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
AFFiNE 自托管部署实战:开源 Notion 替代品的本地优先知识库搭建

1. 为什么大家都在找 Notion 的替代品

1.1 从一次团队协作翻车说起

去年我帮一个十来人的小团队做知识库迁移,原本用的是 Notion。刚开始大家都觉得挺香,页面嵌套、数据库视图、看板切换,几乎什么都能塞进去。但用了半年问题就来了:免费版块数量限制、协作人数一超就得升级、国内访问偶尔抽风、导出 Markdown 之后格式全乱。最要命的是有一次团队想批量整理历史文档,发现数据锁在云端,想本地备份一份完整结构都费劲。

那次之后我就开始认真找替代方案。找了一圈发现,市面上打着"Notion 替代"旗号的产品不少,但真正能做到开源、可自托管、块级编辑、数据库视图这几样都齐活的,其实没几个。AFFiNE 是我用下来觉得最接近"下一代"这个定位的一个——它不是简单抄 Notion 的界面,而是把文档、白板、数据库三种形态揉在同一个空间里,而且核心代码开源,能自己部署。

这篇文章我不打算写成产品说明书,而是把我从选型、部署、实际用到踩坑的整个过程摊开讲。如果你也在纠结要不要从 Notion 迁出来,或者想给团队搭一套自己能掌控的知识库,下面的内容应该能帮你少走不少弯路。

1.2 先搞清楚:你要的到底是"替代"还是"补充"

很多人一上来就说"我要换掉 Notion",但实际需求可能只是"我想要一个能本地部署的文档工具"。这两个诉求差别很大。

Notion 的核心竞争力从来不是单一功能,而是块编辑器 + 数据库 + 协作 + 模板生态这一整套组合拳。你要替代它,就得想清楚自己最离不开哪一块:

  • 如果你主要用它的文档编辑和页面嵌套,那替代品只要块编辑器做得顺就行;
  • 如果你重度依赖数据库视图(表格、看板、日历、画廊),那替代品的数据库能力必须过硬;
  • 如果你还需要多人实时协作 + 权限管理,那自托管方案的部署复杂度会直接上一个台阶。

AFFiNE 的定位比较有意思,它把"文档"和"白板"放在同等重要的位置,数据库能力也在逐步补齐。所以它更适合那种既要写文档、又要画图梳理思路、还想把两者关联起来的场景。纯做表格管理的团队,用起来可能会觉得数据库这块还不够成熟。

提示:选型之前先列一张"我每周实际用到的功能清单",按使用频率排序,前五项才是你真正不能妥协的。剩下的都是锦上添花。

2. AFFiNE 到底是个什么东西

2.1 一句话说清它的核心形态

AFFiNE 可以理解成一个"文档 + 白板 + 数据库"三合一的本地优先工作空间。你打开一个页面,既可以在里面写富文本,也可以随时切到白板模式画流程图、贴便签、连线,还能建数据库表格做任务管理。这三种形态共享同一套底层数据模型,所以文档里的内容可以直接拖到白板上,白板上的卡片也能关联到数据库条目。

它和 Notion 最大的区别在于**本地优先(Local-first)**这个设计理念。简单说就是:你的数据首先存在本地,联网只是用来同步和协作。这意味着即使断网,你照样能编辑;即使官方服务挂了,你的数据也不会丢。对于我这种被云端服务坑过的人来说,这一点吸引力非常大。

2.2 开源这件事意味着什么

AFFiNE 的核心代码是开源的,你可以自己拉代码部署,也可以用它提供的托管服务。开源带来的实际好处有几个:

  • 数据自主:所有内容存在你自己的服务器或本地,不用担心服务商跑路或者突然改收费策略;
  • 可定制:界面、功能、集成方式都能按团队需求改;
  • 可审计:代码摆在那里,安全性自己能把控;
  • 社区生态:插件、模板、主题这些会慢慢长出来。

当然,开源也有代价。自托管意味着你得自己维护服务器、处理升级、备份数据。如果你团队里没有懂运维的人,这部分成本要提前算进去。

2.3 和 Notion 的功能对照

能力维度NotionAFFiNE
块编辑器成熟,生态丰富已具备,细节还在打磨
数据库视图表格/看板/日历/画廊齐全基础视图可用,高级视图逐步补齐
白板/画布无原生白板原生支持,与文档深度打通
本地优先否,强依赖云端是,本地存储 + 可选同步
自托管不支持支持
开源否是
协作成熟可用,实时性持续优化
模板生态极其丰富社区模板在增长

从这张表能看出来,AFFiNE 的差异化优势集中在白板融合和本地优先 + 开源这两点上。如果你恰好需要这两样,它就是很值得试的选择;如果你只想要一个和 Notion 一模一样的克隆,那可能会失望。

3. 自托管部署:从零搭一套自己的知识库

3.1 部署前的环境准备

我用的是一台 2 核 4G 的云服务器,系统是 Ubuntu 22.04。这个配置跑 AFFiNE 单实例够用,但如果团队人数超过 20 人,建议上 4 核 8G。

部署方式我推荐用 Docker Compose,原因是依赖组件比较多(数据库、缓存、对象存储),手动装容易漏。先确认服务器上装好了 Docker 和 Docker Compose:

docker --version docker compose version

如果没装,用官方脚本装一下就行。装完之后建一个工作目录,比如/opt/affine,后面所有配置都放这里。

3.2 核心配置文件怎么写

AFFiNE 的 Docker 部署需要一个 compose 文件,里面通常包含这几个服务:AFFiNE 主服务、PostgreSQL 数据库、Redis 缓存。下面是我实际用的精简版配置,去掉了不必要的注释:

services: affine: image: ghcr.io/toeverything/affine:stable container_name: affine restart: unless-stopped ports: - "3010:3010" environment: - AFFINE_CONFIG_PATH=/root/.affine/config - REDIS_SERVER_HOST=redis - DATABASE_URL=postgres://affine:affine@postgres:5432/affine volumes: - ./data/config:/root/.affine/config - ./data/storage:/root/.affine/storage depends_on: - postgres - redis postgres: image: postgres:16 container_name: affine-postgres restart: unless-stopped environment: - POSTGRES_USER=affine - POSTGRES_PASSWORD=affine - POSTGRES_DB=affine volumes: - ./data/postgres:/var/lib/postgresql/data redis: image: redis:7 container_name: affine-redis restart: unless-stopped volumes: - ./data/redis:/data

几个关键点解释一下:

  • 端口映射:主服务默认监听 3010,我映射到宿主机同一个端口,方便后面配反向代理;
  • 数据卷:config、storage、postgres、redis 四个目录都要挂出来,不然容器一删数据就没了;
  • 数据库连接串:格式是postgres://用户:密码@主机:端口/库名,这里的postgres是 compose 里的服务名,Docker 内部会自动解析;
  • 镜像标签:用stable比用latest稳,避免某天拉到一个半成品版本。

3.3 启动与首次访问

配置写好后,在目录里执行:

docker compose up -d

第一次启动会拉镜像,视网络情况可能要等几分钟。启动完成后用docker compose ps看一下三个容器是不是都处于 running 状态。然后浏览器访问http://你的服务器IP:3010,应该能看到注册页面。

第一次注册的账号会自动成为管理员。注册完之后建议立刻做两件事:一是进设置里把默认语言切成中文,二是配置一下备份策略。

注意:默认配置下没有开启邮件验证,注册接口是开放的。如果服务器暴露在公网,一定要在反向代理层加访问控制,或者部署完立刻关掉注册入口。

3.4 配一个域名和 HTTPS

直接用 IP + 端口访问体验很差,而且没有 HTTPS 浏览器会各种警告。我用 Nginx 做反向代理,配置大概是这样:

server { listen 443 ssl; server_name your-domain.com; ssl_certificate /path/to/cert.pem; ssl_certificate_key /path/to/key.pem; location / { proxy_pass http://127.0.0.1:3010; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; } }

最后两行是给 WebSocket 用的,AFFiNE 的实时协作依赖它,不加的话多人同时编辑会出问题。证书可以用 Let's Encrypt 免费申请,这里不展开。

4. 实际使用:文档、白板、数据库怎么配合

4.1 文档编辑的实操体验

AFFiNE 的编辑器交互和 Notion 很像,输入/唤出块菜单,支持标题、列表、代码块、引用、分割线这些基础块。我实际用下来,日常写文档完全够用,响应速度也不错。

几个我觉得比 Notion 顺手的地方:

  • 块拖拽更自由:可以直接把一段文字拖到白板区域变成卡片;
  • 双向链接:输入[[就能引用其他页面,反向链接面板会自动汇总;
  • 本地保存无延迟:断网状态下编辑,恢复网络后自动同步,不会像某些云端工具那样卡在"保存中"。

需要适应的地方也有:快捷键体系和 Notion 不完全一致,比如 Notion 里Cmd+Shift+7是有序列表,AFFiNE 里可能对应别的组合。建议花半小时把设置里的快捷键列表过一遍。

4.2 白板模式:这才是它的杀手锏

白板是我用 AFFiNE 最频繁的功能。举个实际场景:团队要做季度规划,我先建一个白板页面,左边贴"目标"便签,中间画流程箭头,右边放"负责人"卡片。然后把这个白板直接嵌到文档里,文档负责写详细说明,白板负责呈现全局。

白板支持的操作包括:

  • 自由绘制、形状、连线、文本、便签;
  • 从文档拖入内容块;
  • 框选多个元素成组;
  • 无限画布缩放。

我试过用它替代 Figma 做简单的流程图和架构草图,对于非设计岗的日常需求完全够用。复杂 UI 设计还是得回专业工具,但"画个思路图"这种场景,切来切去反而更累。

4.3 数据库视图的当前能力

数据库这块要客观说,AFFiNE 目前还不如 Notion 成熟。基础表格视图、看板视图能用,字段类型支持文本、数字、日期、单选、多选、人员这些。但像 Notion 那种复杂的公式字段、关联数据库、rollup 汇总,AFFiNE 还在逐步补齐。

我的用法是:把 AFFiNE 的数据库当轻量任务管理用,比如记录待办、跟踪内容排期。真正复杂的数据分析还是丢给专业工具。这样定位反而清晰,不会因为期待过高而失望。

数据库能力当前状态适用场景
表格视图可用任务清单、内容排期
看板视图可用流程管理、状态跟踪
字段类型基础齐全日常记录够用
公式字段部分支持简单计算
关联/汇总开发中暂不建议依赖

5. 踩过的坑和排查经验

5.1 容器启动后访问白屏

第一次部署完,浏览器打开是白屏,控制台报一堆资源加载失败。排查下来是反向代理没配 WebSocket,导致前端拿不到实时连接。加上前面 Nginx 配置里那两行 Upgrade 头就好了。

还有一种白屏是数据库没连上。用docker compose logs affine看日志,如果出现connection refused之类的报错,检查 postgres 容器是不是正常起来了,以及连接串里的密码和 postgres 服务里设的是否一致。

5.2 数据备份怎么做才靠谱

自托管最大的风险就是数据丢。我的备份策略是两层:

  • 第一层:每天凌晨用pg_dump导出 PostgreSQL 数据,存到另一个目录;
  • 第二层:每周把 storage 目录和数据库导出文件一起打包,同步到对象存储或另一台机器。

具体命令:

docker exec affine-postgres pg_dump -U affine affine > backup_$(date +%F).sql

恢复的时候反过来,先建库再导入。这个流程我实际演练过一次,能完整恢复,心里才踏实。

5.3 常见问题速查表

现象可能原因处理方式
白屏WebSocket 未代理检查 Nginx Upgrade 头
登录后一直转圈数据库连接失败看日志,核对连接串
多人编辑冲突Redis 未启动确认 redis 容器状态
上传图片失败storage 目录权限检查挂载目录读写权限
升级后打不开数据库迁移未完成看日志等待迁移,勿中途重启
内存占用飙升容器未限制资源compose 里加 mem_limit

5.4 升级的正确姿势

开源项目迭代快,升级是常事。我的做法是:

  1. 先备份数据库和 storage;
  2. 拉新镜像docker compose pull;
  3. 停旧容器docker compose down;
  4. 起新容器docker compose up -d;
  5. 盯日志看数据库迁移是否完成。

注意:跨大版本升级前一定先看官方 release notes,有些版本会改数据表结构,迁移不可逆。生产环境建议先在测试机跑一遍。

6. 它适合谁,不适合谁

6.1 推荐尝试的几类人

  • 注重数据自主的团队:不想把核心知识库放在别人服务器上;
  • 需要文档 + 白板联动的人:产品、设计、研发梳理思路时特别顺手;
  • 有运维能力的小团队:能自己维护 Docker 服务,享受开源带来的自由度;
  • 想研究本地优先架构的开发者:代码开源,是很好的学习样本。

6.2 暂时不建议入坑的情况

  • 团队完全没有技术运维:自托管的维护成本会变成负担;
  • 重度依赖复杂数据库公式:这块能力还没补齐;
  • 需要极其成熟的模板生态:Notion 的模板库短期内难以被超越;
  • 对实时协作稳定性要求极高:大规模并发场景还在优化中。

6.3 我的迁移策略

我没有一刀切全迁,而是新项目用 AFFiNE,老项目留在 Notion。等 AFFiNE 的数据库能力再成熟一些,再逐步把历史内容导过来。导出的时候用 Markdown 格式,虽然格式会有损失,但核心文字内容能保住。

这个渐进式迁移的好处是:既能享受新工具的优势,又不会因为一次性迁移出问题而影响正常工作。踩坑的成本被控制在可接受范围内。

7. 几个提升效率的小技巧

用了一段时间,攒了几个比较实用的小习惯,分享出来。

第一个是善用白板做"入口页"。我把团队所有重要文档的链接都贴在一张白板上,按项目分区,新人进来一眼就能看到全貌。比传统的目录页直观得多。

第二个是给数据库字段起名要克制。字段一多,表格就变得难维护。我现在的原则是:能用一个字段表达的,绝不拆成两个。

第三个是定期清理 storage 目录。删除的页面附件不会自动从磁盘清掉,时间长了会占空间。我一般每季度手动检查一次。

第四个是善用双向链接做知识网络。写文档时随手[[引用相关页面,时间长了会自动形成一张关系网,找东西比搜索还快。

最后再分享一个小技巧:AFFiNE 的快捷键可以在设置里自定义,我把最常用的几个改成了和 Notion 一致的组合,迁移过来几乎零学习成本。这个细节虽然小,但对天天用的人来说,能省下不少适应时间。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/26 2:16:19

小猪CMS多区域修复版:PHP电商系统二次开发与部署实战

简介:这套小猪CMS微电商系统多区域版本,是基于最新版程序二次开发并修复而得的全国运营版,面向需要搭建微商城或区域性电商平台的开发者与运营者,重点解决多区域分站管理、功能扩展与已发现问题修复后的稳定运行需求。压缩包共200…

作者头像 李华
网站建设 2026/9/26 2:15:44

集装箱缺陷检测数据集详解:VOC/YOLO双格式与YOLOv8训练避坑

简介:面向集装箱表面缺陷检测任务,这份数据集包含1476张真实场景图片,覆盖Deframe、Dent、Hole、Rusty、Scratch五类常见缺陷,共计4227个矩形标注框。所有图片已使用labelImg工具完成Pascal VOC与YOLO两种格式的标注,可…

作者头像 李华
网站建设 2026/9/26 2:15:26

Vue3+SpringBoot接入DeepSeek:症状自查与结构化电子病历生成实战

简介:这是一套基于 Vue 与 SpringBoot 构建的智慧医院就诊系统完整毕业设计资源包,面向医疗信息化方向的高校学生、Java 全栈开发者及医院信息系统技术人员。系统覆盖预约挂号、智能问诊、医生工作台、科室排班、患者服务、系统日志与权限管理等核心模块…

作者头像 李华
网站建设 2026/9/26 2:13:52

物业人员星级考核方案与激励机制

本方案旨在通过科学合理的绩效考核,评估物业人员的工作表现及其对公司贡献,帮助公司做出员工晋升和薪资调整等人事决策。该考核方案的核心任务是推动公司绩效的持续改进,并通过合理的价值认定激励员工,提升其工作积极性与热情。方案适用于公司部门经理级以下的所有员工,考…

作者头像 李华
网站建设 2026/9/26 2:13:46

技术部经理绩效考核指标量表与技术创新

技术部经理绩效考核指标量表对其工作表现进行了全面细致的考核,涵盖了工程质量、成本控制、合同履约、部门协作等多方面的内容。考核的核心在于通过具体的KPI指标,确保经理能够在多个领域达到预定的工作标准,从而有效推动部门目标的实现。每个指标的权重和目标值明确,既能反…

作者头像 李华
网站建设 2026/9/26 2:13:41

家谱电子化实战:JavaScript + C# 前后端协作与数据模型设计

简介:本资源为基于JavaScript与C#的FamilyTree家谱电子化项目设计源码,面向需要完成家族族谱数字化管理系统的开发者与课程设计学习者,尤其适合具备一定前后端基础、希望参考完整工程结构的中高级人员。项目通过JavaScript负责前端交互与页面…

作者头像 李华