VersityGW: S3-шлюз для любого хранилища

Готовые бинарные сборки

Linux amd64/arm64 MacOS amd64/arm64 BSD amd64/arm64 Windows amd64/arm64

✔️

✔️

✔️

✔️

Сценарии использования

  • Превратите локальную файловую систему в S3-сервер одной командой!

  • Проксирование S3-запросов к S3-хранилищу

  • Простое развёртывание S3-сервера единственной командой

  • Совместимость с протоколом в режиме posix обеспечивает общий доступ к файлам как через POSIX, так и через S3

  • Упрощённый интерфейс для добавления поддержки новых систем хранения

Веб-интерфейс (WebGUI)

Подробнее о новом (опциональном) веб-интерфейсе для управления и просмотра содержимого: https://github.com/versity/versitygw/wiki/WebGUI

Веб-интерфейс администратора VersityGW — обозреватель объектов

S3 через RDMA

VersityGW поддерживает S3 поверх RDMA (Remote Direct Memory Access — удалённый прямой доступ к памяти), обеспечивая высокопроизводительную передачу объектов с малой задержкой в обход сетевого стека ядра. Это особенно полезно для задач высокопроизводительных вычислений (HPC) и обработки больших объёмов данных, где сетевые накладные расходы становятся узким местом. Подробности настройки и использования см. на странице вики S3 RDMA.

vgwrdma — сервис на основе VersityGW, предоставляющий стандартный S3 API с ускорением за счёт протокола cuObject (GPUDirect Storage for Objects) от NVIDIA.

Хостинг статических сайтов

Вы можете раздавать содержимое S3-бакетов как статические сайты с индексными документами, пользовательскими страницами ошибок и правилами маршрутизации. Чтобы включить отдельный веб-эндпоинт, используйте флаги --website :8090 --website-domain example.com — это активирует маршрутизацию в стиле виртуальных хостов: blog.example.com обслуживает бакет blog, а example.com — бакет example.com. Если --website-domain не указан, используется режим «поймать всё»: полное имя хоста становится именем бакета (называйте бакеты как FQDN, например blog.example.com). Полный список флагов --website-* см. в разделе Глобальные параметры.

Новости

Последние статьи вики: https://github.com/versity/versitygw/wiki/Articles

Список рассылки

Будьте в курсе последних новостей о шлюзе — подпишитесь на рассылку versitygw.

Документация

Документация проекта доступна в вики.

Нужна помощь?

Задавайте вопросы в обсуждениях сообщества. Свяжитесь с отделом продаж Versity, чтобы обсудить корпоративную поддержку.

Обзор

Versity Gateway — удобный инструмент для прозрачного преобразования команд AWS S3 в операции различных систем хранения. Шлюз устраняет разрыв между приложениями, работающими с S3, и другими системами хранения, обеспечивая расширенную совместимость и интеграцию при исключительной масштабируемости.

Сервер принимает входящие запросы S3 API и преобразует их в эквивалентные операции для серверной части (backend). Благодаря этому приложения могут работать с S3-совместимым API поверх уже существующих систем хранения. Проект позволяет использовать имеющуюся инфраструктуру и при этом беспрепятственно интегрироваться с S3-совместимыми системами, предоставляя большую гибкость и совместимость в управлении хранением данных.

Versity Gateway создан с упором на производительность, простоту и расширяемость. Архитектура шлюза построена по модульному принципу, что позволяет в будущем добавлять поддержку новых систем хранения. В настоящее время Versity Gateway поддерживает любые файловые POSIX-бэкенды общего назначения, файловую систему ScoutFS с открытым исходным кодом от Versity, Azure Blob Storage и другие S3-серверы.

Шлюз полностью не имеет состояния (stateless). Для увеличения суммарной пропускной способности можно развернуть несколько экземпляров Versity Gateway в кластере. Благодаря такой архитектуре любой запрос может быть обработан любым экземпляром шлюза, что позволяет равномерно распределять нагрузку и повышать производительность. Для оптимального распределения запросов между шлюзами в кластере можно использовать балансировщики нагрузки.

HTTP(S)-сервер и маршрутизация S3 реализованы с использованием веб-фреймворка Fiber, активно развиваемого с прицелом на производительность. Совместимость с S3 API достигается максимальным использованием официального SDK aws-sdk-go-v2.

Начало работы

См. документацию Quickstart.

Запуск шлюза с POSIX-бэкендом

mkdir /tmp/vgw /tmp/vers
ROOT_ACCESS_KEY="testuser" ROOT_SECRET_KEY="secret" ./versitygw --port :10000 --iam-dir /tmp/vgw posix --versioning-dir /tmp/vers /tmp/vgw

Эта команда запустит S3-сервер на текущем хосте, слушающий порт 10000, который будет обслуживать каталог /tmp/vgw, сохраняя предыдущие версии объектов в /tmp/vers. Оба каталога могут находиться в одной и той же файловой системе — это нормально. Опция --iam-dir включает простую систему учётных записей на основе JSON-файлов, удобную для тестирования.

Чтобы получить справку по использованию, выполните:

./versitygw --help

Формат команды:

versitygw [global options] command [command options] [arguments...]

Глобальные параметры указываются перед типом бэкенда, а параметры бэкенда — после.

Тестирование и готовность к эксплуатации

VersityGW прошёл боевую проверку и готов к промышленному использованию. Каждый pull request обязан пройти полный набор тестов, прежде чем его можно будет проверить и принять. Проверка кода всегда включает участие живого человека. Языковые модели (LLM) могут использоваться для помощи в ревью, однако никогда не являются единственным рецензентом или лицом, принимающим решения. Подробнее об организации тестирования см. в разделе Testing.

Комплексное покрытие тестами

Многоуровневая стратегия тестирования включает:

  • Unit-тесты на Go — обширные модульные тесты с обнаружением гонок данных и анализом покрытия кода, охватывающие основную функциональность, граничные случаи и обработку ошибок.

  • Интеграционные тест-скрипты — тестирование реальных сценариев на нескольких бэкендах (POSIX, S3, Azure) и различных конфигурациях.

  • Функциональные/регрессионные тесты — сквозные SDK-тесты, проверяющие полные рабочие процессы: полноцикловые операции, специфичное поведение POSIX и функциональность IAM, дополненные регрессионными тестами по мере устранения проблем.

  • Статический анализ — проверки с помощью staticcheck.

  • Системные тесты — валидация на уровне протокола с использованием стандартных S3-клиентов:

    • AWS CLI — официальные инструменты командной строки AWS

    • s3cmd — популярный S3-клиент

    • Прямое тестирование REST API с помощью curl для проверки запросов и ответов

  • Тестирование безопасности — тестирование конфигураций HTTP и HTTPS, сканирование уязвимостей с помощью govulncheck, регулярное обновление зависимостей через dependabot.

  • Тестирование совместимости — несколько бэкендов, сценарии версионирования, статические режимы бакетов и различные методы аутентификации.

Запуск шлюза в Docker

Используйте опубликованный образ так же, как нативный бинарный файл, передавая аргументы командной строки:

docker run --rm versity/versitygw:latest --version

Подробная документация по запуску в Docker доступна на странице Docker.

Запуск в Kubernetes

Для удобного развёртывания Versity в среде Kubernetes предоставляется Helm-чарт:

helm install versitygw oci://ghcr.io/versity/versitygw/charts/versitygw

Дополнительную информацию и параметры конфигурации см. в README чарта.


Versity даёт вам чёткое представление о своём архивном хранилище и полный контроль над ним, чтобы вы могли направить больше ресурсов на своё основное дело.

Контакты

Логотип компании Versity

info@versity.com
+1 844 726 8826

@versitysoftware

© 2026 meganuke