据说 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
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
文件
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"
然后执行下面的命令
# 新建文件夹 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/