威联通NAS一键部署AFFiNE:自建私有知识库与协作平台
最近在一次技术交流中,有群友询问如何在威联通 NAS 上部署 AFFiNE,用于搭建自托管的私有知识库和协作环境。实际体验后,我们发现该项目的实时同步协同、文档与白板之间无缝切换等特性非常实用。虽然它在商业软件领域或许不算顶尖,但从开源工具的角度来看,AFFiNE 确实表现亮眼。

AFFiNE 的定位独具特色,它并非仅局限于文字记录,而是将文档、白板、知识库和项目管理融合成一个整体,很适合用于个人知识整理、团队资料沉淀,甚至轻量级的工作协作。就在最近,官方还宣布接入了人工智能系统。

AFFiNE 需要配合数据库、缓存等组件来运行,因此采用 Docker Compose 进行部署是最合适的方式。威联通的 Container Station 原生支持 Compose 文件,只需准备好相关配置,就能在 NAS 上轻松完成部署。
AFFiNE 简介
AFFiNE 是一款开源的知识管理与协作平台,可以把它理解为一个融合了 Notion 文档能力和 Miro 白板自由度的生产力工具。无论是撰写笔记、整理资料、构建知识库,还是制定项目计划、梳理流程、头脑风暴和团队协作,它都能胜任。
与普通笔记软件不同,AFFiNE 支持文字、表格、看板、白板、关系链接等多种内容形式,能够将零散的信息统一集中管理。对于拥有 NAS 的用户来说,将 AFFiNE 部署在本地,就能利用设备长期在线、集中存储、便于备份的特点,搭建一个完全属于自己的私有知识库。
下列场景非常适合部署 AFFiNE:
期望拥有一套本地化的笔记与知识管理工具;希望将各类资料、项目计划、灵感记录整合到一处;注重数据隐私,想把数据保存在自己的 NAS 上;或者纯粹想体验一款开源、自托管的 Notion 类产品。对于这些用户而言,AFFiNE 绝对是一个值得尝试的好项目。
在威联通NAS上部署AFFiNE
本文以威联通 NAS 为例,完整记录 AFFiNE 的部署过程。
准备基础配置文件
官方示例配置文件仅包含 $schema 和 server.name 等最基础的设置项。通过 SSH 连接 NAS,执行以下命令:
mkdir -p /share/Container/affine/config
cd /share/Container/affine
cat > ./config/config.json <<'EOF'
{
"$schema": "https://github.com/toeverything/affine/releases/latest/download/config.schema.json",
"server": {
"name": "AFFiNE on QNAP NAS"
}
}
EOF

使用Docker Compose部署
为了简化操作,以下配置将数据库用户名、数据库名称和数据库密码统一设为 affine。如需自定义,请务必仔细核对并替换所有相关参数。
完整的部署配置如下:
name: affine
services:
affine:
image: ghcr.io/toeverything/affine:stable
container_name: affine_server
ports:
- "3010:3010"
depends_on:
redis:
condition: service_healthy
postgres:
condition: service_healthy
affine_migration:
condition: service_completed_successfully
volumes:
- /share/Container/affine/storage:/root/.affine/storage
- /share/Container/affine/config:/root/.affine/config
environment:
REDIS_SERVER_HOST: redis
DATABASE_URL: postgresql://affine:affine@postgres:5432/affine
AFFINE_INDEXER_ENABLED: "false"
restart: always
affine_migration:
image: ghcr.io/toeverything/affine:stable
container_name: affine_migration_job
command: ["sh", "-c", "node ./scripts/self-host-predeploy.js"]
volumes:
- /share/Container/affine/storage:/root/.affine/storage
- /share/Container/affine/config:/root/.affine/config
environment:
REDIS_SERVER_HOST: redis
DATABASE_URL: postgresql://affine:affine@postgres:5432/affine
AFFINE_INDEXER_ENABLED: "false"
depends_on:
postgres:
condition: service_healthy
redis:
condition: service_healthy
redis:
image: redis:latest
container_name: affine_redis
healthcheck:
test: ["CMD", "redis-cli", "--raw", "incr", "ping"]
interval: 10s
timeout: 5s
retries: 5
restart: always
postgres:
image: pgvector/pgvector:pg16
container_name: affine_postgres
volumes:
- /share/Container/affine/postgres:/var/lib/postgresql/data
environment:
POSTGRES_USER: affine
POSTGRES_PASSWORD: affine
POSTGRES_DB: affine
POSTGRES_INITDB_ARGS: "--data-checksums"
healthcheck:
test: ["CMD", "pg_isready", "-U", "affine", "-d", "affine"]
interval: 10s
timeout: 5s
retries: 5
restart: always
打开威联通的 Container Station,创建新的应用程序。

启动与配置AFFiNE
部署完成后,若容器运行状态与下图相似,请不必担心。affine_migration_job 并非持续运行的服务,它只负责在启动时初始化数据库并执行迁移,任务结束后便会自动退出,因此在 Container Station 中会显示为“已停止”。

在浏览器地址栏输入 NAS_IP:3010,即可看到初始化页面。

依次填写用户名、邮箱和密码,创建管理员账号。

确认后会自动跳转至后台管理界面。

在管理后台,可以进行用户管理、任务队列查看、存储设置、OAuth 登录配置以及 AI 功能配置等服务器端操作。例如下图的 AI 选项,就能用来设置 Copilot 插件,并接入 OpenAI、Gemini 等模型服务。

需要注意:若要通过外网或跨区域协作访问 AFFiNE,在配置好反向代理和域名后,需在后台填写外网访问域名(如下图第一个输入框)。第三个输入框用于指定允许访问的 Host,可根据个人需求填写多个。

要进入用户前台界面,需新开一个浏览器标签页,再次输入 NAS_IP:3010。

进入前台后,先将界面语言修改为简体中文。

虽然系统提示数据默认保存在浏览器中,但既然已经部署到 NAS,只需点击启用云服务,即可将数据存储到自托管服务器上。

之后的笔记撰写、白板绘图等功能,用户可自行探索使用。

结语
或许 AFFiNE 目前还不算完美,但其独特的设计思路和实用功能依然十分有趣。感谢阅读,本文完。