如何使用 JuiceFS 创建 WebDAV 共享

news2025/2/26 3:04:47

WebDAV 是一种基于 HTTP 的文件共享协议,最初被设计用于多用户文档协作编辑的场景,也被广泛应用在基于互联网的文件存储、数据同步等网盘类应用场景。

手机端和 PC 端有大量的应用内置了对 WebDAV 的支持,比如知名的文献管理工具 Zotero、iPad 上流行的笔记工具 Notability、国产办公软件 WPS、跨平台 Markdown 笔记工具 Joplin、ES 文件管理器等等,这就意味着,只要拥有自己的 WebDAV 存储,就可以使用 WebDAV 来保存我们在这些软件上产生的文档数据。

为了避免混淆,有必要先厘清 WebDAV 相关的概念,如下图所示,WebDAV 分为服务器和客户端两个部分:

  • WebDAV 服务器:蓝色云朵代表 WebDAV 服务器,用来响应客户端的连接和读写请求,存储数据。
  • WebDAV 客户端:各种内置了 WebDAV 客户端的程序,运行在手机、平板或电脑中。

明白了 WebDAV 的架构组成,我们要做的就是配置一套属于自己的 WebDAV 服务器了,其实我们也可以把它叫做 WebDAV 共享,总之,我们要做的就是架构图中“蓝色云朵”的部分。

在过去,配置 WebDAV 共享通常要使用 Apache HTTP 服务或 Nginx 等 Web 服务器软件,由于不是开箱即用,需要额外加载或手动编译 WebDAV 模块,这在一定程度上增加了配置 WebDAV 的复杂度。

虽然一些 NAS 操作系统也会提供 WebDAV 共享配置功能,但受限于内网环境,配置的 WebDAV 共享难以发挥它基于互联网提供服务的优势。

如果你目前正在寻找更通用、更有效、更简单的 WebDAV 共享服务配置方案,JuiceFS 也许是你值得尝试的一种方案。

JuiceFS 是面向云的开源分布式文件系统,依托于对象存储和数据库,可以快速搭建一个具有弹性容量的高性能存储系统。JuiceFS 提供 POSIX、S3 API、HDFS API、Kubernetes CSI 驱动、Docker Volume Plugin、WebDAV 等丰富的访问接口,可以轻松接入各种应用。

接下来就为大家分享如何使用 JuiceFS 简单、快速的配置一个兼具空间弹性、安全性和实用性的 WebDAV 服务。

准备工作

本文介绍的 WebDAV 共享是 JuiceFS 提供的一种访问接口,是建立在 JuiceFS 文件系统之上的。因此在配置之前,需要先创建一个 JuiceFS 文件系统。

JuiceFS 文件系统由数据存储和元数据引擎两部分组成,其中,数据存储可以是各种云计算平台提供的对象存储服务,也可以是自建的 MinIO 或本地磁盘。元数据引擎用来存储文件的元数据信息,可以使用 Redis、MySQL、PostgreSQL 等基于网络的数据库,也可以使用 SQLite 或 BadgerDB 这种单机数据库。

为了让 WebDAV 共享能够通过互联网访问,接下来我们会在一台拥有固定公网 IPv4 地址的云服务器上进行创建。因为 WebDAV 是一处创建,即可通过 IP 地址或域名实现处处访问。因此,组成 JuiceFS 的数据存储和元数据引擎可以更加灵活的搭配,比如:

  1. 本地磁盘 + 单机数据库:当云服务器的本地磁盘可用空间足够时。
  2. 对象存储 + 单机数据库:需要更大容量存储空间时。
  3. 对象存储 + 网络数据库:既需要更大的存储空间,又有其他主机需要同时访问 JuiceFS 时。

云服务器

假设我们拥有一台配置如下的云服务:

  • 系统:Ubuntu Server 22.04 AMD64
  • CPU:1 核
  • 内存:1 GB
  • 硬盘:25 GB
  • IP 地址:120.118.8.10(此为演示目的随机编写的 FAKE IP)

对于本文介绍的场景,任意一个云平台的入门级的云服务器即可满足需要,重点在于要有公网 IPv4 地址。

对象存储

假设我们准备了以下 Bucket:

  • 存储类型:阿里云 OSS
  • Bucket URL: https://myjfs.oss-cn-shanghai.aliyuncs.com
  • Access Key: abcdefg
  • Secret Key: gfedcba

对于本文介绍的场景,对象存储并不是必须的,如果云服务器的硬盘空间足够,完全可以使用硬盘作为 JuiceFS 的对象存储来使用。

数据库

对于本文介绍的场景,单机版数据库是最为简单易行的选择,这里我们使用单文件 SQLite 数据库。无需提前准备,在创建 JuiceFS 文件系统时会自动生成。

如果有需要,你也可以参照文档《如何设置元数据引擎》使用其他类型的数据库。

创建 JuiceFS 文件系统

  1. 安装客户端
curl -sSL https://d.juicefs.com/install | sh -
  1. 创建文件系统

以下是创建文件系统的两种方式,根据实际需要任选一种即可:

方式一:使用本地硬盘作为对象存储

juicefs format sqlite3://myjfs.db myjfs

方式二:使用对象存储服务(数据存储在对象存储)

juicefs format --storage oss \
--bucket https://myjfs.oss-cn-shanghai.aliyuncs.com \
--access-key abcdefg \
--secret-key gfedcba \
sqlite3://myjfs.db myjfs

部署 WebDAV 服务

准备好 JuiceFS 文件系统就可以开始配置 WebDAV 共享了,最简单的方式是不做任何设置,直接将 JuiceFS 存储以 WebDAV 接口形式开放出去。

sudo juicefs webdav sqlite3://myjfs.db 120.118.8.10:80

使用任何内置 WebDAV 客户端的软件访问 http://120.118.8.10 即可连接访问。

虽然很方便,但不难看出这种匿名访问的方式存在极大的安全隐患,首先,没有身份认证使得任何知道这个 IP 地址的人都可以直接通过 WebDAV 客户端读写我们的文件;其次,使用未加密的 HTTP 协议,通信过程很容易被窃听和攻击。我们非常有必要完善这两方面的缺陷,其实也很简单,解决第一个问题只需要为 WebDAV 设置身份认证,第二个问题只需要配置 SSL 证书启用 HTTPS 加密连接支持。

设置身份认证

JuiceFS v1.1(截至本文发表,此版本还未正式发布)及以上版本开始支持 WebDAV 身份认证和 SSL 证书功能,设置之前请先确认你的客户端版本,建议参考《手动编译 JuiceFS 客户端》自行编译 GitHub 仓库的 main 分支。

为 WebDAV 设置访问的用户名和密码非常简单,只需设置相应的环境变量即可:

export WEBDAV_USER=user
export WEBDAV_PASSWORD=mypassword

SSL 证书

为 WebDAV 启用 HTTPS 加密连接需要使用 SSL 证书,既可以使用 CA 机构签发的受信任的证书,也可以使用 OpenSSL 签发自签名证书。

CA 机构通常只为域名签发证书,因此你需要拥有域名并绑定到服务器 IP,免费证书签发工具有 certbot、acme.sh 等,使用这些工具向即可申请免费的 SSL 证书。

通过第三方 CA 证书机构申请签发证书是另外一个话题,这里简单起见,使用自签名证书来实现这个功能。

  1. 生成服务器私钥
openssl genrsa -out private.key 4096
  1. 生成证书签名请求(CSR)
    这一步需要交互式的提供一系列信息。
openssl req -new -key private.key -out client.csr
  1. 使用 CSR 签发证书
openssl x509 -req -days 365 -in client.csr -signkey private.key -out client.crt
  1. 执行清理
rm client.csr

经过上述几个步骤,在当前目录中就有了 private.key 和 client.crt 这两个文件,接下来用它们运行 WebDAV 服务。

正式运行 WeDAV 服务

现在就可以结合上面的内容,运行带有基本身份认证功能,且具有 HTTPS 加密连接的 WebDAV 服务:

export WEBDAV_USER=user
export WEBDAV_PASSWORD=mypassword
sudo juicefs webdav --cert-file ./client.crt --key-file ./private.key sqlite3://myjfs.db 120.118.8.10:443

此时我们已经启用了 HTTPS 加密连接,在访问 WebDAV 时也要改用带有 https 的地址 https://120.118.8.10 ,同时,需要输入用户名和密码才能成功连接。

另外,由于这里使用的是自签名证书,在访问时一些客户端可能会发出证书不可信的警告,忽略即可。

如果你已经为服务器绑定了域名,并且已经申请到了 SSL 证书,部署 WebDAV 的命令则应该做如下调整:

export WEBDAV_USER=user
export WEBDAV_PASSWORD=mypassword
sudo juicefs webdav --cert-file ./your-domain.crt --key-file ./your-domain.key sqlite3://myjfs.db www.your-domain.com:443

相应地,访问地址应也应该改成你的域名,例如:https://www.your-domain.com 。使用 CA 机构签发的证书,各种 WebDAV 客户端访问则不会发出警告,可以有效解决部分应用无法连接 WebDAV 服务的问题。

应用示例

以 ES 文件浏览器、Joplin 为例介绍如何配置使用自建的 WebDAV 服务同步文档数据。

注意:在某些应用中设置 WebDAV 时,如果确认地址和身份认证信息输入无误的情况下,程序仍然报告无法连接 WebDAV,这可能是因为程序不支持自签名证书,可以通过改用 CA 机构签发的可信证书来配置 WebDAV 服务来解决该问题。

ES 文件浏览器

ES 文件浏览器是移动端常用的第三方文件管理器,除了能够管理手机中的文件,还支持添加很多第三方的存储服务,其中就包括 WebDAV 存储。

只需在服务菜单中新增 WebDAV 类型的存储,参照下图填写地址、用户名和密码即可。

Joplin

Joplin 是开源的 Markdown 笔记软件,支持使用 WebDAV 同步文档。只需在同步设置中输入 WebDAV 的链接、用户名和密码即可。

需要注意的是,这里我们使用的是自签名证书,检查同步配置时 Joplin 会因此而报错。解决方法是展开高级选项,勾选“忽略 TLS 证书错误“,应用设置在尝试检查即可通过验证。

写在最后

与 FTP 类似,WebDAV 也是相对比较古老的文件共享协议,但它们至今仍被广泛的应用。信息技术领域永远没有最好的工具,只有最合适的工具。从功能上来说,WebDAV 可能没有专用的网盘客户端来的功能丰富,但 WebDAV 协议更通用和开放,可以直接在大量内置支持的应用程序上使用,不但可以保护自己的隐私,还能避免被特定的平台捆绑。

WebDAV 只是 JuiceFS 支持的众多访问接口中的一种,大家有兴趣可以进一步探索其他访问接口,比如以本地磁盘形式访问的 POSIX,以 S3 API 形式访问的 S3 网关,以及容器化访问方式的 Docker Volume Plugin、Kubernetes CSI 驱动等等。灵活搭配使用这些访问方式,可实现更加高效、灵活的云存储管理能力,相关的内容我们会在后续的文章中为大家做更多的分享。

如有帮助的话欢迎关注我们项目 Juicedata/JuiceFS 哟! (0ᴗ0✿)

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

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

相关文章

微信小程序 java Springboot校园租房指南房屋租赁系统

东前端;首页、房源信息、租房指南、我的,用户前端;首页、房源信息、租房指南、我的等主要功能模块的操作和管理。 1.出租房源信息的上传、审核、发布; 2.租房信息的浏览、查找、查看; 3.用户与出租方通信; …

Docker-01基本命令

1、Docker安装 系统镜像为Centos7.x yum包更新到最新 sudo yum update安装需要的软件包,yum-util提供yum-config-manager功能。另外两个是devicemapper驱动依赖的 sudo yum install -y yum-utils device-mapper-persistent-data lvm2设置yum源为阿里云 sudo yu…

OpenText 企业内容管理平台客户案例——印度鲁宾(Lupin)制药公司

OpenText 企业内容管理平台客户案例——印度鲁宾(Lupin)制药公司 公司:Lupin 行业:制药 方案: OpenText™ Extended ECM Platform OpenText™ AppWorks™ OpenText™ Capture 合作伙伴:Muraai Informat…

uniapp数据缓存与apk打包

目录 一、uniapp数据缓存Storage 1.1、存值uni.setStorageSync(KEY,DATA) 1.2、取值uni.getStorageSync(KEY) 1.3、uni.removeStorageSync(KEY) 1.4、uni.clearStorageSync() 二、配置发行H5--打包 一、uniapp数据缓存Storage 1.1、存值uni.setStorageSync(KEY,DATA) 含…

APISIX介绍和安装使用

APISIX目录什么是APISIX?与 Kong的比较概述安装1. 安装依赖2 安装 Apache APISIX2.1 安装脚本2.2 启动 APISIXAPISIX 控制台动态负载均衡1. 启动2个微服务命令2.验证服务是否正常3. 重要概念4.创建 APISIX Upstream(上游,后端 API 服务&#…

Python(12)--元组

一、元组的基本介绍 元组(tuple):这种数据类型结构与列表相同,但它与列表也有很大的差异,它的元素值与元素个数不可更改。 列表的定义是将元素放入[ ]中,元组的定义是将元素放入()中…

通过堆转储快照定位JVM堆内存OOM的问题

目录获取堆转储快照JVM启动时增加参数通过jmap指令生成分析堆转储快照Eclipse Memory Analyzer简介示例获取堆转储快照 如何获取堆转储快照?常用的有两种方式: JVM启动时增加参数 出现OOM时生成堆dump: -XX:HeapDumpOnOutOfMemoryError指…

【2325. 解密消息】

来源:力扣(LeetCode) 描述: 给你字符串 key 和 message ,分别表示一个加密密钥和一段加密消息。解密 message 的步骤如下: 使用 key 中 26 个英文小写字母第一次出现的顺序作为替换表中的字母 顺序 。将…

【数据结构初阶】第六篇——二叉树的重要性质

树的概念及结构 树的概念 树中专有名词 树的表示 二叉树的概念及其重要性质 二叉树的概念 数据结构中的二叉树 特殊的二叉树 二叉树的性质 二叉树的存储结构 顺序结构 链式结构 树的概念及结构 树的概念 树是一种非线性的数据结构,它是由n(n>0)个有…

【算法】Brute-Force 算法

目录1.概述2.代码实现本文参考: 《数据结构教程》第 5 版 李春葆 主编 1.概述 (1)设有两个串 s 和 t,串 t 的定位就是要在串 s 中找到一个与 t 相等的子串。通常把 s 称为目标串(target string),把 t 称为模式串(patt…

flutter 之 ListView的使用与详解 map for listview.builder 的使用

1.ListView 配合ListTile 实现新闻列表样式 ListView(children: <Widget>[ListTile(title: const Text(我是 title),subtitle: const Text(我是 sub_title),leading: Image.asset(images/c.png,fit: BoxFit.cover,),trailing: const Icon(Icons.chevron_right,size: 22,…

九龙证券|港股盘中暴涨110%!多股涨停,有色、汽车板块爆发!

阴历兔年春节后第三个交易日上午&#xff0c;A股首要指数重回涨势&#xff0c;全体走势略显震动胶着。北向资金持续呈现净买入趋势&#xff0c;半响净买入额到达30.61亿元。 港股方面&#xff0c;全体体现也较好&#xff0c;恒生科技指数领涨。港股个股方面亮点纷呈&#xff0c…

信息安全管理体系认证

​ISO信息安全管理体系认证 一、什么是ISO信息安全管理体系认证&#xff1f; ISO是信息安全管理体系认证&#xff0c;是由国际标准化组织&#xff08;ISO&#xff09;采纳英国标准协会BS-2标准后实施的管理体系&#xff0c;成为了“信息安全管理”的国际通用语言&#xff0c;企…

Unity Shader - Curved World - 类似 地铁跑酷,动物森友会 的世界扭曲效果 - 球形透视

我发现莉莉丝的《神觉者》在战斗中也有使用到这个效果&#xff0c;视觉效果提升还是很大的 比如&#xff0c;球形投影前的效果 球形投影后的效果 GIF: ShaderLab cginc 固定 Vector.forward 方向的球形透视 参考&#xff1a; Shader in Unity & Curved world shader …

Nacos学习:二、配置中心

2. 配置中心 配置中心将配置从各应用中剥离出来&#xff0c;对配置进行统一管理&#xff0c;应用自身不需要自己去管理配置。 配置中心的服务流程如下&#xff1a; 1、用户在配置中心更新配置信息。 2、服务A和服务B及时得到配置更新通知&#xff0c;从配置中心获取配置。 …

uni-app - H5 网站项目接入集成 51LA 网站统计详细教程(提供 51LA.js 官方插件与引入教程)

前言 如果您需要 Nuxt.js H5 网站项目的引入方式,请访问:Nuxt.js - 网站项目接入 51LA 网站统计 这个需求不常见,网上几乎没有教程,本文来做最新最好用的引入方案。 本文实现了 uniapp 开发的 H5 网页项目,要求接入 51LA 网站统计 的需求, 跟着本文,简简单单的几个步骤…

【HTML】有趣的代码合集(附源码)

文末有源码下载&#xff0c; “窝” 不信你全都看不上 文章目录CSS3 登录表单 个性化登录按钮可爱的CSS3圆盘时钟动画jQuery登录表单CSS3超酷弹出对话框 兼容移动端HTML5翻牌消除小游戏交互式分享按钮 可横向展开HTML5文件上传美化表单 支持拖拽上传纯CSS3加载Loading动画图 12…

unity怎样让玩家在不同材质上行走具有不同脚步声音效

问题:玩家在草地,雪地,木板上行走需要不同的脚步声音效,且无论行走还是奔跑,音效都要和脚步动画同步.思路:在动画上添加事件触发脚步声音效,并判断地面的材质然后播放不同的音效.实现:一.判断地面材质第一种情况是在unity内置terrain上行走地面有草地,石地,木地等,需要有不同音…

【蓝桥杯】历届试题 成绩统计(省赛)Java

【资源限制】 内存限制&#xff1a;256.0MB C/C时间限制&#xff1a;1.0s Java时间限制&#xff1a;3.0s Python时间限制&#xff1a;5.0s 【问题描述】 小蓝给学生们组织了一场考试&#xff0c;卷面总分为 100 分&#xff0c;每个学生的得分都是一个 0 到 100 的整数。…

计算机网络概念:

CDN:全国各地因为距离,加速响应,也因此可以节省带宽成本.DNS:域名解析器OSI七层模型:应用层:类比填写的数据报文表示层:类比浏览器层会话层:类比cookie或者token记录上次信息传输层:所谓的三次握手和四次挥手发生在这一层,进程到进程网络层:类似于ip通过路由器找到另一ip,服务器…