如何自建 WebDAV 服务器:5 步跑起个人文件服务,手机电脑都能连
【免费下载链接】webdavA simple and standalone WebDAV server.项目地址: https://gitcode.com/gh_mirrors/we/webdav
在多台设备之间传文件、又不想给网盘开会员、更不想把私人资料放到公共云上时,自建一台 WebDAV 服务器是最直接的办法。这个项目就是一个独立的 WebDAV 服务:一份配置加一个可执行文件,跑起来后,任何支持 WebDAV 的客户端都能连上它读、写、删文件。
先认识一下:适合谁,跑起来是什么样子
它是一个单进程的 WebDAV 服务器,没有数据库、没有管理后台,适合部署在一台家用主机、树莓派或便宜的 VPS 上,个人和小团队够用。跑起来之后,它就是一个监听 6065 端口的目录服务:你把文件放进服务器上某个文件夹,客户端连上后就能直接看到、拖进拖出,浏览界面就是你客户端自己的文件管理器。
挑一条安装路径:有 Docker 和无 Docker 怎么选
看机器上有什么环境就走哪条路。有 Docker 的机器,直接拉项目发布的镜像,把配置文件和数据目录挂载进容器就能用,后面所有配置写法完全一样。没有 Docker 的机器,用 Go 工具链从源码编译,编译完得到一个独立二进制,后面各章按这条路演示:
git clone https://gitcode.com/gh_mirrors/we/webdav cd webdav && go buildclone 地址不用改,编译出的 webdav 二进制就在当前目录,下面直接以./webdav调用。
第一次启动:写最小配置并验证成功
在服务目录里建一个config.yml,第一次只需要这四个字段:
address: 0.0.0.0 port: 6065 directory: ./data users: - username: admin password: admin把directory改成你真正存文件的目录,password先随便写一个,后面会换成加密密码。
保存后启动并验证:
./webdav -c config.yml curl -I -u admin:admin http://127.0.0.1:6065/curl 那行的账号密码改成你配置里的值。终端打印出 listening 日志、curl 返回 200,说明服务已就绪;不带-u参数访问返回 401 是正常现象,说明认证已生效。
连上客户端,传第一份文件
新手最容易卡在这一步,其实只差一个地址。以 macOS 为例,不用装任何软件:打开访达,顶部菜单"前往"→"连接服务器",输入dav://你的服务器IP:6065,在弹窗里填配置里的用户名和密码,你的目录就会像网络共享一样出现在访达里。
Windows 在资源管理器地址栏输入\\服务器IP:6065\(需要系统自带的 WebClient 服务在运行);手机上装任意一款 WebDAV 客户端,服务器地址填http://服务器IP:6065,账号密码同上。连上后随便拖一个文件进去,再到服务器directory对应的文件夹里确认文件出现了,第一份文件就算传成功了。
进阶配置:多用户、目录权限和加密密码
三个字段,各对应一个"什么时候需要":要第二个人用,就在users列表里加一个账号,用directory给每人一个独立目录;要限制某人只能读某些内容,就给他配permissions(C 创建、R 读、U 改、D 删,可组合,如RU)或rules按路径细分权限;确定要放外网,就别再用明文密码。
生成加密密码用自带命令,输出的哈希直接填回配置:
./webdav bcrypt '你的密码''你的密码'换成真实密码,填回配置时注意保留{bcrypt}前缀:
users: - username: admin password: "{bcrypt}$2y$10$xxxxxxxxxxxxxxxxxxxx" directory: /data/admin permissions: CRUDhash 那行整段替换成上一步命令的输出。
放到服务器上长期跑:反代 HTTPS 和开机自启
长期跑要做两件事。第一件是开机自启,用 systemd 托管,服务文件里关键的[Service]段这样写([Unit]和[Install]段按标准模板补上即可):
[Service] Type=simple User=root ExecStart=/usr/bin/webdav -c /opt/webdav.yml Restart=on-failureExecStart里的二进制路径和配置位置改成你自己的实际位置。第二件是把入口挪到反代后面做 HTTPS:在 Nginx 里加一个 location 把请求转到127.0.0.1:6065,并透传Host、X-Forwarded-For头;如果客户端会用 COPY/MOVE,还要按项目 README 里的示例重写Destination头,否则部分操作会报 502。
常见坑:端口被占、外网不通、密码前缀漏了
6065 端口被占。启动时报 bind 失败,先用ss -lntp查谁占着这个端口,然后把配置的port换成一个空闲端口。
本地能连、外网不通。先在本机用 curl 确认服务本身正常,再依次检查三处:address是不是写成了127.0.0.1(要对外访问就得是0.0.0.0)、系统防火墙、云服务器安全组有没有放行对应端口。
换了 bcrypt 密码却登录不上。检查配置里密码是否带{bcrypt}前缀、哈希是否以$2y$10$开头且没有被断行截断;漏了前缀就会被当成明文密码去比对,永远对不上。
接下来可以做两件事:再连一台设备(手机或另一台电脑),用同一个账号确认多端一致;确定要长期对外用,就按上一节把入口换成 HTTPS。
【免费下载链接】webdavA simple and standalone WebDAV server.项目地址: https://gitcode.com/gh_mirrors/we/webdav
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考