收起左侧

fnOS用docker搭建无纸化文件管理系统-Paperless-ngx

8
回复
3538
查看
[ 复制链接 ]

0

主题

2

回帖

0

牛值

江湖小虾

2024-12-17 15:18:27 显示全部楼层 阅读模式

[i=s] 本帖最后由 木昜丹徒 于 2024-12-17 15:20 编辑 [/i]<br /> <br />

介绍Paperless-ngx

Paperless-ngx不仅仅是一个文档管理系统,它是一个完整的解决方案,将你的纸质文件转化为可搜索的在线存档,减少纸张的使用。https://github.com/paperless-ngx/paperless-ngx

其核心功能包括:

  • 文档的组织与索引:通过标签、对应者、类型等多种方式组织扫描文档。
  • OCR文本识别:对文档进行光学字符识别,使包含图像的扫描文档也能搜索和选择文本。
  • 多语言支持:利用开源的Tesseract引擎,支持100多种语言。
  • 长期存储格式:文档以PDF/A格式保存,设计用于长期存储。
  • 智能标签与分类:使用机器学习自动添加标签、对应者和文档类型。
  • 广泛的文件支持:很多数字文档支持:不止是图片,连pdf, word,excel,markdown统统都支持。真正实现了,文档数字化,统一管理,高效搜索。
  • 定制化的文件管理:Paperless-ngx管理文件名和文件夹,支持不同的配置。
  • 现代化的网页应用:定制仪表板、过滤器、批量编辑、拖放上传、自定义视图、共享链接等。
  • 全文搜索:自动完成、相关性排序、高亮显示匹配查询的部分。
  • 电子邮件处理:从电子邮件账户导入文档,配置多个账户和规则。
  • 多用户权限系统:内置健壮的多用户权限系统。
  • 多核系统优化:并行处理多个文档。

搭建步骤

1.安装前创建文件夹

创建paperless-ngx文件夹及子文件夹

打开fnOS的文件管理,点击左下角的管理员视角,会弹出一个新的文件管理器窗口,找到并点开docker文件夹

  • 依次创建如下目录(也可以不创建,构建docker的时候会自动创建):
    • consume
    • data
    • export
    • media
    • pgdata
    • redisdata

2.docker安装

  1. 打开fnOS的Docker

  2. 选择Compose,点击右上角的新增项目

  3. 输入项目名称,例如peperless-ngx,选择一个文件夹,用于存放docker-compose.yml文件,粘贴上我后面提供的docker-compose配置文件。

  4. 以下是docker-compose的配置文件。

    version: "3.4"  # 指定使用的Docker Compose文件版本
    
    services:  # 服务定义开始
    
      broker:  # 定义名为broker的服务
        image: library/redis:7  # 使用Docker Hub上的redis官方镜像,版本为7
        restart: unless-stopped  # 容器退出时总是重启,除非是用户手动停止
        volumes:  # 定义挂载卷
          - /volume1/docker/paperless-ngx/redisdata:/data  # 将宿主机的路径挂载到容器内的/data目录
    
      db:  # 定义名为db的服务
        image: library/postgres:15  # 使用Docker Hub上的postgres官方镜像,版本为15
        restart: unless-stopped  # 容器退出时总是重启,除非是用户手动停止
        volumes:  # 定义挂载卷
          - /volume1/docker/paperless-ngx/pgdata:/var/lib/postgresql/data  # 将宿主机的路径挂载到容器内的/var/lib/postgresql/data目录
        environment:  # 设置环境变量
          POSTGRES_DB: paperless  # 设置数据库名为paperless
          POSTGRES_USER: paperless  # 设置数据库用户为paperless
          POSTGRES_PASSWORD: paperless  # 设置数据库密码为paperless
    
      webserver:  # 定义名为webserver的服务
        image: paperlessngx/paperless-ngx:latest  # 使用Docker Hub上的paperless-ngx镜像,始终使用最新版本
        restart: unless-stopped  # 容器退出时总是重启,除非是用户手动停止
        depends_on:  # 定义服务依赖
          - db  # 依赖db服务
          - broker  # 依赖broker服务
          - gotenberg  # 依赖gotenberg服务
          - tika  # 依赖tika服务
        ports:  # 定义端口映射
          - "28000:8000"  # 将容器的8000端口映射到宿主机的28000端口,可以根据自己需要做更改
        healthcheck:  # 定义健康检查
          test: ["CMD", "curl", "-fs", "-S", "--max-time", "2", "http://localhost:8000"]  # 使用curl命令检查容器内的服务是否健康
          interval: 30s  # 每30秒检查一次
          timeout: 10s  # 超时时间为10秒
          retries: 5  # 连续失败5次后认为服务不健康
        volumes:  # 定义挂载卷 可以根据自己的系统做更改,注意vol的不同,我这个是指第2块硬盘。
          - /vol2/docker/paperless-ngx/data:/usr/src/paperless/data  # 挂载数据目录,系统不同可能vol2不一样
          - /vol2/docker/paperless-ngx/media:/usr/src/paperless/media  # 挂载媒体目录,系统不同可能vol2不一样
          - /vol2/docker/paperless-ngx/export:/usr/src/paperless/export  # 挂载导出目录,系统不同可能vol2不一样
          - /vol2/docker/paperless-ngx/consume:/usr/src/paperless/consume  # 挂载消费目录,系统不同可能vol2不一样
        environment:  # 设置环境变量
          PAPERLESS_REDIS: redis://broker:6379  # 配置Redis连接信息
          PAPERLESS_DBHOST: db  # 配置数据库主机地址
          PAPERLESS_TIKA_ENABLED: 1  # 启用Tika服务
          PAPERLESS_TIKA_GOTENBERG_ENDPOINT: http://gotenberg:3000  # 配置Gotenberg服务的地址
          PAPERLESS_TIKA_ENDPOINT: http://tika:9998  # 配置Tika服务的地址
          PAPERLESS_OCR_LANGUAGES: chi-sim chi-tra  # 设置OCR识别支持的语言,可以更改
          PAPERLESS_OCR_LANGUAGE: eng+chi_sim  # 设置默认OCR识别语言,可以更改
          USERMAP_UID: 0  # 设置用户映射的UID
          USERMAP_GID: 0  # 设置用户映射的GID
          PAPERLESS_TIME_ZONE: Asia/Shanghai  # 设置时区为上海,可以更改
        dns:  # 定义DNS服务器
          - 8.8.8.8  # 使用Google的DNS服务器
          - 8.8.4.4  # 使用Google的DNS服务器
    
      gotenberg:  # 定义名为gotenberg的服务
        image: gotenberg/gotenberg:7.10  # 使用Docker Hub上的gotenberg镜像,版本为7.10
        restart: unless-stopped  # 容器退出时总是重启,除非是用户手动停止
        command:  # 定义启动命令
          - "gotenberg"  # 启动gotenberg服务
          - "--chromium-disable-javascript=true"  # 禁用Chromium的JavaScript
          - "--chromium-allow-list=file:///tmp/.*"  # 设置Chromium允许访问的文件路径
    
      tika:  # 定义名为tika的服务
        image: apache/tika:latest  # 使用Docker Hub上的tika镜像,始终使用最新版本
        restart: unless-stopped  # 容器退出时总是重启,除非是用户手动停止

    配置基本上都做了注释,还是不清楚的可以网上搜索或者用AI解读一下。

    里面的有一些配置不清楚的情况下尽量不要随便改动。

    • webserver 的port 部分: 可以改为其他端口号 如"38000:8000" ,不要修改后面的8000
    • PAPERLESS_OCR_LANGUAGES: 设置paperless 支持的语言,chi-sim chi-tra (简体中文、繁体中文),你可以加入你想要的语言如:jpn。另外系统已经内置:英语、德语、意大利语等
    • PAPERLESS_OCR_LANGUAGE:默认ocr的语言,我这里设置的英文和中文简体
    • PAPERLESS_TIME_ZONE: 设置你的时区
  5. 点击完成按钮,这样就创建好了一个项目,我们点击启动就可以开始构建项目了。

  6. 构建项目的时候保持网络畅通,如果出错,重新再构建一次应该就可以了。

  7. 构建完成后会自动运行,会有5个容器同时运行。

3.使用方法

  1. 使用浏览器打开 [ip]:[端口]

ip是fnOS所在的ip,端口为之前配置文件中设置的28000端口,这个后面如果不喜欢是可以做更改的。

  1. 打开后会要求输入用户名和密码,这个需要创建,初始是没有的。

  1. 创建账号和密码。

    1. 选择webserver的容器,选择打开终端

    2. 连接第一个bash,输入后面的命令创建超级用户:python3 manage.py createsuperuser

    3. 输入完成后会让你依次输入用户名,如果什么都不输入的话就是用root做超级用户

    4. 然后再输入邮箱,以及2次密码,输入密码的时候会不会有显示,这是Linux的特性不用担心,2次输入一致就行,输入错了也可以重新输入。后面忘了截图,我就不演示了。

  2. 至此,安装就全部完成了,然后可以输入用户名及密码,并愉快的玩耍了。

  3. 进阶的玩法,大家可以进入系统后,点击左下角的帮助文档,会打开这个项目的github页面,我这打不开,也不做演示了,大家可以网上搜一下。

收藏
送赞 3
分享

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

0

主题

2

回帖

0

牛值

江湖小虾

2024-12-28 18:07:38 楼主 显示全部楼层
我是建议放在其他盘的,这样的话万一你的系统盘挂掉了,还有可能找回文件。也就是说最好是能挂多块硬盘。一块硬盘做系统盘,其他盘做数据盘。
嗯,好的,感谢您的回复  详情 回复
2024-12-29 19:08

1

主题

4

回帖

0

牛值

江湖小虾

2024-12-25 16:58:16 显示全部楼层
问一下,投入使用后,我上传的资料数据存放在docker文件夹下面,还是需要另行选择一个数据存放空间呢?我现在docker数据都是放在安装系统的盘里面了,这样是否合适?会不会随着使用时间的增加,造成系统盘空间不足
我是建议放在其他盘的,这样的话万一你的系统盘挂掉了,还有可能找回文件。也就是说最好是能挂多块硬盘。一块硬盘做系统盘,其他盘做数据盘。  详情 回复
2024-12-28 18:07

1

主题

4

回帖

0

牛值

江湖小虾

2024-12-29 19:08:13 显示全部楼层
嗯,好的,感谢您的回复

0

主题

1

回帖

0

牛值

江湖小虾

2025-5-4 09:02:21 显示全部楼层
感谢楼主分享

0

主题

1

回帖

0

牛值

江湖小虾

2025-5-7 09:38:09 显示全部楼层

想用FN Connect从外网访问可能会遇到CSRF 403问题,可以在docker面板打开paperless的终端,安装vim:

apt-get update

apt-get install vim

使用find / -name settings.py找到settings.py文件(会有2个settings.py文件,只有1个有相关内容),用vim编辑该文件,找到:

MIDDLEWARE = [
...
'django.middleware.common.CommonMiddleware',

#'django.middleware.csrf.CsrfViewMiddleware', # 注释掉此行代码即可

'django.contrib.auth.middleware.AuthenticationMiddleware',
...
]

目前我这样做已经可以外网登录paperless,如果还有问题可尝试以下链接的第二种禁用CSRF方法:

Django 全局完全禁用CSRF机制 - ugvibib - 博客园

非常遗憾无法上传文档,只能查看和下载。

0

主题

1

回帖

0

牛值

江湖小虾

2025-5-21 09:04:07 显示全部楼层

配置PAPERLESS_URL这个参数,或者PAPERLESS_ALLOWED_HOSTS、PAPERLESS_CORS_ALLOWED_HOSTS、PAPERLESS_CSRF_TRUSTED_ORIGINS 这三个参数,可以解决CSRF问题,也可以外网访问,上传文档。

0

主题

1

回帖

0

牛值

江湖小虾

2025-6-11 17:28:28 显示全部楼层

我看别人搜索文件,关键字有高亮提示。为啥我的么有呢?需要设置啥吗

0

主题

1

回帖

0

牛值

江湖小虾

为什么我安装完;容器可以运行正常,但IP加端口无法打开呢

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则