从零搭建轻量级数字档案馆系统 完成文字识别知识提取智能化落地

一、前期准备清单

以下所有工具/组件均为开源免费,无需购买授权,适合10万份以下PDF/图片档案的中小单位或个人试点:

  • 服务器环境:Windows Server 2019/2022、Linux Ubuntu 22.04 LTS 二选一(推荐后者,性能更稳定)
  • 硬件配置:4核CPU、8G内存、1T机械硬盘(或256G SSD系统盘+1T机械数据盘)
  • 核心组件:Nextcloud Hub 29(存管基础)、Tesseract OCR 5.3.3(文字识别)、Ollama 0.1.39(本地大模型)、通义千问开源模型Qwen2.5-7B-Instruct(知识提取)、Nextcloud OCR Helper插件

二、Ubuntu 22.04 LTS 基础环境搭建

2.1 更新系统软件源

登录服务器终端(如PuTTY、Windows Terminal SSH连接),执行以下命令更新系统并安装基础依赖:

```bash sudo apt update && sudo apt upgrade -y sudo apt install curl wget git gnupg2 software-properties-common -y ```

2.2 安装Docker和Docker Compose

所有核心组件通过Docker容器部署,避免环境冲突:

```bash 安装Docker GPG密钥 curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg 添加Docker稳定源 echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null 安装Docker和Docker Compose插件 sudo apt update && sudo apt install docker-ce docker-ce-cli containerd.io docker-compose-plugin -y 验证安装 docker --version docker compose version ```

三、部署轻量级存管基础Nextcloud Hub 29

3.1 创建Docker Compose配置文件

执行以下命令创建专属目录并编辑配置:

```bash mkdir -p /opt/nextcloud/data /opt/nextcloud/db /opt/nextcloud/config cd /opt/nextcloud nano docker-compose.yml ```

将以下完整配置复制到文件中(按Ctrl+O保存,Enter确认,Ctrl+X退出):

```yaml version: '3.8' services: db: image: mariadb:10.11 restart: always command: --transaction-isolation=READ-COMMITTED --binlog-format=ROW volumes: - /opt/nextcloud/db:/var/lib/mysql environment: - MYSQL_ROOT_PASSWORD=your_strong_mysql_root_password 替换为强密码 - MYSQL_PASSWORD=your_strong_nextcloud_db_password 替换为Nextcloud数据库密码 - MYSQL_DATABASE=nextcloud - MYSQL_USER=nextcloud networks: - nextcloud_net app: image: nextcloud:29-fpm-alpine restart: always volumes: - /opt/nextcloud/config:/var/www/html/config - /opt/nextcloud/data:/var/www/html/data - /opt/nextcloud/apps:/var/www/html/custom_apps - /opt/nextcloud/themes:/var/www/html/themes environment: - MYSQL_HOST=db - MYSQL_PASSWORD=your_strong_nextcloud_db_password 替换为与上方一致的密码 - MYSQL_DATABASE=nextcloud - MYSQL_USER=nextcloud - NEXTCLOUD_ADMIN_USER=your_admin_username 替换为管理员用户名 - NEXTCLOUD_ADMIN_PASSWORD=your_strong_admin_password 替换为管理员强密码 - NEXTCLOUD_TRUSTED_DOMAINS=your_server_ip 替换为服务器公网/内网IP或域名 depends_on: - db networks: - nextcloud_net web: image: nginx:alpine restart: always ports: - "80:80" volumes: - /opt/nextcloud/config/nginx.conf:/etc/nginx/nginx.conf:ro - /opt/nextcloud/config:/var/www/html/config:ro - /opt/nextcloud/data:/var/www/html/data:ro - /opt/nextcloud/apps:/var/www/html/custom_apps:ro - /opt/nextcloud/themes:/var/www/html/themes:ro depends_on: - app networks: - nextcloud_net networks: nextcloud_net: ```

3.2 创建Nginx反向代理配置

```bash nano /opt/nextcloud/config/nginx.conf ```

复制以下配置:

```nginx user nginx; worker_processes auto; error_log /var/log/nginx/error.log warn; pid /var/run/nginx.pid; events { worker_connections 1024; } http { include /etc/nginx/mime.types; default_type application/octet-stream; log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log main; sendfile on; tcp_nopush on; keepalive_timeout 65; upstream php-handler { server app:9000; } server { listen 80; server_name _; root /var/www/html; index index.php index.html /index.php$request_uri; client_max_body_size 10G; 支持大文件上传 fastcgi_buffers 64 4K; location / { try_files $uri $uri/ /index.php$request_uri; } location ~ ^/(?:build|tests|config|lib|3rdparty|templates|data)/ { deny all; } location ~ ^/(?:\.|autotest|occ|issue|indie|db_|console) { deny all; } location ~ \.php(?:$|/) { fastcgi_split_path_info ^(.+?\.php)(/.)$; set $path_info $fastcgi_path_info; try_files $fastcgi_script_name =404; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param PATH_INFO $path_info; fastcgi_param HTTPS off; fastcgi_pass php-handler; } location ~ \.(?:css|js|woff2?|svg|gif|png|html|ttf|ico|jpg|jpeg|webp)$ { try_files $uri /index.php$request_uri; expires 6M; add_header Cache-Control "public, immutable"; } } } ```

3.3 启动Nextcloud

```bash cd /opt/nextcloud docker compose up -d ```

等待5分钟,访问服务器IP的80端口,登录配置的管理员账号,完成初始化。

四、配置文字识别(OCR)模块

4.1 部署Nextcloud OCR Helper插件

在Nextcloud管理界面→应用→搜索“OCR Helper”,点击安装并启用

4.2 部署Tesseract OCR服务容器

```bash cd /opt/nextcloud nano docker-compose.yml ```

从零搭建轻量级数字档案馆系统 完成文字识别知识提取智能化落地

在services节点下添加以下内容:

```yaml tesseract: image: jitesoft/tesseract:5.3.3 restart: always volumes: - /opt/nextcloud/data:/tmp/ocr:rw 临时目录用于Nextcloud传输待识别文件 networks: - nextcloud_net ```

重新启动服务:

```bash docker compose up -d --build ```

4.3 关联OCR服务

登录Nextcloud管理界面→设置→OCR Helper,在“Tesseract API URL”处填入http://tesseract:5000,勾选“自动识别新上传的PDF和图片”,点击保存。

五、配置知识提取智能化模块

5.1 部署Ollama本地大模型容器

```bash cd /opt/nextcloud nano docker-compose.yml ```

在services节点下添加以下内容:

```yaml ollama: image: ollama/ollama:0.1.39 restart: always volumes: - /opt/ollama:/root/.ollama ports: - "11434:11434" deploy: resources: reservations: devices: - driver: nvidia count: 1 capabilities: [gpu] 无GPU则删除deploy节点,改为使用CPU(速度较慢) networks: - nextcloud_net ```

5.2 下载通义千问开源模型

进入Ollama容器:

```bash docker exec -it ollama /bin/bash ```

执行以下命令下载Qwen2.5-7B-Instruct:

```bash ollama pull qwen2.5:7b-instruct ```

5.3 部署Nextcloud Assistant插件与自定义知识提取提示

在Nextcloud管理界面→应用→搜索“Assistant”,点击安装并启用;再搜索“Local Large Language Model”,安装并启用后,在管理界面→设置→Local LLM,填入Ollama地址http://ollama:11434,选择模型qwen2.5:7b-instruct,点击保存。

回到个人设置→Assistant,点击添加自定义任务,任务名填“档案知识提取”,提示词填入:

```text 请从以下档案文本中提取出:档案编号(如果有的话)、档案主题、归档日期、密级、保管期限、关键人物、关键事件摘要,输出格式为Markdown表格,无内容的字段填“无”。 文本内容:{{selection}} ```

点击保存。

六、实操验证与日常使用

  • OCR自动识别:上传一份扫描版PDF到Nextcloud,10分钟内(无GPU可能更久)文件详情页会新增“可搜索文本”标签,全文搜索可直接命中内容。
  • 知识提取:打开已识别的档案,选中部分或全部文本,右键→Assistant→选择“档案知识提取”,等待30秒-2分钟即可生成Markdown表格。
AI咨询
热线电话

028-85154420

15388110056

全国售前咨询电话

扫码咨询
安答联动微信公众号二维码

微信扫码关注安答联动

申请试用
热线电话
申请试用

安答联动档案管理系统