Paperless私有档案系统搭建与OCR实操指南
一、环境准备与Docker安装
本文基于Ubuntu 22.04 LTS系统演示,使用Docker容器化部署Paperless-ngx,这是目前最稳定、维护最活跃的开源档案管理方案。该系统支持PDF、图片等格式的文档 ingestion,并自动进行OCR(光学字符识别)。
确保系统已更新并安装必要的依赖工具。执行以下命令更新系统源并安装curl与git:
```bash sudo apt-get update sudo apt-get install -y curl git ```接下来,安装Docker与Docker Compose插件。这是运行Paperless-ngx的基础环境。使用官方提供的便捷安装脚本,无需手动配置仓库:
```bash curl -fsSL https://get.docker.com | sh sudo usermod -aG docker $USER ```注意:执行完用户组修改命令后,必须注销当前用户并重新登录,或者执行以下命令使权限生效,否则后续操作会报错:
```bash newgrp docker ```二、创建项目目录结构
为了保持数据持久化与管理方便,我们需要在宿主机创建规范的目录结构。执行以下命令创建主目录及子目录,分别用于存储配置、上传数据、导出数据及媒体文件:
```bash mkdir -p ~/paperless/data mkdir -p ~/paperless/media mkdir -p ~/paperless/export mkdir -p ~/paperless/consume mkdir -p ~/paperless/db ```进入项目根目录,后续操作将在此进行:
```bash cd ~/paperless ```三、获取UID与GID并编写配置文件
为了避免容器内因权限问题导致无法读写文件,我们需要获取当前宿主机的用户ID(UID)和组ID(GID)。执行以下命令:
```bash id $USER ```输出结果通常为 uid=1000(user) gid=1000(user) ...。请记下uid和gid的数字(通常是1000),并替换到下方的配置文件中。
在 ~/paperless 目录下创建 docker-compose.yml 文件:
将以下完整配置粘贴到文件中。该配置集成了Web服务、PostgreSQL数据库、Redis缓存、Gotenberg(用于文档转PDF)和Tika(用于OCR提取)。请务必将 PAPERLESS_UID 和 PAPERLESS_GID 修改为你上一步获取的数值。
```yaml services: broker: image: docker.io/library/redis:7 restart: always volumes: - ./redis:/data db: image: docker.io/library/postgres:15 restart: always volumes: - ./db:/var/lib/postgresql/data environment: POSTGRES_USER: paperless POSTGRES_PASSWORD: paperless POSTGRES_DB: paperless webserver: image: ghcr.io/paperless-ngx/paperless-ngx:latest restart: always depends_on: - db - broker ports: - "8000:8000" healthcheck: test: ["CMD", "curl", "-f", "http://localhost:8000"] interval: 30s timeout: 10s retries: 5 volumes: - ./data:/usr/src/paperless/data - ./media:/usr/src/paperless/media - ./export:/usr/src/paperless/export - ./consume:/usr/src/paperless/consume env_file: - .env environment: PAPERLESS_REDIS: redis://broker:6379 PAPERLESS_DBHOST: db PAPERLESS_DBUSER: paperless PAPERLESS_DBPASS: paperless PAPERLESS_DBNAME: paperless 修改下方UID和GID PAPERLESS_UID: 1000 PAPERLESS_GID: 1000 设置时区与OCR语言,chi_sim为简体中文 PAPERLESS_TIME_ZONE: Asia/Shanghai PAPERLESS_OCR_LANGUAGE: chi_sim+eng PAPERLESS_OCR_MYDEFFAULT: chi_sim+eng gotenberg: image: docker.io/gotenberg/gotenberg:7 restart: always volumes: - ./gotenberg:/gotenberg/data tika: image: apache/tika:latest restart: always volumes: data: media: export: ```四、配置环境变量文件
为了管理敏感信息和系统设置,我们需要创建 .env 文件。在当前目录执行:
填入以下核心配置。这里设置管理员用户名和密码,以及系统访问的URL(如果是本地测试,保持localhost即可;如果需要外网访问,请修改为对应域名或IP):
```ini 设置管理员账号 PAPERLESS_ADMIN_USER=admin 设置管理员密码 PAPERLESS_ADMIN_PASSWORD=your_secure_password 设置访问地址 PAPERLESS_URL=http://localhost:8000 ```重点操作项:请务必将 your_secure_password 修改为高强度密码,防止系统被入侵。
五、启动服务与初始化
配置文件无误后,执行以下命令拉取镜像并启动所有容器:
```bash docker compose up -d ```首次启动需要下载镜像,耗时取决于网络速度。启动成功后,查看容器运行状态,确保所有服务状态均为 Up:

如果 webserver 状态显示为 Up (healthy),说明系统初始化成功。此时打开浏览器,访问 http://服务器IP:8000。使用 .env 文件中配置的 PAPERLESS_ADMIN_USER 和 PAPERLESS_ADMIN_PASSWORD 登录。
六、核心实操技巧:文档自动归档与OCR
登录系统后,首先需要进行OCR语言设置以确保中文能被正确识别。
1. 确认OCR设置
点击右上角 Settings -> Settings -> OCR。在 OCR Language 一栏中,确保选中的是 chi_sim+eng(简体中文+英文)。如果下拉菜单中没有该选项,说明Docker配置中的环境变量未生效或镜像未下载语言包,请检查 docker-compose.yml 中的配置并重启容器。
2. 使用“消费”文件夹自动导入
这是最高效的归档技巧。你无需在网页端手动点击上传。只需将文件(PDF、JPG、PNG等)SFTP或SCP上传到宿主机的 ~/paperless/consume 目录中。Paperless-ngx会自动监控该目录,一旦检测到新文件,会立即将其抓取、进行OCR处理、归档,并自动删除源文件。
实操命令:尝试将一个测试PDF文件复制到consume目录:
```bash cp /path/to/your/test.pdf ~/paperless/consume/ ```稍等片刻,刷新网页界面,你会发现该文档已经出现在列表中,且内容已被全文索引。
3. 设置自动保存规则
为了实现无人值守的分类,利用“保存规则”是关键。假设你需要将所有发票自动打上“财务”标签。
操作步骤如下:
- 点击左侧导航栏的 Settings -> Settings -> Document types(文档类型)或 Tags(标签)。先创建一个名为“财务”的标签。
- 进入 Settings -> Automation -> Save rules。
- 点击 Add save rule。
- Match type: 选择 "File name contains"(文件名包含)或 "OCR content contains"(OCR内容包含)。
- Match value: 输入 "发票" 或 "Invoice"。
- Action: 选择 "Assign tag"。
- Action parameter: 选择刚才创建的“财务”标签。
- 点击 Save。
此后,任何上传的文档,只要文件名或内容中包含“发票”,系统会自动为其打上“财务”标签,无需人工干预。
七、数据备份与维护
档案系统的核心价值在于数据,必须建立定期备份机制。由于使用了Docker,我们只需备份宿主机的两个关键目录:数据库目录和数据目录。
执行以下命令创建一个简单的备份脚本:
```bash nano ~/backup_paperless.sh ```粘贴以下内容:
```bash !/bin/bash DATE=$(date +%Y%m%d_%H%M%S) BACKUP_DIR=~/paperless_backups mkdir -p $BACKUP_DIR 打包数据库和媒体数据 tar -czf $BACKUP_DIR/paperless_backup_$DATE.tar.gz ~/paperless/db ~/paperless/media ~/paperless/data 删除30天前的备份 find $BACKUP_DIR -name "paperless_backup_.tar.gz" -mtime +30 -delete ```赋予执行权限并运行测试:
```bash chmod +x ~/backup_paperless.sh ~/backup_paperless.sh ``>建议将此脚本加入系统的 crontab 中,每天凌晨自动执行:
添加一行:
```bash 0 2 /home/你的用户名/backup_paperless.sh ```