为了实现档案管理的免费升级与私有化部署,我们将采用目前最成熟的开源方案Paperless-ngx。该方案基于Docker容器化技术,能够在一台普通的云服务器或本地电脑上运行。确保你的系统是Ubuntu 20.04或更高版本,或者CentOS 7+。以下操作以Ubuntu为例。
第一步是更新系统源并安装必要的依赖工具。执行以下命令:
```bash sudo apt-get update sudo apt-get install -y curl git ```接下来安装Docker和Docker Compose。为了保证环境的一致性,我们使用官方提供的安装脚本。执行以下命令一键安装Docker:
```bash curl -fsSL https://get.docker.com -o get-docker.sh sudo sh get-docker.sh ```安装完成后,将当前用户添加到docker组,以便后续操作不需要每次都输入sudo:
```bash sudo usermod -aG docker $USER newgrp docker ```验证Docker是否安装成功,输入以下命令,如果输出版本信息则说明安装无误:
```bash docker --version docker compose version ```为了方便管理,我们在系统中创建一个专门的目录用于存放Paperless-ngx的配置文件和数据。执行以下命令:
```bash mkdir -p ~/paperless-ngx cd ~/paperless-ngx ```在这个目录下,我们需要创建docker-compose.yml文件。这是整个部署的核心配置文件。请直接复制以下完整内容到该文件中。不要遗漏任何配置项,特别是关于OCR语言包的设置,这对于中文档案的识别至关重要。
使用nano docker-compose.yml命令编辑文件,并粘贴以下内容:
注意:请务必将PAPERLESS_ADMIN_PASSWORD的值修改为你自己的高强度密码。配置文件中的PAPERLESS_OCR_LANGUAGES: chi_sim+eng项确保了系统能同时识别简体中文和英文。
配置文件保存并退出后(在nano编辑器中按Ctrl+X,然后按Y,最后按Enter),我们开始拉取镜像并启动服务。在~/paperless-ngx目录下执行:
该命令会自动从GitHub拉取最新的Paperless-ngx镜像、PostgreSQL数据库镜像和Redis镜像。首次运行需要下载大约1GB-2GB的数据,具体取决于你的网络速度。请耐心等待,直到命令行提示容器已启动。
使用以下命令查看容器运行状态,确保所有服务的Status均为Up:
如果webserver服务显示为Up (healthy),说明系统已经启动成功。此时,打开浏览器,访问服务器的IP地址加上8000端口,例如:http://localhost:8000(如果是远程服务器,请替换为对应的公网IP)。
虽然我们在配置文件中预设了管理员账号,但为了安全起见,建议登录后立即检查。使用配置文件中设置的admin和密码登录系统。
登录后,进入右上角的Settings -> Settings -> OCR选项卡。在这里你可以确认OCR语言设置是否正确。系统默认会使用Tesseract OCR引擎。如果在上传文档时发现中文识别率不高,可以尝试在这里添加更多的繁体中文支持(如chi_tra)。

为了实现“免费升级”的智能体验,我们需要配置文档自动归档规则。在Settings -> Document matching中,我们可以创建匹配规则。例如,创建一个名为“财务发票”的规则,匹配类型选择File name contains,匹配值输入invoice或发票,然后设置对应的标签为“财务”,文档类型为“发票”。这样,以后只要上传文件名包含这些关键词的文件,系统会自动打标。
最简单的上传方式是直接点击Web界面上的Upload Documents按钮。但作为技术专家,我们推荐使用更高效的“消费文件夹”方式。
在之前的配置中,我们已经将宿主机的./consume目录挂载到了容器内。这意味着你只需要将文件拷贝到服务器的~/paperless-ngx/consume目录下,Paperless-ngx就会自动抓取、处理并归档该文件,最后将原文件移除或移动到已处理目录。
执行以下命令模拟上传一张发票:
```bash 假设你有一张名为invoice.pdf的文件 cp invoice.pdf ~/paperless-ngx/consume/ ```稍等片刻,刷新Web界面,你会发现这张PDF已经出现在文档列表中。点击进入详情页,你会惊讶地发现,PDF中的文字不仅被提取了出来(支持全文检索),而且元数据(如日期、金额)如果格式标准,也会被自动识别。
在文档详情页右侧,你可以手动添加标签、日期和文档类型。这些元数据是后续检索的关键。Paperless-ngx支持保存视图,你可以将常用的筛选条件(如“标签:未处理”)保存为侧边栏的快捷方式。
作为档案管理软件,数据的安全性是第一位的。Paperless-ngx的数据主要存储在PostgreSQL数据库和media卷中。我们需要编写一个简单的脚本来定期备份数据。
创建一个备份脚本backup.sh:
粘贴以下内容:
```bash !/bin/bash BACKUP_DIR=~/paperless-ngx/backups mkdir -p $BACKUP_DIR DATE=$(date +%Y%m%d_%H%M%S) 备份数据库 docker exec paperless-ngx-db-1 pg_dump -U paperless paperless > $BACKUP_DIR/db_dump_$DATE.sql 备份媒体文件(包含上传的PDF和生成的缩略图) docker run --rm \ -v paperless-ngx_media:/data:ro \ -v $BACKUP_DIR:/backup \ alpine tar czf /backup/media_$DATE.tar.gz /data echo "Backup completed: $DATE" ```注意:脚本中的paperless-ngx-db-1是你的数据库容器名称,可以通过docker ps命令确认。如果名称不同,请修改脚本。给脚本执行权限并运行:
恢复数据时,首先停止服务,恢复数据库,然后恢复媒体文件,最后重启服务即可。这确保了即使服务器发生故障,你的档案数据也能万无一失。
如果你希望在外网也能访问这个档案系统,建议使用Nginx作为反向代理,并配置SSL证书。不要直接将8000端口暴露在公网。
安装Nginx:
```bash sudo apt-get install nginx certbot python3-certbot-nginx ```创建一个新的Nginx配置文件:
```bash sudo nano /etc/nginx/sites-available/paperless ```配置内容如下:
```nginx server { listen 80; server_name your-domain.com; 替换为你的域名 location / { proxy_pass http://localhost:8000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } } ```启用配置并申请SSL证书:
```bash sudo ln -s /etc/nginx/sites-available/paperless /etc/nginx/sites-enabled/ sudo nginx -t sudo systemctl reload nginx sudo certbot --nginx -d your-domain-domain.com ```