首页 > 其他分享 >如何使用 JuiceFS 创建 WebDAV 共享

如何使用 JuiceFS 创建 WebDAV 共享

时间:2023-02-01 15:57:30浏览次数:60  
标签:存储 WebDAV 证书 访问 JuiceFS 共享 客户端

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:

对于本文介绍的场景,对象存储并不是必须的,如果云服务器的硬盘空间足够,完全可以使用硬盘作为 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✿)

标签:存储,WebDAV,证书,访问,JuiceFS,共享,客户端
From: https://www.cnblogs.com/JuiceData/p/17083091.html

相关文章

  • Windows和MacBook等设备的文件共享(局域网)
    Windows和MacBook等设备的文件共享(局域网)背景平时学习的时候,我是用两个不同系统的设备,第一个是我的Macbook(聊微信。。),第二个是实验室的Windows台式机(学习,嘿嘿)。但是经常......
  • XP/WIN7无法访问win7默认共享的解决
    首先确认能够访问到对方的共享.一般先共享某个文件夹,然后试着通过IP能否访问到.如果无法访问,一般是防火墙或者网络策略设置的问题.(控制面板-网络和internet-网络和共享中......
  • 使用vant、promise封装回调、全局状态共享、分包
    应用的生命周期onLaunch:启动应用时调用onShow:显示时调用,可能调用多次onHide:隐藏时调用(进入到后台),可能调用多次onError:整个应用如果某个部分有报错就调用页面的......
  • Request_共享数据(域对象) 与Request_获取ServletContext
    Request_共享数据(域对象)  共享数据:域对象:一个有作用范围的对象,可以在范围内共享数据request:代表一次的请求的范围,一般用于......
  • 如何在player中添加webdav
    这里以nPlayer为例,infuse、kodi、fileball、potplayer等同理,请自行尝试。1.点击左上或右上角的加号,—>选择Webdav2.之后填写相关信息:-标题:随意,你高兴就好。-主机:......
  • 使用GDB调试python调用的C++共享库
    目录1.首先编写python调用C++的demo2.gdb调试python程序3.全速运行程序4.查看堆栈信息当我们用Python调用C++的库,并且C++库中存在段错误崩溃时,首先想到的还是用gdb......
  • 微信小程序与微信内置浏览器共享cookie
    遇到奇怪现象:用户系统身份保存在cookie中,用户通过微信授权登录可以绑定(或注册)系统身份和微信小程序身份(openid)但是用户在未经微信授权登录的情况下却获取到了用户......
  • ESXi 安装 Truenas Core 解决企业共享存储免费方案
    服务器配置创建虚拟机内存最少8+,建议选择32,CPU没啥用,我给了2,硬盘我选择了50G+8T,因为一个虚拟机无法使用两个存储池,所以全部使用非SSD硬盘,自带网卡删除,单独给一个直通网卡,......
  • c#获取共享文件夹中指定文件
    ///<summary>///获取共享文件夹中指定文件///</summary>///<paramname="server">IP地址</param>///<paramname="userName"......
  • linux samba 共享设置
     linux和windows之间传输文件有很多种方法,今天分享一下通过samba软件实现文件共享。首先切换到root用户,用命令aptinstallsamba安装samba。按提示安装,安装完执行命令sam......