WebUI для S3 сервера Garage

Garage WebUI — це простий веб-інтерфейс адміністратора для Garage, самостійно розгортуваного, S3-сумісного розподіленого сервісу об’єктного сховища. Цей інструмент надає зручний графічний інтерфейс для управління кластером Garage, бакетами (buckets), ключами доступу та об’єктами.


Основні можливості:

  • Моніторинг стану здоров’я 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 WebUI надає зручний графічний інтерфейс для управління S3-сумісним сховищем Garage. Завдяки простому встановленню через Docker Compose, ви можете швидко розгорнути веб-інтерфейс і почати керувати вашим кластером через браузер.

Позначки: