基于 dufs 搭建 WebDAV 服务的详细教程.md 8.4 KB

以下是基于 dufs 搭建 WebDAV 服务的详细教程,涵盖安装、配置、权限设置及客户端连接等关键步骤:


一、安装 dufs

1. Docker 部署(推荐)

docker run -d \
  --name dufs-webdav \
  -p 5000:5000 \
  -v /本地目录路径:/data \
  sigoden/dufs:latest \
  /data --allow-all --auth "user:password@/:rw"
  • 参数说明
    • -p 5000:5000:映射容器端口到宿主机。
    • -v /本地目录路径:/data:将本地目录挂载到容器内 /data,作为文件存储路径。
    • --allow-all:允许所有操作(上传、删除、搜索等)。
    • --auth "user:password@/:rw":设置用户名/密码,rw 表示读写权限,ro 为只读11134

2. 二进制安装

  • GitHub Releases 下载对应系统的可执行文件。
  • 启动命令示例:

    ./dufs /data -p 5000 --allow-all --auth "user:password@/:rw"
    
  • 支持参数:-p(端口)、--allow-upload(仅允许上传)、--auth(认证)等111679


二、WebDAV 服务配置

1. 基础配置

  • 启用 WebDAV:dufs 默认支持 WebDAV,无需额外配置,直接通过端口访问。
  • HTTPS 支持(可选):

    --tls-cert /path/to/cert.pem --tls-key /path/to/key.pem
    

    需提供 SSL 证书和密钥路径7934

2. 权限控制

  • 路径级权限:通过 --auth 参数指定不同路径的权限,例如:

    --auth "user1:pass1@/public:ro, /private:rw"
    

    表示 /public 目录只读,/private 目录可读写7922

3. 隐藏文件/目录

  • 使用 --hidden 参数隐藏特定文件(如临时文件):

    --hidden "*.tmp,logs/"
    

    79

        
    
    * * *
    
    ### 三、客户端连接 WebDAV
    
    #### 1\. **Windows 客户端**
    
    1.  打开“此电脑” → 右键选择“添加一个网络位置”。
    2.  输入地址:`http://服务器IP:5000`。
    3.  输入用户名和密码(与 `--auth` 参数一致)。
    
    #### 2\. **Mac/Linux**
    
    - 使用命令行工具 `curl` 或 `davfs2` 挂载:
        
    

    bash sudo mount -t davfs http://服务器IP:5000 /mnt/dufs

        
    
    #### 3\. **第三方工具(如 RaiDrive、Cyberduck)**
    
    - 选择 WebDAV 协议,填写服务器地址、端口、账号密码即可[34](/C:/Program%20Files/Joplin/resources/app.asar/@ref "@ref")[42](/C:/Program%20Files/Joplin/resources/app.asar/@ref "@ref")。
    
    * * *
    
    ### 四、常见问题排查
    
    1.  **端口冲突**:若默认端口 5000 被占用,使用 `-p 新端口:5000` 修改。
    2.  **权限不足**:确保挂载的本地目录有读写权限(Linux/Mac 使用 `chmod` 调整)。
    3.  **认证失败**:检查 `--auth` 参数格式是否正确,避免特殊字符(如 `@` 需转义)。
    4.  **HTTPS 证书错误**:自签证书需在客户端导入信任[34](/C:/Program%20Files/Joplin/resources/app.asar/@ref "@ref")[79](/C:/Program%20Files/Joplin/resources/app.asar/@ref "@ref")。
    
    * * *
    
    ### 五、高级功能扩展
    
    - **静态网站托管**:添加 `--render-index` 参数,目录中放置 `index.html` 文件即可[11](/C:/Program%20Files/Joplin/resources/app.asar/@ref "@ref")[16](/C:/Program%20Files/Joplin/resources/app.asar/@ref "@ref")。
    - **API 调用**:通过 `curl` 上传/下载文件:
        
    

    bash

    上传文件

    curl -T 本地文件路径 http://服务器IP:5000/目标路径 -u user:password

    下载文件

    curl -O http://服务器IP:5000/文件路径 -u user:password

        
    

通过上述步骤,可快速搭建一个支持 WebDAV 的 dufs 文件服务器。如需更复杂的配置(如多用户分级权限),可参考 官方文档 或结合 Nginx 反向代理实现负载均衡3479

以下是一个详细的 dufs 配置文件示例(YAML/TOML 格式),结合注释解释每个配置项的作用,帮助您快速搭建 WebDAV 服务:


六、配置文件示例(dufs-config.yml

# dufs 配置文件示例(YAML 格式)

# 监听地址与端口
port: 5000
host: 0.0.0.0  # 允许所有IP访问(默认localhost)

# WebDAV 基础设置
webdav: true    # 启用WebDAV支持(默认true)

# 认证与权限
auth:
  - path: /              # 控制根目录权限
    user: admin          # 用户名
    password: "123456"   # 密码(建议使用环境变量替代明文)
    permissions: rw      # 读写权限(ro=只读)
  - path: /public        # 子目录权限
    user: guest
    password: "guest123"
    permissions: ro

# 访问控制
access_control:
  allow_upload: true     # 允许上传
  allow_delete: true     # 允许删除
  allow_search: true     # 允许搜索文件
  hidden: ["*.tmp", ".DS_Store"]  # 隐藏指定文件/目录

# TLS/HTTPS 加密(可选)
tls:
  cert: /path/to/cert.pem  # SSL证书路径
  key: /path/to/key.pem    # SSL私钥路径

# 静态文件托管(可选)
render_index: true       # 启用目录索引(显示index.html)

配置文件解析

1. 监听设置

  • port: WebDAV 服务监听的端口(默认 5000)。
  • host: 绑定 IP 地址,0.0.0.0 允许外部访问,127.0.0.1 仅限本机。

2. WebDAV 支持

  • webdav: true: 必须启用 WebDAV 才能通过客户端连接。

3. 认证与权限

  • auth: 定义不同路径的访问权限:
    • path: 受控目录路径(如 / 表示根目录)。
    • user/password: 认证信息(密码建议通过环境变量注入)。
    • permissions: rw(读写)或 ro(只读)。

4. 访问控制

  • allow_upload/allow_delete: 控制文件操作权限。
  • hidden: 隐藏特定文件(支持通配符 *)。

5. HTTPS 加密

  • tls: 配置 SSL 证书和私钥路径,启用 HTTPS(需有效证书)。

6. 静态网站

  • render_index: true: 自动渲染目录中的 index.html

使用配置文件启动服务

方式 1:直接运行二进制

dufs --config dufs-config.yml

方式 2:Docker 部署

docker run -d \
  -p 5000:5000 \
  -v /本地目录:/data \
  -v $(pwd)/dufs-config.yml:/app/config.yml \  # 挂载配置文件
  sigoden/dufs \
  --config /app/config.yml

进阶配置示例

多用户权限分层

auth:
  - path: /
    user: admin
    password: "admin@2023"
    permissions: rw
  - path: /projects
    user: dev
    password: "dev-secret"
    permissions: rw
  - path: /public
    user: anonymous
    password: ""
    permissions: ro

环境变量注入密码(更安全)

# 通过环境变量传递敏感信息
export DUF_ADMIN_PASS="secure-password"

# 启动命令中引用环境变量
dufs --auth "admin:${DUF_ADMIN_PASS}@/:rw"

客户端连接验证

使用 RaiDriveCyberduck 测试:

  • 协议: WebDAVWebDAV HTTPS
  • 地址: http://your-ip:5000https://your-domain:5000
  • 账号/密码: 与配置文件中的 auth 部分一致。

常见问题

1. 配置文件路径错误

  • 确保 Docker 容器内路径与挂载路径一致(使用 -v 正确映射)。

2. 权限冲突

  • 本地目录权限需与容器用户匹配(Linux 建议 chmod 755 /本地目录)。

3. HTTPS 证书无效

  • 自签证书需在客户端手动信任,或使用 Let's Encrypt 免费证书。

通过配置文件,您可以灵活管理复杂的权限规则和功能组合。如需更多高级选项(如日志级别、CORS 等),可参考 官方文档