使用NAS开启无纸化办公,Docker部署开源文档管理系统『Paperless-ngx』

使用NAS开启无纸化办公,Docker部署开源文档管理系统『Paperless-ngx』

哈喽小伙伴们好,我是Stark-C~

对于文案类的办公场景来说,手头堆放最多的可能就是各种文档文件,以及各种用过的打印废纸。

这么多年来,不管是领导还是员工,都希望能够使用数字化管理做到无纸化办公,抛开环保不谈,更重要的是它能节约成本开支,便于管理与提高效率。这种管理工具市面上不多,并且基本还是收费的。

今天为大家分享的这个项目『Paperless-ngx』就是一款非常不错的无纸化办公管理工具,可以轻松管理我们日常常见的各类文档,最重要的是,它还是免费开源,支持本地私有化部署也保障了文档的安全性。

关于Paperless-ngx

🔺当我们看到Paperless-ngx标识的时候,第一眼看到的绿叶就说明它的功能亮点:绿色环保(也就是它倡导的“无纸化”),实时上它对于很多职场人士来说,确实可以做到无纸化办公。简单谈说,它其实就是帮助用户实现无纸化办公和文档数字化管理工具,其核心功能包括:

  • 文档的组织与索引:通过标签、对应者、类型等多种方式组织扫描文档。

  • OCR文本识别:对文档进行光学字符识别,使包含图像的扫描文档也能搜索和选择文本。

  • 多语言支持:利用开源的Tesseract引擎,支持100多种语言。

  • 长期存储格式:文档以PDF/A格式保存,设计用于长期存储。

  • 智能标签与分类:使用机器学习自动添加标签、对应者和文档类型。

  • 广泛的文件支持:支持PDF文档、图像、纯文本文件、Office文档等。

  • 定制化的文件管理:Paperless-ngx管理文件名和文件夹,支持不同的配置。

  • 现代化的网页应用:定制仪表板、过滤器、批量编辑、拖放上传、自定义视图、共享链接等。

  • 全文搜索:自动完成、相关性排序、高亮显示匹配查询的部分。

  • 电子邮件处理:从电子邮件账户导入文档,配置多个账户和规则。

  • 多用户权限系统:内置健壮的多用户权限系统。

  • 多核系统优化:并行处理多个文档。

然后引用下其他网友总结出来的几个较为常见且实用的使用场景:

个人文件管理:无论是家庭账单、保险合同还是医疗报告,Paperless-ngx 都能帮你把纸质文件变成可搜索的电子文件,告别纸质文件的烦恼。

企业档案管理:对于企业来说,文件量庞大且分类复杂,而Paperless-ngx 的OCR和标签功能让档案的整理和查找都更有效率。特别适合中小企业,降低文件管理成本。

教育与研究:对于学术机构或研究人员来说,海量的研究报告、会议纪要和参考资料都可以借助 Paperless-ngx 进行存档和检索,为学术研究提供支持。

它还提供了演示Demo,有兴趣的小伙伴可以先体验再部署:https://demo.paperless-ngx.com/

Paperless-ngx部署

部署前的准备:

需要说明的是,今天的这个项目需要多大5个容器同时联动和配合,所以我们可以简单的使用Docker Compose即可轻松部署,而在极空间上使用Docker Compose,最简单的方案莫过于Portainer了。

🔺极空间自从上次更新上线SSH功能以后,可玩性和功能性大大增强。我也是第一时间给大家分享了它的一些基本玩法和注意事项,其中就包括Portainer的部署:

按照文中教程,部署好Portainer以及了解它的基本用法还是没有问题的。

我这里再次多嘴提醒下绝大多数的普通用户:如果你只是为了使用命令部署Docker,就和我一样在部署好Portainer之后关掉极空间的SSH功能,一个是因为安全问题,另一个是防止自己误删极空间的系统文件导致系统问题。在Portainer中支持所有容器的命令和图像化部署,哪怕不是Compose命令,大家也可以通过【composerize】官网在线转换,非常方便!

另外就是Portainer是在使用命令部署容器的时候也是需要拉取Docker镜像,所以必要的代理和网络还是少不了的,要不然也会失败,这里就不讨论了~

🔺然后在极空间的Docker目录下新建一个“paperlessngx”的文件夹,在paperlessngx文件夹下面在新建 consume、data、db、export、media、redis、trash总共7个子文件夹。

开始部署:

🔺完成准备工作之后打开Portainer,选择“堆栈--添加堆栈”。

🔺名称随意,在Web编辑器中输入以下命令(直接复制粘贴即可,注意格式很重要):

services:redis:image: redis:7command:- /bin/sh- -c- redis-server --requirepass redispasscontainer_name: PaperlessNGX-REDIShostname: paper-redismem_limit: 512mmem_reservation: 256mcpu_shares: 768security_opt:- no-new-privileges:trueread_only: trueuser: 0:0    # 用户UID和GID,极空间用户不用改,其它NAS用户请自行修改healthcheck:test: ["CMD-SHELL", "redis-cli ping || exit 1"]volumes:- ./Docker/paperlessngx/redis:/data:rw    # 映射redis文件夹实际路径environment:TZ: Asia/Shanghairestart: unless-stopped
​db:image: postgres:17container_name: PaperlessNGX-DBhostname: paper-dbmem_limit: 1gcpu_shares: 768security_opt:- no-new-privileges:truehealthcheck:test: ["CMD", "pg_isready", "-q", "-d", "paperless", "-U", "paperlessuser"]timeout: 45sinterval: 10sretries: 10volumes:- ./Docker/paperlessngx/db:/var/lib/postgresql/data    # 映射db文件夹实际路径environment:POSTGRES_DB: paperlessPOSTGRES_USER: paperlessuserPOSTGRES_PASSWORD: paperlesspassrestart: unless-stopped
​gotenberg:image: gotenberg/gotenberg:latestcontainer_name: PaperlessNGX-GOTENBERGhostname: gotenbergsecurity_opt:- no-new-privileges:trueuser: 0:0    # 用户UID和GID,极空间用户不用改,其它NAS用户请自行修改command:- "gotenberg"- "--chromium-disable-javascript=true"- "--chromium-allow-list=file:///tmp/.*"restart: unless-stopped
​tika:image: ghcr.io/paperless-ngx/tika:latestcontainer_name: PaperlessNGX-TIKAhostname: tikasecurity_opt:- no-new-privileges:trueuser: 0:0    # 用户UID和GID,极空间用户不用改,其它NAS用户请自行修改restart: unless-stopped
​paperless:image: ghcr.io/paperless-ngx/paperless-ngx:latestcontainer_name: PaperlessNGXhostname: paperless-ngxmem_limit: 6gcpu_shares: 1024security_opt:- no-new-privileges:truehealthcheck:test: ["CMD", "curl", "-fs", "-S", "--max-time", "2", "http://localhost:8000"]interval: 30stimeout: 10sretries: 5ports:- 8000:8000    # 项目打开端口,冒号前面请勿和本地冲突volumes:- ./Docker/paperlessngx/data:/usr/src/paperless/data    # 映射data文件夹实际路径- ./Docker/paperlessngx/media  :/usr/src/paperless/media    # 映射media文件夹实际路径- ./Docker/paperlessngx/export:/usr/src/paperless/export    # 映射export文件夹实际路径- ./Docker/paperlessngx/consume:/usr/src/paperless/consume    # 映射consume文件夹实际路径- ./Docker/paperlessngx/trash:/usr/src/paperless/trash    # 映射trash文件夹实际路径environment:PAPERLESS_REDIS: redis://:redispass@paper-redis:6379PAPERLESS_DBENGINE: postgresqlPAPERLESS_DBHOST: paper-dbPAPERLESS_DBNAME: paperlessPAPERLESS_DBUSER: paperlessuserPAPERLESS_DBPASS: paperlesspassPAPERLESS_EMPTY_TRASH_DIR: ../trashPAPERLESS_FILENAME_FORMAT: '{{ created_year }}/{{ correspondent }}/{{ document_type }}/{{ title }}'PAPERLESS_OCR_ROTATE_PAGES_THRESHOLD: 6PAPERLESS_TASK_WORKERS: 1USERMAP_UID: 0    # 用户UID,极空间用户不用改,其它NAS用户请自行修改USERMAP_GID: 0    # 用户GID,极空间用户不用改,其它NAS用户请自行修改PAPERLESS_TIME_ZONE: Asia/ShanghaiPAPERLESS_ADMIN_USER: stark-c    # 默认管理员用户名PAPERLESS_ADMIN_PASSWORD: 123456    # 默认管理员密码PAPERLESS_OCR_LANGUAGES: chi-sim chi-traPAPERLESS_OCR_LANGUAGE: eng+chi_simPAPERLESS_TIKA_ENABLED: 1PAPERLESS_TIKA_GOTENBERG_ENDPOINT: http://gotenberg:3000PAPERLESS_TIKA_ENDPOINT: http://tika:9998restart: unless-stoppeddepends_on:db:condition: service_healthyredis:condition: service_healthytika:condition: service_startedgotenberg:condition: service_started

以上代码需要根据注释自行修改,其它没有注释的如果不懂请不要乱动。

🔺修改好之后点击页面底部的“部署堆栈”。

🔺等待的时间稍长,如果不出意外,就能看到这个项目中的5个容器都在正常运行。

Paperless-ngx体验

🔺打开方式依然是常规的【极空间本地IP:端口号】即可,首次打开需要输入用户名和密码,也就是我们部署容器时环境变量中自己设置的账户密码。

🔺登录进来之后就可以看到它默认显示的就是我们部署时候的用户名信息,并且原生都是中文显示。

🔺我这里尝试先上传一个Word文档,直接在首页(仪表盘)这里点击上传,或者拖拽都可以。

🔺几秒钟的时间,文件就会出现在“文档”菜单。

🔺点开可以直接查看,同时还能OCR识别。可以看到它对文字类的OCR识别可以说是做到了准确率极高,几乎没有漏掉和错误。

🔺多用户还能方便在这里编辑权限。

🔺同样的方法,我上传了一张照片并打开。

🔺可以看到照片中的文字也被成功识别。

🔺不过稍微复杂的图片文字就少点意思了,并且明显英文的识别率要高于中文很多。

🔺对于TXT格式的文档支持的也非常不错,比如说我这里上传的一段Docker Compose.yaml代码,夹杂着中文注释,它都是完美支持。

🔺最后看看对于PDF的支持,依然没任何问题,并且OCR识别同样准确率很高。

🔺它还有一个很好的功能就是智能搜索,给出关键字,很快就能找到我们保存在上面的文档。

🔺有点遗憾的是它目前不支持我写文章的Markdown格式,如果后期支持那就太合我意了!

最后

今天分享的这个项目还是非常实用了,它可以让我们更好地管理他们的文档,提高生产力,减少纸张使用,不管是对企业还是个人都是一个实用的解决方案,有兴趣的小伙伴可以整起来了!

最近正逢极空间双十一感恩回馈大促销活动,极空间的多款产品都有好价。如果你近期有入手NAS的计划,不妨关注下极空间。

好了,以上就是今天给大家分享的内容,我是爱分享的Stark-C,如果今天的内容对你有帮助请记得收藏,顺便点点关注,咱们下期再见!谢谢大家~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/887684.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ES 基本使用与二次封装

概述 基本了解 Elasticsearch 是一个开源的分布式搜索和分析引擎,基于 Apache Lucene 构建。它提供了对海量数据的快速全文搜索、结构化搜索和分析功能,是目前流行的大数据处理工具之一。主要特点即高效搜索、分布式存储、拓展性强 核心功能 全文搜索:…

nextjs+nestjs+prisma写todolist全栈项目

技术栈 nextjsnestjsprisma所学知识 Nextjs组件渲染,状态,路由docker启动Mysql容器prisma操作Mysql(CRUD)允许跨域请求APITanStack Query异步状态管理fetch api服务器组件预请求数据nestjs 管道和异常处理检测id是否正整数Docker启动Mysql容器 compose.yml name: todoLis…

矩阵的拼接

矩阵的拼接分为横向拼接和纵向拼接 注意:横向拼接要求两矩阵行数相同,纵向拼接要求两矩阵列数相同 h o r z c a t horzcat horzcat和 v e r t c a t vertcat vertcat函数 h o r z c a t ( a , b ) horzcat(a,b) horzcat(a,b)将 a a a和 b b b横向拼接&a…

决策树——基于乳腺癌数据集与cpu数据集实现

决策树——乳腺癌数据实现 4.1 训练决策树模型,并计算测试集的准确率 1. 读入数据 from sklearn import datasets from sklearn.tree import DecisionTreeClassifier from sklearn.model_selection import train_test_split from sklearn.metrics import confusion_matrix …

【ruby on rails】dup、deep_dup、clone的区别

一、区别 dup 浅复制:dup 方法创建对象的浅复制。 不复制冻结状态:dup 不会复制对象的冻结状态。 不复制单例方法:dup 不会复制对象的单例方法。 deep_dup 深复制:deep_dup 方法创建对象的深复制,递归复制嵌套的对象。…

PyTorch:神经网络的基本骨架 nn.Module的使用

神经网络的基本骨架 nn.Module的使用 为了更全面地展示如何使用 nn.Module 构建一个适用于现代图像处理任务的卷积神经网络(CNN),我们将设计一个针对手写数字识别(如MNIST数据集)的简单CNN模型。CNN非常适合处理图像数…

Java中使用FFmpeg拉取RTSP流

在Java中使用FFmpeg拉取RTSP流并推送到另一个目标地址是一个相对复杂的任务,因为Java本身并没有直接处理视频流的功能。但是,我们可以借助FFmpeg命令行工具来实现这个功能。FFmpeg是一个非常强大的多媒体处理工具,能够处理音频、视频以及其他…

【Qt】重写QComboBox下拉展示多列数据

需求 点击QComboBox时&#xff0c;下拉列表以多行多列的表格展示出来。 实现 直接上代码&#xff1a; #include <QComboBox> #include <QTableWidget> #include <QVBoxLayout> #include <QWidget> #include <QEvent> #include <QMouseEve…

windows C#-使用反射访问特性

你可以定义自定义特性并将其放入源代码中这一事实&#xff0c;在没有检索该信息并对其进行操作的方法的情况下将没有任何价值。 通过使用反射&#xff0c;可以检索通过自定义特性定义的信息。 主要方法是 GetCustomAttributes&#xff0c;它返回对象数组&#xff0c;这些对象在…

七牛云AIGC内容安全方案助力企业合规创新

随着人工智能生成内容(AIGC)技术的飞速发展,内容审核的难度也随之急剧上升。在传统审核场景中,涉及色情、政治、恐怖主义等内容的标准相对清晰明确,但在AIGC的应用场景中,这些界限变得模糊且难以界定。用户可能通过交互性引导AI生成违规内容,为审核工作带来了前所未有的不可预测…

《物联网智能项目》

一、引言 随着科技的不断进步&#xff0c;物联网&#xff08;Internet of Things&#xff0c;IoT&#xff09;已经成为当今世界最具发展潜力的领域之一。物联网智能项目通过将各种设备、传感器和系统连接到互联网&#xff0c;实现了智能化的监测、控制和管理&#xff0c;为人们…

告别 Kafka,拥抱 Databend:构建高效低成本的用户行为分析体系

用户行为数据埋点指标是数据仓库中不可或缺的重要数据源之一&#xff0c;同时也是企业最宝贵的资产之一。通常情况下&#xff0c;用户行为数据分析包含两大数据源&#xff1a;用户行为分析日志和上游关系型数据库&#xff08;如 MySQL&#xff09;。基于这些数据&#xff0c;企…

什么是JSON,有什么特点

什么是 JSON&#xff1f; JSON&#xff08;JavaScript Object Notation&#xff09;是一种轻量级的数据交换格式&#xff0c;易于人阅读和编写&#xff0c;同时也易于机器解析和生成。它基于 JavaScript 的子集&#xff0c;但独立于语言&#xff0c;被广泛用于服务器与 Web 应…

数据结构 (8)线性表的应用——一元多项式的表示及应用

一、一元多项式的定义 一元多项式是代数学研究的基本对象之一&#xff0c;可以表示为&#xff1a; P_n(x) p_0 p_1x p_2xn 其中&#xff0c;p_0, p_1, ..., p_n 是数域 F 中的数&#xff0c;n 是非负整数&#xff0c;x 是变量。 二、一元多项式的线性表表示 在计算机中&…

如何安全高效地打开和管理动态链接库(DLL)?系统提示dll丢失问题的多种有效修复指南

动态链接库&#xff08;DLL&#xff09;文件是Windows操作系统中非常重要的一部分&#xff0c;它们包含了程序运行所需的代码和数据。当系统提示DLL文件丢失时&#xff0c;可能会导致应用程序无法正常运行。以下是一些安全高效地打开和管理DLL文件以及修复DLL丢失问题的方法&am…

缓存方案分享

不知道大家平常更新缓存是怎么做的&#xff0c;但是大部分时候都是更新数据的同时更新缓存&#xff0c;今天和同事一起聊到一个缓存方案的问题&#xff0c;感觉很有趣、非常精妙&#xff0c;记录一下。 基于此本文将介绍几种常见的缓存更新策略&#xff0c;包括简单的缓存覆盖…

基于微信小程序的平价药房管理系统+LW参考示例

1.项目介绍 系统角色&#xff1a;管理员、医生、普通用户功能模块&#xff1a;用户管理、医生管理、药品分类管理、药品信息管理、在线问诊管理、生活常识管理、日常提醒管理、过期处理、订单管理等技术选型&#xff1a;SpringBoot&#xff0c;Vue&#xff0c;uniapp等测试环境…

鸿蒙ArkUI-X已更新适配API13啦

ArkUI-X 5.0.1 Release版配套OpenHarmony 5.0.1 Rlease&#xff0c;API 13&#xff0c;新增适配部分API 13接口支持跨平台&#xff1b;框架能力进一步完善&#xff0c;支持Android应用非压缩模式&#xff0c;支持Android Fragment对接跨平台。ACE Tools工具易用性提升&#xff…

图片预览 图片上传到服务器

首先要明白 理解 multipart/form-data&#xff1a;‌multipart/form-data是一种在HTTP请求中使用的MIME类型&#xff0c;主要用于在客户端和服务器之间传输包含文件或二进制数据的表单数据。它通过一个边界&#xff08;boundary&#xff09;来分隔不同的表单字段和文件数据‌。…

京准电钟:NTP网络校时服务器从入门到精准

京准电钟&#xff1a;NTP网络校时服务器从入门到精准 京准电钟&#xff1a;NTP网络校时服务器从入门到精准 1.前言 由计算机网络系统组成的分布式系统&#xff0c;若想协调一致进行&#xff1a;IT行业的“整点开拍”、“秒杀”、“Leader选举”&#xff0c;通信行业的“同步…