Серверы и деплой

Как выкатить приложение из Git на сервер клиента

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

Александр ЦапковОбновлено 10 сентября 20262 мин

Выкат живёт в Проект → Развёртывание. Пять шагов, и первый нужно сделать до всего остального.

Шаг 1. Заведите запись DNS заранее

A-запись домена приложения на адрес сервера — до установки.

Причина жёсткая: сертификат выпускает Let's Encrypt, и он проверяет, что домен принадлежит вам, обращаясь по этому имени к вашему серверу. Если запись ещё не разошлась, проверка не пройдёт и сайт откроется без защищённого соединения.

nslookup app.вашдомен.ru

В ответе должен быть адрес сервера. Нет — подождите и повторите; обновление занимает от нескольких минут до часа.

Шаг 2. Подключите сервер

«Новый сервер» → «Команда установки». Ключ в команде одноразовый и живёт 60 минут, закрытая часть пары остаётся на сервере.

Подробно про то, что при этом происходит и почему платформе не нужны ваши SSH-ключи, — в отдельном руководстве: Подключить сервер без входящих портов.

Шаг 3. Опишите приложение

Три пути, в порядке частоты:

  • Из репозитория — Dockerfile, Docker Compose или статика;
  • Из каталога — готовые приложения;
  • Из образа — если сборка у вас уже своя.

Укажите домен и адрес проверки здоровья. Пароли к базе и ключи шифрования генерируются автоматически: придумывать их не нужно, и это намеренно — сгенерированные надёжнее придуманных и не повторяются между установками.

Шаг 4. Выкатывайте

Вручную или автоматически при коммите в ветку — по вебхуку.

Порядок такой: собрался образ → поднялся релиз → прошла проверка здоровья → трафик переключился. Не прошла — трафик остаётся на прежнем релизе, а новый откатывается сам.

Именно поэтому выкат можно делать в пятницу: откат не требует человека ночью.

Шаг 5. Если на сервере уже что-то работает

«Перехват работающего стека». Платформа читает описание того, что запущено, и показывает план: что переносится под управление, что остаётся как есть.

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

Что стоит проверить после первого выката

Одна команда, десять секунд, экономит час:

curl -sI https://app.вашдомен.ru | head -3

Смотрите на код ответа и на Location, если он есть. Почему именно на LocationРедирект вёл на 0.0.0.0:3000.

Рядом с этим

Деплой из Git на свои серверыВыкат из git на свои серверы: домены, сертификаты, проверка здоровья, откат одной кнопкой.

Читайте также

Автор

Александр ЦапковОснователь Скоупворк

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