有很多用户在使用 DigitalOcean Spaces 对象存储的过程中,还没有找到一个合适的数据管理工具。其实目前有很多开源工具都可以使用,比如 s3cmd、Cyberduck、rclone、transmit5。Cyberduck 提供了直观的图形用户界面,而 s3cmd 2.x 则擅长于批处理和自动化任务。假设您每天都需要将本地备份文件上传到 Space,并删除超过30天的旧备份。你可以使用 Cyberduck 手动检查备份文件是否已正确上传。然后,编写一个 s3cmd 脚本,该脚本连接到 Space,查找并删除超过30天的旧备份文件。
这次我们将介绍如何在 DigitalOcean Spaces 上配置和使用他们。
s3cmd 是一个免费且开源的命令行工具,它允许用户通过命令行界面与Amazon S3存储服务以及其他兼容S3协议的云存储服务进行交互。
Cyberduck 也是一个免费开源的跨平台云存储服务聚合客户端,支持多种协议,包括FTP、SFTP、WebDAV、Amazon S3、Google Storage、Windows Azure、Rackspace Cloud Files 以及 Google Docs 等。它提供了一个简单的图形用户界面,允许用户通过拖放方式轻松地上传和下载文件,同时支持各种快捷键操作,使得文件管理变得简单高效。Cyberduck 的界面设计直观,操作简便,适合各种水平的用户使用。
DigitalOcean Spaces 对象存储是一种与 S3 兼容的对象存储服务。Spaces 存储桶可让你存储和提供大量数据,其内置 CDN 可最大限度地缩短页面加载时间并提高性能。所以两个工具都可以用于 Spaces 对象存储上。
准备工作
要将 s3cmd 与 DigitalOcean Spaces 结合使用,你需要:
- s3cmd 版本 2.0.0+ 或更高版本:你可以使用
s3cmd --version
检查你的版本。来自软件包管理器的版本可能已过时,因此建议使用 s3cmd 下载页面 获取最新版本。Homebrew 用户可以使用命令brew install s3cmd
安装最新版本。 - Spaces 存储桶的访问密钥:要生成这些密钥,请访问 DigitalOcean 控制面板中的 API 页面。
- 下载 Cyberduck:访问 Cyberduck 的官方网站下载并安装适合你操作系统的版本。
初始化配置s3cmd
默认情况下,s3cmd 将其配置文件 .s3cfg 存储在运行配置命令的用户的主目录中。.s3cfg 是一个键/值对的纯文本文件,创建后可直接编辑。
运行命令时,s3cmd 使用其默认配置文件中设置的选项。你可以通过在运行的每个命令后附加 -c ~/path/to/config/file 来指定不同的配置。
如果 DigitalOcean 是您使用 s3cmd 连接的主要或唯一提供商,并且你不想每次使用 s3cmd 时都指定其配置文件,请使用以下命令配置默认的 ~/.s3cfg 文件:
s3cmd --configure
如果你已将 s3cmd 与其他服务一起使用,则可以通过添加 -c 标志并提供文件名来创建备用配置文件。配置文件将在你发出命令的目录中创建,因此如果你希望在其他位置创建它,请指定路径。
输入访问密钥(类似于AWS的AccessKey和Secret Key)
脚本首先要求输入访问密钥和密钥。如果你还没有密钥,可以通过访问控制面板的 API 页面为 s3cmd 生成一组密钥。
输入你的密钥,然后接受美国作为默认区域,因为区域信息与 DigitalOcean 无关。如果你愿意,可以使用环境变量 AWS_ACCESS_KEY_ID
和 AWS_SECRET_ACCESS_KEY
来存储一组密钥。
Enter new values or accept defaults in brackets with Enter.
Refer to user manual for detailed description of all options.
Access key and Secret key are your identifiers for Amazon S3. Leave them empty for using the env variables.
Access Key []: EXAMPLE7UQOTHDTF3GK4
Secret Key []: exampleb8e1ec97b97bff326955375c5
Default Region [US]:
输入 DigitalOcean 端点
接下来,输入 DigitalOcean Spaces 端点。Spaces 端点命名模式为 <region>.digitaloceanspaces.com,例如 nyc3.digitaloceanspaces.com。使用存储桶所在区域的端点。
Use "s3.amazonaws.com" for S3 Endpoint and not modify it to the target Amazon S3.
S3 Endpoint [s3.amazonaws.com]: nyc3.digitaloceanspaces.com
下一个提示要求输入 URL 模板以访问你的存储桶。由于 Spaces 支持基于 DNS 的端点 URL,因此你可以使用变量 `%(bucket)s` 来代替存储桶的名称。输入以下模板格式,格式与所写完全相同:`%(bucket)s.nyc3.digitaloceanspaces.com`。同样,如果你的存储桶位于其他区域,你需要更改此格式。
各区域代码:
Use "%(bucket)s.s3.amazonaws.com" to the target Amazon S3. "%(bucket)s" and "%(location)s" vars c
an be used if the target S3 system supports dns based buckets.
DNS-style bucket+hostname:port template for accessing a bucket []: %(bucket)s.nyc3.digitaloceanspaces.com
可选择项:设置加密密码
下一个提示是用于设置一个可选的加密密码。与仅在传输过程中保护文件的 HTTPS 不同,GPG 加密可以防止他人在文件传输和存储在 DigitalOcean 上时读取文件。现在设置密码不会自动加密对象,它只是使以后可以使用加密功能。无需特殊需求,一般可以跳过这一步。
Encryption password is used to protect your files from reading
by unauthorized persons while in transfer to S3
Encryption password:
下一个提示要求输入 GPG 程序的路径。在 Linux 上,你可以按 ENTER 键接受默认路径。如果你在 macOS 上按照这些说明进行操作,可能需要使用 Homebrew(brew install gpg
)安装 GPG。然后,你可以使用 which gpg
找到 GPG 的路径。
Path to GPG program [/usr/bin/gpg]:
使用 HTTPS 连接
下一个提示要求使用 HTTPS 协议。HTTPS 可以保护数据在传输过程中不被读取。
由于 DigitalOcean Spaces 不支持未加密的传输,所以你必须使用 HTTPS。按 ENTER 键接受默认设置即可。
When using secure HTTPS protocol all communication with Amazon S3
servers is protected from 3rd party eavesdropping. This method is
slower than plain HTTP, and can only be proxied with Python 2.7 or newer
Use HTTPS protocol [Yes]: Yes
可选择项:设置代理服务器
最后一个提示是用于设置 HTTP 代理服务器。如果你的网络需要代理,请输入其 IP 地址或域名,不包括协议,例如 203.0.113.1
或 proxy.example.com
。如果你不使用代理,请按 ENTER 键跳过此步骤。
On some networks all internet access must go through a HTTP proxy.
Try setting it here if you can't connect to S3 directly
HTTP Proxy server name:
确认、测试和保存设置
在提示输入 HTTP 代理服务器名称后,配置脚本会提供使用的值的相关摘要,然后提供测试这些值的机会:
New settings:
Access Key: EXAMPLES7UQOTHDTF3GK4
Secret Key: b8e1ec97b97bff326955375c5example
Default Region: US
S3 Endpoint: nyc3.digitaloceanspaces.com
DNS-style bucket+hostname:port template for accessing a bucket: %(bucket)s.n
yc3.digitaloceanspaces.com
Encryption password: secure_password
Path to GPG program: /usr/bin/gpg
Use HTTPS protocol: True
HTTP Proxy server name:
HTTP Proxy server port: 0
Test access with supplied credentials? [Y/n] Y
测试成功完成后,输入Y保存设置:
Please wait, attempting to list all buckets...
Success. Your access key and secret key worked fine :-)
Now verifying that encryption works...
Success. Encryption and decryption worked fine :-)
Save settings? [y/N] Y
如果测试失败或你选择 N,你将有机会重试配置。保存配置后,你会收到其位置的确认。
Configuration saved to '/home/sammy/nyc3'
s3cmd的一些使用示例
由于s3cmd是一个命令行工具,所以我们在这里例举一些比较常用的命令,如果大家需要更详细的命令行案例可以查阅官方文档。
列出 Buckets和文件
列出(List )所有的 buckets
s3cmd ls
按顺序列出 buckets 中的文件
s3cmd ls s3://spacename s3://secondspace
列出所有 bucket 中的所有文件
s3cmd la --recursive
将文件上传到bucket
使用put
命令将文件从本地计算机复制到存储桶。在所有这些命令中,都必须以斜杠为结尾。
上传一个文件
当你添加尾部斜杠时(如下例所示),将附加原始文件名。如果你省略斜杠,则文件将以新名称复制到存储桶中的path
。
s3cmd put file.txt s3://spacename/path/
给文件设置新名称
将文件放入存储桶后,你可以通过在路径末尾键入新名称来更改文件的名称,如下所示:
s3cmd put file.txt s3://spacename/newname.txt
上传多个文件
s3cmd put file1.txt file2.txt path/to/file3.txt s3://spacename/path/
将所有文件放在当前目录中
使用 *
和 put
将当前工作目录中的所有内容按顺序复制到你的存储桶中:
s3cmd put * s3://spacename/path/ --recursive
你可以通过添加 --acl-public
来一次性为所有文件设置公共权限,同样地,你可以使用 --add-header
(如 --add-header=Cache-Control:max-age=86400
)来设置元数据:
s3cmd put * s3://yourfolder --acl-public --add-header=Cache-Control:max-age=86400 --recursive
将文件保存到本地计算机
使用get
命令将文件从存储桶复制到本地计算机。以下是三个常用的命令行。
获取一个文件
s3cmd get s3://spacename/path/to/file.txt
获取目录中的所有文件
要获取多个文件,s3 地址必须以斜杠结尾,并且命令结尾需要有--recursive
。
s3cmd get s3://spacename/path/ --recursive
以新名称保存文件
与put
命令一样,get
命令可以给文件设置新的名字。
s3cmd get s3://spacename/file.txt newfilename.txt
将Cyberduck 链接到 DigitalOcean
要从 Cyberduck 连接到 DigitalOcean,请单击打开连接图标,然后选择Amazon S3。
选择了 Amazon S3 后,它将打开一个新窗口:
在服务器一栏,填写区域,例如nyc3
和digitaloceanspaces.com
。然后分别在访问密钥 ID和密码字段中输入你的访问密钥和密钥。填写完毕后,选择“connect”。
Cyberduck 的使用相当简单,你可以在里面点击“Action”按钮,然后选择新建文件夹、上传文件等操作。这个工具相比 s3cmd,更适合日常使用。如果需要批量处理数据,那建议还是使用s3cmd。
以上便是本篇教程全部内容。如果你在使用 DigitalOcean 对象存储或其它服务的过程中遇到问题,可以联系 DigitalOcean 中国区独家战略合作伙伴卓普云。