Как превратить любую папку в S3 хранилище одной командой

17 Jul, 2026
2,603
🔱 273
👥 18

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

Я наткнулся на репозиторий versitygw и он зацепил меня своей прямолинейностью. Это не огромный комбайн, который требует неделю на настройку, а компактный шлюз на Go, который переводит S3-запросы в команды для вашей файловой системы или другого бэкенда.

Versity Software logo image.

Что умеет этот шлюз

Если говорить просто, Versity Gateway — это прослойка. С одной стороны у него стандартный API Amazon S3, который понимают почти все современные библиотеки и CLI-утилиты. С другой — то, что у вас уже есть под капотом.

Проект закрывает несколько вполне приземленных задач:

  1. Делает из локальной папки полноценный S3-сервер. Полезно для тестов или локальной разработки, когда не хочется тащить тяжелый MinIO.
  2. Работает как прокси. Вы можете выставить шлюз перед другим S3-хранилищем или Azure Blob Storage.
  3. Позволяет работать с одними и теми же файлами одновременно через S3 и через обычную файловую систему (POSIX).

Интересно, что разработчики сделали шлюз полностью stateless. Это значит, что вы можете запустить хоть десять экземпляров за балансировщиком нагрузки, и им не нужно синхронизировать состояние между собой. Каждый запрос обрабатывается независимо, что сильно упрощает масштабирование, если трафик внезапно вырастет.

Как это работает на практике

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

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

После этого по адресу localhost:10000 у вас висит рабочий S3-эндпоинт. В качестве бэкенда используется папка /tmp/vgw. Параметр --iam-dir здесь указывает, где хранить данные пользователей в виде простых JSON-файлов. Это удобно для быстрой проверки идеи, хотя в продакшене, конечно, захочется чего-то более серьезного.

Кстати, у проекта есть симпатичный WebGUI. Он позволяет не только управлять настройками, но и просто смотреть, что лежит в бакетах, прямо через браузер. Для тех, кто не любит постоянно дергать aws s3 ls, это приятный бонус.

admin-explorer

Техническая начинка

Внутри всё написано на Go. В качестве веб-фреймворка используется Fiber — он славится своей скоростью и низким потреблением памяти. Для реализации самой логики S3 ребята не стали изобретать велосипед и взяли официальный aws-sdk-go-v2. Это правильный ход: совместимость с AWS — штука капризная, и лучше доверять проверенным SDK.

Помимо стандартного POSIX-бэкенда, поддерживаются:

  • Azure Blob Storage (если нужно проксирование).
  • ScoutFS (это родная для авторов проекта файловая система с открытым кодом).
  • Другие S3-серверы.

Архитектура модульная, так что при желании можно дописать поддержку своего специфического хранилища.

Стоит ли тащить это в продакшен

Авторы утверждают, что проект «battle-tested». В README отдельный акцент сделан на тестировании: каждый PR прогоняют через пачку тестов с использованием реальных клиентов вроде s3cmd, mc и официального AWS CLI. Есть даже проверка на состояние гонки (race detection) и сканирование уязвимостей.

Для тех, кто живет в мире контейнеров, есть готовый Docker-образ и Helm-чарт. Развертывание в Kubernetes сводится к одной команде:

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

Кому пригодится

Я вижу три основных сценария, где Versity Gateway сэкономит время. Во-первых, это легаси-системы, которые нужно подружить с современным софтом без переписывания логики хранения. Во-вторых, это построение гибридных облаков, когда часть данных должна лежать локально, но доступ к ним нужен через стандартные S3-инструменты. И в-третьих, это банально удобный инструмент для разработки «на коленке», когда нужно быстро поднять S3-совместимую заглушку.

Проект выглядит живым, коммиты идут регулярно, а документация в Wiki довольно подробная. Если вы искали легкую альтернативу тяжеловесным системам хранения с поддержкой S3, на этот шлюз точно стоит взглянуть.

🍪 Мы используем файлы cookie и сервис аналитики Яндекс.Метрика, чтобы сайт работал лучше. Продолжая пользоваться devtrends.ru, вы соглашаетесь с обработкой данных согласно Политике конфиденциальности.