Деплой (развёртывание) — это процесс размещения готового цифрового продукта, например веб-сайта, приложения или сервиса, в интернет-пространстве, доступном пользователю. Что такое деплой, для чего он нужен, какие есть способы и этапы в этом процессе?
Как правило, готовый код, написанный программистом в процессе создания веб-приложения или сайта, хранится локально, на его собственном компьютере. Чтобы конечный потребитель увидел разработку, её необходимо разместить на сервере, где она станет доступной для использования другими пользователями и тестировщиками.
Стадии разработки ПО
Практически каждое ПО перед тем, как попасть на глаза пользователю, обычно проходит несколько стадий:
-
Планирование. Чтобы быть уверенным, что деплой пройдёт максимально гладко, хорошей практикой считается разработка плана развёртывания, которому впоследствии вы будете следовать каждый раз. В нём прописываются правила работы с локальными средами и промежуточными сайтами. Графики изменений заносятся в рабочую среду. Имея готовый план, вы снижаете риск конфликтов между обновлениями и обеспечиваете максимально простую процедуру развёртывания.
-
Разработка. Создание программы с нуля или добавление на сайт новой функциональности, лучше производить в локальной среде, чтобы ничего не сломать.
-
Тестирование. На этом этапе специалисты смотрят на работу новой версии приложения, а также её взаимодействие с реальными данными пользователей.
-
Выкат в продакшн. Самый критический этап, при котором изменения внедряют в рабочую среду, когда веб-приложение становится доступным для широкой публики.
-
Мониторинг. После того как новые изменения вступят в силу и реальные пользователи будут активно использовать ваш продукт, важно следить за тем, чтобы всё работало должным образом.
В небольших проектах разработчики сами отвечают за внедрение изменений. В средних эту задачу выполняют DevOps-инженеры, задача которых — разработка и эксплуатация программного обеспечения. А при создании крупных проектов внедрением занимаются специальные администраторы, которые не только разрабатывают, но и поддерживают инфраструктуру, настраивают сложные процессы и пайплайны, обеспечивающие непрерывное развитие продукта.
Внедрение изменений необходимо, чтобы готовое ПО стало доступным для всех пользователей. Иногда в начале разработки фронтендеры пишут кодовые конструкции прямо на рабочем сервере, чтобы специалисты серверной части (бэкенда) смогли немедленно отследить ошибки. Такой подход имеет свои недостатки: существует риск показать пользователю незавершённую версию сайта с ошибками в случае, когда разработчик решил немного передохнуть, оставив работу выполненной наполовину.
Способы деплоя
Для развёртывания веб-приложений доступны три основных подхода:
- Использование VPS предполагает ручное перемещение файлов на виртуальный сервер. В этом случае можно передавать скомпилированные версии приложения, где код уже преобразован в машинный язык или в отдельные HTML-документы или JS-файлы. Сервер следит за изменениями в этих файлах и посылает их пользователю. Этот метод немного устарел, поскольку в настоящее время мало кто хранит в серверных папках свои файлы.
- Второй подход основан на использовании VDS (Virtual Dedicated Server) — виртуального сервера, который представляет собой изолированное окружение с собственными ресурсами и операционной системой на общем физическом сервере. Для развёртывания приложений в таких средах используются платформы для работы с контейнерными приложениями (например, Docker). Можно установить легковесный веб-сервер Nginx и добавить нужное приложение в контейнер Docker. Этот метод более продвинутый и универсальный, но требует определённых навыков и может быть достаточно сложным в настройке.
- Третий способ основан на использовании специальных платформ GitHub, Yandex Cloud, GitLab, OpenShift или Heroku. Этот метод самый современный и удобный для развёртывания приложений. В этом случае программисту не нужно заниматься ручной передачей файлов или установкой дополнительного ПО. Достаточно обозначить сценарий развёртывания в коде приложения, отправив обновления в репозиторий, и все операции по развёртыванию будут выполнены внутри выбранной платформы.
Этапы деплоя
Процесс деплоя различается в зависимости от конкретной программы, которую необходимо развернуть.
-
Обычно он начинается с доставки готового кода на сервер при помощи Git.
-
Затем разработчики устанавливают зависимости (прописывают изменения в логике взаимодействия между начальными файлами и новыми компонентами кода с последующей интеграцией результата в общую структуру проекта).
-
После этого идёт объединение всех файлов проекта в единую сборку. Если нужно, специалисты запускают определённые скрипты для БД. Эти скрипты подготавливают базу данных к новым изменениям, обновляют и настраивают её структуру. Такой процесс называется «миграции».
-
Финальным этапом идёт запуск обновлённой версии программы с внедрёнными в неё новыми функциями. Старая версия при этом прекращает работать.
Успешный деплой веб-приложений включает не только функциональность, но и лёгкость взаимодействия с продуктом. Сотрудничество с CPaaS компанией, предоставляющей API для управления коммуникацией, позволяет разработчикам сосредоточиться на повышении удобства использования программы.
Например, благодаря интеграции e-commerce сервиса с Exolve клиент смог настроить автоматическую отправку SMS-уведомлений о каждом этапе доставки заказа. Это существенно сократило количество запросов пользователей о статусе доставляемых товаров, и теперь платформа обрабатывает их на 30% быстрее.
Что обычно деплоят
Развёртыванию подвергаются все приложения, веб-сайты и сервисы, работающие в сети, даже если они не предназначены для общего доступа и функционируют только внутри компании.
Деплоить можно не только целое приложение, но и его отдельные части. В современной разработке часто несколько программистов работают над разными функциями одного большого приложения. И как только отдельная часть становится готовой, её можно задеплоить. Это позволяет удобно внедрять изменения. Разработка распределённых программ, состоящих из отдельных компонентов, напоминает множество независимых деплоев.
Автоматизация деплоя
Ручное развёртывание приложения — долгий и нелёгкий процесс, поэтому современные IT-компании автоматизируют его и, как правило, пишут сценарий для одной из платформ сборки, упомянутых нами выше. Так они хотят исключить распространённую проблему ручного деплоя — человеческий фактор (кодеры нередко допускают ошибки). Автоматизация помогает осуществлять деплой и включать валидацию кода на проверку синтаксиса и запуск автоматических тестов.
Один из лучших инструментов для автоматизации — GitHub Pages. Сервис позволяет размещать свой код в сети в виде сайта. Для этого нужно использовать особую ветку с названием gh-pages, где настраиваются различные сценарии сборки при помощи GitHub Actions: пайплайна, автоматизирующего процесс развёртывания. Путём предварительной настройки сценария в репозитории сервис выполняет все шаги по деплою приложения автоматически.
Для настройки сценария при помощи GitHub Actions необходимо сделать директорию .github/workflows в репозитории, где размещены файлы с этапами, выполняемыми в ответ на определённые события. К примеру, при очередном коммите изменений в проекте, помещённом в Actions, автоматически запускается соответствующий сценарий развёртывания, и платформа сама выполняет все необходимые манипуляции по сборке, упаковке, передаче данных и запуску.
Также нужно учитывать, что у GitHub есть ограничения по размеру залитых файлов сайта (не более 1 ГБ) и пропускной способности (не более 100 ГБ в месяц). Программист может выбрать выполнение пайплайна на открытых серверах с соблюдением соответствующих ограничений или развернуть всю инфраструктуру на своём ПК.
Минимизация Downtime
Классический способ деплоя предполагает отключение старой версии и запуск новой, в результате чего сайт временно недоступен для пользователей. Для коммерческих проектов, где развёртывание может занять значительное время, такой простой недопустим. Есть методы, позволяющие его избежать.
Например, Zero Downtime Deployment (ZDD, развёртывание без простоев). Суть его проста: обновления выполняются постепенно. Новая версия приложения запускается параллельно с текущей, и запросы пользователей маршрутизируются между ними. Из-за этого юзеры не замечают простоев, поскольку обновление происходит без перерыва в обслуживании.
Использование балансировщика нагрузки позволит распределить запросы между несколькими экземплярами приложения, а в случае, если что-то пошло не так, всегда можно откатиться к предыдущему рабочему состоянию.
Заключение
Деплой — ответственная задача, и за него, как правило, отвечает DevOps-инженер. При разработке небольшого сайта или приложения функцию деплоя может взять на себя бэкендер, тимлид или другой специалист.
Самый простой способ разобраться с развёртыванием — использовать сервисы вроде Heroku с бесплатными планами и понятным интерфейсом. Если вы хотите попрактиковаться, используйте хостинг-провайдеры, которые обычно предоставляют решения по деплою с настройкой окружения. Правда, за них придётся платить.