rclone serve restic

rclone serve restic

为 restic 的 REST API 提供远程服务。

概要

运行一个基础的 Web 服务器,通过 HTTP 为 restic 的 REST 后端 API 提供远程服务。这使得 restic 可以将 rclone 用作其不直接支持的云存储提供商的数据存储机制。

Restic 是一个用于备份的命令行程序。

服务器会记录错误信息。使用 -v 选项可以查看访问日志。

文件传输时会遵循 --bwlimit 选项的限制。 使用 --stats 选项可以控制统计信息的输出。

为 restic 配置 rclone

首先,为你选择的云存储提供商配置远程存储

配置好远程存储后,通过例如 “rclone lsd remote:” 命令来检查其是否正常工作。你可能给远程存储起了不同于 “remote:” 的名称,只需在后续说明中替换为你实际使用的名称即可。

现在启动 rclone restic 服务器:

rclone serve restic -v remote:backup

你可以将上述命令中的 “backup” 替换为远程存储中你希望使用的任意路径。

默认情况下,服务器将在 “localhost:8080” 上提供服务,你可以使用 --addr 选项来更改此设置。

你可能希望在系统启动时自动启动此服务器。

添加 --cache-objects=false 选项会使 rclone 停止对 List 调用返回的对象进行缓存。通常,缓存是有益的,因为它可以加快对象下载速度、节省事务次数,并且仅占用极少的内存。

为 restic 配置使用 rclone

现在你可以遵循 restic 的说明来配置 restic。

请注意,你需要使用 restic 0.8.2 或更高版本才能与 rclone 进行交互。

对于上述示例,你需要将 “http://localhost:8080/” 作为 REST 服务器的 URL。

例如:

$ export RESTIC_REPOSITORY=rest:http://localhost:8080/
$ export RESTIC_PASSWORD=yourpassword
$ restic init
created restic backend 8b1a4b56ae at rest:http://localhost:8080/

Please note that knowledge of your password is required to access
the repository. Losing your password means that your data is
irrecoverably lost.
$ restic backup /path/to/files/to/backup
scan [/path/to/files/to/backup]
scanned 189 directories, 312 files in 0:00
[0:00] 100.00%  38.128 MiB / 38.128 MiB  501 / 501 items  0 errors  ETA 0:00
duration: 0:00
snapshot 45c8fdd8 saved

多个版本库

请注意,您可以使用该端点托管多个版本库。 方法是 方法是在 URL 后添加目录名或路径。 请注意 这些 ** 必须**以 ./ 结尾。 例如

$ export RESTIC_REPOSITORY=rest:http://localhost:8080/user1repo/
# backup user1 stuff
$ export RESTIC_REPOSITORY=rest:http://localhost:8080/user2repo/
# backup user2 stuff

私有仓库

可以使用 --private-repos 标志来限制用户只能访问以 /<用户名>/ 开头的仓库。

服务器选项

使用 --addr 来指定服务器应该监听的 IP 地址和端口,例如 --addr 1.2.3.4:8000 或者 --addr :8080 来监听所有 IP 地址。默认情况下,服务器只监听本地主机。你可以使用端口 :0 让操作系统选择一个可用的端口。

如果你将 --addr 设置为监听公共或局域网可访问的 IP 地址,建议使用身份验证 - 请参阅下一节了解详细信息。

你可以通过将 URL 设置为 unix:///path/to/socket 或者直接使用绝对路径名来使用 Unix 套接字。

--addr 可以重复使用,以监听多个 IP 地址、端口或套接字。下面将进一步介绍的套接字激活也可以实现相同的功能。

--server-read-timeout--server-write-timeout 可以用来控制服务器的超时时间。请注意,这是一次传输的总时间。

--max-header-bytes 控制服务器在 HTTP 头部中接受的最大字节数。

--baseurl 控制 rclone 服务的 URL 前缀。默认情况下,rclone 将从根路径开始提供服务。如果你使用 --baseurl "/rclone",那么 rclone 将从以 “/rclone/” 开头的 URL 开始提供服务。如果你想对 rclone 服务进行代理,这会很有用。rclone 会自动在 --baseurl 前后插入 “/",所以 --baseurl "rclone"--baseurl "/rclone"--baseurl "/rclone/" 的处理方式是相同的。

TLS (SSL)

默认情况下,服务器将通过 HTTP 提供服务。如果你希望通过 HTTPS 提供服务,你需要提供 --cert--key 标志。

如果你希望进行客户端证书验证,那么你还需要提供 --client-ca

--cert 必须设置为包含 PEM 编码证书或该证书与 CA 证书串联的文件路径。--key 必须设置为包含 PEM 编码私钥的文件路径。如果设置了 --client-ca,则应将其设置为包含 PEM 编码客户端证书颁发机构证书的文件路径。

--min-tls-version 是可接受的最小 TLS 版本。有效值为 “tls1.0”、“tls1.1”、“tls1.2” 和 “tls1.3”(默认值为 “tls1.0”)。

套接字激活

如果服务管理器传递了任何文件描述符(FD),rclone 将监听这些文件描述符,而不是上述指定的监听地址(并且会忽略 --addr 传递的任何参数)。

这允许 rclone 作为一个套接字激活的服务。可以按照 https://www.freedesktop.org/software/systemd/man/latest/systemd.socket.html 中的描述,使用 .socket.service 单元文件对其进行配置。

可以使用 “systemd-socket-activate “命令临时测试套接字激活情况

   systemd-socket-activate -l 8000 -- rclone serve

这将在通过 TCP 连接到 8000 端口的第一个连接上用套接字激活 rclone。

验证

默认情况下,无需登录即可提供文件。

你可以使用 htpasswd 文件,它可以容纳很多用户,或者 使用 --user--pass 标志设置单一用户名和密码。

如果上述两种方法都未配置静态用户,且客户端 证书,则客户端证书的通用名称将被视为静态用户。 客户端证书通用名称将被视为用户名。

使用 --htpasswd /path/to/htpasswd 提供 htpasswd 文件。 该文件为 格式,并支持 MD5、SHA1 和 BCrypt 用于基本 认证。 建议使用 Bcrypt。

创建 htpasswd 文件:

触摸 htpasswd
htpasswd -B htpasswd 用户
htpasswd -B htpasswd anotherUser

密码文件可以在 rclone 运行时更新。

使用 --realm 设置身份验证域。

使用 --salt更改默认的密码散列盐。

rclone serve restic remote:path [flags]

Options

      --addr stringArray                要绑定服务器的 IP 地址:端口、:端口或 [unix://]/路径/到/套接字(默认值为 [127.0.0.1:8080])
      --allow-origin string             允许跨域请求(CORS)的来源
      --append-only                     禁止删除仓库数据
      --baseurl string                  URL 的前缀 - 留空表示根路径
      --cache-objects                   缓存列出的对象(默认值为 true)
      --cert string                     TLS PEM 公钥证书文件的路径(也可以包含中间/CA 证书)
      --client-ca string                用于验证客户端的 TLS PEM CA 文件的路径
  -h, --help                            restic 命令的帮助信息
      --htpasswd string                 htpasswd 文件 - 如果未提供,则不进行身份验证
      --key string                      TLS PEM 私钥文件的路径
      --max-header-bytes int            请求头的最大大小(默认值为 4096)
      --min-tls-version string          可接受的最小 TLS 版本(默认值为 "tls1.0")
      --pass string                     用于身份验证的密码
      --private-repos                   用户只能访问其私有仓库
      --realm string                    身份验证的领域
      --salt string                     密码哈希盐(默认值为 "dlPL2MqE")
      --server-read-timeout Duration    服务器读取数据的超时时间(默认值为 1 小时 0 分 0 秒)
      --server-write-timeout Duration   服务器写入数据的超时时间(默认值为 1 小时 0 分 0 秒)
      --stdio                           在标准输入/输出上运行 HTTP2 服务器
      --user string                     用于身份验证的用户名

有关此处未列出的全局选项,请参阅 全局标志页面

另请参见

  • rclone serve - 通过协议为远程服务器提供服务。