本文将指导你利用开源技术栈,从零构建一套功能完备的电子档案管理系统。我们选用的核心组件是 Paperless-ngx,这是一款基于 Django 开发的社区版文档管理工具,支持 OCR 文字识别、自动归档、标签管理,完全符合档案管理的核心需求。底层依赖 Docker 进行容器化部署,数据库使用 PostgreSQL,缓存队列使用 Redis。这套方案不仅永久免费,而且数据完全掌握在自己手中。
在开始部署之前,需要确保服务器环境已安装 Docker 和 Docker Compose。以下命令适用于 CentOS 7/8 及 Ubuntu 20.04/22.04 系统。
卸载系统可能存在的旧版本 Docker:
```bash sudo yum remove docker docker-client docker-client-latest docker-common docker-latest-containerd docker-latest-logrotate docker-logrotate docker-engine ```接着,使用阿里云镜像源安装 Docker,这能大幅提高国内环境的下载速度:
```bash sudo yum install -y yum-utils device-mapper-persistent-data lvm2 sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo sudo yum install -y docker-ce docker-ce-cli containerd.io ```启动 Docker 服务并设置开机自启:
```bash sudo systemctl start docker sudo systemctl enable docker ```安装 Docker Compose 插件。对于较新的 Docker 版本,Compose 通常作为插件集成,但为了兼容性,我们单独安装 standalone 版本:
```bash sudo curl -L "https://github.com/docker/compose/releases/download/v2.20.2/docker-compose-linux-x86_64" -o /usr/local/bin/docker-compose sudo chmod +x /usr/local/bin/docker-compose docker-compose --version ```为了规范管理,我们在服务器根目录下创建专门的 project 目录,并规划好数据存储路径。执行以下命令:
```bash mkdir -p /data/paperless cd /data/paperless mkdir -p consume export data ```在 /data/paperless 目录下,使用 vi 或 nano 编辑器创建 docker-compose.yml 文件。这是整个部署的核心配置文件,请直接复制以下完整内容,不要遗漏任何行:
```yaml version: "3.4" services: broker: image: docker.io/library/redis:7 restart: always volumes: - ./redis:/data db: image: docker.io/library/postgres:15 restart: always volumes: - ./postgres:/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 environment: PAPERLESS_REDIS: redis://broker:6379 PAPERLESS_DBHOST: db PAPERLESS_DBUSER: paperless PAPERLESS_DBPASS: paperless PAPERLESS_DBNAME: paperless PAPERLESS_OCR_LANGUAGE: chi_sim+eng PAPERLESS_OCR_MY_LANGUAGES: chi_sim,eng PAPERLESS_TIME_ZONE: Asia/Shanghai PAPERLESS_ADMIN_USER: admin PAPERLESS_ADMIN_PASSWORD: your_secure_password_here 取消注释以下行以启用中文界面 PAPERLESS_ALLOWED_LANGUAGES: en,zh-cn gotenberg: image: docker.io/gotenberg/gotenberg:7 restart: always volumes: - ./gotenberg:/gotenberg/data tika: image: docker.io/apache/tika:latest restart: always webserver: image: ghcr.io/paperless-ngx/paperless-ngx:latest restart: always depends_on: - db - broker - gotenberg - tika 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 environment: PAPERLESS_REDIS: redis://broker:6379 PAPERLESS_DBHOST: db PAPERLESS_DBUSER: paperless PAPERLESS_DBPASS: paperless PAPERLESS_DBNAME: paperless PAPERLESS_OCR_LANGUAGE: chi_sim+eng PAPERLESS_TIME_ZONE: Asia/Shanghai PAPERLESS_ADMIN_USER: admin PAPERLESS_ADMIN_PASSWORD: admin123 PAPERLESS_URL: http://localhost:8000 PAPERLESS_CONSUMER_POLLING: 30 PAPERLESS_CONSUMER_RECURSIVE: true ```配置详解:
配置文件保存完毕后,在 /data/paperless 目录下执行以下命令拉取镜像并启动容器:
```bash docker-compose up -d ```第一次启动需要下载镜像,大小约为 1GB 左右,请耐心等待。可以通过以下命令查看实时日志,确认服务是否正常启动:
```bash docker-compose logs -f webserver ```
当日志中出现 Application startup complete 字样时,说明服务已就绪。此时,打开浏览器访问 http://服务器IP:8000。使用配置文件中设置的用户名 admin 和密码 admin123 登录系统。
注意: 登录后请务必进入 Settings -> Users 界面,立即修改管理员密码以确保安全。
系统部署完成后,我们进行第一份档案的录入实操。
档案管理的核心在于分类。Paperless-ngx 提供了强大的 Save rules(保存规则),可以根据文件名、OCR 内容、标签等属性自动打标签和归档。
假设我们需要将所有包含“合同”字样的文档自动归类到“法务部”文档类型下,并打上“重要”标签。操作步骤如下:
现在,上传一份标题或内容包含“合同”的文档,系统将自动应用上述分类和标签,无需人工干预。
为了保证档案数据的绝对安全,必须建立定期备份机制。我们需要备份数据库和文档文件两部分。
创建一个备份脚本 backup.sh:
```bash !/bin/bash DATE=$(date +%Y%m%d_%H%M%S) BACKUP_DIR=/data/backup mkdir -p $BACKUP_DIR 备份数据库 docker exec paperless-db-1 pg_dump -U paperless paperless > $BACKUP_DIR/paperless_db_$DATE.sql 打包文档数据 tar -czvf $BACKUP_DIR/paperless_media_$DATE.tar.gz /data/paperless/media /data/paperless/data 删除7天前的备份 find $BACKUP_DIR -name ".sql" -mtime +7 -exec rm {} \; find $BACKUP_DIR -name ".tar.gz" -mtime +7 -exec rm {} \; ```赋予执行权限并设置定时任务:
```bash chmod +x backup.sh crontab -e ```添加以下行,实现每天凌晨 2 点自动备份:
```text 0 2 /data/paperless/backup.sh ```在实操过程中,可能会遇到 OCR 进程卡死或内存溢出的情况。可以通过以下方式调整: