本文以Ubuntu 22.04 LTS操作系统为例,演示如何通过Docker容器化技术快速部署一套功能完备的文书档案管理系统。该方案无需复杂的编译过程,配置完成后即可实现文档的自动归档、OCR识别及全文检索。
更新系统源并安装必要的依赖工具:
sudo apt-get update
sudo apt-get install -y curl git
接着,执行官方脚本一键安装Docker及Docker Compose插件。确保当前用户具有执行权限,若权限不足请添加sudo:
curl -fsSL https://get.docker.com | sh
sudo usermod -aG docker $USER
newgrp docker
安装完成后,验证Docker及Compose版本,确保服务正常运行:
docker --version
docker compose version
为了保持数据持久化及配置管理的清晰,我们需要在宿主机创建专门的目录用于映射容器内的数据。执行以下命令创建目录结构:
mkdir -p ~/paperless/data
mkdir -p ~/paperless/media
mkdir -p ~/paperless/export
mkdir -p ~/paperless/consume
mkdir -p ~/paperless/db
mkdir -p ~/paperless/redis
目录用途说明如下,请根据实际需求调整路径:
进入项目根目录并创建配置文件:
cd ~/paperless
nano docker-compose.yml
将以下完整配置复制到文件中。该配置集成了Web服务、数据库、缓存、OCR转换器及任务消费者,并针对中文环境优化了时区与OCR语言包设置:
version: "3.5"
services:
broker:
image: docker.io/library/redis:7
restart: always
volumes:
- ./redis:/data
db:
image: docker.io/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_DBPASS: paperless
PAPERLESS_TIKA_ENABLED: 1
PAPERLESS_TIKA_GOTENBERG_ENDPOINT: http://gotenberg:3000
PAPERLESS_TIKA_ENDPOINT: http://tika:9998
gotenberg:
image: docker.io/gotenberg/gotenberg:7
restart: always
command:
- "gotenberg"
- "--chromium-disable-javascript=true"
- "--chromium-allow-list=file:///tmp/."
tika:
image: apache/tika:latest
restart: always
consumer:
image: ghcr.io/paperless-ngx/paperless-ngx:latest
restart: always
depends_on:
- db
- broker
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_DBPASS: paperless
PAPERLESS_CONSUMER_POLLING: 30
PAPERLESS_CONSUMER_RECURSIVE: true
command: /usr/src/paperless/src/manage.py document_consumer
保存并退出编辑器。接下来创建环境变量文件以配置系统核心参数:
nano .env
写入以下内容,注意调整时区和OCR语言包以支持中文识别:
PAPERLESS_URL=http://localhost:8000
PAPERLESS_TIME_ZONE=Asia/Shanghai
PAPERLESS_OCR_LANGUAGE=chi_sim+eng
PAPERLESS_ADMIN_USER=admin
PAPERLESS_ADMIN_PASSWORD=adminpassword
注意:这里的OCR语言包设置为chi_sim+eng,表示同时识别简体中文和英文。若服务器内存较小(低于2GB),建议仅保留eng以防OCR进程崩溃。
在~/paperless目录下执行以下命令拉取镜像并启动所有容器:
docker compose up -d
首次启动需要下载镜像,耗时取决于网络速度。启动后查看容器运行状态,确保所有服务均为Up状态:
docker compose ps
若webserver服务未正常运行,可通过以下命令查看日志排查错误:

docker compose logs -f webserver
日志中看到Booting worker with pid即表示Web服务已成功启动。
虽然我们在.env文件中预设了管理员密码,但为了安全起见,建议在首次运行后通过命令行创建或重置管理员账户。执行以下命令进入容器环境:
docker compose exec webserver python manage.py createsuperuser
按照提示输入用户名、邮箱和密码。完成后,打开浏览器访问http://服务器IP:8000,使用刚创建的账户登录。
登录后,进入Settings -> Numbering,设置文档归档的编号规则,例如按年份+流水号格式,这对于文书档案管理至关重要。
系统提供两种主要的文档归档方式:Web界面上传和文件监控导入。
这是最高效的实操方式。将需要归档的PDF或图片文件直接复制到宿主机的~/paperless/consume目录下:
cp /path/to/your/scanned_contract.pdf ~/paperless/consume/
后台的consumer容器会自动检测到新文件,并在30秒内(由PAPERLESS_CONSUMER_POLLING参数控制)将其抓取、进行OCR处理并导入数据库。处理完成后,该文件会从consume目录消失。
在系统首页点击右上角的Upload Documents按钮,拖拽文件即可。上传后,系统会自动进入处理队列。
文档导入后,Paperless-ngx会自动调用Tesseract和Gotenberg进行内容识别。在文档列表页,点击文档标题进入详情页,右侧会显示识别出的文本内容。
若发现中文识别率低,请检查.env文件中PAPERLESS_OCR_LANGUAGE是否正确设置为chi_sim。修改后需重建容器生效:
docker compose down
docker compose up -d
配置正确后,利用左上角的Search栏,输入文档中的任意关键词(如合同号、人名、特定条款),系统可瞬间检索出对应的文书档案。点击搜索结果,可直接在线预览或下载原文。
为了确保档案数据安全,必须定期备份数据库和媒体文件。编写以下脚本backup.sh实现自动备份:
!/bin/bash
BACKUP_DIR=~/backups
DATE=$(date +%Y%m%d_%H%M%S)
mkdir -p $BACKUP_DIR
备份数据库
docker compose exec -T db pg_dump -U paperless paperless > $BACKUP_DIR/db_dump_$DATE.sql
备份媒体文件和数据
tar -czf $BACKUP_DIR/paperless_data_$DATE.tar.gz ./data ./media ./export
echo "Backup completed: $BACKUP_DIR"
赋予执行权限并运行:
chmod +x backup.sh
./backup.sh
恢复数据时,先停止服务,导入数据库,再解压文件覆盖即可。此方案完整覆盖了文书档案管理中从采集、识别、检索到备份的全生命周期,可直接用于企业或个人的文档库管理。