П Прорвёмся!
← Все статьи
· 1 мин DevOpsDocker

Почему мы деплоим всё через Docker

Как единый подход к контейнеризации упрощает разработку, тестирование и продакшен для всех наших продуктов.

В студии «Прорвёмся!» каждый продукт упакован в Docker — от небольших Go-сервисов до мультитенантных Django-платформ. Это не догма, а осознанный инженерный выбор.

Один артефакт от ноутбука до продакшена

Контейнер собирается один раз и проходит весь путь без изменений: локальная разработка, CI, staging, продакшен. Исчезает классическое «у меня работает» — окружение описано в Dockerfile и воспроизводимо.

Multi-stage сборки

Мы используем многоступенчатые сборки: тяжёлые зависимости и инструменты остаются в build-стадии, а в финальный образ попадает только то, что нужно для запуска.

FROM node:22-alpine AS build
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build

FROM node:22-alpine AS runtime
WORKDIR /app
COPY --from=build /app/dist ./dist
CMD ["node", "./dist/server/entry.mjs"]

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

Общий reverse-proxy

Все продукты живут за общим Traefik с автоматическим TLS. Новый сервис достаточно подключить к общей сети — маршрутизация и сертификаты настраиваются декларативно.

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

Этот сайт — не исключение: он собран в multi-stage образ и запускается одной командой docker compose up.