本指南将使用 Docker 和 Docker Compose 部署 Paperless-ngx。这是一个开源的文档管理系统,支持OCR(光学字符识别),能够将扫描的培训纸质档案、PDF课件自动转化为可搜索的文本,非常适合应急管理部门进行档案数字化管理。建议准备一台安装了 Ubuntu 20.04 或 22.04 的服务器,配置至少 2核4G。
登录服务器,更新系统源并安装必要的依赖工具。执行以下命令:
```bash sudo apt-get update sudo apt-get install -y curl ```接下来,安装 Docker。使用官方提供的便捷安装脚本,这是最快且不易出错的方式:
```bash curl -fsSL https://get.docker.com | sh ```安装完成后,将当前用户添加到 docker 组,以便免 sudo 执行命令:
```bash sudo usermod -aG docker $USER newgrp docker ```然后安装 Docker Compose 插件:
```bash sudo apt-get install -y docker-compose-plugin ```验证安装是否成功,输入以下命令,若输出版本号则说明环境就绪:
```bash docker --version docker compose version ```为了系统化管理,我们需要创建一个专门的目录存放配置和数据。执行以下命令创建目录结构:
```bash mkdir -p ~/paperless-ngx cd ~/paperless-ngx mkdir -p consume data export ```在 ~/paperless-ngx 目录下,创建 docker-compose.yml 文件。这是整个系统的核心配置文件。请直接复制以下完整内容,不要遗漏任何行:
```yaml services: broker: image: docker.io/library/redis:7 restart: always volumes: - redisdata:/data db: image: docker.io/library/postgres:15 restart: always volumes: - pgdata:/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 ports: - "8000:8000" healthcheck: test: ["CMD", "curl", "-f", "http://localhost:8000"] interval: 30s timeout: 10s retries: 5 volumes: - ./data:/usr/src/paperless/data - ./export:/usr/src/paperless/export - ./consume:/usr/src/paperless/consume - ./media:/usr/src/paperless/media environment: PAPERLESS_REDIS: redis://broker:6379 PAPERLESS_DBHOST: db PAPERLESS_DBPASS: paperless 设置时区为上海时间 PAPERLESS_TIME_ZONE: Asia/Shanghai 设置OCR语言为简体中文和英文,确保档案识别准确 PAPERLESS_OCR_LANGUAGE: chi_sim+eng PAPERLESS_OCR_MY_LANGUAGE: chi_sim+eng 自动识别文档方向 PAPERLESS_OCR_DESKEW: true depends_on: - db - broker 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 - ./export:/usr/src/paperless/export - ./consume:/usr/src/paperless/consume - ./media:/usr/src/paperless/media environment: PAPERLESS_REDIS: redis://broker:6379 PAPERLESS_DBHOST: db PAPERLESS_OCR_LANGUAGE: chi_sim+eng PAPERLESS_OCR_MY_LANGUAGE: chi_sim+eng PAPERLESS_URL: http://localhost:8000 PAPERLESS_TIME_ZONE: Asia/Shanghai gotenberg: image: docker.io/gotenberg/gotenberg:8.7.3 restart: always volumes: - ./gotenberg_data:/data environment: - DISABLE_GOOGLE_CHROME=1 command: - "gotenberg" - "--chromium-disable-javascript=true" - "--chromium-allow-list=file:///tmp,/consume" tika: image: apache/tika:latest restart: always volumes: pgdata: redisdata: ```注意:上述配置中,PAPERLESS_OCR_LANGUAGE 已设置为 chi_sim+eng,这意味着系统会自动对上传的文档进行中文和英文的OCR识别,这是实现档案全文检索的关键。
配置文件保存后,在 ~/paperless-ngx 目录下执行以下命令启动所有容器:
```bash docker compose up -d ```首次启动需要下载镜像,根据网络情况可能需要几分钟。启动后,使用 docker compose ps 查看服务状态,确保所有服务的 Status 均为 Up:
如果看到 webserver-1、db-1、broker-1 等服务均为 Up 状态,说明部署成功。此时,在浏览器中访问 http://服务器IP:8000 即可看到登录界面。
系统首次运行需要创建超级管理员。在项目目录下执行以下命令,根据提示输入用户名、邮箱和密码(建议密码包含大小写字母、数字和符号):
```bash docker compose exec webserver createsuperuser ```创建完成后,使用该账户登录系统。进入后台后,首先进行OCR设置验证。点击右上角头像 -> Settings -> OCR,确认 Tesseract OCR 的语言包中包含 chi_sim。如果没有,系统会自动使用内置的轻量级模型,但对于正式档案管理,建议手动安装完整语言包。
如果需要手动安装更高精度的中文OCR模型,可以进入容器执行:
```bash docker compose exec webserver bash apt-get update && apt-get install -y tesseract-ocr-chi-sim exit ```系统搭建完毕后,我们需要针对应急管理部门的培训档案建立规范化的管理流程。

在 Settings -> Document Types 中,点击 Add 创建以下类型: - 培训课件:用于存放PPT、PDF讲义。 - 演练记录:用于存放应急演练的影像资料、签到表、总结报告。 - 预案文档:用于存放各类应急预案。
在 Settings -> Tags 中,创建标签以便快速筛选: - 消防安全 - 防汛抗旱 - 地震救援 - 危化品处置 - 全员培训
对于已有的电子版档案,不要直接在网页上一张张上传,效率太低。利用配置好的 consume 目录进行批量导入。
使用 SCP 或 SFTP 工具将本地的档案文件夹上传到服务器的 ~/paperless-ngx/consume 目录下。Paperless-ngx 会自动监控该目录,一旦检测到新文件,就会自动将其吸入并进行OCR处理。
如果文件较多,建议分批上传。处理完成后,在网页界面的 Documents 页面即可看到这些文档。此时文档是“未归档”状态。
进入 Documents 列表,勾选需要归档的文档(例如某次“防汛培训”的PPT),点击顶部菜单的 Edit。 - Title:修改为规范格式,如“2023-10-15-全市防汛抗旱业务培训-主讲人:张三”。 - Document Type:选择“培训课件”。 - Tags:选择“防汛抗旱”和“全员培训”。 - Created Date:设置为实际的培训日期。
保存后,该文档即完成了数字化归档。以后只需搜索“防汛”或“2023-10”,系统即可秒级定位到该文件。
为了方便后续备份和导出,可以设置自动归档路径规则。在 Settings -> Settings -> Documents -> File naming 中,可以自定义文件名格式。推荐格式如下:
```text {created_year}/{created_month}/{document_type}/{title} ```这样,当你导出文档时,文件会自动按照 2023/10/培训课件/文件名.pdf 的目录结构保存,无需人工整理。
档案数据是核心资产,必须配置自动备份。Paperless-ngx 的数据主要存储在 PostgreSQL 数据库 和 data/media 目录中。
创建一个备份脚本 backup.sh:
```bash !/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_backup_$DATE.sql 备份文档数据 tar -czf $BACKUP_DIR/media_backup_$DATE.tar.gz ./data ./media 删除7天前的备份 find $BACKUP_DIR -name ".sql" -mtime +7 -delete find $BACKUP_DIR -name ".tar.gz" -mtime +7 -delete ```赋予执行权限并设置定时任务:
```bash chmod +x backup.sh crontab -e ```在 crontab 中添加每天凌晨2点自动备份:
```text 0 2 cd ~/paperless-ngx && ./backup.sh ```如需恢复数据,只需将数据库文件导入 Docker 容器,并将压缩包解压覆盖回 data 和 media 目录,重启服务即可。
1. 文档上传后一直处于“Processing”状态:
这通常是 OCR 进程卡死。检查 Redis 服务是否正常,或重启 consumer 服务:
docker compose restart webserver
2. 中文识别乱码:
确认环境变量 PAPERLESS_OCR_LANGUAGE 已设置为 chi_sim+eng,并确保宿主机已安装中文字体。可进入容器安装字体:
docker compose exec webserver apt-get install -y fonts-wqy-zenhei
3. 端口冲突:
如果服务器8000端口被占用,请修改 docker-compose.yml 中的 ports 映射,例如改为 "8080:8000",然后访问 8080 端口。
档案整理行业认证,这玩意儿到底是不是你的职场“硬通货”?