我把上千份纸质文档搬进了本地文档中心:Paperless-ngx 家庭档案数字化实战
家里那堆纸质文档,一直是我的一块心病。发票、…
家里那堆纸质文档,一直是我的一块心病。发票、合同、孩子的疫苗本、各种保修卡、水电缴费单……攒了十几年,堆在抽屉里,找一张要翻半天,还怕哪天受潮发霉直接报废。
之前我也试过用手机拍、用网盘存,结果就是越存越乱——文件名全是一串乱码,想搜个“2023年的电费单”根本无从下手。后来我琢磨明白了:数字化不是把纸变成图片,而是把纸变成“能被搜到的数据”。于是就有了这个项目——用 Paperless-ngx 把家里上千份纸质文档,全部收进一个能全文搜索、能自动分类、还能异地备份的本地文档中心。
一、为什么是 Paperless-ngx,而不是云盘
先说结论,我挑文档管理工具的标准就三条:本地优先、能 OCR 中文、能全文搜索。市面上的云笔记、云网盘,要么文档进了别人家服务器,要么 OCR 中文效果稀烂,要么搜索要充会员。
Paperless-ngx 是开源社区里最成熟的一款“文档管理系统”(DMS),前身是 Paperless 和 Paperless-ng,后来合并重写成了现在的 ngx 版本。它干的事情说白了就一件:你把文档丢进去,它自动 OCR、自动归类、自动打标签,然后你随时能搜出来。
- 纯本地部署,文档和索引都在你自己的服务器/NAS 上,隐私自己说了算。
- 内置 OCR 引擎,装个中文语言包就能准确识别简体中文。
- 全文搜索支持中文、支持模糊匹配,搜“电费”能把所有相关单据捞出来。
- 自带一个还算顺眼的 Web 界面,手机电脑都能访问。
- 支持“消费文件夹”(consume folder):文件放进目录就自动归档,这个特性后面会大用。
二、部署环境长什么样
我家里有一台常年开机的小主机,跑着 Proxmox VE,上面开了一个 Ubuntu 的 LXC 容器专门装 Docker。如果你家里有台 NAS(群晖、威联通都行),或者有台装了 Linux 的旧电脑,都能照搬这套。实在没有,一台年付几美元的 VPS 也能跑,只是文档属于敏感数据,我更建议放家里。
先确认 Docker 和 Docker Compose 装好了,跑一下版本:
docker --version
docker compose version
三、一条命令把文档中心拉起来
新建一个目录,把下面的 docker-compose.yml 存进去。这是 Paperless-ngx 官方推荐配置的精简版,我改了几个关键参数:
services:
paperless:
image: ghcr.io/paperless-ngx/paperless-ngx:latest
restart: unless-stopped
ports:
- "8000:8000"
volumes:
- ./data:/usr/src/paperless/data
- ./media:/usr/src/paperless/media
- ./export:/usr/src/paperless/export
- ./consume:/usr/src/paperless/consume
environment:
PAPERLESS_TIME_ZONE: Asia/Shanghai
PAPERLESS_OCR_LANGUAGE: chi_sim
PAPERLESS_SECRET_KEY: change-me-to-a-long-random-string
PAPERLESS_CONSUMER_POLLING: 5
几个环境变量是关键,别照抄:
PAPERLESS_OCR_LANGUAGE: chi_sim指定 OCR 用简体中文,不然默认只认英文,识别中文全是乱码。PAPERLESS_SECRET_KEY一定要换成你自己的随机字符串,可以用openssl rand -base64 32生成。PAPERLESS_CONSUMER_POLLING: 5让它每 5 秒扫一次消费文件夹,文件一进来就自动处理。
然后启动:
docker compose up -d
第一次启动要下载镜像,体积不小,等它拉完。完成后浏览器打开 http://你的服务器IP:8000,第一次会让你创建一个管理员账号,建好就能用了。
四、扫描件和手机拍照,怎么喂进去
Paperless-ngx 的核心理念是“丢进去就不管”。最省事的方式,是往 consume 那个目录里塞文件,它自动就会识别、OCR、归档。我平时有三种来源:
- 扫描仪/一体机:大部分家用打印机都支持“扫描到网络文件夹”,直接指到 NAS 上挂载的这个 consume 目录,扫完自动进库。
- 手机拍照:手机装个文件同步工具,把拍好的 PDF 丢进同一目录。
- 邮箱附件:很多账单都是邮件发的 PDF,配合
PAPERLESS_CONSUME_MAIL_*参数可以直接收邮件归档,这块我下篇再展开。
拿手机拍照举例,我用的是 Syncthing 在手机和服务器之间同步一个“待归档”文件夹。手机拍完照片,打开 Syncthing 一同步,服务器上的 consume 目录就多出几个文件,Paperless 5 秒内就会把它们吃进去。整个过程手机这边零操作。
五、用自动化给文档打标签
光能搜还不够,自动分类才是爽点。Paperless-ngx 有“对应关系”和“标签”机制,你可以设定:文件名或正文里出现“电费”“电力”的,自动打上“账单-水电”标签、归到“家庭账单”类别。时间久了,几千份文档自己就分门别类了。
如果你懒得在界面里一个个点,还可以直接读它导出的元数据。Paperless 每份文档都会在 export 目录生成一份带侧边栏的 PDF,正文和 OCR 文本都在里面。想用命令行验证 OCR 效果,一条命令就能看到识别出来的文字:
# 找一份已归档的 PDF,用 pdftotext 提取 OCR 文本
pdftotext media/documents/archive/2024/0000001.pdf - | head -20
如果这里输出的中文是通的,说明 OCR 语言包生效了;如果是空的或者乱码,回头检查 PAPERLESS_OCR_LANGUAGE 有没有写对。
六、备份:数据在手,才算真的落地
既然是家庭档案,光一份肯定不行。我的策略是“3-2-1”的老套路,用 rclone 把整个 Paperless 目录每晚加密同步到异地一份。核心就一行:
# 把 paperless 目录同步到远端(示例用 rclone 的远程名 backup)
rclone sync /srv/paperless backup:family-docs --progress
把这个丢进 crontab,设成每天凌晨跑一次,再配合 Paperless 自带的 document_exporter 定期导出可读 PDF,基本上就万无一失了。
七、踩过的坑,提前告诉你
- 中文 OCR 首次启动慢:chi_sim 语言包会在首次运行时下载,第一次识别会比较慢,之后会缓存,正常。
- 权限问题:consume 目录如果是 Syncthing 同步过来的,注意文件属主和容器里 Paperless 用户要一致,不然会出现“文件能看见但处理失败”的怪现象。
- 别用 root 目录挂载:用普通用户目录挂载 data/media,减少权限和备份的麻烦。
- 扫描件先别急着删原件:初期跑通流程、验证 OCR 没问题之前,纸质原件先留着,等稳定跑一个月再处理。
写在最后
这套文档中心跑了小半年,最大的感受不是“省了多少时间”,而是心里的踏实——合同发票不再是一堆找不到的纸,而是一搜就出来的数据。以前翻箱倒柜十分钟找不到的票据,现在输入关键词三秒钟搞定。
如果你家里也有一抽屉的纸质文档在吃灰,强烈建议周末花一个下午把这套搭起来。部署真的就一条 docker compose up -d,剩下的都是“丢进去”和“搜出来”的重复劳动,交给它自己跑就行了。
