webdav协议及我的笔记方案(私有部署)
背景
用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协议
官方简介: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时的网络报文:
以下 是响应:
我本地用的raidrive windows客户端,准备演示下lock功能,发现没找到。查了文档,只有专业版才支持
https://docs.raidrive.com/options/filelock/
所以,这边就看看官方文档的示例吧:
http://www.webdav.org/specs/rfc4918.html#n-example---simple-lock-request
针对锁定,文档中还规定了锁的模式,排他锁或者是共享锁,可以看上图,就是排他锁。
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
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,作为一款客户端支持的各种协议:
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: nextcloud
restart: always
networks:
nextcloud_network:
ports:
- "8080:80"
volumes:
- /path/to/nextcloud/data:/var/www/html
- /path/to/nextcloud/config:/var/www/html/config
environment:
- 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-8
depends_on:
- db
db:
image: mariadb
restart: always
networks:
nextcloud_network:
environment:
- MYSQL_ROOT_PASSWORD=db_root_password
- MYSQL_DATABASE=nextcloud
- MYSQL_USER=db_user
- MYSQL_PASSWORD=db_password
volumes:
- /path/to/mysql/data:/var/lib/mysql
networks:
nextcloud_network:
然后就可以启动了:
docker-compose up -d
启动后,大概是这样两个容器:
启动完成后,在浏览器中,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/Rj1tcI
passwd.txt(用户名:密码):
webdav:CjBujI/Rj1tcI
webdav-pc 客户端
我这边使用的有nextcloud windows客户端、raidrive。raidrive感觉非常强大,支持的云端存储,基本上全包含了。
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这套东西,了解了不少,以后想折腾的时候再弄吧。
webdav协议及我的笔记方案(私有部署)的更多相关文章
- TCP/IP协议原理与应用笔记17:IP编址(重点)
1. IP地址(通用标识符) 对于同一个网络设备(主机或路由器)的不同网络连接,需要不同的IP地址进行标识 2. 主机标识符 主要有下面三种方式的主机标识方式: (1)Name:是什么,可读性强(了解 ...
- 影片自由,丝滑流畅,Docker容器基于WebDav协议通过Alist挂载(百度网盘/阿里云盘)Python3.10接入
使用过NAS(Network Attached Storage)的朋友都知道,它可以通过局域网将本地硬盘转换为局域网内的"网盘",简单理解就是搭建自己的"私有云" ...
- Tomcat6配置webdav协议
Tomcat6默认是支持webdav协议的,只是webapps目录中不带例子而已.要添加支持很简单,在webapps目录中建立webdav目录,在webdav目录中建立WEB-INF目录,加入web. ...
- TCP/IP协议原理与应用笔记18:构成子网和超网
1. 引言: (1)类别IP编址(Classful IP)的缺陷 • 固定的3种IP网络规模 C类地址:少于255台主机的网络 B类地址:介于255~65535台主机的网络 ...
- WebDav协议基于HTTP 1
首先第一篇提供配置WebDav的方式 网上找了两篇比较好的配置方式分别适用于Win7 Win2003,而且都经过测试配置可以正常使用 原文中保留了引用地址,这个纯属为了要尊重别人的劳动成果 在第二篇中 ...
- Docker学习笔记 — Docker私有仓库搭建
Docker学习笔记 — Docker私有仓库搭建 目录(?)[-] 环境准备 搭建私有仓库 测试 管理仓库中的镜像 查询 删除 Registry V2 和Mavan的管理一样,Dockers ...
- Typora+PicGo+Gitee笔记方案
前言:需要学习的知识太多,从一开始就在寻找一款能让我完全满意的编辑器,然而一直都没有令我满意的.在前两天Typora新版本更新后,总算是拥有了一套我认为很完美的笔记方案:使用Typora编写markd ...
- 管理WEB服务器文件的WebDAV协议&HTTP大跃进--QUIC与HTTP30&WEB安全攻击概述
管理WEB服务器文件的WebDAV协议 WebADV协议 WEBDAV追加方法 WeDAV请求示例 HTTP大跃进--QUIC与HTTP30 QUIC&HTTP3.0 HTTP2.0的问题 队 ...
- (转)ZooKeeper 笔记(1) 安装部署及hello world
ZooKeeper 笔记(1) 安装部署及hello world 先给一堆学习文档,方便以后查看 官网文档地址大全: OverView(概述) http://zookeeper.apache.or ...
- ActionBarSherlock学习笔记 第一篇——部署
ActionBarSherlock学习笔记 第一篇--部署 ActionBarSherlock是JakeWharton编写的一个开源框架,使用这个框架,可以实现在所有的Android ...
随机推荐
- 二、Doris架构原理
Doris是一个MPP的OLAP系统,以较低的成本提供在大数据集上的高性能分析和报表查询功能. MPP (Massively Parallel Processing),即大规模并行处理.简单来说,MP ...
- 【Python爬虫案例】用python爬1000条哔哩哔哩搜索结果
目录 一.爬取目标 二.讲解代码 三.同步讲解视频 四.完整源码 一.爬取目标 大家好,我是 @马哥python说 ,一名10年程序猿. 今天分享一期爬虫的案例,用python爬哔哩哔哩的搜索结果,也 ...
- ITIL4中的关键概念
1.价值和价值共创 什么是价值 通俗表达:这有啥用? 正式表达:这能带来什么益处或起什么作用? 反问式求证: 假如没有的话,会有什么后果? 具体情境提问:如果缺少IT运维人员,业务系统会面临怎样的状况 ...
- 04. rails入门学习 创建控制器
学习视频 https://www.bilibili.com/video/BV1RJ411W7N3?t=49&p=7 一. 启动rails 启动 cd circles/ #到circles的项目 ...
- linux网络管理及常用网络工具详解
linux网络管理及常用网络工具详解 目录 linux网络管理及常用网络工具详解 1. linux网络管理 1.1 centos网卡命名规则 1.2 域名解析配置文件 1.3 ifconfig命令管理 ...
- 开发环境需要同时安装2个nodejs版本
由于同时有vue2和vue3的项目开发情况,vue2项目的nodejs版本是12,vue3项目在node12版本下运行不了,要求最低14版本,因此要用nvm同时安装和控制2个版本. 安装步骤: 1.卸 ...
- 用pageOffice文档控件实现 office文档在线编辑
第三方文档控件,pageOffice 系统开发中经常要处理办公文档,如果word,excel,ppt,编辑整理,保存,归档. 开发市场上也有很多第三文文档控件,多年的总结,还是认为pageOffice ...
- PageOffice既保存Word文件中指定区域的数据又保存整篇文件
一.首先在word文件中给需要在后台获取数据的区域设置以PO_开头的书签. 二.通过pageoffice在线打开文件并编辑保存.有两种打开文件的模式 1.普通编辑模式(docNormalEdit) 普 ...
- webapi动态创建后台任务(使用排队的后台任务)
很多时候我们都会使用后台定时任务,但有些任务不需要定时执行,只需要请求到来时执行一次,比如请求服务器到某个地方同步数据,但请求不需要等数据同步完成再响应.这时候就可以使用排队的后台任务. 基本原理是用 ...
- 更改wsl中系统的安装位置
wsl默认安装位置是C盘,众所周知C盘总是不够用的,所以才有了把wsl的系统迁移到其它位置的需求.官网文档 首先查看所有分发版本 wsl -l --all -v 导出分发版为tar文件到D盘 wsl ...