MinIO的S3对象存储替代品Garage

据说 Minio 在最新的更新中,删除了 Web UI 中的管理员功能。后续我们可以选择 OpenMaxIO 作为替代,这是 Minio 使用 UI 的一个分支。而今天我们介绍的 Garage ,则是另一个不同的对象存储选项。

简介

什么是 Garage ?

Garage 是一个 S3 兼容的分布式对象存储服务,设计用于小到中型的自托管环境。它旨在支持在不同物理位置运行的存储集群,能够高效地复制数据并保持可用性,即使部分服务器不可达。

主要特点

  • 分布式存储:支持多个节点,提供地理分布的存储解决方案。
  • 高可用性:即使部分节点出现故障,数据仍然可访问。
  • 轻量级和易于操作:专注于简化管理,适合小规模部署。
  • 开源:完全免费,遵循 AGPLv3 许可证。

什么是 Garage Web UI ?

Garage Web UI 是一个简单的管理界面,用于 Garage 对象存储服务。它是一个自托管的、S3 兼容的分布式对象存储解决方案的前端界面。

主要特点

  • 健康状态监控:可以查看 Garage 的健康状态。
  • 集群与布局管理:方便管理存储集群的布局。
  • 桶管理:创建、更新和查看桶的信息。
  • 对象浏览:集成的对象和桶浏览器。
  • 访问密钥管理:创建和分配访问密钥。

Garage Web UI 提供了一个用户友好的界面,方便用户管理和操作 Garage 对象存储服务。

安装

在群晖上以 Docker 方式安装。

garage.toml.txt

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
metadata_dir = "/var/lib/garage/meta"
data_dir = "/var/lib/garage/data"
db_engine = "sqlite"

replication_factor = 1

rpc_bind_addr = "[::]:3901"
rpc_public_addr = "192.168.0.197:3901"
rpc_secret = "1a3dde195f0e94165b1fdd8587d54c657b3e7567646187565121526beedd70d1"

[s3_api]
s3_region = "garage"
api_bind_addr = "[::]:3900"
root_domain = ".s3.laosu.tech"

[s3_web]
bind_addr = "[::]:3902"
root_domain = ".web.laosu.tech"
index = "index.html"

[admin]
api_bind_addr = "[::]:3903"
admin_token = "040adfcd8ea79d96a6e4404355e496d11e8bf6f4bffc41e7878f9def198bf78b"
metrics_token = "cbb4a2fb16cec7c0e16ce8efe62766b22e625872e4fa24ef9020c7d11b8b0fc1"
变量名 说明
metadata_dir 存储元数据的目录,设置为 /var/lib/garage/meta。
data_dir 存储对象数据块的目录,设置为 /var/lib/garage/data。
db_engine 数据库引擎,设置为 sqlite。
replication_factor 数据的复制因子,设置为 1。
rpc_bind_addr 节点监听RPC通信的地址和端口,设置为 [::]:3901。
rpc_public_addr 其他节点用于联系该节点的公共地址和端口,设置为 192.168.0.197:3901。
rpc_secret RPC 通信的密钥,用于节点间的身份验证,通过 openssl rand -hex 32 生成。
[s3_api] S3 API 的配置部分。
s3_region S3 区域,设置为 garage。
api_bind_addr S3 API 的绑定地址,设置为 [::]:3900。
root_domain S3 桶的根域名。
[s3_web] 将桶公开为网站的配置部分。
bind_addr 网站请求的绑定地址,设置为 [::]:3902。
root_domain 网站的根域名。
index 网站的索引文件,设置为 index.html。
[admin] 管理功能的配置部分。
api_bind_addr 管理 API 的绑定地址,设置为 [::]:3903。
admin_token 管理 API 的访问令牌,通过 openssl rand -hex 32 生成。
metrics_token 监控 API 的访问令牌,通过 openssl rand -hex 32 生成。

更多设置变量的详细说明,可以参考官方的文档:https://garagehq.deuxfleurs.fr/documentation/reference-manual/configuration

docker-compose.yml

将下面的内容保存为 docker-compose.yml 文件

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
services:
garage:
image: dxflrs/garage:v1.1.0
container_name: garage
restart: unless-stopped
ports:
- 3900:3900 ## s3 api
- 3901:3901 ## rpc
- 3902:3902 ## s3 web
- 3903:3903 ## admin api and '/metrics' for prometheus
volumes:
- ./garage.toml.txt:/etc/garage.toml
- ./meta:/var/lib/garage/meta
- ./data:/var/lib/garage/data
environment:
- TZ=Asia/Shanghai

webui:
image: khairul169/garage-webui:latest
container_name: garage-webui
restart: unless-stopped
ports:
- 3909:3909
volumes:
- ./garage.toml.txt:/etc/garage.toml:ro
environment:
API_BASE_URL: "http://garage:3903"
S3_ENDPOINT_URL: "http://garage:3900"

然后执行下面的命令

1
2
3
4
5
6
7
8
9
10
# 新建文件夹 garage 和 子目录
mkdir -p /volume1/docker/garage/{data,meta}

# 进入 garage 目录
cd /volume1/docker/garage

# 将 docker-compose.yml 和 garage.toml 放入当前目录

# 一键启动
docker-compose up -d

运行

在浏览器中输入 http://群晖IP:3909 就能看到主界面

进入 Cluster 可以查看当前节点的信息

点开后面的三个点 –> Assign

  • Node ID:默认的就可以
  • Zone:必填项,例如:home
  • Capacity:必填项

点 Save 保存后,还需要点 Apply 创建分区

进入 Keys,点 Create Keys 新建一个 Key

创建成功后

进入 Buckets

点 Create Buckets 创建存储桶

创建完成后,暂时还无法使用

无论是点 Manage 还是 Browse

切换到 Permissions

点 Allow Key

勾选 key 并赋予相应的权限

现在可以开始使用了

参考文档

Deuxfleurs/garage: S3-compatible object store for small self-hosted geo-distributed deployments - Gitea: git with a cup of coffee
地址:https://git.deuxfleurs.fr/Deuxfleurs/garage

khairul169/garage-webui: WebUI for Garage Object Storage Service
地址:https://github.com/khairul169/garage-webui

Garage - An open-source distributed object storage service
地址:https://garagehq.deuxfleurs.fr/

Quick Start | Garage HQ
地址:https://garagehq.deuxfleurs.fr/documentation/quick-start/

Garage - S3 object storage alternative to Minio : r/selfhosted
地址:https://www.reddit.com/r/selfhosted/comments/1kw1q9j/garage_s3_object_storage_alternative_to_minio/