webdav协议及我的笔记方案(私有部署)

news/2024/7/3 0:21:24/文章来源:https://www.cnblogs.com/grey-wolf/p/18278875

背景

用markdown用于文章写作,有几年时间了,不是很喜欢折腾,主要就是在电脑上写,用的笔记软件就是typora。由于里面有很多工作相关的,以及个人资料相关的(包含了各种账号、密码啥的),所以不敢往各种云服务上放,还是想着数据由自己来管着。

自己管数据的话,就是数据存储到哪里的问题,有很多朋友是折腾nas(Network Attached Storage:网络附属存储),相当于是搞一个家用的服务器,一般24小时开机,对外提供各种协议的服务(如webdav、ftp、sftp、http等),随时可以往这个服务器上上传东西,或者是下载东西。理论上来说,任意的硬件,只要能刷上一个操作系统,部署上各种服务,就是一台nas;但目前这个东西,已经发展成了一个专业的设备,比如你如果拿一个废旧电脑来做nas,那电脑芯片一般是基于x86架构的,比较耗电,放在家里24小时开机就有点不划算,所以很多nas都是arm架构,当然,为了追求性能,也有x86架构的,也更贵就是了。

我个人还没买过nas设备(qiong啊),所以把数据存到nas但我手里有一台云服务器,就是普通的1核2G那种,拿来存储自己的数据也是足够的,因此,我一直以来的方案是,在云服务器上自建了git服务,本地的笔记就用git来管理,新增或修改后就push到云服务器上,做个备份。

这种的好处在于,虽然文件存放在云服务器上,但是是由git管理的,如果黑客攻进去了,也不一定能发现我的原始文件。

我之前也想过在手机上看这些笔记(主要是看,不在手机上写),但我发现,由于我的破iphone 11一直没升级(系统是ios 13.5,为啥不升呢,升了怕卡),可以选择的app相当有限,其实就是想找个git客户端就行,但支持连接自建git的,并支持渲染markdown格式的笔记的,且能在ios13.5上跑的,之前找过一次,还真是没找到。

最近研究了下这块,我发现,之前思想确实太局限了,为啥一定要用git协议做同步呢,http、ftp、sftp、smb等,哪个不能用?

说下这两天研究的webdav方案吧。

webdav协议

官网:http://www.webdav.org/

官方简介:WebDAV stands for "Web-based Distributed Authoring and Versioning". It is a set of extensions to the HTTP protocol which allows users to collaboratively edit and manage files on remote web servers.

WebDAV扩展了HTTP协议,允许用户协作,对远程web服务器上的文件进行编辑和管理。

大家可能会想到restful,毕竟restful就是用各种HTTP Method来标识接口的意图(如对资源的增删改查,用GET/PUT/POST/DELETE这几个Method来标识),WebDAV和它有点类似,但更偏向于文件协作,因为WebDAV中扩展了很多HTTP METHOD,如下:

  • COPY, copy a resource

  • MOVE, move a resource

  • MKCOL, create a collection, for example, a folder

  • PROPFIND, retrieve properties stored as XML

  • PROPPATCH, change and/or remove properties

  • LOCK, put a lock on a resource

  • UNLOCK, remove a lock from a resource

可以看到,包含了一些指令,如果要拷贝一个资源,不需要下载下来,再上传,只需要使用COPY即可;另外,还有LOCK和UNLOCK,可以用于锁定资源,避免多人修改同一个文件时出现冲突(这几年慢慢出现了腾讯文档这样的多人协作的在线文档,和这里的理念类似)。

我本地有两个webdav客户端,下面先展示一个通过nextcloud(https://docs.nextcloud.com/desktop/3.13/installing.html),在本地新建文件:test-0701.txt时的网络报文:

image-20240701172541421

以下 是响应:

image-20240701172649719

我本地用的raidrive windows客户端,准备演示下lock功能,发现没找到。查了文档,只有专业版才支持

https://docs.raidrive.com/options/filelock/

所以,这边就看看官方文档的示例吧:

http://www.webdav.org/specs/rfc4918.html#n-example---simple-lock-request

image-20240701173705242

针对锁定,文档中还规定了锁的模式,排他锁或者是共享锁,可以看上图,就是排他锁。

http://www.webdav.org/specs/rfc4918.html#exclusive-lock

各种传输协议的简单理解

简单查了一下,nas对外支持的协议,一般有这么几种:

  • NFS(Network File System),客户端一般是unix/linux系统;当然,我也搜了下“nfs client windows”,发现win7就有NFS client,https://learn.microsoft.com/en-us/windows-server/storage/nfs/nfs-overview

    image-20240701194708980

  • AFP(Apple Filing Protocol),客户端一般是Mac系统

  • CIFS/SMB(Server Message Block),SMB 最早是微软为自己需求设计的专用协议,用来实现微软主机之间的文件共享与打印共享,并不支持在 Linux 上运行,也就是说windows系统作为smb协议,只能访问另一台windows;后来,被技术大佬Andrew Tridgwell进行逆向,开发了samba,包含服务端(samba)和客户端(smbclient ),可以在linux/unix上运行,这样的话,windows、linux/unix主机之间就可以自由地通过smb协议进行网络交互了;

    该协议的主要client应该还是windows主机,因为nas支持了NFS,在linux上完全可以用走NFS协议;

    https://www.samba.org/samba/docs/current/man-html/smbclient.1.html

  • FTP(File Transfer Protocol)/SFTP(Secure File Transfer Protocol),这两个就不多说了,后者是基于SSH对文件传输进行安全增强;

  • WebDAV,基于HTTP或HTTPS,可以充分利用目前互联网上的各种web基础设施,也不容易被防火墙拦截

  • http/https,这个就不提了,最基础的。

在上述几种协议中,FTP系列、WebDAV、http/https,应该是拥有最广泛的客户端实现,因此,如果是要通过app访问nas的话,选择这几种流行的协议进行传输,可以有最广泛的选择度。

在FTP和WebDAV之间进行选择,其实就是对FTP和http进行选择,基本上,http是优势明显,可以参考如下链接:

https://stackoverflow.com/questions/11216884/which-file-access-is-the-best-webdav-or-ftp

我这里也看了下,我ios中一个app,作为一款客户端支持的各种协议:

image-20240701200125232

webdav服务端

这个就多了去了,各种商业产品,各种开源产品,商业产品就不说了,我说说我目前知道的开源产品。

我目前在自己云服务器上,搭建了一套NextCloud服务端,它可以私有化部署,就像我这样。

官网:https://nextcloud.com/install/#instructions-server

Nextcloud这种算是网盘类软件,我对网盘类软件的理解是,我在本地的文件是什么样,你在网盘的UI上呈现出来也是什么样,通过另一个client拉取下来的文件,还是和我之前的文件一样的,文件名、文件格式等不要给我改了,说白了就是文件存储、对象存储。

同类的软件,我知道的还有:Owncloud (其实和NextCloud是同一作者)、Seafile、filerun

https://www.reddit.com/r/selfhosted/comments/rwo7qo/nextcloud_vs_owncloud_vs_seafile/

还有一种软件,比如Joplin,是一款笔记软件,支持多端(pc、ios、安卓),多端间用webdav同步,我以为这款很适合我。结果,joplin不能识别我用typora写的markdown笔记(joplin windows端可以导入markdown笔记,但导入后,已经是由joplin管理的另一个新的文件了,我再去typora修改原始文件,在joplin中也不会有任何变化。joplin也支持设置使用typora来编辑,但主要还是不喜欢它用自己的格式来管理我的文件)。

所以,后面我发现,这种网盘同步类软件更适合我,不会改我的原始文件,它只需要负责多端间同步就行。

另外,我们程序员广为使用的apache、nginx都是支持webdav的,像nginx的话,默认没有开启那个模块,需要单独弄一下。

webdav-服务端-nextcloud

一开始是按照官方文档来弄,选的是docker镜像all-in-one的镜像,结果后面遇到个什么错,没搞起来,以后再试试。

https://github.com/nextcloud/all-in-one#how-to-use-this

后面网上找了另一种方案,这里记录下,要先把docker安装上(包括docker-compose):

mkdir -p /path/to/nextcloud;新建文件,docker-compose.yml:

内容如下,注意自己改下密码,ip啥的:

version: '3'services:app:image: nextcloudrestart: alwaysnetworks:nextcloud_network:     ports:- "8080:80"volumes:- /path/to/nextcloud/data:/var/www/html- /path/to/nextcloud/config:/var/www/html/configenvironment:- NEXTCLOUD_ADMIN_USER=admin  --用户名可以改下- NEXTCLOUD_ADMIN_PASSWORD=1qaz@WSX#EDC --自己改一下密码- NEXTCLOUD_TRUSTED_DOMAINS=外网ip:8080- MYSQL_HOST=db- MYSQL_PASSWORD=db_password- MYSQL_DATABASE=nextcloud- MYSQL_USER=db_user- OVERWRITEPROTOCOL=http- LANG=zh_CN.UTF-8depends_on:- dbdb:image: mariadbrestart: alwaysnetworks:nextcloud_network:environment:- MYSQL_ROOT_PASSWORD=db_root_password- MYSQL_DATABASE=nextcloud- MYSQL_USER=db_user- MYSQL_PASSWORD=db_passwordvolumes:- /path/to/mysql/data:/var/lib/mysqlnetworks:nextcloud_network:

然后就可以启动了:

docker-compose up -d

启动后,大概是这样两个容器:

image-20240701203642768

启动完成后,在浏览器中,http://ip:8080端口访问即可,剩下都是图形化操作,还比较简单了。

访问时,可能会报一个trusted_domain的问题,我是修改了config.php:

[root@VM-0-6-centos config]# pwd
/path/to/nextcloud/config修改config.php:'trusted_domains' =>array (0 => 'localhost',1 => '1.1.1.1:8080',),

另外,目前这个是http的,不是很安全,所以大家可以先尽量选择可信的webdav客户端,比如nextcloud在多端都有应用,https的我也还没研究,后续再看下这块,暂时没时间了。

webdav-服务端-nginx

这里只简单说一下。

需要重新编译nginx源码,加入webdav和webdav扩展模块。

扩展模块的源码从这里下载:

https://github.com/arut/nginx-dav-ext-module/releases

比我这里使用的,最后的编译命令为:

--sbin-path=/usr/local/nginx/nginx --conf-path=/usr/local/nginx/nginx.conf --pid-path=/usr/local/nginx/nginx.pid --with-http_ssl_module --with-http_dav_module --add-module=/root/upload/nginx-1.21.3/nginx-dav-ext-module-3.0.0

就是新增了:

--with-http_dav_module --add-module=/root/upload/nginx-1.21.3/nginx-dav-ext-module-3.0.0

编译完成后,拷贝覆盖已有的nginx二进制文件。

我这边的nginx二进制在/usr/local/nginx/nginx,覆盖前需要先备份cp objs/nginx /usr/local/nginx/nginx -f

然后贴一份我的配置文件,仅供参考:

 server {listen       80;server_name  localhost;access_log  logs/80access.log  main;location /work-file {root                  /root/;client_body_temp_path /var/client_temp;client_max_body_size 50m;auth_basic "webdav";auth_basic_user_file /root/upload/nginx-1.21.3/passwd.txt;autoindex on;dav_methods PUT DELETE MKCOL COPY MOVE;dav_ext_methods PROPFIND OPTIONS LOCK UNLOCK;create_full_put_path  on;dav_access            group:rw  all:r;}}

密码文件的生成有多种方式,我也是网上查了下:

[root@VM-0-6-centos nextcloud]# openssl passwd '1111111'
CjBujI/Rj1tcIpasswd.txt(用户名:密码):
webdav:CjBujI/Rj1tcI

webdav-pc 客户端

我这边使用的有nextcloud windows客户端、raidrive。raidrive感觉非常强大,支持的云端存储,基本上全包含了。

image-20240701204513661

image-20240701204528569

image-20240701204543345

webdav-ios客户端

我由于操作系统版本是13.5的,可选范围有限,所以只是简单分享下。

可以直接在app store搜搜webdav关键字,如果某款软件支持这个协议,不至于不在描述中提一下吧。

具体的app就不说了,有广告嫌疑,我发现个问题,很多webdav 客户端app,可以支持远程连接webdav,但是不会把webdav服务端的数据拉到本地来保存,而是在线的那种,和web系统一样,点开某个目录,才会加载那个目录下文件,点开某个文件,才会去加载内容;所以也就不支持在全部文件中进行关键字搜搜,笔记多的话,还是不好找。

所以,我个人后续应该还是会安装Nextcloud这种云盘类的app(目前操作系统版本原因,装不了),但我想,至少会把数据全部同步到本地,数据同步到本地,才会有可能支持全文检索。

总结

等后续换了手机,我就打算整nextcloud全家桶先试试,想要的功能就是app上能跨文件全文搜索,就满足了。

目前手机上安装的app,都是不能全文搜索的;而我也找到了一款某个大佬写的一个app(支持从自建的git拉取markdown进行展示),但是大佬没做本地的全文搜索。

所以目前两个方案,在我手机端的效果差不多,甚至git方案的话,还能离线使用,还要优于webdav方案。

另外,nextcloud的服务端,有点耗内存,这样的话,云服务器都不能干别的事了,所以目前就用我的git方案算了,还完全没有内存消耗。

但是通过这么折腾,至少对于nas这套东西,了解了不少,以后想折腾的时候再弄吧。

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

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

相关文章

模拟集成电路设计系列博客——8.3.2 PLL中的抖动与相位噪声

8.3.2 PLL中的抖动与相位噪声 在PLL中有若干种抖动源,具体来说包括:输入参考的抖动\(\phi_{in}\) VCO中的抖动 环路滤波器产生的噪声 分频器产生的噪声由于任何实际PLL中的抖动都相对较小,因此分析其在环路中和环路内的传播可以使用线性小信号模型。上面列出的噪声源出现在环…

【git】github如何上传超过100MB大小的单个文件

在使用 GitHub 进行版本控制时,默认情况下,单个文件的大小限制为 100MB。 如果你需要上传超过这个大小的文件,可以使用 Git LFS(Large File Storage)。 Git LFS 是一种 Git 扩展,专门用于处理大文件,它将大文件替换为轻量级的指针,并将实际的文件内容存储在远程服务器上…

ros2 - microros - 雷达 -可视化点云

上一节完成了指定角度距离的测量这一节我们将其合成ROS的laserscan消息,并将其通过microros发布到上位机,最终实现rviz2的可视化。 一、雷达消息介绍使用指令ros2 interface show sensor_msgs/msg/LaserScan,可以看到ROS2对雷达数据接口的定义。# Single scan from a planar…

玄机流量特征分析-蚁剑流量分析

玄机流量特征分析-蚁剑流量分析 1.木马的连接密码是多少 2.黑客执行的第一个命令是什么 3.黑客读取了哪个文件的内容,提交文件绝对路径 4.黑客上传了什么文件到服务器,提交文件名 5.黑客上传的文件内容是什么 6.黑客下载了哪个文件,提交文件绝对路径1.过滤http,发现连接密码…

F407在RAM中调试

在RAM中调试代码 一.软硬件操作 硬件方面需要先修改BOOT0和BOOT1的引脚的高低电平。SRAM运行模式BOOT0和BOOT1都是高电平。软件方面: 1.需要先取消勾选Use Memory Layout from Target Dialog,点击下方的Edit编辑.sct2.修改.sct分散加载文件 原始文件 LR_IROM1 0x08000000 0x0…

制作badusb上线CS

‍ 前言在2014年美国黑帽大会上,安全研究人员JakobLell和独立安全研究人员Karsten Nohl展示了他们称为“BadUSB”的攻击方法,这种攻击方法让USB安全和几乎所有和USB相关的设备(包括具有USB端口的电脑)都陷入相当危险的状态现在的USB设备很多,比如语音视频设备、摄像头等,因…

【数据结构】常见的几种数据结构

常见的数据结构:数组、链表、队列、栈、、堆、二叉树、B树、哈希表、图 数组 因为数组内的元素是连续存储的,所以数组中元素的地址,可以通过其索引计算出来。根据索引查找元素,时间复杂度是 \(O(1)\)。 动态数组动态数组具体代码实现 import java.util.Arrays; import java…

QT6.7.2 MSVC源码编译 静态库 动态库

QT6.7.2 MSVC源码编译 静态库 动态库 也可以参考官方的文档 https://doc.qt.io/qt-6/build-sources.html 环境搭建 为了操作更有可复制性,这里在虚拟机中采用全新安装的系统进行配置。 系统镜像为:en-us_windows_10_enterprise_ltsc_2021_x64_dvd_d289cf96_2.iso 安装 Visual…

CPU管理 多进程图像

CPU管理 && 多进程图像 要管理CPU,先要学会使用CPU CPU的工作方式在操作系统学习之初就已经提过:取值执行程序存放在内存中,每段指令对应一个地址 CPU发出取指命令,将想取地址通过地址总线传到PC 内存根据地址取出对应地址的指令 从总线传回,CPU解释执行总之,就是…

电子显微镜对生物的观察

某黄色小虫,大概 \(100μm \times 400μm\) 的样子。

ARM Cortex-A 与 STM32 F107

ARM Cortex-A 和 STM32 F107 是两种不同的微控制器架构,它们在性能、应用场景和硬件支持方面有很大的差异。以下是它们的详细比较和分析: 1. 基本特性比较ARM Cortex-A 系列ARM Cortex-A 是 ARM 架构中的高级应用处理器系列,专为复杂的计算任务和高级应用设计。它广泛用于智…

前端开发 | Node 版本管理器选择

一、Nvm nvm 是一款 Node.js 版本管理工具,允许用户通过命令行快速安装、切换和管理不同的 Node.js 版本。nvm 只适用于 macOS 和 Linux 用户的项目,如果是 Windows 用户,可以使用 nvm-windows 、nodist或 nvs 替换。 安装方式 macOS 下载方式: brew install nvm # or sh 命…

示波器基本使用方法

示波器 示波器的基本使用方法首先检查示波器包装中是否有下列物品:• 示波器。 • 电源线。 • N2841A 10:1 10 MΩ 无源探头,数量= 2连接电源和信号源:将示波器的电源插入电源插座,并确保电源适配器或电池充足。 将需要测量的信号源(例如电路板、信号发生器等)连接到示波…

ros - Adafruit ESP32 Feather与树莓派(Raspberry Pi)比较

Adafruit ESP32 Feather 和树莓派(Raspberry Pi)都是广泛使用的硬件平台,分别在嵌入式系统和单板计算机领域具有各自的优势。以下是它们的详细比较,以及它们对机器人操作系统(ROS)的支持程度的分析。 1. 基本特性比较Adafruit ESP32 Feather核心处理器: 双核 Xtensa LX6(…

【App Service】解决 .NET Profiler 报告打开后无数据加载的问题

问题描述 App Service上可以收.NET 应用的Profile Trace文件,并且可以自动分析报告。 Collect a Profiler Trace If your app is down or performing slow, you can collect a profiling trace to identify the root cause of the issue. Profiling is light weight and is de…

1. Docker快速起步

Docker先安装Docker,再讲课没有Docker的日子里在以前的开发时代,开发人员把自己开发好的war交付给运维人员,运维人员为了把war部署到服务器上且保证能运行,就必须由运维人员在服务器上搭建好运行环境! 可这样带来的问题是,如果开发环境与部署环境不一致(比如版本),则会…

6. Idea集成docker

第一步:配置Docker远程访问修改 /lib/systemd/system/docker.service# ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sockExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock重启docker服务systemctl daemon…

MOS管的作用和原理

目录 目录什么是MOS管作用和应用工作原理其他类型什么是MOS管 MOS管(Metal-Oxide-Semiconductor Field-Effect Transistor,金属氧化物半导体场效应晶体管)是另一种重要的半导体器件,其作用和工作原理如下: 以下为MOS管的原理图:作用和应用放大作用: MOSFET可以用作信号放…

图论最短路径问题与matlab实现

上一次我们讨论了如何进行图论可视化,这一次我们通过matlab来找出图论中距离最小路径 目录一、迪杰斯特拉算法(Dijkstra)二、shortestpath函数用法1.基本语法2.参数设计3.应用实例(1)输入图论信息(2)输入参数进行求解(3)最短路径可视化三、distances函数————求出任意…