家里各种发票、合同、收据、说明书堆了一抽屉,每次要找某份文件,得翻半天。上回要给车险续保,翻去年的保单翻出一身汗——夹在去年的装修合同和家电说明书中间,硬是找了一刻钟才翻出来。
我当时就想,这些纸质文件总不能一直这么堆着。拍照存手机吧,拍完找起来也麻烦,几百张照片混在一起,分不清哪张是哪张。存网盘倒是能分类,但搜的时候基本只能靠文件名,发票上的日期、金额、合同编号这些关键信息搜不了。
后来我在 NAS 上折腾了一套叫 Paperless-ngx 的文档管理系统,GitHub 上 4.4 万+星,免费开源,完全自托管。把家里的发票、合同、收据、说明书全扔进去,OCR 自动识别文字,搜关键词一秒出结果。用了大半年,体验比想象中好得多,今天就跟大伙儿聊聊怎么搭。
这玩意儿能干什么
Paperless-ngx 说白了就是一个文档归档系统。扫描件或照片传进去,自动做几件事:
- OCR 识别:自动把图片里的文字识别出来,打印体识别很稳,扫描仪扫的、手机拍的都能认。发票上的金额、日期、合同编号,扫进去就变成可搜索的文字
- 自动归类:根据规则给文档打标签、分配对应方、设定文档类型。新来的水电费账单自动归到「家庭账单」类别,不用手动分
- 全文搜索:OCR 之后,搜「空调」能找到所有空调发票、说明书、保修卡,不光是文件名,文档里的文字全都能搜到
- 多用户支持:家里几个人各用各的账号,我的合同不会和家人的文件混在一起
支持的格式也很全,PDF、JPEG、PNG、TIFF 这些常见格式都行,邮箱里收到的电子发票、账单附件,也能通过邮件规则自动抓进来。前端还有个简洁的阅读界面,在浏览器里就能浏览所有文档,跟翻相册似的。
部署之前要准备什么
我是在飞牛 NAS 上跑的,群晖、威联通、绿联、极空间这些主流 NAS 操作大同小异,只要是支持 Docker 的 NAS 都能搞——自己装的 PVE、ESXi 里跑个 Docker 虚拟机也行。
资源方面,Paperless-ngx 全家桶(含 OCR 和数据库)大概要占 1 到 2GB 内存,建议 NAS 有 4GB 以上内存再跑,不然 OCR 处理时可能会卡。我这台 NAS 配了 8GB 内存,跑起来很稳。
存储方面,我单独挂了一个卷给文档库,大概划了 500GB。文档本身不占多少空间,但 OCR 后的索引数据和数据库会随时间增长,留足余量比较省心。
动手部署:docker-compose 一把梭
官方推荐用 Docker Compose 统一管理,把 Paperless-ngx、PostgreSQL 数据库、缓存服务三个容器一起跑起来,重启、升级都方便。
在 NAS 上新建一个目录,比如 docker/paperless-ngx,在里面创建 docker-compose.yml:
services:
broker:
image: valkey/valkey:9-alpine
restart: unless-stopped
volumes:
- ./redisdata:/data
db:
image: postgres:18
restart: unless-stopped
volumes:
- ./pgdata:/var/lib/postgresql
environment:
POSTGRES_DB: paperless
POSTGRES_USER: paperless
POSTGRES_PASSWORD: YourStrongPassword123
webserver:
image: ghcr.io/paperless-ngx/paperless-ngx:latest
restart: unless-stopped
depends_on:
- db
- broker
ports:
- 8010:8000
volumes:
- ./data:/usr/src/paperless/data
- ./media:/usr/src/paperless/media
- ./export:/usr/src/paperless/export
- ./consume:/usr/src/paperless/consume
environment:
PAPERLESS_REDIS: redis://broker:6379
PAPERLESS_DBHOST: db
PAPERLESS_DBUSER: paperless
PAPERLESS_DBPASS: YourStrongPassword123
PAPERLESS_DBNAME: paperless
PAPERLESS_URL: http://<你的 NAS 内网 IP>:8010
PAPERLESS_TIME_ZONE: Asia/Shanghai
PAPERLESS_OCR_LANGUAGES: chi-sim
PAPERLESS_OCR_LANGUAGE: chi_sim+eng
PAPERLESS_SECRET_KEY: 这里填一段随机字符串
USERMAP_UID: 1000
USERMAP_GID: 1000几个关键点说明一下:
- 端口:我把容器内的 8000 端口映射到宿主机的 8010,避免和 NAS 管理端口冲突。如果 8010 被占用了,改成别的就行
- 中文 OCR:容器默认只带英文、德文等几种语言包,
PAPERLESS_OCR_LANGUAGES: chi-sim是让容器启动时自动装上简体中文语言包,这行千万不能漏,漏了中文识别会直接报错。PAPERLESS_OCR_LANGUAGE: chi_sim+eng表示识别时中文简体+英文一起用,发票上有中文金额也有英文缩写,两样都得识别 - 访问地址:
PAPERLESS_URL里的<你的 NAS 内网 IP>要换成实际地址,比如http://192.168.1.100:8010 - 密钥:
PAPERLESS_SECRET_KEY随便生成一段随机字符串就行,我用的是openssl rand -base64 32生成的 - UID/GID:
USERMAP_UID: 1000和USERMAP_GID: 1000,这个要改成自己 NAS 上实际用户的 ID(执行id -u、id -g查看),不然文件权限会出问题 - 消费目录:
consume目录是「投递口」,文档丢进去 Paperless 就会自动处理 - 镜像拉取慢:如果
ghcr.io拉取太慢,把镜像换成 Docker Hub 的paperlessngx/paperless-ngx:latest即可
然后执行:
docker compose up -d启动完成后,浏览器打开 http://<你的 NAS 内网 IP>:8010(尖括号里换成你 NAS 的实际内网地址),进入初始化页面。
创建管理员账号
首次访问会看到初始化页面,要求创建一个管理员用户。设好用户名和密码后登录,进入主界面——一个干净清爽的文档列表页,左侧是筛选栏,右侧是文档卡片流。

日常使用配置
登录后第一件事,我建议把下面几项配好。
消费目录:前面 docker-compose 里配了 consume 目录,把纸质文件扫描成 PDF 或图片,丢到这个目录里,Paperless 就会自动消费、OCR、归类。我一般用手机扫描 App 直接传到这里。
文档类型:在「设置」 → 「文档类型」里创建常用的类型,比如:发票、合同、收据、说明书、保修卡、证件、保单、账单。每个类型可以设置匹配规则,比如文件名包含「发票」就自动归类为「发票」。

对应方:在「设置」 → 「对应方」里添加经常打交道的机构,比如:国家电网、中国移动、小米、物业公司、保险公司。对应方也能设自动匹配规则。

标签:标签比文档类型更灵活,可以给一篇文档打多个标签。我建了这些标签:重要、已过期、待处理、电子版、纸质版已销毁。这样搜索时能快速筛选。

工作流:这是最核心的自动化功能。在「设置」 → 「工作流」里,可以设置条件-动作规则(新版本叫工作流,老教程里叫消费规则)。比如:
- 文件名含「发票」 → 文档类型设为「发票」,标签添加「需要报销」
- 对应方是「国家电网」 → 文档类型设为「账单」,对应方设为「国家电网」
- 文件名含「说明书」 → 文档类型设为「说明书」,标签添加「归档」
工作流写好后,新的文档进来会自动匹配,不需要手动分类。

手机扫描:告别手动翻找
桌面端处理完,现在说说手机端怎么配合。我手机装的是 SwiftScan(iOS 和 Android 都有),扫描效果比相机直接拍好很多,自动切边、增强对比度,出来的 PDF 清晰度足够 OCR 识别。手机没装扫描 App 的话,相机自带的文档模式也能凑合用。
扫描流程很简单:打开 App → 拍文件 → 自动切边增强 → 保存 PDF → 通过 WebDAV 传到 NAS 的 consume 目录(SwiftScan 支持 WebDAV、FTP 这些协议,直接在 App 里填 NAS 的地址和账号就行)。Paperless 检测到新文件进来,自动开始 OCR 处理,几十秒后就能在网页端搜到了。

我的日常流程:收到快递 → 拆包 → 发票/保修卡拍照扫描 → 传进 NAS → Paperless 自动 OCR 归档 → 纸质件进文件夹。半年下来,我那个塞满文件的抽屉基本空了,重要纸质件都收进文件袋,需要时直接搜 NAS 就行。
搜文档有多快
上个月空调坏了,要找保修卡和购买发票。以前得翻那个抽屉,找到发票,看日期看保修期。现在登录 Paperless,搜索框输入「空调」,半秒不到,2022 年买空调的京东发票、说明书、保修卡全出来了,甚至发票上的金额「¥4599」也在搜索结果里高亮显示——因为 OCR 把发票上的所有文字都索引了。

搜「保险」能把所有车险、家财险、人身险的保单全列出来;搜「小米」能找到所有小米产品的购买记录和说明书;搜「合同」能找到这几年签过的租房合同、装修合同、宽带合同。现在要找任何一张纸,登录 NAS 搜一下就出来了,那个抽屉已经很久没打开过了。
进阶玩法
用顺手之后,我还搞了几个进阶配置:
邮件导入:Paperless 支持配置邮件规则,自动抓取邮箱里的电子发票和账单附件。我在设置里配了 QQ 邮箱的 IMAP,设了一个规则:来自「10000」(电信客服号)的邮件,附件自动归档为「话费账单」。现在每个月话费账单到手,邮箱收到 PDF,Paperless 自动抓取归档,全程不用我动手。

备份策略:Paperless 的数据分几块——data 目录存的是索引和配置,media 目录是原始文档,数据库在 PostgreSQL 里,不能直接复制文件,得先导出来。我用 NAS 的定时任务,每天凌晨自动把 data、media 目录打包,再执行 docker compose exec db pg_dump -U paperless paperless > paperless.sql 把数据库导出一份,一起存到备份盘,并定期往另一块硬盘同步一份。文档这种东西,丢了就真找不回来了,备份多一份总没错。
权限管理:多用户场景下,文档默认只对上传它的账号可见,想共享就在文档上点「共享」,把家里的公共文档(水电账单、物业通知)分享给家人账号。每个用户的查看、修改、删除权限都能单独控制,防止误删。

资源占用情况
跑了大半年,我观察到的资源占用:
- 空闲状态:Paperless + PostgreSQL + 缓存三个容器加起来约 600MB 内存
- OCR 处理时:内存会飙到 1.5GB 左右,OCR 完成后回落
- 磁盘空间:300 多份文档(含发票、合同、说明书、扫描件),占用约 2.5GB(含 OCR 索引和数据库)
- CPU:OCR 处理时 CPU 会短暂跑满,但平时几乎不占
所以只要 NAS 有 4GB 以上内存,跑起来完全没问题。我这台 NAS 8GB 内存,日常跑着好几个容器,Paperless 开着 OCR 也不影响其他服务。
从抽屉翻得满头大汗,到浏览器里一秒搜到,这中间差的只是一个文档管理系统。而且免费开源,没有订阅费,数据全在自己 NAS 上,不用担心隐私泄露——OCR 识别也是本地完成的,文档不会上传到任何第三方服务器。
家里的纸质文件只会越来越多,早一天建好文档库,以后就少翻一天抽屉。点个关注不迷路 👆
你的 NAS 上跑了哪些自托管服务?有没有试过 Paperless-ngx 或者其他文档管理方案?评论区聊聊,看看谁家的文档库最全 👇
夜雨聆风