Запускаем Garage S3 в Docker
Создаем проект, просто папку, где все будем хранить:
mkdir garage
cd garage
Создаем файл настроек томл:
nano garage.toml
Пишем туда этот текст:
metadata_dir = "/var/lib/garage/meta"
data_dir = "/var/lib/garage/data"
db_engine = "lmdb"
replication_mode = "none"
rpc_bind_addr = "[::]:3901"
rpc_public_addr = "127.0.0.1:3901"
rpc_secret = "3e59650cc67421460a80eafc4d45611ebb63a214296d8f32f51135041ff514f5"
[s3_api]
s3_region = "garage"
api_bind_addr = "[::]:3900"
root_domain = "localhost"
[s3_web]
bind_addr = "[::]:3902"
root_domain = "localhost"
index = "index.html"
[k2v_api]
api_bind_addr = "[::]:3904"
[admin]
api_bind_addr = "0.0.0.0:3903"
admin_token = "472070e320469b2f048f77dcad4149e0c608ef01ecf0ac863c416287a1127a9e"
Далее создаем папку для хранения метаданных и самих данных:
mkdir meta
mkdir data
Теперь запускаем docker:
docker run \
-d \
--name garaged \
--restart always \
-p 3900:3900 -p 3901:3901 -p 3902:3902 -p 3903:3903 -p 3904:3904 \
-v ./garage.toml:/etc/garage.toml \
-v ./meta:/var/lib/garage/meta \
-v ./data:/var/lib/garage/data \
dxflrs/garage:v0.9.0
Проверяем, что все хорошо:
Для удобства зарегистрируем alias так:
alias garage="docker exec -ti garaged /garage"
Теперь можно запускать команды быстрее.
garage status
==== HEALTHY NODES ====
ID Hostname Address Tags Zone Capacity DataAvail
851017ec5989840f e3428f26541f 127.0.0.1:3901 NO ROLE ASSIGNED
Добавим роль:
garage layout assign -z dc1 -c 1G 851017ec5989840f
Role changes are staged but not yet commited.
Use `garage layout show` to view staged role changes,
and `garage layout apply` to enact staged changes.
Применим роль:
garage layout apply --version 1
==== COMPUTATION OF A NEW PARTITION ASSIGNATION ====
Partitions are replicated 1 times on at least 1 distinct zones.
Optimal partition size: 3.9 MB
Usable capacity / total cluster capacity: 1000.0 MB / 1000.0 MB (100.0 %)
Effective capacity (replication factor 1): 1000.0 MB
dc1 Tags Partitions Capacity Usable capacity
851017ec5989840f 256 (256 new) 1000.0 MB 1000.0 MB (100.0%)
TOTAL 256 (256 unique) 1000.0 MB 1000.0 MB (100.0%)
New cluster layout with updated role assignment has been applied in cluster.
Data will now be moved around between nodes accordingly.
Можно создавать бакет:
garage bucket create gavrilov
Bucket gavrilov was created.
Генерируем ключи:
garage key create gavrilov-key
Key name: gavrilov-key
Key ID: GK6d2fd5f2bb22374c2b626fb2
Secret key: 5118548e77dcd660705662f18742e4d9f0cd5d37409c2e3bfa53a50f00e33886
Can create buckets: false
Key-specific bucket aliases:
Authorized buckets:
Добавляем доступ ключей в бакет:
garage bucket allow \
--read \
--write \
--owner \
gavrilov \
--key gavrilov-key
New permissions for GK6d2fd5f2bb22374c2b626fb2 on gavrilov: read true, write true, owner true.
И последний штрих доступ через web:
garage bucket website gavrilov --allow
Website access allowed for gavrilov
Теперь можно настроить доступ s3 клиента и что то положить в бакет:
mc alias set garage http://localhost:3900 GK6d2fd5f2bb22374c2b626fb2 5118548e77dcd660705662f18742e4d9f0cd5d37409c2e3bfa53a50f00e33886
echo "hello world from s3" | mc pipe garage/gavrilov/index.html
Открываем браузер и смотрим файлик: http://gavrilov.localhost:3902/
ps: На официальном сайте docker запускают с аргументом
--network host
, но у меня почему-то так не работало. Порты закрыты были все. Потом разберусь ¯\_(ツ)_/¯ .