С нуля: что такое деплой на самом деле
Деплой — это превратить код с твоего ноутбука в нечто, что надёжно работает для незнакомцев на машинах, которых ты никогда не коснёшься. Это карта «с нуля» и восемь слов, которые остальной трек считает уже знакомыми.
Твоё приложение работает. Ты набрал npm run dev, открыл localhost:3000 — и вот оно. Теперь незнакомцу на другом континенте тоже нужно его открыть — в три ночи, пока ты спишь, на машине, которую ты никогда не видел и не увидишь. Ничего с твоего ноутбука ему не поможет: ни установленная версия Node, ни переменные окружения, ни база данных, запущенная в соседней вкладке терминала. Всё, чему учит этот трек, существует, чтобы закрыть этот разрыв — между «работает у меня» и «работает у всех, без меня». Этот урок — карта перед восхождением.
Единственная проблема, которую решает деплой
На твоём ноутбуке программа опирается на сотню невидимых вещей: точную версию рантайма, уже скачанные библиотеки, файлы в нужных папках, секреты в твоём shell, базу, которую ты поднял руками. «Работает у меня» — правда и при этом бесполезно: ничего из этого контекста не путешествует вместе с кодом. Деплой — это дисциплина заставить программу нести свой контекст с собой, чтобы она вела себя одинаково на голом сервере в дата-центре и на твоём столе. Сделаешь правильно — машину можно заменить, размножить или перенести без сюрпризов. Сделаешь неправильно — каждый сервер станет уникальной снежинкой, которую умеет оживить только один человек.
Всё остальное — детали поверх одной идеи: сделай запуск воспроизводимым, затем сделай так, чтобы он выживал.
Восемь слов, которые остальной трек считает знакомыми
Senior-уроки дальше используют эти термины, не останавливаясь на определениях. Когда ты натолкнёшься на урок, где написано «оркестратор перезапускает контейнер», тебе нужно уже знать, что значат оба слова — иначе два незнакомца встают в стек и объяснение теряет тебя. Вот они, по одному предложению — что это и зачем оно.
| Слово | Что это | Зачем оно |
|---|---|---|
| Image (образ) | Замороженный снимок приложения и всего, что нужно для запуска. | Чтобы те же байты работали везде — без «сначала поставь 12 штук». |
| Container (контейнер) | Запущенная копия образа, изолированная от остальной машины. | Чтобы много приложений делили один сервер, не мешая друг другу. |
| Registry (реестр) | Склад, куда ты пушишь образы, а серверы их оттуда тянут. | Чтобы машина, которая собирает, и машина, которая запускает, были разными. |
| Orchestrator (оркестратор) | ПО (например, Kubernetes), запускающее контейнеры на многих машинах. | Чтобы при смерти одной машины приложение жило на остальных. |
| Rollout (выкатка) | Постепенная замена работающей версии на новую. | Чтобы плохой деплой поймать и откатить до того, как его увидят все. |
| IaC (инфраструктура как код) | Серверы и сети, описанные в файлах, а не накликанные в консоли. | Чтобы настройку можно было ревьюить, повторять и не держать в одной голове. |
| Secret (секрет) | Пароль, токен или ключ, который нужен приложению, но не должен утечь. | Чтобы креды подставлялись на запуске, а не вшивались в образ или git. |
| Load balancer (балансировщик) | Парадная дверь, распределяющая входящий трафик по многим копиям. | Чтобы ни одна копия не захлебнулась, а мёртвую копию обходили. |
Как они складываются вместе
Прочитанные по порядку, слова рассказывают одну историю: ты собираешь код в image, пушишь его в registry, а orchestrator тянет его на серверы и запускает из него контейнеры. Rollout меняет старые контейнеры на новые по чуть-чуть. Load balancer отправляет каждого пользователя к живому контейнеру. Секреты выдаются контейнерам на старте, а сами серверы созданы из IaC-файлов. Это одно предложение — весь трек в миниатюре; каждый следующий юнит увеличивает один из шагов.
▸Почему это работает
Почему просто не скопировать файлы на сервер через scp и не запустить, как в старые времена? Потому что такой сервер медленно дрейфует: кто-то зашёл по SSH, поставил пакет, чтобы потушить пожар, — и теперь он уникален. Через полгода никто не сможет его воссоздать. Образы и IaC существуют, чтобы убить дрейф: машина становится одноразовой, потому что всё её определение живёт в файлах, из которых её можно пересобрать с нуля за минуты.
Это не нужно зубрить
Две честные ремарки перед восхождением. Первая: никто не держит всё это в голове сразу в первый день — ты встретишь каждое слово снова, в глубине, в своём юните, и тогда оно уляжется. Эта страница — вешалка, на которую вешать детали, а не экзамен. Вторая: не каждому проекту нужно каждое слово. Крошечный пет-проект может быть одним контейнером на одной машине без оркестратора и балансировщика. Senior-трек учит полной картине, потому что этого требует продакшен под нагрузкой, — но «начни просто, добавляй части, когда заболит» и есть senior-инстинкт.
Почему «работает у меня» недостаточно, чтобы выпустить софт?
Расставь путь от твоего кода до запроса пользователя, который до него доходит:
- 1 Собрать код в image (теперь он несёт свой контекст)
- 2 Запушить image в registry
- 3 Orchestrator тянет image на серверы и запускает контейнеры
- 4 Load balancer направляет запрос пользователя к живому контейнеру
- 01В одном дыхании: какую проблему решает деплой и в чём ядро техники?
- 02Проследи путь от исходного кода до запроса пользователя, называя каждую часть.
Деплой — это одна идея с кучей навешанной механики: заставь код нести свой контекст, чтобы он работал одинаково на машине, которой ты не управляешь, и удержи его работающим, пока ты спишь. Воспроизводимая половина — это image, замороженный снимок приложения и зависимостей, хранящийся в registry, чтобы машина-сборщик и машина-исполнитель могли различаться. Половина выживания — всё, что держит его живым под нагрузкой: orchestrator запускает и перезапускает контейнеры на многих серверах, rollout меняет версии постепенно, чтобы ошибки ловились рано, load balancer распределяет трафик по живым копиям, секреты подставляются на запуске, а сами серверы описаны как код, так что ни один из них не является незаменимой снежинкой. Тебе не нужно держать все восемь слов сразу — у каждого впереди свой юнит. Теперь, когда встретишь вакансию с «опытом работы с контейнерной оркестрацией» или пост-мортем, в котором виновен «дрейф образа», ты будешь знать, какой слой сломался и за каким словом тянуться дальше.
Что-то непонятно?
Задай вопрос по этому уроку. Вопросы анонимны и попадают напрямую автору — урок станет лучше.