Papermerge 安装教程:Docker 部署从零开始,让扫描件支持全文搜索
2026/8/22 12:12:52 网站建设 项目流程

Papermerge 安装教程:Docker 部署从零开始,让扫描件支持全文搜索

【免费下载链接】papermergeOpen Source Document Management System for Digital Archives (Scanned Documents)项目地址: https://gitcode.com/gh_mirrors/pa/papermerge

Papermerge 是面向扫描文档的开源文档管理系统(DMS):上传后它会自动对 PDF、TIFF 和图片文件做 OCR,把文字建成索引,支持全文搜索。这篇文章是一份 Papermerge 安装教程:从一台干净的机器开始,用 Docker 把整套服务跑起来,改掉默认 OCR 语言,再把一个文件夹的扫描件收进来。

部署完成后的效果是这样的:把一摞扫描 PDF 丢进去,几分钟后在搜索栏输入发票号或公司名的几个字,直接命中文档里的那一页。

部署前先搞懂 4 个容器的分工

看 docker/docker-compose.yml 里的四个角色,后面的排障全围绕它们展开:

  • app(容器名 papermerge_app):Web 服务,浏览器里 8000 端口打开的页面,负责登录、浏览、上传
  • worker(papermerge_worker):真正干 OCR 的后台任务进程,文档识别和索引全靠它;这个容器不跑,文档会一直卡在"待处理"
  • redis:两者之间的消息队列,app 提交任务、worker 领取任务
  • db(postgres_db):PostgreSQL 数据库,存文档索引、文件夹和标签结构

机器建议 4GB 内存(OCR 比较吃资源)、预留 20GB 左右存储。compose 文件直接引用官方现成镜像eugenci/papermerge:2.0.0eugenci/papermerge-worker:v2.0.0,不用自己构建;docker/ 下的两个 Dockerfile 只给想从源码构建的人看。

用仓库里的 compose 文件启动

先拉取代码并进入部署目录:

git clone https://gitcode.com/gh_mirrors/pa/papermerge cd papermerge/docker

仓库里数据库密码默认是dbpass,写在 db、app、worker 三个服务的环境变量里。临时试用可以不改;要长期用,就同时把这三处改成同一个强密码。

然后启动:

docker-compose up -d

这条命令会拉取 4 个镜像、创建容器和命名卷,在后台运行。过一两分钟后执行docker-compose ps,看到 4 个容器都是 Up 状态就说明启动完成了。

这里有个容易多此一举的细节:app 容器启动时会自动做数据库迁移并创建默认管理员账号,见 docker/app.startup.sh——它跑完migrate后执行 docker/scripts/create_user.py 创建admin用户。所以你不需要再手动执行 migrate 或 createsuperuser。

容器启动后先做的 3 件事

浏览器打开http://localhost:8000,接下来依次处理登录、OCR 语言和一个状态检查。

用 admin / admin 登录并改密码。默认账号由启动脚本创建,密码也是 admin,首次登录后必须改掉。万一以后忘了,可以用命令重置:

docker exec papermerge_app python3 manage.py changepassword admin

改 OCR 语言,这是最容易踩的坑。官方配置默认 OCR 语言是德语(docker/config/papermerge.config.py 里OCR_DEFAULT_LANGUAGE = "deu"),中文或英文文档识别出来不是空就是乱码。容器里的配置文件在/opt/etc/papermerge.conf.py,启动脚本只在文件不存在时才从默认值复制,所以可以直接编辑:

docker exec papermerge_app vi /opt/etc/papermerge.conf.py

改两处:

OCR_DEFAULT_LANGUAGE = "eng" OCR_LANGUAGES = { "eng": "English", "deu": "Deutsch", }

语言码是 ISO 639 三字母码,eng表示英语。改之前先确认容器里实际装了哪些语言包,只有列表里有的才可用:

docker exec papermerge_app tesseract --list-langs

改完执行docker-compose restart app worker让配置生效。不想容器重建后配置丢失的话,在 compose 的 app 服务 volumes 里把本地配置文件挂载到/opt/etc/papermerge.conf.py即可。

确认 worker 在跑。docker-compose ps里 worker 应为 Up,docker-compose logs worker无报错——它才是后面替你干活的角色。

把一个文件夹的扫描件收进来

网页上传最直接:登录后把 PDF 或图片拖进页面,上传的文档默认落在"Inbox"文件夹。

导入目录适合批量:在/opt/etc/papermerge.conf.py里设置IMPORTER_DIR(默认不设置,即关闭此功能),指向容器内一个目录,同时在 compose 的 worker 服务里把宿主机的扫描目录挂载到同一路径。文件拷贝进去、稳定 1 秒后(FILES_MIN_UNMODIFIED_DURATION默认 1 秒)就会被 worker 自动收进去 OCR 建索引;Linux 上走 inotify 监听,不轮询。扫描器输出到网络目录的场景走这条路最省事。

邮箱附件:在配置文件填 IMAP 账号(IMPORT_MAIL_HOST等,默认不设置即关闭),Papermerge 会定期从指定邮箱拉附件入库。完整配置项说明见 papermerge.conf.py.example。

上传后可以在文档详情页看 worker 的处理进度。想快速验证效果,可以先拿仓库自带的示例 PDF 试试,位置在 example_data/,里面是按语言分好的多页文档。

文档归位:文件夹、标签与搜索

落到 Inbox 的文档要归位,靠两个维度:文件夹按年份、按类型(发票、合同、报告)建多级目录,把文档拖进去;标签给文档或文件夹打颜色标记,适合"待处理""已归档"这类横向状态。

量上来以后主要靠全文搜索:输入几个字,命中的是 OCR 提取的文档内文字,这是它和普通网盘的本质区别。example_data 里的示例文档都是多页的,适合顺手试一次跨页搜索。

出问题时按 现象 → 原因 → 处理 自查

现象常见原因处理
8000 端口打不开页面app 容器没起来,或端口被占用docker-compose ps看容器状态;把 compose 里端口映射左边换成别的端口
文档一直停在待处理worker 没在运行docker-compose restart worker,再看docker-compose logs worker找报错
OCR 后搜索不到内容语言包缺失或语言码不匹配tesseract --list-langs核对已装语言包,把配置改成列表里存在的码
忘了登录密码用前面changepassword命令重置
要迁移或备份数据分布在两个命名卷见下方两条导出命令

备份要带走两样:文档原文件和 OCR 结果在media_root卷,数据库在postgres_data7卷。

docker exec postgres_db pg_dump -U dbuser dbname > db_backup.sql

这条把整个数据库导出成一个 SQL 文件。

docker run --rm --volumes-from papermerge_app -v "$PWD/backup":/out alpine tar czf /out/media.tar.gz -C /opt/media .

这条把 app 容器里的 media 目录打包,输出到宿主机当前目录的backup/下。恢复时反过来挂回去、导入 SQL 即可。


现在就打开网页界面,在 Inbox 里拖进第一份你手头的真实扫描件,等 OCR 完成后用它内容里的一个词搜一下——搜到了,这套系统就算真正跑起来了。

【免费下载链接】papermergeOpen Source Document Management System for Digital Archives (Scanned Documents)项目地址: https://gitcode.com/gh_mirrors/pa/papermerge

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询