前言

我在 iOS 上使用 beorg 来管理日程,所以经常需要在电脑和手机之间同步。

beorg 支持 iCloudDropboxWebDav 等方式同步,使用 iCloud 是最简单的,但是我不想数据放到别人的服务器上面,所以我就不考虑了, Dropbox 就你懂的,所以就只剩下 WebDav 了。

WebDav 是一种基于 HTTP 协议的文件访问和管理技术,它提供了一种标准化的方式,使我们可以在网络上进行文件操作,如上传、下载、删除和重命名等。

我找了一圈看上了 Caddy ,它是一个功能强大且易于使用的 Web 服务器,它为搭建 WebDav 服务器提供了简洁而灵活的解决方案。所以今天就要用 Caddy 来搭建 WebDav 服务。

caddy 安装

在使用之前需要来看下如何在电脑上安装 caddy ,在Install — Caddy Documentation中可以找到各个操作系统的安装方式,我使用的是 Mac 所以可以直接使用下面的命令进行安装。

1
brew install caddy

安装好之后可以使用 caddy help 来查看使用帮助,内容有点多,这里就不贴出来了。列几个重要的

  • caddy run 在前台执行(推荐)
  • caddy start 在后台执行
  • caddy stop 停止在后台执行的 caddy 服务
  • caddy version 查看 caddy 的版本

安装好 caddy 之后并不能直接使用 webdav ,这是因为 webdav 不是内置的插件,所以要使用的话还需要额外安装 webdav 的插件。

安装 WebDav 插件

安装 WebDav 插件需要自己编译,官方出了 caddyserver/xcaddy: Build Caddy with plugins 用来简化编译流程,非常方便,所以在安装插件之前需要安装 xcaddy

安装 xcaddy 需要你安装了 Go ,如果你是 Mac 可以直接使用 brew install go 来快速安装 Go ,这里不展开说了。

安装好 Go 之后就可以通过下面指令安装 xcaddy

1
go install github.com/caddyserver/xcaddy/cmd/xcaddy@latest

xcaddy 会被安装到 $HOME/go/bin 下,为了方便可以把它添加到 PATH 中,这样就可以直接使用了。

好接下来要构建支持 webdavcaddy ,如下所示

1
xcaddy build --with github.com/mholt/caddy-webdav

命令执行完后,会在当前目录下生成 caddy 的二进制文件。

由于之前使用 brew install caddy 安装了,所以这里可以使用 brew uninstall caddy 来卸载之前的。

为了方便可以把生成的 caddy 放到 PATH 环境中或者使用相对路径执行。

支持 WebDavcaddy 已经编译好了,接下来就需要编写 Caddyfile 来启用 WebDav 了。

编写 Caddyfile

在当前目录下创建 Caddyfile 文件,填入如下内容

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
{
    order webdav before file_server
}

:80, :443 {
    basicauth {
        username password
    }
    webdav /dav/* {
        root /home/username/webdav
        prefix /dav
    }
}

密码可以使用 caddy hash-password username 生成,其中 username 要换成你自己的名字。用生成好的字符串替换 basicauth 中的 password

在这个配置中我们监听了 80443 端口,并配置基本的账号和密码,毕竟你也不想谁都可以访问你的文件。

然后重点就是 WebDav 的配置, webdav 的语法如下所示

1
2
3
4
webdav [<matcher>] {
    root <path>
    prefix <request-base-path>
}

其中 matcher 就是用来决定哪些路由会使用 webdav ,比如上面写的是 dav 所以当访问 127.0.0.1/dav/xxx 的时候就会匹配到 webdav 的功能。

接着 root 表示的是 webdav 要共享的目录。

prefix 是可选的,但是 matcherpath 一起使用的时候是必须要的,通常就是 matcher

启动 caddy

写好了 Caddyfile 就可以通过如下命令启动了

1
./caddy start --config Caddyfile

由于没有把 caddy 加到 PATH 中,所以我使用了相对路径。

连接 webdav 服务

Mac 中可以通过 finder 来连接。

打开 finder ,按下 cmd+k 打开连接服务器,填入地址,例如: 127.0.0.1/dav ,输入账号和密码就可以连接成功了。

总结

WebDav 是一个可以在多个设备之间进行文件同步和分享的技术,本文通过讲解如何利用 Caddy 搭建 WebDav ,从而实现跨平台的文件同步和无缝的文件共享体验。

参考