2026 年 Paperless-ngx VPS 推荐:内存、存储与安装指南
适合 Paperless-ngx 的 VPS,需要有足够内存承受 OCR 峰值,也要有足够磁盘保存原始扫描件和处理后的副本。Paperless-ngx 通过 OCR、标签和浏览器界面,把文档整理成可搜索的档案。VPS 能在家用电脑关机后继续提供访问,你也可以自行决定部署位置和访问权限。
先用一批有代表性的文件进行测量。简短的文字 PDF 与高分辨率的百页扫描件,对 CPU、内存和存储的要求差别很大。OCR 并发量与文档数量同样重要。备份还需要在服务器之外单独预留容量。
本文对比六家 VPS 服务商,解释内存与存储规划,并按照官方 PostgreSQL Docker Compose 方案安装。内容还包括 OCR 配置、自动导入和加密恢复流程,帮助你选择能长期承担运维成本的配置。
价格与技术资料核实于 2026 年 10 月 29 日。当时确认的最新稳定版本为 Paperless-ngx 3.3.4。以下是公开产品目录参考,并非购买记录或 OCR 性能实测。下单前请确认地区、库存、税费及最终总价。
Paperless-ngx VPS 推荐:快速对比
推荐套餐面向日常 OCR,内存约为 4GB 或更高。更便宜的入门档单独说明;CPU 数量本身并不能证明 OCR 速度。
| 服务商 | 推荐套餐 | vCPU | 内存 | 内置存储 | 存储扩容 | 已核实月费 | 适用场景 |
|---|---|---|---|---|---|---|---|
| LightNode | Agency Linux | 2 | 4GB | 50GB NVMe | 额外云盘;控制台询价 | 页面参考价 $14.70 | 灵活按小时托管 |
| Hetzner | CPX22,需确认库存 | 2 | 4GB | 80GB NVMe | 附加存储卷 | 请查询当前价格 | 确认报价后的欧盟部署 |
| DigitalOcean | Basic Regular 4GiB | 2 | 4GiB | 80GiB SSD | 附加存储卷 | $24 | 参考文档完成首次部署 |
| Vultr | vc2-2c-4gb | 2 | 4GB | 80GB SSD | 地区性 Block Storage | 基础地区 $20 | 按地区选择 VPS |
| Akamai Cloud / Linode | Linode 4GB | 2 | 4GB | 80GB SSD | Block Storage;确认地区报价 | 基础地区 $24 | 通用托管 |
| Contabo | Cloud VPS 4 | 4 | 8GB | 100GB SSD | 更大套餐;核实附加产品兼容性 | 请查询当前价格 | 更大的资源配置 |
Paperless-ngx 是什么?
Paperless-ngx 是开源的自托管文档管理系统。它可以导入文件、提取文字、按需进行 OCR,并提供全文搜索。标签、往来单位、文档类型和匹配规则可以组织收据、发票与信件。Web 界面还支持权限管理和自动分类。
文档保存在你管理的存储上,因此磁盘管理、访问控制和恢复也是日常运维的一部分。它可以与 Immich 照片库配合使用,但文档原件、元数据和可搜索的衍生文件需要单独制定保留策略。
Paperless-ngx 服务器要求
CPU 与内存需求
官方安装指南支持较低配置硬件,并向大多数用户推荐 Docker,但没有给出一套能保证所有 OCR 负载的 VPS 规格。请分别考虑 Linux/Docker、应用、PostgreSQL、消息代理和 OCR 临时任务的资源。可选的文档转换服务还会额外消耗内存。
推荐 VPS 配置
以下是包含系统与核心容器的编辑性起步估算,不是官方最低配置,也不是性能保证。存储数值针对较小的初始部署;后文的文档库容量计算可能要求更大的空间。
| 工作负载 | vCPU | 内存 | 初始 SSD 容量预算 | OCR 起步设置 |
|---|---|---|---|---|
| 个人小型文档库 | 2 | 2GB | 30GB | 一个任务进程、一个 OCR 线程;谨慎测试 |
| 日常 OCR | 2 | 4GB | 50GB | 从 1 × 1 开始,观察峰值 |
| 频繁扫描、小型办公室 | 4 | 8GB | 100GB | 评估 1 × 2 或 2 × 1 |
| 大批量任务或大型文档库 | 4-8 | 8-16GB | 可扩容存储 | 根据实测队列和内存调整 |
OCR 性能与资源占用
高分辨率图像、长 PDF、多种识别语言和并行任务,可能带来短时 CPU/内存峰值。用户访问、数据库查询、索引更新和分类也会与 OCR 竞争资源。使用 Tika/Gotenberg 转换 Office 文档时,资源占用可能进一步增加。
当前配置文档中,PAPERLESS_TASK_WORKERS 控制并行后台任务,PAPERLESS_THREADS_PER_WORKER 控制单份文档中并行处理的页数。两者乘积不要超过逻辑 CPU 数量。在 2 vCPU 主机上,从 1 × 1 开始可以为网页和数据库留出部分 CPU,但这并不等于限定了固定的内存上限。
存储需求
请计算原件、归档版本、缩略图、提取的文字/元数据、PostgreSQL、搜索索引、容器镜像和临时处理文件,并为导入与更新保留空闲容量。导入代表性扫描件后测量实际增长,不要假定所有文档都有固定比例的额外开销。
PostgreSQL 与 Redis 兼容消息代理
官方安装文档建议新安装优先采用 PostgreSQL,同时也支持 SQLite 和 MariaDB。Redis 协议兼容的消息代理负责协调后台任务。已核实的模板采用 Valkey,所以 Redis 并不是唯一选择。redis://broker:6379 中的名称表示协议,而不是软件产品。
什么时候需要更多内存?
如果监控发现持续内存压力、OCR 任务失败或进程被 OOM 终止,应增加内存或降低并发。在把所有延迟归因于内存之前,先停止其他任务,对比代表性文件的导入情况。Swap 能提供应急余量,但不能让过载的 OCR 变快。与 Coolify 或 Dokploy 共用服务器时,也要计算它们自身的开销。
6 家适合 Paperless-ngx 的 VPS 服务商
这些服务商提供具有 root/SSH 管理权限的 Linux 虚拟机,可手动安装 Docker。选择受支持的 64 位 Ubuntu 镜像,核实订单中的 IPv4 条件,并在安装前限制 SSH 访问。共享 CPU 并不保证固定的 OCR 速度。
1. LightNode:灵活按小时计费
LightNode Agency 列出 2 vCPU、4GB 内存、50GB NVMe 和 2TB 宣传流量,月费参考为 $14.70。Premium 提升至 4 vCPU/8GB、3TB 流量,参考价 $27.70,但内置磁盘仍为 50GB。Agency 适合评估个人日常 OCR;Premium 提供更多并发余量,却不能直接解决大型文档库的磁盘问题。
Linux/root、专用 IP 产品说明及多个大洲的机房,适合普通 Docker 部署。请在订单中确认静态地址与所选地区。计费文档提到额外云盘,但容量和价格需要在控制台询价。不要默认它能低价无限扩容,也不要假定存在官方 Paperless-ngx 一键应用。
更低的 Start 为 1 vCPU/2GB、参考价 $7.71,低于本文 2 vCPU 的起步建议。常见问题说明按小时服务器费用、完整自然月内 672 小时的费用封顶、单独的流量规则,以及停机后继续计费。快照与备份需另行询价。灵活计费有助于测试 OCR 配置,但不能证明处理速度。
2. Hetzner:确认报价后的欧盟部署
CPX22 列出 2 vCPU、4GB 和 80GB NVMe。目录也显示了不可用提示和地区价格差异,因此本文标注为请查询当前价格,不把它当作已确认可购买的最低价选择。更低的 CPX12 为 1 vCPU/2GB,OCR 余量更小。
CPX22 标注欧盟地区包含 20TB 流量,新加坡为 1TB。主要 IPv4 每月 €0.50,不含增值税;按小时计费具有月费上限。请确认可用 Linux 镜像及所选地区的总价。
Volumes 存储卷可以独立于 CPU/内存扩展媒体文件系统,但其数据不包含在服务器备份和快照中。服务器每日备份具有七个备份槽位,当前备份和卷费用需核实。确认容量与报价后,可将其纳入欧盟档案部署比较,并为每个附加媒体卷制定单独备份流程。
3. DigitalOcean:参考文档完成首次部署
Basic Regular 4GiB 提供 2 vCPU、80GiB SSD 和 4,000GiB 流量,月费 $24。$4/512MiB 入门档不适合本文的整套服务估算;即使 $12/2GiB 档也只有一个 vCPU。推荐档位更适合日常 OCR 的起步评估。
Ubuntu 文档、SSH 密钥配置和云防火墙有助于首次部署。标准主要 IPv4 包含在内,地区覆盖美洲、欧洲和亚太。按秒计费设有月费上限,最低计费为 60 秒或 $0.01,取较高者。
Volumes 每月 $0.10/GiB,需确认地区供应情况,并单独计算卷快照。按比例收费的每周备份为 20%,每日备份为 30%。Droplet 磁盘镜像不包含附加卷。它的优势是文档和明确的资源选择;PostgreSQL、OCR 与恢复仍由你负责。
4. Vultr:按地区选择 VPS
公开套餐 API 列出 vc2-2c-4gb:2 vCPU、4GB 内存、80GB SSD、3,072GB 流量,基础地区 $20/月或 $0.027/小时;圣保罗为 $30。较低的 1 vCPU/1GB 档为 $5,不能把这个入门价格当作推荐 OCR 配置的成本。
产品目录覆盖多个大洲,但按需套餐列入目录不代表已经为你保留容量。请核实 Linux 镜像及标准启用 IPv4 的配置,并同时使用服务商防火墙和主机访问控制。
Block Storage 的供应与价格因地区而异。自动备份加收 20%,且不包含 Block Storage;快照另行收费。基础地区 4 vCPU/8GB/160GB 为 $40,适合实测表明需要更多余量时评估。应依据地区和存储组合选择,不要推定未经实测的延迟或 OCR 优势。
5. Akamai Cloud:通用托管
Linode 类型 API 列出 Linode 4GB:2 vCPU、80GB 磁盘、4,000GB 流量,$24/月或 $0.036/小时。基础地区备份附加服务为 $5/月。Nanode 1GB 从 $5 起,但低于本文整套服务的容量规划范围。
Linux 镜像、SSH、内含主要 IPv4 和云防火墙适合常规安装。地区包括美洲、欧洲及亚太。推荐套餐在雅加达为 $28.80,圣保罗为 $33.60,备份价格也不同。按小时计费有月费上限,已分配资源在停机后仍会产生费用。
Block Storage 可用于媒体扩容,迁移文件前请确认地区、容量和价格。Linode 实例备份不包含附加 Block Storage。请保留应用导出和独立加密备份。它是总价与位置合适时的通用选择,不是专门的 OCR 托管服务。
6. Contabo:更大的资源配置
Contabo 当前 VPS 文档列出 Cloud VPS 4:4 个共享 vCPU、8GB 内存和 100GB SSD。Cloud VPS Plus 4 是另一个产品,提供 150GB NVMe。更多内存可能有助于频繁扫描,但宣传配置不能证明 PDF 处理速度。
文档说明支持 Linux/root、一个静态 IPv4 和网络防火墙。Cloud VPS 4 的端口为 200Mbit/s,宣传的不限流量仍受公平使用规则约束。请确认地区附加费和可用系统镜像。
本次未能确认公开下单价格,因此标注请查询当前价格,包括设置费、订购期限及续费。更大的套餐和 Storage VPS 可以作为替代选项,但未经兼容性核实,不要把它们当作可直接挂载的附加磁盘。Auto Backup 与快照的覆盖范围和费用依具体产品而定。尤其在文档库超过系统盘容量时,应比较完整的存储与恢复方案。
Paperless-ngx 需要多少存储?
原始文件与归档 PDF/A 可能同时存在。OCR 设置和文件类型会影响归档版本生成;强制光栅化可能增大文件。提取的文字、数据库记录、搜索索引和缩略图也会占用容量。使用指南说明,成功消费的文件会离开收件目录,进入应用管理的档案。
以下容量预算仅为示例假设,不是测得的倍数。假定归档版本大致与原件等大,并单列辅助数据容量。操作系统和容器镜像与档案辅助数据分别计算。空闲空间用于临时 OCR、更新及近期增长。异地容量假设保留两套未压缩的完整恢复副本,包含原件、归档文件及辅助状态;保留策略、加密开销和去重都会改变实际结果。
| 原始文档容量 | 预计额外占用 | 运行空闲空间 | 主存储预算 | 异地备份容量预算 |
|---|---|---|---|---|
| 5GB | 5GB 归档 + 2GB 辅助数据 + 8GB 系统 | 10GB | 30GB | 约 24GB,另加配置与额外开销 |
| 50GB | 50GB 归档 + 10GB 辅助数据 + 10GB 系统 | 30GB | 150GB | 约 220GB,另加配置与额外开销 |
| 200GB | 200GB 归档 + 30GB 辅助数据 + 10GB 系统 | 60GB | 500GB | 约 860GB,另加配置与额外开销 |
导入样本后,分别测量 media、data、数据库与临时空间峰值。生成完整本地导出前,要额外预留导出空间。异地列表示容量,不是存储报价。对于 200GB 文档库,购买 50GB VPS 前先取得可用磁盘和备份报价。导入前先挂载持久化媒体存储;后续只更换挂载、不迁移现有文件,可能让原档案在路径下不可见。
Paperless-ngx 托管成本是多少?
| 场景 | 已核实计算资源参考价 | IPv4 | 存储扩容 | 可选服务商备份 | 异地存储/域名预算假设 | 月度预算 |
|---|---|---|---|---|---|---|
| 个人档案,约 5GB 原件 | LightNode Agency $14.70 | 下单确认内含专用 IP | 50GB 内无需扩容 | 单独询价,未包含 | 异地 $2;现有域名 $0 | $16.70 + 未报价选项 |
| 家庭管理,约 50GB 原件 | Vultr 4 vCPU/8GB/160GB $40 | 标准套餐;确认订单 | 实测容量预算能容纳时无需扩容 | 20% = $8 | 异地 $6 + 域名 $1 | $55 |
| 小型企业 OCR,约 200GB 原件 | DigitalOcean 4 vCPU/8GiB/160GiB $48 | 内含主要地址 | 500GiB 媒体卷 = $50 | 每周 20% = $9.60 | 异地 $20 + 域名 $1 | $128.60 |
异地存储和域名金额属于编辑预算,不是可直接购买的报价,也不保证能够覆盖示例保留策略。请根据容量、恢复与出站流量询价。企业示例按已核实单价,在 160GiB 系统盘之外增加 500GiB 媒体卷,超过 500GB 总容量示例,并为系统和数据库留下独立空间。确认挂载、可用容量和本地导出空间。GB 与 GiB 是不同单位,应保留服务商原标注。这些基础预算不包含完整导出的临时空间。按前述假设,50GB 文档库约需额外 110GB 导出空间,无法与现有文档一起放入 160GB 系统盘。使用本地导出流程前,应另行询价暂存卷或准备足够额外容量。服务商备份收费不包含附加卷保护。税费、超额流量、邮件服务和运维时间另计,示例没有使用促销折扣。
如何在 Ubuntu VPS 安装 Paperless-ngx
以下全新安装流程使用官方对应版本的 PostgreSQL 模板。准备 Ubuntu 24.04 LTS、SSH 密钥和自己的域名。本文没有声称进行过购买 VPS 部署或 OCR 跑分。以下命令在 root shell 执行,采用新服务器可避免覆盖既有安装。
1. 安装 Docker Engine 和 Compose
ssh ubuntu@YOUR_SERVER_IP
sudo -i
apt update
apt upgrade -y
apt install -y ca-certificates curl python3 age
install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
chmod a+r /etc/apt/keyrings/docker.asc
cat > /etc/apt/sources.list.d/docker.sources <<EOF_DOCKER
Types: deb
URIs: https://download.docker.com/linux/ubuntu
Suites: $(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}")
Components: stable
Architectures: $(dpkg --print-architecture)
Signed-By: /etc/apt/keyrings/docker.asc
EOF_DOCKER
apt update
apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
docker run --rm hello-world
docker compose version请先阅读 Docker 的 Ubuntu 前提条件、冲突软件包和防火墙限制。必要时重启并重新连接。官方 Paperless 安装要求具备 Docker 和 Compose;本文使用受维护的 Compose 插件,而非旧的 docker-compose 可执行文件。
2. 下载并调整官方文件
umask 077
install -d -m 0700 /opt/paperless
cd /opt/paperless
# Stop here if this directory already contains an installation.
test ! -e docker-compose.yml && test ! -e .env && test ! -e docker-compose.env || exit 1
PAPERLESS_RELEASE=v3.3.4
COMPOSE_BASE="https://raw.githubusercontent.com/paperless-ngx/paperless-ngx/${PAPERLESS_RELEASE}/docker/compose"
curl -fL "$COMPOSE_BASE/docker-compose.postgres.yml" -o docker-compose.yml
curl -fL "$COMPOSE_BASE/docker-compose.env" -o docker-compose.env
curl -fL "$COMPOSE_BASE/.env" -o .env
cp docker-compose.yml docker-compose.upstream.yml
install -d -o 1000 -g 1000 -m 0700 consume export执行下一个代码块前,先修改 paperless.example.com。这套已核对的转换固定应用版本,把 HTTP 绑定到回环地址,并替换模板的数据库密码。保留官方 data、media、pgdata 和 redisdata 命名卷,最后一个用于 Valkey 状态。PostgreSQL 18 的模板挂载到 /var/lib/postgresql,不要替换成旧主版本的目录布局。
python3 - <<'PY_CONFIG'
from pathlib import Path
import secrets
p = Path('docker-compose.yml')
s = p.read_text()
changes = {
'ghcr.io/paperless-ngx/paperless-ngx:latest': 'ghcr.io/paperless-ngx/paperless-ngx:3.3.4',
'"8000:8000"': '"127.0.0.1:8000:8000"',
'POSTGRES_PASSWORD: paperless': 'POSTGRES_PASSWORD: "${POSTGRES_PASSWORD:?Set database password}"',
'PAPERLESS_DBENGINE: postgresql': 'PAPERLESS_DBENGINE: postgresql\n PAPERLESS_DBPASS: "${POSTGRES_PASSWORD:?Set database password}"',
}
for old, new in changes.items():
assert s.count(old) == 1, f'Unexpected upstream template: {old}'
s = s.replace(old, new)
p.write_text(s)
with Path('.env').open('a') as f:
f.write('\nPOSTGRES_PASSWORD=' + secrets.token_hex(32) + '\n')
e = Path('docker-compose.env')
t = e.read_text()
assert t.count('PAPERLESS_SECRET_KEY=change-me') == 1
t = t.replace('PAPERLESS_SECRET_KEY=change-me',
'PAPERLESS_SECRET_KEY=' + secrets.token_urlsafe(64))
t += '''
PAPERLESS_URL=https://paperless.example.com
PAPERLESS_TIME_ZONE=UTC
PAPERLESS_ACCOUNT_ALLOW_SIGNUPS=false
USERMAP_UID=1000
USERMAP_GID=1000
PAPERLESS_OCR_LANGUAGE=eng
PAPERLESS_OCR_MODE=auto
PAPERLESS_TASK_WORKERS=1
PAPERLESS_THREADS_PER_WORKER=1
'''
e.write_text(t)
PY_CONFIG
chmod 0600 .env docker-compose.env docker-compose.yml
docker compose config --quiet
docker compose pull
docker compose up -d
docker compose ps
docker compose logs --tail=100 webserver db broker
docker compose exec webserver createsuperuser等待正常启动和迁移完成后,再创建管理员。交互式输入独立密码,不要把凭据写进命令,也不要将环境文件提交到 Git。config --quiet 只检查语法,不打印解析后的秘密。按所选 UID/GID 为扫描器配置有限权限,避免 chmod 777。容器可能以 root 开始初始化,再降低应用权限;本例没有增加 rootless 覆盖配置。
3. 配置 HTTPS 并验证导入
把域名 A 记录指向 VPS;只有 IPv6 路由和防火墙正常时才发布 AAAA。8000 端口保持私有,SSH 只允许可信地址,代理开放 TCP 80/443。不要公开 PostgreSQL 5432 或 Valkey 6379。Docker 发布端口的行为可能绕过普通 UFW 规则的预期。
从官方 Debian/Ubuntu 软件源安装 Caddy:
apt install -y debian-keyring debian-archive-keyring apt-transport-https gnupg
curl -fsSL https://dl.cloudsmith.io/public/caddy/stable/gpg.key \
| gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg
curl -fsSL https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt \
-o /etc/apt/sources.list.d/caddy-stable.list
chmod o+r /usr/share/keyrings/caddy-stable-archive-keyring.gpg
chmod o+r /etc/apt/sources.list.d/caddy-stable.list
apt update
apt install -y caddy在这台新服务器的 /etc/caddy/Caddyfile 写入以下配置,并替换示例域名:
paperless.example.com {
reverse_proxy 127.0.0.1:8000
}caddy validate --config /etc/caddy/Caddyfile
systemctl reload caddy
curl -I https://paperless.example.com这套基本方案使用直接 DNS;额外代理会带来新的信任关系与上传限制。通过 HTTPS 登录,上传不含敏感数据的扫描 PDF,等待任务成功,并搜索图片中的特定词语。检查原件和归档文件下载。通过 ss -lntp 确认 8000 仅监听回环地址,并验证数据库和消息代理端口无法从公网访问。HTTPS 保护传输,但不会让服务器管理员无法读取档案。
如何配置 Paperless-ngx OCR
Paperless 使用 OCRmyPDF 和 Tesseract 执行本地 OCR。PAPERLESS_OCR_LANGUAGE 以 + 连接要识别的语言;PAPERLESS_OCR_LANGUAGES 使用空格分隔的包名后缀,在 Docker 中安装额外语言。已核实镜像的文档说明默认包含英语、德语、意大利语、西班牙语和法语。
若文档包含英语和土耳其语,修改 docker-compose.env:
PAPERLESS_OCR_LANGUAGE=eng+tur
PAPERLESS_OCR_LANGUAGES=tur
PAPERLESS_OCR_MODE=auto
PAPERLESS_TASK_WORKERS=1
PAPERLESS_THREADS_PER_WORKER=1执行 docker compose up -d webserver 重建应用,再测试扫描样本。额外语言安装依赖普通容器初始化流程,官方禁止将该选项与 rootless 覆盖配置同时使用。包名与 Tesseract 语言代码可能不同,中文变体尤其需要核对。
在 v3.3.4 中,auto 会在嵌入文字足够时跳过 OCR,并处理纯图片 PDF。redo 尝试替换现有识别层;force 会将页面光栅化,可能增大文件;off 关闭 OCR。切换前请阅读配置参考。Tika 和 Gotenberg 用于可选的 Office/.eml 转换,并非普通扫描 PDF 的强制依赖。需要时采用官方 -tika 模板,并增加内存预算。
如何自动导入文档
从主机绑定挂载的 consume 目录可接收扫描器上传或传输完成的文件,成功消费后文件会从入口目录删除。确保应用 UID 有读取和删除权限。先上传到暂存目录,再把完整文件在同一文件系统内移动到入口,可避免导入尚未写完的文件。
如果 NFS/SMB 无法可靠提供 inotify,在 docker-compose.env 设置当前有效的 PAPERLESS_CONSUMER_POLLING_INTERVAL=10,每十秒轮询。PAPERLESS_CONSUMER_STABILITY_DELAY 控制文件需要保持不变的时间。请核对对应版本的配置文档,不要照抄旧的轮询变量名。
邮件账户和处理规则也可导入附件。限制邮箱权限,并在允许删除或移动邮件前检查规则。标签、往来单位、匹配规则与工作流可以分类文档,但信任自动化前应检查结果。n8n 工作流属于可选集成,应使用权限受限的 API 身份。consume 是导入队列,不是备份。
如何备份 Paperless-ngx
请参考官方管理文档。文档导出器包含原件、归档文件、缩略图、元数据/设置和数据库内容,但不包括 API 令牌。Compose 和环境配置需另存。data 中的辅助搜索数据可以从恢复的文档和元数据重建;采用卷备份时,也应覆盖 data、媒体文件及一致的数据库备份。
使用导出器前,暂停扫描器、邮件与自动化入口,停止用户编辑,等待所有处理任务结束。整个导出期间保持维护窗口,先准备足够临时空间:
cd /opt/paperless
set -euo pipefail
umask 077
BACKUP_LABEL="$(date -u +%Y%m%dT%H%M%SZ)"
docker compose exec -T webserver document_exporter "../export/$BACKUP_LABEL"在可信恢复电脑上运行 age-keygen -o recovery-key.txt 生成 age 密钥,并在该电脑保护私钥。在 VPS 上将下面的接收方替换成对应的 age1... 公钥,使用你控制的异地 SSH 目标:
AGE_RECIPIENT='REPLACE_WITH_YOUR_AGE_PUBLIC_RECIPIENT'
install -d -m 0700 /var/backups/paperless
BACKUP_FILE="/var/backups/paperless/$BACKUP_LABEL.tar.age"
set -euo pipefail
tar -C /opt/paperless -cf - "export/$BACKUP_LABEL" \
docker-compose.yml docker-compose.env .env \
| age -r "$AGE_RECIPIENT" -o "$BACKUP_FILE"
sha256sum "$BACKUP_FILE" > "$BACKUP_FILE.sha256"
scp "$BACKUP_FILE" "$BACKUP_FILE.sha256" backupuser@BACKUP_HOST:paperless/检查每条命令的退出状态,并核实远端校验和后再认定备份完成。通过同样的保护流程保存 /etc/caddy/Caddyfile 和额外配置。导出成功后恢复入口。管道失败需要排查,空文件或不完整文件不能用于恢复。在独立存储上设置保留策略,并保护临时的未加密导出。合同、发票和身份证件等敏感文档应限制访问,并加密备份。
在另一台新主机上,以相同 Paperless 版本、空数据库和空 media/data 卷测试恢复。还原已审查的配置,在可信电脑解密归档(age -d -i recovery-key.txt -o recovery.tar BACKUP.tar.age),检查内容后通过 SSH 传入新项目的私有目录。不要覆盖解压到运行中的安装。把带日期的导出放入新的 export 目录,保留 UID/GID 访问权限,启动新数据库与消息代理,然后执行:
docker compose up -d db broker
docker compose run --rm webserver document_importer ../export/EXPORT_LABEL
docker compose up -d
docker compose exec webserver document_index reindex替换 EXPORT_LABEL,必须在创建新管理员之前导入,因为导入器要求空安装。检查登录、文档数量、原件/归档校验和、标签、搜索及一次新导入。重新生成 API 令牌。在恢复验证通过前保留旧服务器与 DNS。该方法避免复制运行中的 PostgreSQL 数据目录;服务商快照本身不能保证数据库与媒体文件一致。
Paperless-ngx 与其他文档管理工具对比
| 工具 | 部署复杂度 | OCR | 组织方式 | 硬件规划 | 适用场景 |
|---|---|---|---|---|---|
| Paperless-ngx | 应用、数据库与消息代理 | 集成 OCRmyPDF/Tesseract | 标签、往来单位、工作流 | OCR 并发与媒体容量 | 个人/家庭可搜索档案 |
| Mayan EDMS | 更多管理与工作流配置 | OCR/文字识别 | 版本、权限、工作流 | 评估部署方式和任务进程 | 需要文档流程控制的团队 |
| Docspell | REST 服务和处理组件 | 自动提取文字/OCR | 标签和元数据 | 处理任务与 JVM 服务 | 自动导入与整理 |
这里比较的是功能与部署方式,不是相同硬件上的性能测试。选型前阅读各项目当前安装指南,更丰富的工作流功能可能值得额外管理投入。
安全与隐私
使用 HTTPS、强密码、内置双因素验证与离线恢复码。普通用户只授予必要的文档权限,超级用户权限留给管理操作。自托管密码库可以帮助管理凭据,但也需要独立保护与备份。
把数据库与消息代理限制在 Docker 私有网络内。保护 SSH、服务商账户、备份凭据和配置文件,避免公开不受限制的扫描共享。审查固定版本的应用发布和主版本迁移说明,升级前导出,定期更新 Docker 与操作系统。PostgreSQL 主版本升级需要单独迁移,不能通过修改镜像标签直接迁移数据目录。
VPS 不会让敏感文档天然安全。服务器或服务商账户被攻破后,文件可能泄露。明确恢复目标并测试异地还原。对于私人家庭档案,通过 VPN 或可信网络访问,可能比不受限制的公网开放更合适。
Paperless-ngx 常见问题
| 问题 | 安全诊断方向 |
|---|---|
| 容器无法启动 | 查看 docker compose ps、近期日志、环境语法和镜像架构;不要删除数据卷 |
| OCR 不运行或结果不准 | 检查已安装语言、所选代码和模式;用不含敏感信息的扫描样本测试 |
| 文档未出现 | 检查入口权限、任务队列和消费结果;重新上传前排除重复文件 |
| PDF 导入失败 | 阅读任务错误;对副本检查加密、损坏、页面和图像大小 |
| PostgreSQL 连接失败 | 检查数据库状态、服务主机名及密码一致性;不要重置现有数据库 |
| Redis/Valkey 连接问题 | 检查代理状态与 PAPERLESS_REDIS,不要通过公开 6379 解决 |
| 内存不足 | 查看 docker stats、内核 OOM 日志和并发;减少任务或增加内存 |
| 磁盘已满 | 查看 df -h、df -i 和导出增长;移动审查过的备份前先保留原件 |
| 权限错误 | 检查 consume/export 和外部媒体卷的 UID/GID;不要允许所有人写入 |
| 代理上传失败 | 检查每层代理/CDN 的大小与超时限制及应用日志;测试较小的非敏感 PDF |
| 搜索遗漏现有文件 | 检查 OCR 成功状态和任务日志;备份后执行文档中的 document_index reindex |
哪种 VPS 更适合 Paperless-ngx?
本次比较中,LightNode Agency 的推荐套餐已核实月费参考最低,为 $14.70,并提供灵活按小时计费。这不包含未核实的 Hetzner/Contabo 报价、地区附加费和备份/扩容费用。它的 50GB 磁盘只适合实测增长仍可容纳的小型个人档案。
日常 OCR 可评估 2 vCPU/4GB,并控制并发。Vultr 基础地区 $20 套餐含 80GB,DigitalOcean 与 Akamai 的 2 vCPU/4GB/80GB 档均为 $24。频繁扫描或小型企业可能需要 4 vCPU/8GB、访问限制和明确恢复计划。无论选择哪家服务商,大型文档库都需要媒体卷报价及匹配的异地保留容量。
常见问题解答
Paperless-ngx 应该选择哪种 VPS?
依据实测 OCR 负载与可用存储选择。LightNode Agency 是本文已核实推荐档中月费参考最低的选项;Vultr、DigitalOcean 和 Akamai 在更高标价下提供更多内置磁盘。
Paperless-ngx 需要多少内存?
本文估算小型文档库谨慎测试可从 2GB 起步,日常 OCR 建议评估 4GB,已考虑 Linux 和核心容器。这是容量建议,不是统一的官方最低配置。
2GB VPS 能运行吗?
可以在低并发、较小文件条件下评估。大型扫描件、额外语言与转换服务可能超出内存,需要监控实际峰值。
必须使用 PostgreSQL 吗?
不是,也支持 SQLite 与 MariaDB。官方建议新安装优先使用 PostgreSQL,本文采用对应模板。
必须使用 Redis 吗?
后台处理需要 Redis 兼容消息代理。已核实的官方模板使用 Valkey,而非限定 Redis 产品。
文档会占多少存储?
计算原件、可能存在的归档副本、辅助数据和运行余量。需要测量代表性导入,仅凭文档数量无法预测磁盘使用。
自托管 Paperless-ngx 免费吗?
项目采用 GPL-3.0 开源许可,但计算资源、可用存储、独立备份与管理仍有成本。
能识别扫描 PDF 吗?
可以,本地使用 OCRmyPDF/Tesseract。正确的语言包和足够处理资源会影响结果。
应该怎样备份?
在无活动的维护窗口使用官方导出器,另存配置,加密异地副本,并在相同版本的空安装中测试导入器。
可以部署到 Ubuntu 吗?
可以。受支持的 Ubuntu 配合 Docker Engine 与 Compose 插件,可以运行官方容器栈。Web 端口应保持私有,通过 HTTPS 代理访问。
小型档案应先测量文件,使用保守 OCR 设置。日常工作可从 2 vCPU/4GB 预算开始,根据监控增加 CPU 或内存,并为原件和处理副本一起购买存储。从一开始,就把经过恢复验证的加密备份纳入月度预算。