В наши дни даже появляется термин "виб-кодинг", когда,
если обратиться к ИИ-агенту, он быстро генерирует код для веб-сервисов.

Но одна вещь остается неизменной.

  • Как разделить серверы

  • Где разворачивать

  • Как осуществлять откат и управление

Это все еще ответственность человека.
ИИ может хорошо писать "код", но не сможет справиться с "проблемами в процессе эксплуатации".

В этой статье я хочу обсудить особенно важность стейджинг-окружения,
и перечислить, что обязательно нужно проверить на стейджинге.

Изображение цепочки dev-staging-prod


1. Даже если ИИ пишет код, развертывание остается за нами



Если сказать ИИ-агенту:

“Создай простое TODO веб-приложение на Next.js”
“Соедини этот API с PostgreSQL”

Код появится быстро.
Но ИИ не скажет вам самостоятельно:

“Теперь давай развернем его на стейджинг-сервере,
чтобы проверить конфигурацию БД/кэша/переменных окружения, аналогичную продакшену.”

Потому что если человек, который задает вопросы и дает указания, не имеет такого опыта,
то ИИ не станет думать в этом направлении.

В итоге многие начинающие разработчики:

  1. Смотрят на dev-сервер, где все работает

  2. Сразу же загружают в prod-сервер

  3. И сталкиваются с проблемами конфигурации БД/кэша/переменных окружения/домена 💣

И только после этого понимают: “Ах… Вот что такое стейджинг”.


2. Прямой переход с dev в prod опасен

“Код упакован в докер-образ, разве он не будет одинаковым везде?”
На первый взгляд, это правда, но в реальной эксплуатации это не так.

  • На какую БД он смотрит

    • dev: dev-db, prod: prod-db

    • Строки подключения, настройки безопасности, права аккаунтов, объем данных отличаются

  • Кэш/очереди сообщений

    • Адреса, аутентификация и объем для Redis, RabbitMQ, Kafka и т. д. отличаются в зависимости от среды
  • Переменные окружения

    • NODE_ENV, API_BASE_URL, PAYMENT_PROVIDER_KEY

    • В dev они могут быть пустыми или фиктивными, в prod используются реальные ключи

  • Внешние интеграции

    • Платежи, SMS, электронные письма, SSO, внешние API и т. д.

    • dev работает в песочнице, prod - в реальной среде

Даже если докер-образы одинаковы, это еще не означает, что “среды” одинаковы.
Даже если веб-приложение завершено,
развертывание и эксплуатация - совершенно разные области.

Поэтому, если писать сразу в prod,
это не отличается от "функциональные тесты прошли локально, давай сразу тестировать на реальных клиентах".


3. Почему стейджинг так важен?



Стейджинг можно просто охарактеризовать как:

“Репетиционная сцена, максимально похожая на эксплуатационную среду”

Это так.

  • Приложение той же версии, что и в продакшне

  • Практически такая же инфраструктура, как и в продакшне

  • Но используется тестовая информация, домены и аккаунты

Если нет стейджинга:

  • Код, который работал в dev, может упасть в prod

  • Причиной окажется большинство “различий в средах”

  • С каждой новой проблемой - экстренный патч → быстрое повторное развертывание в prod → снова другие проблемы…

Фактически, если правильно использовать стейджинг:

  • “Как это изменение будет выглядеть в реальной эксплуатационной среде”
    можно предварительно увидеть

  • Можно провести репетицию настройки инфраструктуры, безопасности, миграции данных

  • QA, проектировщики, дизайнеры и управляющие могут
    предварительно проверить экран и функциональность до запуска

Особенно начинающие разработчики должны:

  • Развивать взгляд на “всю эксплуатационную среду”, а не только на свой код,

  • это обучение происходит именно на стейджинге.


4. Что обязательно нужно проверить на стейджинге

Так что на стейджинг-окружении, что стоит проверить?
Давайте детализируем по пунктам.

4.1 Переменные окружения и настройки

  • DATABASE_URL

  • REDIS_URL / CACHE_URL

  • API_BASE_URL

  • SECRET_KEY, JWT_SECRET_KEY

  • Ключи API, webhook URL и т. д.

Необходимо задокументировать, в чем отличие между настройками dev и prod,
и проверить, соблюдается ли паттерн в стейджинге аналогично продакшену.

Контрольные точки

  • Файл env или настройки стейджинга
    должны быть такими же по структуре, как и в продакшне

  • Чувствительные данные должным образом скрыты в переменных окружения/инструментах управления секретами

  • Параметры не закодированы прямо в коде

4.2 Базы данных и миграции данных

  • Скрипты миграции (prisma migrate, django migrate, migration.sql и т. д.)
    должны правильно работать на БД со схематикой, похожей на продакшен

  • Ошибки не должны возникать из-за индексов, уникальных ограничений и ограничений внешнего ключа

  • Данные-заглушки не должны вызывать проблем в реальном интерфейсе и логике

Контрольные точки

  • На стейджинг БД должно быть достаточное количество тестовых данных
    (тестирование только на пустой БД имеет малый смысл).

  • Хорошо бы один раз попрактиковаться с стратегией отката на стейджинге.

4.3 Аутентификация, права и сессии

  • Процесс входа/регистрации

  • Интеграция OAuth/SSO (Google, Kakao и др.)

  • Разные экраны/API действия для разных ролей

Контрольные точки

  • На стейджинге необходимо проверить, работают ли входы точно так же, как и в реальной эксплуатации
    (нет ли временной логики обхода только для dev)

  • Меню/кнопки/действия работают корректно для пользователей с различными правами (администраторы, обычные пользователи и т. д.)

4.4 Внешние интеграции: платежи, SMS, электронные письма, уведомления и т. д.

  • Платежи (шлюз) → песочница/тестовый режим

  • SMS/уведомления Kakao → тестовый канал

  • Отправка электронных писем → тестовые письма, осторожно, чтобы не отправить реальным пользователям

Контрольные точки

  • На стейджинге следует использовать реальные пути внешних интеграций,
    (но только с тестовыми учетными записями, а не с реальными клиентами)

  • Проблемы (неудача платежа, тайм-аут и т. д.) также нужно проверить

4.5 Интеграция фронтенда и бэкенда

Хотя и фронтенд, и бэкенд могут нормально работать локально,
на стейджинге (реальный домен/обратный прокси/SSL) могут возникнуть другие проблемы.

  • Настройки CORS

  • Смешение HTTPS/HTTP

  • Настройки доменов/secure для куки

  • Проблемы маршрутизации по пути обратного прокси (Nginx, Traefik и т. д.)

Контрольные точки

  • По стейджинг URL необходимо проверить, работают ли все страницы
    (не спрятаны ли локальные URL)

  • Необходимо проверить наличие ошибок CORS, 301/302, 4xx/5xx в вкладке Network инструментов разработчика браузера

4.6 Производительность и использование ресурсов

Сначала, возможно, не будет видимых проблем с производительностью,
но даже небольшое нагрузочное тестирование на стейджинге может выявить проблемы заранее.

  • Время ответа API

  • Количество запросов к БД, наличие N+1 запросов

  • Производительность при кэш-неудаче

  • Использование памяти/ЦП

Не обязательно использовать громоздкие инструменты нагрузочного тестирования.

  • На стейджинге можно попробовать поработать с несколькими ролями пользователей одновременно

  • и проверить наличие медленных мест, просто наблюдая за логами, что будет достаточно для смыслового "мини-нагрузочного теста".


5. Как настроить стейджинг-окружение, с чего начать?

Не обязательно сразу начинать с идеала.
Для небольших сервисов можно начать как-то так.

5.1 Минимальный пример конфигурации

  • dev

    • Локальная среда разработки (Docker compose, локальная БД и т. д.)
  • staging

    • Развертывание на том же облаке/платформе, что и prod

    • Домен: staging.example.com

    • Отдельная БД/кэш/хранилище

  • prod

    • Рабочая среда, используемая реальными клиентами

Развертывание пайплайна тоже можно сделать простым:

  1. main в merge → автоматически развертывание на стейджинге

  2. QA/самопроверка на стейджинге

  3. Пуш определенной метки (v1.0.0) → развертывание в prod

Этого будет достаточно для того, чтобы:

  • Ограничить “dev → прямой prod”

  • Создать привычку всегда проходить через стейджинг.


6. Чем начинающий, тем больше стоит использовать стейджинг

Большинство начинающих разработчиков отвергают стейджинг.

  • “В dev все работает нормально…”

  • “Не знаю, что проверять на стейджинге…”

Тем не менее, реальная разница в квалификации заключается не столько в качестве кода,
сколько в насколько надежно они могут справляться с эксплуатацией и развертыванием.

  • Важно, чтобы функции работали,

  • чтобы сервис не останавливался, более важно.

Стейджинг - это устройство безопасности, которое связывает оба эти аспекта,
и лучшее место, чтобы разработчик мог обучиться “точке зрения эксплуатации”.

Когда в будущем создавать новые веб-сервисы, попробуйте сделать так:

  1. Уже на этапе проектирования изображайте prod и стейджинг одновременно

  2. Автоматизацию развертывания также разрабатывайте по порядку стейджинг → prod

  3. Главные функции обязательно прогоняйте на стейджинге
    “как в реальной эксплуатации” несколько раз перед развертыванием в prod

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