为了实现零授权费用和最低的硬件维护成本,本指南采用 Docker 容器化部署 Paperless-ngx。这是一个开源的文档管理系统,集成了 OCR(光学字符识别)功能,能将图片或 PDF 转换为可搜索的文本数据。相比商业软件,它每年可节省数万元的授权费,且自动化归档功能能减少 80% 的人工整理时间。
我们以 Ubuntu 20.04 或 22.04 LTS 为例进行操作。首先更新系统源并安装必要的依赖包,然后安装 Docker 和 Docker Compose。
执行以下命令安装 Docker:
``` sudo apt-get update sudo apt-get install -y ca-certificates curl gnupg lsb-release sudo mkdir -p /etc/apt/keyrings curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null sudo apt-get update sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin ```安装完成后,执行以下命令验证 Docker 是否安装成功(如果能输出版本号则说明安装成功):
``` docker --version docker compose version ```接下来我们将创建项目目录,并编写完整的配置文件。为了保证数据的持久化,我们将映射宿主机的目录到容器内部。
在宿主机上创建一个专门的目录用于存放配置和数据,例如在 `/opt` 目录下创建 `paperless` 文件夹:
``` sudo mkdir -p /opt/paperless cd /opt/paperless ```创建数据存储所需的子目录,这些目录将分别用于存放文档、数据库文件、导出文件及消费文件夹:
``` sudo mkdir -p data consume export media db redis ```在 `/opt/paperless` 目录下创建 `docker-compose.yml` 文件。该文件是部署的核心,定义了 Web 服务、PostgreSQL 数据库、Redis 缓存以及 Brokers 代理服务。
请直接复制以下完整内容到文件中,注意不要修改缩进:
``` version: "3.8" 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_DB: paperless POSTGRES_USER: paperless POSTGRES_PASSWORD: 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: - docker-compose.env environment: PAPERLESS_REDIS: redis://broker:6379 PAPERLESS_DBHOST: db PAPERLESS_DBPASS: paperless gotenberg: image: docker.io/gotenberg/gotenberg:7 restart: always tika: image: apache/tika:latest restart: always ```在同级目录下创建 `docker-compose.env` 文件,用于设置系统的核心参数。这里我们需要配置时区、管理员账号以及 OCR 语言包。
创建并编辑文件:
``` sudo nano docker-compose.env ```填入以下配置内容。这里我们将 OCR 语言设置为简体中文 (`chi_sim`) 和英文,并设置了用户名和密码:
``` 设置时区为上海时间 PAPERLESS_TIME_ZONE=Asia/Shanghai 设置 OCR 识别语言,chi_sim 为简体中文,eng 为英文 PAPERLESS_OCR_LANGUAGE=chi_sim+eng 设置管理员用户名(首次启动后生效) PAPERLESS_ADMIN_USER=admin 设置管理员密码 PAPERLESS_ADMIN_PASSWORD=your_secure_password_here 自动重命名文档 PAPERLESS_FILENAME_FORMAT={created}_{title}_{correspondent}_{tag} 禁用遥测数据上传 PAPERLESS_ENABLE_HTTP_REMOTE_USER=false ```注意:请将 `your_secure_password_here` 修改为一个强密码。
配置文件准备就绪后,即可启动服务。Docker Compose 会自动拉取镜像并创建容器。
在 `/opt/paperless` 目录下执行以下命令:
``` sudo docker compose up -d ```
参数 `-d` 表示在后台运行。首次运行需要下载镜像,根据网络情况可能需要几分钟。你可以使用 `sudo docker compose logs -f` 查看实时日志,当看到 "Application startup complete" 时表示启动成功。
打开浏览器,访问服务器的 IP 地址加上 8000 端口,例如:http://192.168.1.100:8000。
使用环境变量中设置的用户名(admin)和密码登录。登录成功后,你将看到主控制面板。此时系统虽然可以运行,但还需要下载中文 OCR 语言包才能准确识别中文文档。
档案管理系统的核心价值在于将纸质文档转化为可检索的数据。Paperless-ngx 支持通过“消费文件夹”自动处理文档。
虽然我们在配置中指定了 `chi_sim`,但默认镜像可能不包含该数据文件。我们需要手动下载并挂载。
进入 Web 服务容器内部:
``` sudo docker exec -it paperless-webserver-1 bash ```在容器内执行以下命令下载简体中文语言包:
``` apt-get update apt-get install -y tesseract-ocr-chi-sim exit ```下载完成后,重启 Web 服务使配置生效:
``` sudo docker compose restart webserver ```这是降低人工成本最实用的功能。你只需将扫描好的 PDF 或图片文件放入宿主机的 `/opt/paperless/consume` 目录,系统会自动检测、OCR 识别并将其移入正式文档库,随后清空消费文件夹。
操作步骤:
为了进一步细化管理,我们可以设置文档保存后自动打标签。例如,文件名包含“发票”的自动打上“财务”标签。
数据是企业的核心资产,必须建立自动备份机制。我们将备份 PostgreSQL 数据库和用户上传的媒体文件。
在宿主机创建 `/opt/backup_paperless.sh` 脚本:
``` sudo nano /opt/backup_paperless.sh ```填入以下内容,该脚本会将数据库导出为 SQL 文件,并打包 Media 目录:
``` !/bin/bash 定义备份目录 BACKUP_DIR="/opt/backups" DATE=$(date +%Y%m%d_%H%M%S) 创建备份目录 mkdir -p $BACKUP_DIR 备份数据库 docker exec paperless-db-1 pg_dump -U paperless paperless > $BACKUP_DIR/db_backup_$DATE.sql 压缩并备份媒体文件 tar -czf $BACKUP_DIR/media_backup_$DATE.tar.gz /opt/paperless/media 删除 7 天前的备份 find $BACKUP_DIR -type f -mtime +7 -delete echo "Backup completed: $DATE" ```赋予脚本执行权限并设置定时任务(每天凌晨 2 点执行):
``` sudo chmod +x /opt/backup_paperless.sh (crontab -l 2>/dev/null; echo "0 2 /opt/backup_paperless.sh") | crontab - ```通过以上步骤,你已经成功搭建了一套具备 OCR 识别、自动归档和标签分类功能的档案管理系统。整个系统运行在 Docker 容器中,环境隔离且易于迁移。相比购买昂贵的商业软件和支付持续的维护费用,这套方案仅需一台普通服务器即可承载,通过“消费文件夹”和“自动匹配”功能,真正实现了技术降低管理成本的目标。