第一步:创建宿主机持久化目录

在宿主机执行命令,创建配置与缓存目录:

1
2
sudo mkdir -p /var/home/core/container-work/rclone/config
sudo mkdir -p /var/home/core/container-work/rclone/cache

验证方法:运行 ls -ld /var/home/core/container-work/rclone/config,确认目录已创建。


第二步:生成 Google Drive 配置文件

通过一次性交互容器完成 Google Drive 授权绑定:

1
2
3
sudo podman run -it --rm \
  -v /var/home/core/container-work/rclone/config:/config/rclone:z \
  docker.io/rclone/rclone:latest config

交互要点回顾:

  1. n 新建配置,名称输入 gdrive。
  2. 存储类型选择 drive。
  3. 填入你自己的 client_id 与 client_secret。
  4. Scope 选 1(完整访问)。
  5. root_folder_id 与 service_account_file 直接回车留空。
  6. Edit advanced config? 选 n。
  7. Use auto config? 选 n。
  8. 在本地有浏览器的电脑上运行终端给出的 rclone authorize 命令,登录已加入测试用户的 Google 账号,将获得的 {"access_token": ...} 字符串粘贴回终端。
  9. Configure this as a Shared Drive? 选 n。
  10. y 确认保存,最后 q 退出。

验证方法: 运行以下命令测试连接是否畅通:

1
2
3
sudo podman run --rm \
  -v /var/home/core/container-work/rclone/config:/config/rclone:z \
  docker.io/rclone/rclone:latest lsd gdrive:

预期结果:正常列出 Google Drive 根目录的文件夹名称。


第三步:配置 Quadlet .container 文件

创建系统级 Quadlet 目录并写入服务文件:

1
2
sudo mkdir -p /etc/containers/systemd
sudo nano /etc/containers/systemd/my-rclone.container

写入以下经过微调的配置内容:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
[Unit]
Description=Rclone WebDAV Service for Google Drive (Podman)
After=network-online.target
Wants=network-online.target

[Container]
ContainerName=my-rclone
Image=docker.io/rclone/rclone:latest
AutoUpdate=registry

# 限制监听仅宿主机本地回环,防止公网直通未加密端口
PublishPort=127.0.0.1:1084:8080

Volume=/var/home/core/container-work/rclone/config:/config/rclone:z
Volume=/var/home/core/container-work/rclone/cache:/cache:z

Exec=serve webdav gdrive:/ \
    --addr :8080 \
    --user webdavuser \
    --pass webdavpass \
    --cache-dir /cache \
    --vfs-cache-mode writes \
    --vfs-cache-max-size 15G \
    --vfs-cache-max-age 24h \
    --dir-cache-time 48h \
    --buffer-size 32M \
    --tpslimit 8 \
    --tpslimit-burst 10

[Service]
Restart=on-failure
RestartSec=5s

[Install]
WantedBy=multi-user.target

第四步:重载 systemd 并启动容器服务

Quadlet 会自动将 .container 文件转译为原生的 my-rclone.service:

1
2
3
4
5
6
7
8
# 1. 重载 systemd 生成服务
sudo systemctl daemon-reload

# 2. 启动并设置开机自启
sudo systemctl enable --now my-rclone

# 3. 检查服务运行状态
sudo systemctl status my-rclone

验证方法: 查看容器实时日志:

1
sudo podman logs -f my-rclone

预期结果:日志输出类似 WebDAV server listening on [::]:8080 或 Serving on :8080,无持续报错或重启循环。


第五步:调整 Caddy 反向代理

在宿主机的 Caddyfile 中,将上游端口指定为你配置的 1084:

1
2
3
4
5
6
7
dav.yourdomain.com {
    reverse_proxy 127.0.0.1:1084 {
        transport http {
            response_header_timeout 300s
        }
    }
}

重载 Caddy:

1
sudo systemctl reload caddy

验证方法: 在外部终端使用 curl 测试验证:

1
curl -I -u trarer:tanjie https://dav.yourdomain.com/

预期结果:返回 HTTP/2 200 或带有 Dav: 1, 2 的响应头。