ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

webdav-server 轻量部署:团队共享目录一条命令跑起来

webdav-server 轻量部署:团队共享目录一条命令跑起来 webdav-server 轻量部署团队共享目录一条命令跑起来【免费下载链接】webdavA simple and standalone WebDAV server.项目地址: https://gitcode.com/gh_mirrors/we/webdav五个人要共享一个目录谁都不想把文件再搬一次网盘。webdav-server 是一个单二进制的 WebDAV 服务器把本机一个目录以 WebDAV 协议基于 HTTP 的分布式文件访问协议暴露出去客户端用浏览器、Finder、文件管理器直接连。认证、权限、多目录挂载全在一个配置文件里搞定不用装额外服务。一条 Docker 命令跑起来先跑起来再谈配置。项目自带 Docker 镜像一条命令即可启动docker run -d --name webdav \ -p 6060:6060 \ -v /tmp/webdav/config.yml:/config.yml:ro \ -v /tmp/webdav/data:/data \ ghcr.io/hacdias/webdav -c /config.ymlconfig.yml最小可用集其他字段全部走默认address: 0.0.0.0 port: 6060 directory: /data users: - username: admin password: {env}WD_ADMIN_PASS # 由环境变量注入 # 其余省略配了users就自动启用 Basic Auth浏览器弹登录框那种认证。起完服务验证一下curl -s -u admin:$WD_ADMIN_PASS -X PROPFIND http://localhost:6060/ | head -c 120预期输出PROPFIND 是 WebDAV 列目录的方法207 Multi-Status没有 Docker 就走原生安装两条路任选go install github.com/hacdias/webdav/v5latest brew install webdav然后webdav --config config.yml启动。权限完全拆解谁能干什么按用户设权限每个用户可以有独立目录和 CRUD创建/读/更新/删除权限位。users: - username: manager password: {env}MANAGER_PASS directory: /data/all permissions: CRUD - username: dev password: {env}DEV_PASS directory: /data/dev permissions: RU # 只读 更新效果manager 能建删dev 只能改自己目录里的文件。规则支持path前缀和regex正则两种匹配none表示全部禁止比如把/confidential对某用户屏蔽。注意规则从列表末尾往前匹配、第一条命中即停止——规则要按越具体越靠前排顺序写反会出现第一条规则不生效的错觉。方法到权限位的映射关系排障时可以直接查这张表HTTP 方法所需权限位GET / PROPFINDRPUT新建文件CPUT覆盖已有/ PATCHUMKCOLCDELETEDMOVER D多目录虚拟挂载想暴露多个物理目录把directory换成directories它们会作为虚拟根并列出现directories: - media: /srv/media - name: backups path: /data/backups - /data/archive # 其余省略效果客户端里看到一个虚拟根下三个子目录。规则里的路径要带上挂载名例如/media/public/access/。密码与认证内置bcrypt子命令生成 bcrypt把明文密码变成不可逆哈希串密码敏感值用{env}从环境变量读webdav bcrypt 你的密码 # 输出: $2y$10$N9qo8uLOickgx2ZMRZoMye…三种认证形态默认 Basic Auth认证已在上游完成时可传用户名并设noPassword: true做认证委派proxy auth配置tls: true加证书可直出 HTTPS。和 Samba / FTP 的差异决定了它适合什么场景对比项Samba / FTPwebdav-server协议SMB / FTP需开放专属端口HTTP反代、CDN、防火墙都友好权限粒度目录 属组级别用户 × 路径/正则细到这个人的 PDF 只读客户端多需安装映射工具浏览器、Finder、davfs2 现成部署守护进程 系统服务依赖单二进制Docker 一行进阶组合拳反代、systemd、环境变量注入Nginx 反代只改三行。问题反代后面 COPY/MOVE 报 502。思路客户端发的Destination头是完整 URLhttps://host/files/new.txt服务器只认纯路径反代层必须改写。下面这段在干什么拦截Destination头剥掉域名只留路径再转发给 6060。location / { proxy_pass http://127.0.0.1:6060; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; set $dest $http_destination; if ($http_destination ~ ^https?://[^/](?path.*)) { set $dest /$path; } proxy_set_header Destination $dest; }坑Destination不重写移动文件必挂——这是反代部署的头号坑。systemd 托管开机自启。问题进程挂了没人知道。思路交给 systemd 拉起崩溃自动重启。单元文件在干什么指定启动命令、失败重启、开机自启[Unit] DescriptionWebDAV Server Afternetwork.target [Service] Typesimple ExecStart/usr/local/bin/webdav --config /etc/webdav/config.yml Restarton-failure [Install] WantedBymulti-user.target坑改完单元文件要systemctl daemon-reload再restart只 restart 不会加载新配置。环境变量注入配置。问题配置里不想留密码还要能按环境切端口。思路所有配置项都能被WD_前缀环境变量覆盖如WD_CERT对应cert优先级是 命令行 环境变量 配置文件 默认值。镜像里只放无密钥的基础配置docker run -e WD_PORT6060 -e WD_ADMIN_PASS$ADMIN_PASS ...效果同一份镜像、不同环境变量跑不同实例配置漂移不用重建镜像。连不上查这四处401 但密码没输错明文密码被 YAML 当特殊字符解析。解法密码加引号或统一用{bcrypt}哈希、{env}环境变量。COPY/MOVE 返回 502反代没改写Destination头。解法按上一节 Nginx 配置加上重写逻辑。写了规则却不生效规则从后往前匹配、命中即停。解法把最具体的规则放列表最前面。Docker 里连localhost:6060返回 404容器内 localhost 指向容器自己。解法改用 docker 服务名或宿主机 IP 访问。webdav-server 就定位在这一点上单二进制、配置驱动、权限细到正则的 HTTP 文件服务没有守护进程和后台线程。想深挖的话lib/permissions.go里是规则匹配和权限判定的全部实现lib/config.go里是配置解析和优先级逻辑读这两个文件比看文档快。改完权限配置记得重启进程反代那层则nginx -s reload就行别光 restart。【免费下载链接】webdavA simple and standalone WebDAV server.项目地址: https://gitcode.com/gh_mirrors/we/webdav创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表