Перейти к основному содержимому

ADR: Выбор платформы развертывания инфраструктуры

  • Status: Accepted by Andrei Ganiushkin andrey@ganyushkin.ru
  • Date: 2026-07-25
  • Authors: Andrei Ganiushkin andrey@ganyushkin.ru
  • Related issues: -

Context

Проекту Netgap требуется определить целевую инфраструктурную платформу для двух контуров:

  • среда разработки: хранение исходного кода, управление задачами и merge request, CI/CD, доступы разработчиков, артефакты сборки и внутренние релизы;
  • боевые ресурсы проекта: публикация сайта документации, размещение релизов, статических артефактов, публичных материалов и вспомогательных сервисов проекта.

Решение должно учитывать не только прямую стоимость сервисов, но и стоимость времени команды на администрирование, обновления, резервное копирование, мониторинг, реагирование на инциденты и поддержание приемлемого уровня защищенности.

Для проекта важны следующие факторы:

  • предсказуемая стоимость владения на ранних стадиях проекта;
  • быстрый запуск без длительного построения собственной инфраструктурной команды;
  • достаточный уровень защищенности, сетевой изоляции, управления доступами и журналирования;
  • возможность хранить и публиковать документацию как статический сайт;
  • возможность размещать релизы, артефакты, контейнерные образы и другие ресурсы проекта;
  • перспектива последующего перехода на собственную инфраструктуру без критического переписывания процессов;
  • контролируемый vendor lock-in.

Decision

В качестве основной платформы для инфраструктуры проекта выбрать Yandex Cloud.

Для среды разработки использовать управляемый GitLab в Yandex Cloud как основной сервис для:

  • хранения исходного кода;
  • управления задачами, merge request и code review;
  • запуска CI/CD;
  • подключения GitLab runners, которые могут размещаться как в Yandex Compute Cloud, так и в защищенной зоне на собственном железе;
  • хранения внутренних артефактов сборки и релизных материалов, если это поддерживается выбранной конфигурацией;
  • централизованного управления доступами команды.

Для боевых ресурсов проекта использовать статический хостинг сайта документации на базе сервисов Yandex Cloud. Документационный сайт должен публиковаться как статический ресурс, без обязательного постоянного приложения-сервера.

Для размещения релизов и дополнительных публичных или внутренних ресурсов проекта допускается использовать другие сервисы Yandex Cloud по мере необходимости, включая объектное хранилище, CDN, registry для контейнерных образов, управление сертификатами, DNS, мониторинг, аудит и журналирование.

Выбранная модель фиксируется как облачная managed-first стратегия: на раннем и среднем этапах проекта управляемые сервисы имеют приоритет над самостоятельным администрированием аналогичной инфраструктуры, если они обеспечивают приемлемую стоимость, функциональность, защищенность и переносимость данных.

Considered Alternatives

Alternative 1: Yandex Cloud с Managed GitLab и статическим хостингом документации

Инфраструктура разработки и публикации размещается преимущественно в Yandex Cloud. Для разработки используется Managed GitLab, для сайта документации — статический хостинг, для релизов и артефактов — подходящие управляемые сервисы Yandex Cloud.

  • Pros:
    • Лучший баланс между прямой стоимостью, временем команды на администрирование, уровнем защищенности и получаемой функциональностью.
    • Managed GitLab закрывает ключевые потребности разработки: репозитории, merge request, code review, CI/CD, управление доступами и артефактами.
    • GitLab runners можно размещать как в Yandex Compute Cloud, так и в защищенной зоне на собственном железе, сохраняя гибкость для чувствительных сборок и будущей гибридной модели.
    • Статический хостинг документации дешевле и проще в эксплуатации, чем постоянный сервер приложения.
    • Неиспользуемые вычислительные и вспомогательные ресурсы можно отключать, что существенно снижает затраты на ранних стадиях и при нерегулярной нагрузке. На начальном этапе, когда разработчик один, активная работа в основном приходится на выходные, поэтому оплата только фактически используемых ресурсов дает существенную экономию.
    • Управляемые сервисы снижают нагрузку на команду: обновления, отказоустойчивость, базовый мониторинг, резервирование и часть задач безопасности выполняются на стороне провайдера.
    • Инфраструктура может развиваться постепенно: от статического сайта и GitLab к registry, объектному хранилищу, CDN, мониторингу и другим сервисам.
    • Для российского рынка упрощается работа с локальным облачным провайдером, оплатой, доступностью сервисов и юридическими требованиями.
  • Cons:
    • Возникает зависимость от доступности, тарифов, API и продуктовой политики Yandex Cloud.
    • Часть сервисов и настроек будет специфична для провайдера.
    • При росте нагрузки потребуется регулярный контроль стоимости и лимитов.
  • Reason for selection: вариант обеспечивает лучший баланс стоимость — ресурсы команды — защищенность — функциональность. Он позволяет быстро развернуть среду разработки и боевые ресурсы без значительных затрат на собственное администрирование, сохраняя возможность последующей миграции на собственную инфраструктуру.

Alternative 2: Платформы разработки типа SourceCraft.dev или GitVerse

Исходный код, задачи, code review, CI/CD и часть артефактов размещаются на специализированной платформе разработки, например SourceCraft.dev или GitVerse. Боевые ресурсы проекта при этом размещаются отдельно либо средствами самой платформы, если они доступны.

  • Pros:
    • Быстрый старт без самостоятельной установки и сопровождения Git-сервера.
    • Низкая административная нагрузка на команду разработки.
    • Готовые функции для репозиториев, code review, задач и совместной работы.
    • Потенциально удобная экосистема для открытой разработки и внешних участников.
  • Cons:
    • Меньше контроля над инфраструктурой разработки, сетевой моделью, хранением артефактов, политиками доступа и интеграцией с боевыми ресурсами.
    • Боевые ресурсы проекта, сайт документации, релизные файлы, container registry, CDN, DNS, мониторинг и аудит все равно могут потребовать отдельной инфраструктурной платформы.
    • Функциональность CI/CD, артефактов, секретов, аудит-логов и enterprise-настроек может отличаться от привычной модели GitLab и быть недостаточной для требований проекта.
    • Vendor lock-in переносится на платформу разработки, при этом не решается полный набор задач боевой инфраструктуры.
  • Reason for rejection: главный риск — vendor lock-in в платформу разработки и отсутствие бесшовного пути перехода на собственную инфраструктуру в будущем. Эти платформы удобны как сервисы разработки, но хуже закрывают совокупную задачу проекта: единая инфраструктура для разработки, статического сайта документации, релизов, артефактов, безопасности, мониторинга и последующего масштабирования.

Alternative 3: Собственная инфраструктура

Команда самостоятельно разворачивает и сопровождает GitLab, Gitea или Forgejo, CI/CD runners, объектное хранилище, registry, веб-сервер для статического сайта, backup, monitoring, logging, IAM-подобные процессы и сетевую защиту на собственных серверах или арендованных VM.

  • Pros:
    • Максимальный контроль над конфигурацией, сетевой моделью, обновлениями, хранением данных и политиками безопасности.
    • Ниже зависимость от конкретного облачного провайдера или платформы разработки.
    • Потенциально ниже прямые инфраструктурные расходы при большой стабильной нагрузке и зрелой эксплуатации.
    • Проще реализовать нестандартные требования, если они не поддерживаются managed-сервисами.
  • Cons:
    • Высокая стоимость владения из-за времени команды на установку, обновления, резервное копирование, мониторинг, hardening, управление инцидентами и восстановление после сбоев.
    • Требуется отдельная эксплуатационная компетенция для GitLab, CI/CD, registry, object storage, веб-публикации, сетевой безопасности и observability.
    • Риск получить более низкий фактический уровень защищенности, если администрирование выполняется нерегулярно или без выделенной команды.
    • Медленнее запуск проекта и выше риск технического долга в инфраструктуре.
    • Для ранней стадии проекта ресурсы на поддержку собственной платформы конкурируют с разработкой продукта.
  • Reason for rejection: собственная инфраструктура дает максимальный контроль, но на текущем этапе проигрывает по совокупной стоимости владения, скорости запуска и соотношению администрирования к получаемой функциональности.

Consequences

Positive

  • Проект получает единую управляемую инфраструктурную базу для разработки и публикации ресурсов.
  • Команда быстрее запускает Git-репозитории, code review, CI/CD и публикацию документации.
  • GitLab runners можно размещать ближе к требованиям конкретного контура: в облаке для типовых задач или в защищенной зоне на собственном железе для чувствительных сборок.
  • Статический хостинг документации снижает операционную сложность, стоимость и поверхность атаки по сравнению с постоянно работающим серверным приложением.
  • Возможность отключать неиспользуемые ресурсы снижает прямые расходы при нерегулярной нагрузке и помогает управлять бюджетом проекта.
  • Управляемые сервисы уменьшают объем ручного администрирования и повышают базовый уровень эксплуатационной надежности.
  • Инфраструктура может расширяться постепенно: релизы, артефакты, container registry, CDN, DNS, сертификаты, мониторинг и аудит добавляются по мере потребности.
  • Решение совместимо с будущим переходом на собственную инфраструктуру, если нагрузка, требования безопасности или экономика проекта изменятся.

Negative

  • Проект становится зависимым от Yandex Cloud как от основного инфраструктурного провайдера.
  • Тарифы, лимиты и доступность managed-сервисов должны регулярно контролироваться.
  • Часть инфраструктурных описаний, API и настроек может быть провайдер-специфичной.
  • При миграции на собственную инфраструктуру потребуется заранее спланировать перенос CI/CD, артефактов, секретов, DNS, статического сайта и прав доступа.

Risks and Mitigations

  • Risk: vendor lock-in в сервисы Yandex Cloud усложнит переход на собственную инфраструктуру или другого провайдера.
    • Mitigation: использовать переносимые сущности: Git-репозитории, стандартные container images, статическую сборку сайта, S3-совместимые подходы к объектному хранилищу, декларативное описание инфраструктуры и CI/CD, не завязанное на уникальные возможности провайдера без необходимости.
  • Risk: рост стоимости облачных сервисов станет незаметным до момента существенного увеличения счета.
    • Mitigation: настроить бюджеты, лимиты, регулярный cost review и разделение ресурсов по окружениям и проектам.
  • Risk: недоступность провайдера повлияет одновременно на разработку и публичные ресурсы проекта.
    • Mitigation: хранить локальные и внешние резервные копии критичных репозиториев и релизных артефактов, документировать процедуру восстановления и предусмотреть возможность публикации статического сайта из независимого хранилища.
  • Risk: команда начнет использовать провайдер-специфичные возможности без оценки переносимости.
    • Mitigation: для каждого нового managed-сервиса фиксировать причину выбора, данные для экспорта и минимальный сценарий миграции на self-hosted или альтернативную платформу.
  • Risk: собственная инфраструктура может стать экономически или организационно выгоднее при росте проекта.
    • Mitigation: периодически пересматривать решение по фактической стоимости, нагрузке, требованиям безопасности и доступности компетенций эксплуатации.