Ray-D-Song's Blog

自部署 WebDAV 快速上手

2024-12-16 7min

什么是 WebDAV

简单来说,WebDAV 就是基于 HTTP 协议的文件系统,可以挂载后像本地文件一样使用。

部署

有许多开源的 WebDAV 服务,我使用的是 Go 编写的 webdav
优点是使用简单,直接下载编译好的二进制文件,然后运行即可。

Releases 页面下载对应平台的二进制文件,然后执行后续操作:

tar -zxvf webdav-linux-amd64.tar.gz

解压后包含以下文件:

配置

webdav所在目录下创建config.yml文件,参考配置如下:

# 监听地址
address: 0.0.0.0
# 监听端口
port: 6065
# 如果您想直接启用 TLS,相关的 TLS 设置。
# TLS 相关设置
tls: false
cert: cert.pem
key: key.pem

# 应用于 WebDAV 路径的前缀。默认为 '/'。
prefix: /

# 启用或禁用调试日志记录。默认为 'false'。
debug: false

# 禁用嗅探文件以检测其内容类型。默认为 'false'。
noSniff: false

# 服务器是否在受信任的代理后运行。如果为 true,
# 将使用 X-Forwarded-For 头来记录远程地址
# (如果可用)。
behindProxy: false

# 用户连接时可以访问的目录。
# 该目录将被用户使用,除非他们定义了自己的'directory'。
# 默认为 '.'(当前目录)。
directory: .


# 用户的默认权限。此选项不区分大小写。可能的
# 权限:C(创建)、R(读取)、U(更新)、D(删除)。您可以组合多个
# 权限。例如,要允许读取和创建,请设置 "RC"。默认为 "R"。
permissions: R

# 用户的默认权限规则。默认为无。规则从最后到第一个应用,
# 即第一个匹配请求的规则将被应用。
rules: []

# 重新定义用户规则的行为。可以是:
# - overwrite:当用户定义了规则时,这些规则将覆盖任何全局
#   已定义的规则。也就是说,全局规则对用户不适用。
# - append:当用户定义了规则时,这些规则将附加到全局
#   已定义的规则。对于该用户,他们自己的特定规则将首先被检查,
#   然后是全局规则。默认为 'overwrite'。
rulesBehavior: overwrite

# 日志配置
log:
  # 日志格式('console','json')。默认为 'console'。
  format: console
  # 启用或禁用颜色。默认为 'true'。仅在格式为 'console' 时应用。
  colors: true
  # 日志输出。您可以有多个输出。默认为仅 'stderr'。
  outputs:
  - stderr

# CORS 配置
cors:
  # 是否应用 CORS 配置。默认为 'false'。
  enabled: true
  credentials: true
  allowed_headers:
    - Depth
  allowed_hosts:
    - http://localhost:8080
  allowed_methods:
    - GET
  exposed_headers:
    - Content-Length
    - Content-Range


# 用户列表。如果列表为空,则不会有身份验证。
# 否则,将自动配置基本身份验证。
#
# 如果您将身份验证委托给其他服务,您可以使用基本身份验证代理
# 用户名,然后使用选项禁用 webdav 的密码检查:
#
# noPassword: true
users:
  # 示例 'admin' 用户,使用明文密码。
  - username: admin
    password: admin
  # 示例 'john' 用户,使用 bcrypt 加密密码,并具有自定义目录。
  - username: john
    password: "{bcrypt}$2y$10$zEP6oofmXFeHaeMfBNLnP.DO8m.H.Mwhd24/TOX2MWLxAExXi4qgi"
    directory: /another/path
  # 示例用户,其详细信息将从环境中获取。
  - username: "{env}ENV_USERNAME"
    password: "{env}ENV_PASSWORD"
  - username: basic
    password: basic
    # 覆盖默认权限
    permissions: CRUD
    rules:
      # 使用此规则,用户无法访问 /some/files。
      - path: /some/file
        permissions: none
      # 使用此规则,用户可以在 /public/access/ 中创建、读取、更新和删除。
      - path: /public/access/
        permissions: CRUD
      # 使用此规则,用户可以读取和更新所有以 .js 结尾的文件。它使用正则表达式。
      - regex: "^.+.js$"
        permissions: RU

启动

# 直接运行
./webdav

# 后台运行
./webdav &

WebDAV 服务会自动读取同目录下的config.yml文件,默认的数据目录就是当前目录。

设置为开机自启动

# 创建 systemd 服务文件
sudo vim /etc/systemd/system/webdav.service

配置文件内容如下:

[Unit]
Description=WebDAV

[Service]
ExecStart=/path/to/webdav
Restart=always

[Install]
WantedBy=multi-user.target

启用服务:
记得将/path/to/webdav替换为实际路径。

sudo systemctl enable webdav.service
sudo systemctl start webdav.service

nginx 反代和 https 配置

如果你不熟悉 nginx,可以先参考我写的 nginx 配置 HTTPS 教程

在 nginx 配置中新增一个 server 配置,参考如下:

server {
    listen 443 ssl;

    server_name your_domain.com;

    ssl_certificate /path/to/your_certificate.crt;
    ssl_certificate_key /path/to/your_private_key.key;

    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers HIGH:!aNULL:!MD5;

    location / {
        proxy_pass http://localhost:6065; 
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

其中需要关注的高亮行:

保存配置文件后, 重启 Nginx 服务.

sudo systemctl restart nginx

使用

使用 WebDAV 的方式很多,这里介绍用 Mac 默认的 Finder 客户端使用 WebDAV。
在 Finder 中,选择前往 -> 连接服务器,输入你的域名和端口,然后输入用户名和密码,就可以像本地文件一样使用 WebDAV 了。

如果增改删的时候提示权限不足,请检查你的配置文件的高亮行部分,确保用户有相应的权限。