Garage WebUI — це простий веб-інтерфейс адміністратора для Garage, самостійно розгортуваного, S3-сумісного розподіленого сервісу об’єктного сховища. Цей інструмент надає зручний графічний інтерфейс для управління кластером Garage, бакетами (buckets), ключами доступу та об’єктами.
Основні можливості:
- Моніторинг стану здоров’я Garage
- Управління кластером та топологією
- Створення, оновлення та перегляд інформації про бакети
- Вбудований браузер об’єктів та бакетів
- Створення та призначення ключів доступу
Посилання:
- GitHub проєкту: https://github.com/khairul169/garage-webui
- Документація Garage: https://garagehq.deuxfleurs.fr/
- Репозиторій Garage: https://git.deuxfleurs.fr/Deuxfleurs/garage
Попередні вимоги
Перед встановленням переконайтеся, що у вас:
- Встановлено та налаштовано сервер Garage (мінімум версія 2.0.0)
- У конфігурації Garage увімкнено Admin API
- Відкрито необхідні порти (за замовчуванням 3909 для WebUI)
- Доступ до файлу конфігурації
garage.toml
Встановлення через Docker Compose
Якщо ви використовуєте Docker для Garage, найзручніше встановити WebUI разом з Garage через Docker Compose.
Створіть файл docker-compose.yml:
services:
garage:
image: dxflrs/garage:v2.0.0
container_name: garage
volumes:
- ./garage.toml:/etc/garage.toml
- ./meta:/var/lib/garage/meta
- ./data:/var/lib/garage/data
restart: unless-stopped
ports:
- 3900:3900 # S3 API
- 3901:3901 # RPC
- 3902:3902 # S3 Web
- 3903:3903 # Admin API
webui:
image: khairul169/garage-webui:latest
container_name: garage-webui
restart: unless-stopped
volumes:
- ./garage.toml:/etc/garage.toml:ro
ports:
- 3909:3909
environment:
API_BASE_URL: "http://garage:3903"
S3_ENDPOINT_URL: "http://garage:3900"
Запустіть контейнери:
docker-compose up -d
Налаштування конфігурації Garage
Garage WebUI використовує значення з конфігураційного файлу Garage. Переконайтеся, що ваш файл garage.toml містить необхідні параметри:
metadata_dir = "/var/lib/garage/meta"
data_dir = "/var/lib/garage/data"
db_engine = "sqlite"
metadata_auto_snapshot_interval = "6h"
replication_factor = 3
compression_level = 2
rpc_bind_addr = "[::]:3901"
rpc_public_addr = "localhost:3901" # Обов'язково!
rpc_secret = "YOUR_RPC_SECRET_HERE"
[s3_api]
s3_region = "garage"
api_bind_addr = "[::]:3900"
root_domain = ".s3.domain.com"
[s3_web] # Опціонально, для веб-хостингу бакетів
bind_addr = "[::]:3902"
root_domain = ".web.domain.com"
index = "index.html"
[admin] # Обов'язково!
api_bind_addr = "[::]:3903"
admin_token = "YOUR_ADMIN_TOKEN_HERE"
metrics_token = "YOUR_METRICS_TOKEN_HERE"
Важливі параметри:
rpc_public_addr— має бути вказаний- Секція
[admin]— обов’язкова для роботи WebUI admin_token— використовується для автентифікації
Змінні оточення
WebUI підтримує наступні змінні оточення для налаштування:
| Змінна | Опис | За замовчуванням |
|---|---|---|
CONFIG_PATH |
Шлях до файлу конфігурації Garage | /etc/garage.toml |
BASE_PATH |
Базовий шлях або префікс для WebUI | – |
API_BASE_URL |
URL Admin API Garage | З конфігурації |
API_ADMIN_KEY |
Ключ Admin API | З конфігурації |
S3_REGION |
Регіон S3 | З конфігурації |
S3_ENDPOINT_URL |
URL кінцевої точки S3 | З конфігурації |
PORT |
Порт для WebUI | 3909 |
Якщо WebUI не може завантажити параметри з конфігурації, ви можете задати їх вручну через змінні оточення.
Налаштування автентифікації
За замовчуванням WebUI не вимагає автентифікації. Щоб увімкнути базову автентифікацію, використовуйте змінну оточення AUTH_USER_PASS.
Генерація хешу пароля
Створіть ім’я користувача та хеш пароля за допомогою утиліти htpasswd:
htpasswd -nbBC 10 "YOUR_USERNAME" "YOUR_PASSWORD"
Якщо команда htpasswd не знайдена, встановіть пакет apache2-utils:
# Debian/Ubuntu
sudo apt install apache2-utils
# RHEL/CentOS
sudo yum install httpd-tools
Застосування автентифікації
Додайте змінну оточення в секцію webui у файлі docker-compose.yml:
webui:
image: khairul169/garage-webui:latest
environment:
AUTH_USER_PASS: "username:$2y$10$DSTi9o..."
API_BASE_URL: "http://garage:3903"
S3_ENDPOINT_URL: "http://garage:3900"
Після змін перезапустіть контейнери:
docker-compose down
docker-compose up -d
Налаштування зворотного проксі (Nginx)
Рекомендується розмістити WebUI за зворотним проксі-сервером для захисту SSL/TLS.
Приклад конфігурації Nginx
server {
listen 80;
server_name garage-ui.example.com;
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl http2;
server_name garage-ui.example.com;
ssl_certificate /etc/letsencrypt/live/garage-ui.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/garage-ui.example.com/privkey.pem;
location / {
proxy_pass http://localhost:3909;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
Після налаштування перезапустіть Nginx:
sudo systemctl restart nginx
Використання WebUI
Після успішного встановлення відкрийте веб-браузер і перейдіть за адресою:
http://your-ip:3909(без проксі)https://garage-ui.example.com(з проксі)
В інтерфейсі ви зможете:
- Переглядати статус кластера Garage
- Керувати топологією та вузлами
- Створювати та налаштовувати бакети
- Переглядати та завантажувати об’єкти
- Керувати ключами доступу
- Призначати права доступу
Усунення проблем
WebUI не завантажується
Проблема: Дані не завантажуються в інтерфейсі.
Рішення:
- Переконайтеся, що використовується остання версія Garage (мінімум 2.0.0)
- Перевірте, що Admin API увімкнено в конфігурації Garage
- Переконайтеся, що порт 3903 (Admin API) доступний
- Перевірте логи:
docker logs garage-webui
Помилка підключення до Admin API
Проблема: WebUI не може підключитися до Garage Admin API.
Рішення:
- Перевірте, що параметр
admin.api_bind_addrвказано вgarage.toml - Переконайтеся, що
admin_tokenкоректний - Для Docker перевірте, що контейнери знаходяться в одній мережі
- Спробуйте задати
API_BASE_URLтаAPI_ADMIN_KEYвручну
Порти зайняті
Проблема: Порт 3909 вже використовується.
Рішення: Змініть порт у docker-compose.yml:
webui:
image: khairul169/garage-webui:latest
environment:
PORT: 8080
ports:
- 8080:8080
Після змін перезапустіть контейнер:
docker-compose up -d webui
Безпека
Рекомендації з безпеки:
- Завжди вмикайте автентифікацію в продакшені
- Використовуйте HTTPS через зворотний проксі
- Обмежте доступ до WebUI за IP-адресами через firewall
- Регулярно оновлюйте Garage та WebUI до останніх версій
- Не публікуйте токени та секрети у відкритих репозиторіях
- Використовуйте сильні паролі для
admin_token
Оновлення
Для оновлення до останньої версії:
# Отримайте останню версію образу
docker-compose pull webui
# Перестворіть контейнер
docker-compose up -d webui
Або оновіть всі сервіси одразу:
docker-compose pull
docker-compose down
docker-compose up -d
Розробка
Якщо ви хочете зібрати проєкт самостійно або додати нові функції:
# Клонуйте репозиторій
git clone https://github.com/khairul169/garage-webui.git
cd garage-webui
# Встановіть залежності
pnpm install
cd backend && pnpm install && cd ..
# Запустіть у режимі розробки
pnpm run dev # Запустить клієнт та сервер одночасно
# Або запустіть окремо
pnpm run dev:client # Клієнтська частина
cd backend && pnpm run dev:server # Серверна частина
Технології:
- Frontend: TypeScript + React
- Backend: Go
Корисні посилання
- Офіційна документація Garage: https://garagehq.deuxfleurs.fr/documentation/
- GitHub Garage WebUI: https://github.com/khairul169/garage-webui
- Скріншоти WebUI: https://github.com/khairul169/garage-webui/blob/main/misc/SCREENSHOTS.md
- Швидкий старт Garage: https://garagehq.deuxfleurs.fr/documentation/quick-start/
- Issues та підтримка: https://github.com/khairul169/garage-webui/issues
Висновок
Garage WebUI надає зручний графічний інтерфейс для управління S3-сумісним сховищем Garage. Завдяки простому встановленню через Docker Compose, ви можете швидко розгорнути веб-інтерфейс і почати керувати вашим кластером через браузер.








