Веб-разработка на PHP
Теория: Деплой
Когда сайт написан, встает вопрос о том, как выложить его в интернет. Стандартный путь включает три пункта:
- Покупка домена
- Покупка хостинга и его настройка
- Деплой
Первый пропустим, про два других поговорим в этом уроке.
Процесс деплоя
Деплой — процесс выкладки новой версии сайта на сервер или сервера. Этот процесс может быть сложным, также он зависит от используемых технологий.
Во время деплоя выполняются следующие задачи:
- Код проекта скачивается на сервер (обычно через клонирование Git)
- Ставятся необходимые зависимости
- Выполняется процесс сборки, например, собирается фронтенд-часть
- Выполняются миграции. Миграции — SQL-скрипты, которые изменяют структуру базы данных
- Запускается новая версия кода
Это один из возможных вариантов, причем довольно примитивный.
Во многих компаниях этот процесс до сих пор выполняется руками. Программист заходит на сервер, запускает git pull и далее проходится по списку выше. Это худший способ деплоить. Деплой относится к тем задачам, которые должны быть автоматизированы от и до.
Есть одно важное правило общее для всех — деплоить можно только вперед. Деплой нельзя «откатывать». В первую очередь это касается миграций, но про базы мы пока не говорим.
Если после или во время деплоя что-то пошло не так, то нужно деплоить снова, причем именно предыдущую версию.
Также деплои можно классифицировать по способу обновления и отката:
- Последовательное обновление — сервера обновляются по очереди
- Сине-зеленый деплой — полное дублирование инфраструктуры с подменой
Отдельно стоит сказать про канареечный релиз — canary release. При таком подходе переключение на использование новой версии происходит постепенно: сначала для небольшого процента пользователей, а затем и для всех.
Типы хостингов
Способ деплоя зависит от используемого хостинга и способа настройки серверного окружения. Выделяют следующие типы хостингов:
- Виртуальный хостинг (Shared Hosting) — самый дешевый способ размещать сайт в интернете. Такая услуга включает в себя доступ на сервер с уже настроенным программным обеспечением под конкретный стек, например, Linux + PHP + MySQL. Этот способ подходит для самых простых сайтов и требует минимальной настройки
- VPS/VDS — наиболее сбалансированная услуга, в рамках которой предоставляется виртуальная машина. Плюс в том, что такой вид хостинга позволяет задействовать больше серверных мощностей: ЦПУ, память и диск. Предустановленного ПО нет, всё нужно делать самостоятельно. По сравнению с виртуальным хостингом мы не ограничены в правах и можем настраивать сервер как угодно
- Выделенный сервер (Dedicated Server) — либо свой, либо арендованный сервер. Такой хостинг требует больше всего участия, но зато мы получаем лучшее соотношение производительность/цена
- IaaS (Infrastructure as a Service) — инфраструктура как сервис. Вид хостинга, при котором большая часть возможностей представляется как сервис. Как пример: Amazon Web Service (AWS)
- PaaS (Platform as a Service) — платформа как сервис. Наиболее дорогой и самый автоматизированный способ из коробки по размещению сайтов. Выкладка сайта происходит буквально по команде
git push. Кроме цены важно учитывать используемые технологии и подходы. PaaS обладает наибольшим числом ограничений по тому, что и как можно делать. Но в обмен мы получаем не просто автоматизированный хостинг, но и платформу, которая автоматически «скейлится» (масштабируется) под нагрузку.
Все способы деплоя можно разбить на две большие категории: деплой на PaaS и деплой на все остальное.
PaaS
Самый простой способ начать деплоить. Большинство PaaS-хостеров имеют бесплатные планы, достаточные для выкладки учебных проектов. Из плюсов: не придётся покупать адрес, домен третьего уровня предоставляется бесплатно.
Популярное PaaS-решение на текущий день — Render.com. У этого сервиса есть документация. Если следовать ей, можно быстро выложить свой первый сайт.
Render используется в Хекслете студентами для выполнения проектов и в опенсорсе.
Все остальное
Если не брать в расчет самый примитивный виртуальный хостинг, который не позволяет настраивать серверное окружение, остальные виды хостингов имеют схожие задачи для выкладки.
Первая задача — настроить окружение. Если в виртуальном хостинге всегда есть набор предустановленных программ, то в остальных видах хостинга нет ничего, кроме «голой» операционной системы.
Установка необходимого ПО — такой же автоматизируемый процесс как процесс деплоя. У него есть собственное название — Управление конфигурациями (Configuration Management).
Рекомендуем использовать Ansible — популярное решение для настройки (На Хекслете есть соответствующий курс).
Ключевое понятие Ansible — Playbook (плейбук). Это файл в формате YAML, в котором описывается, что нужно сделать на указанной машине.
В каждом плейбуке используются готовые модули, поставляемые вместе с Ansible. Этих модулей сотни. С их помощью можно делать практически всё: от установки программ до настройки сети и управления правами файловой системы.
Ansible — универсальный инструмент. С его помощью можно не только настраивать окружение, но и деплоить. При этом для деплоя есть готовый модуль — deploy helper.
В случаях, где используется, например, Docker, развертывание осуществляется системами оркестрации, среди которых выделяется Kubernetes.
.png)
