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
  • Управлять топологией и узлами
  • Создавать и настраивать корзины (buckets)
  • Просматривать и загружать объекты
  • Управлять ключами доступа
  • Назначать права доступа

Устранение неполадок

WebUI не загружается

Проблема: Данные не загружаются в интерфейсе.

Решения:

  • Убедитесь, что используется последняя версия Garage (минимум 2.0.0)
  • Проверьте, что Admin API включен в конфигурации Garage
  • Убедитесь, что порт 3903 (Admin API) доступен
  • Проверьте логи: docker logs garage-webui или journalctl -u 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 или бинарные файлы, вы можете быстро развернуть веб-интерфейс и начать управление вашим кластером через браузер.