在开始部署之前,请确保你拥有一台安装了Ubuntu 22.04 LTS或CentOS 7+操作系统的服务器。为了保证档案管理软件(本文选用开源领域功能最强大的Paperless-ngx)的流畅运行,服务器建议配置如下:2核CPU、4GB内存、50GB可用磁盘空间。系统需具备Root权限或具备Sudo权限的普通用户账户。本指南将全程在命令行模式下操作,无需图形界面。
Paperless-ngx 依赖 Docker 容器化技术进行部署,这是最稳定且易于维护的方式。我们需要更新系统软件源并安装必要的依赖工具。
执行以下命令更新系统并安装基础工具:
```bash sudo apt-get update sudo apt-get install -y curl git ```接下来,使用官方提供的便捷脚本一键安装 Docker。这条命令会自动下载最新版本的 Docker Engine 并启动服务:
```bash curl -fsSL https://get.docker.com | sh ```安装完成后,将当前用户添加到 docker 用户组,以便后续操作无需频繁输入 sudo 密码:
```bash sudo usermod -aG docker $USER newgrp docker ```然后安装 Docker Compose 插件。新版 Docker 已将 Compose 作为插件集成,通常随 Docker 主程序自动安装。你可以通过以下命令验证是否安装成功:
```bash docker compose version ```如果输出了版本号,说明环境准备就绪。若提示未找到命令,可手动安装:
```bash sudo apt-get install -y docker-compose-plugin ```为了保持系统整洁,我们将在用户目录下创建一个专门的文件夹来存放档案管理软件的配置文件和数据。执行以下命令:
```bash mkdir -p ~/paperless-ngx cd ~/paperless-ngx ```进入目录后,我们需要创建几个关键子目录,用于持久化存储数据、上传的文档以及导出的文件:
```bash mkdir -p data consume export media ```这里data目录用于存放数据库及索引文件,consume目录是“监控文件夹”,放入其中的文档会被自动识别并归档,export目录用于存放导出的原始文件,media目录用于存储处理后的文档图片和预览图。为了保证容器能正确读写这些目录,我们需要设置相应的权限:
```bash chmod -R 755 consume export media ```这是部署的核心最关键的一步。我们需要创建一个docker-compose.yml文件,定义服务组件。Paperless-ngx 需要依赖数据库、缓存、文档转换工具等多个服务。请使用 vim 或 nano 编辑器创建文件:
```bash nano docker-compose.yml ```将以下完整配置内容复制粘贴到文件中。该配置包含了 Web 服务、PostgreSQL 数据库、Redis 缓存、Gotenberg(用于 PDF 转换)和 Tika(用于 Office 文档预览):
```yaml version: "3.4" services: broker: image: docker.io/library/redis:7 restart: always volumes: - redisdata:/data db: image: docker.io/library/postgres:15 restart: always volumes: - dbdata:/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" volumes: - data:/usr/src/paperless/data - media:/usr/src/paperless/media - ./export:/usr/src/paperless/export - ./consume:/usr/src/paperless/consume env_file: - .env healthcheck: test: ["CMD", "curl", "-f", "http://localhost:8000"] interval: 30s timeout: 10s retries: 5 start_period: 40s gotenberg: image: docker.io/gotenberg/gotenberg:7 restart: always volumes: - gotenbergdata:/data tika: image: ghcr.io/paperless-ngx/tikaserver:latest restart: always volumes: dbdata: redisdata: gotenbergdata: data: media: ```配置详解:该配置将 Web 服务的 8000 端口映射到了宿主机的 8000 端口;通过 volumes 挂载了刚才创建的 consume 和 export 目录;env_file 指定了环境变量文件。编辑完成后,按 Ctrl+O 保存,按 Enter 确认,最后按 Ctrl+X 退出编辑器。
我们需要创建一个 .env 文件来设置管理员账号、密码以及系统基础配置。在当前目录下执行:
```bash nano .env ```将以下内容复制进去。请务必修改 PAPERLESS_ADMIN_PASSWORD 的值,将其设置为你强密码:
```ini 设置管理员用户名和密码 PAPERLESS_ADMIN_USER=admin PAPERLESS_ADMIN_PASSWORD=your_secure_password_here 设置时区,改为 Asia/Shanghai 以符合国内时间 PAPERLESS_TIME_ZONE=Asia/Shanghai 设置允许访问的主机名,生产环境建议填入域名,此处填 允许所有 PAPERLESS_ALLOWED_HOSTS= 设置站点使用的 URL,如果后续配置了反向代理,这里需要改为 https://your-domain.com PAPERLESS_URL=http://localhost:8000 配置 OCR 识别语言,默认为英语,后续章节会演示如何开启中文 PAPERLESS_OCR_LANGUAGE=eng 启用自动回收站功能 PAPERLESS_ENABLE_DELETE_FRONTEND_CONFIG=true ```保存并退出编辑器。这个文件控制了系统的核心行为,特别是时区设置,确保你上传的文档时间戳准确无误。
配置文件准备就绪后,我们拉取镜像并启动所有服务。在 ~/paperless-ngx 目录下执行:
```bash docker compose up -d ```
参数 -d 表示在后台运行。首次运行需要下载镜像,大小约为 1GB 左右,取决于你的网速,请耐心等待。你可以使用以下命令查看服务启动状态:
```bash docker compose ps -a ```当所有服务的 State 列都显示为 Up 时,说明部署成功。此时,打开浏览器,访问 http://服务器IP地址:8000。你将看到登录界面,输入 .env 文件中配置的用户名和密码即可登录。
如果服务器需要暴露在公网,直接使用 8000 端口不仅不美观,还存在安全隐患。我们通常使用 Nginx 进行反向代理并配置 SSL 证书。首先安装 Nginx:
```bash sudo apt-get install -y nginx ```创建一个新的站点配置文件:
```bash sudo nano /etc/nginx/sites-available/paperless ```输入以下配置内容(假设你的域名为 example.com,请替换为实际域名):
```nginx server { listen 80; server_name example.com; location / { proxy_pass http://127.0.0.1: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; 处理大文件上传 client_max_body_size 100M; } 静态文件缓存配置 location /static/ { alias /home/your_username/paperless-ngx/media/static/; expires 30d; } } ```注意:将 your_username 替换为你的实际用户名。启用该配置并重启 Nginx:
```bash sudo ln -s /etc/nginx/sites-available/paperless /etc/nginx/sites-enabled/ sudo nginx -t sudo systemctl restart nginx ```此时你可以通过域名访问服务。建议使用 Certbot 申请 Let's Encrypt 免费证书以开启 HTTPS,确保数据传输安全。
默认安装仅支持英文 OCR。要处理中文档案,我们需要进入容器安装中文语言包。执行以下命令进入 Webserver 容器的 Shell 环境:
```bash docker compose exec webserver bash ```在容器内执行以下命令更新源并安装简体中文语言包:
```bash apt-get update apt-get install -y tesseract-ocr-chi-sim ```安装完成后,退出容器:
```bash exit ```接着,我们需要修改宿主机的 .env 文件,将 OCR 语言设置改为中文加英文:
```ini PAPERLESS_OCR_LANGUAGE=chi_sim+eng ```重启容器使配置生效:
```bash docker compose restart webserver ```重启后,系统将自动识别上传文档中的中文和英文内容。你可以在“设置”->“OCR 设置”中查看语言包是否已加载。
档案数据至关重要,必须建立自动备份机制。最简单的方法是定期打包 data 目录和导出数据库。创建一个备份脚本 backup.sh:
```bash nano ~/backup.sh ```写入以下内容:
```bash !/bin/bash DATE=$(date +%Y%m%d_%H%M%S) BACKUP_DIR=/home/your_username/backups mkdir -p $BACKUP_DIR 备份 Postgres 数据库 docker compose exec -T db pg_dump -U paperless paperless > $BACKUP_DIR/paperless_db_$DATE.sql 打包 data 目录和 media 目录 tar -czf $BACKUP_DIR/paperless_data_$DATE.tar.gz ./data ./media 删除 7 天前的备份 find $BACKUP_DIR -name "paperless_" -mtime +7 -exec rm {} \; ```赋予执行权限并设置定时任务(Cron):
```bash chmod +x ~/backup.sh crontab -e ``>在 Crontab 中添加一行,表示每天凌晨 2 点执行备份:
```cron 0 2 /home/your_username/backup.sh ```至此,一套具备中文识别、自动归档、反向代理保护及自动备份的企业级档案管理系统已完全部署完毕。你可以将文件直接 SCP 上传到 consume 目录,系统将自动抓取、识别并归档,实现真正的无人值守档案管理。