使用Rclone为mega部署WebDAV


前言

现在很多插件和软件都支持使用WebDAV的方法来备份用户个人设置,所以尝试在主机上使用 docker compose 部署 rclone 让他充当一个“协议网关”,将通过 WebDAV 传输的内容写入到 mega 当中。


生成conf配置文件

这里我并没有直接使用 mega 的网盘,因为我开启了2FA的设置,保存2FA信息既不方便也不安全。所以这里我选择使用 s3 协议来进行传输。因为docker上没有交互界面,为了在主机上能够使用conf文件,我们需要先在其他地方生成conf文件,可以在主机上,也可以在你自己的电脑上。这里我是直接在自己的Windows电脑上操作的。前往rclone官网下载跟你系统相配的版本。解压随便找个地方放一下,用完我们就可以删除掉了。mega这里我们使用s4(兼容s3)的协议连接。打开cmd,输入命令:

rclone config
# 没配置环境变量就是
你的路径\rclone.exe config

初次会提示没有找到 remote ,选择 n新建
选择 storage 方式,输入s3
选择 provider ,输入Mega
输入 env_auth ,直接回车,因为我们不使用亚马逊的服务
输入 access_key_id,mega的设置
输入 secret_access_key,mega的设置
选择节点 endpoint ,根据你自己的需求
edit advanced config? ,n
q,退出

配置文件会被存储在:

C:\\Users\\用户名\\AppData\\Roaming\\rclone\\rclone.conf

将这个文件保存下来。
其实你也可以复制粘贴下面这个示例配置,但是我不敢保证以后官方会对conf文件做任何的修改,除了 key 你要自己填写外,节点也推荐你进行一下测速,看一下你的主机连接哪里的节点速度最好最稳定。我这里使用的是蒙特利尔的节点。注意这里的megas4这个名字,这个 remote 名我们后面会用到。

[megas4]  
type = s3  
provider = Mega  
access_key_id = 填写你mega上的
secret_access_key = 填写你mega上的
endpoint = s3.ca-central-1.s4.mega.io

docker compose文件编写

services:  
  rclone:  
    image: rclone/rclone:latest  
    container_name: rclone-mega-webdav  
    restart: unless-stopped  
  
    # Rclone 启动命令:  
    # serve webdav: 启动 WebDAV 服务  
    # mega: 指定要服务的远程配置名,与 rclone.conf 中的 [mega] 对应  
    # --addr :5572: 在容器的 5572 端口上监听  
    # --user webdav_user: 设置 WebDAV 的登录用户名 (请修改)  
    # --pass your_strong_password: 设置 WebDAV 的登录密码 (请修改)  
    # -v: 显示详细日志  
    command: >
      serve webdav megas4:rclone   
      --addr :5572  
      --user 设定用户名  
      --pass 设定高强度密码  
      --vfs-cache-max-size 8G  
      --log-level NOTICE  
      --dir-cache-time 48h  
      --vfs-cache-mode writes  
      --cache-dir /cache  
    ports:  
      # 关键:将容器的5572端口映射到宿主机的127.0.0.1:5572  
      # 这确保了该端口只能被宿主机本地访问(比如Nginx),而不会暴露到公网。  
      - "127.0.0.1:5572:5572"  
  
    volumes:  
      # 将我们预先生成的配置文件挂载到容器中,设置为只读(ro)更安全  
      - ./rclone.conf:/config/rclone/rclone.conf:ro  
      # 创建一个命名卷用于可能的数据缓存或其他用途,保持数据持久化  
      - rclone_data:/config/rclone/data  
      - rclone_cache:/cache  
    environment:  
      # 设置时区  
      - TZ=Asia/Shanghai  
  
volumes:  
  rclone_data:  
  rclone_cache:

这里的内容请根据自己的情况来修改,我只能提供一个大概。具体参数讲解一下:
command:
serve webdav megas4:rclone:开启webdav,这里的megas4就是上面conf文件里面的 remote 名,冒号必须要有,表示根目录,后面的名称可有可无。如果写了具体的名称,比如现在这样megas4:rclone,就表示将所有内容放在名称为rclone的桶中。如果没有写具体的名称,比如megas4:则代表将内容直接放在根目录下,这样的话创建出来的根目录下的每个文件夹都会成为一个桶。因为对于 mega 来说使用对象存储,就是在云盘里面的S4 Object storage这个文件夹内进行操作,这个文件夹内的第一层目录的每个文件夹都是一个桶。
--addr :5572:设置端口5572
--vfs-cache-mode writes:这个是缓存模式,在writes模式下,当你通过 WebDAV 读取文件时,Rclone 会直接从 mega 服务器流式传输数据给你,不会将文件缓存到本地缓存盘。当写入文件时:Rclone 会现将文件完整的存放在本地缓存盘,上传成功后再将其删除,确保上传功能的稳定和快速。
--vfs-cache-mode full:这个缓存模式与上面的互斥,二选一。在full模式下,读取文件和上传文件 Rclone 都会将其先缓存在主机的本地磁盘,这样可以获得更好的体验,尤其是流媒体播放。但是对硬盘的性能和空间要求极高。这里我并没有使用这种方式,所以我后面的配置也都不是按照full模式配置的。
--vfs-cache-max-size 8G:设置缓存最大存储空间为8G,要是使用full模式建议提供更大的空间,否则在流媒体等大型文件(>8G)的时候 Rclone 会高速度删除和下载内容,反而更加影响体验。
--dir-cache-time 48h :设置缓存时间
--cache-dir /cache :设置缓存的目录

ports:
"127.0.0.1:5572:5572":因为我要使用Nginx反代,所以我直接将映射端口限制在了本地,如果你需要使用端口访问的话,改成5572:5572

volumes:
- ./rclone.conf:/config/rclone/rclone.conf:ro:将我们之前得到的配置文件挂载进去,这里我将配置文件放在了和 compose 文件同目录下

使用Nginx设置反代

server {  
    listen 80;  
    listen [::]:80;  
    server_name xxx.xxx.com;  
    return 301 https://$host$request_uri;  
}  
  
server {  
    listen 443 ssl http2;  
    listen [::]:443 ssl http2;  
    server_name xxx.xxx.com; 
  
    # 证书路径保持不变,因为你用的是通配符证书  
    ssl_certificate     /etc/letsencrypt/live/fullchain.pem;  
    ssl_certificate_key /etc/letsencrypt/live/privkey.pem;  
    ssl_protocols       TLSv1.2 TLSv1.3;  
    ssl_ciphers         ECDHE+AESGCM:ECDHE+CHACHA20:DHE+AESGCM:DHE+CHACHA20:!aNULL:!MD5:!DSS;  
  
    # 超时设置(针对 WebDAV 操作优化,增加超时时间)  
    proxy_connect_timeout 120s;  
    proxy_send_timeout 600s;  
    proxy_read_timeout 600s;  
  
    location / {  
        # 代理到 rclone 容器暴露在宿主机器上的端口  
  
        proxy_pass http://127.0.0.1:5572;  
        proxy_set_header   Host $host;  
        proxy_set_header X-Real-IP $http_cf_connecting_ip;  
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;  
        proxy_set_header   X-Forwarded-Proto $scheme;  
  
        proxy_redirect off;  
        proxy_buffering off;  
        proxy_request_buffering off;  
        proxy_http_version 1.1;  
        proxy_set_header Upgrade $http_upgrade;  
        proxy_set_header Connection "upgrade";  
		# 无上传大小限制
        client_max_body_size 0;  
    }  
}

这里需要注意的就是关闭缓存和设置无上传大小限制,其他的参数都可根据需求修改。


文章封面:使用Rclone为mega部署WebDAV

订阅评论
提醒
用户头像

0 评论
最旧
最新 最多投票