Зарегистрируйтесь, чтобы продолжить обучение

Деплой Веб-разработка на PHP

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

  1. Покупка домена
  2. Покупка хостинга и его настройка
  3. Деплой

Первый пропустим, так как скоро мы его опишем в https://guides.hexlet.io. Про два других поговорим в этом уроке.

Процесс деплоя

Deploy

Деплой — процесс выкладки новой версии сайта на сервер или сервера. Этот процесс может быть сложным, также он зависит от используемых технологий.

Во время деплоя выполняются следующие задачи:

  1. Код проекта скачивается на сервер (обычно через клонирование Git)
  2. Ставятся необходимые зависимости
  3. Выполняется процесс сборки, например, собирается фронтенд-часть
  4. Выполняются миграции. Миграции — SQL-скрипты, которые изменяют структуру базы данных
  5. Запускается новая версия кода

Это один из возможных вариантов, причем довольно примитивный.

Во многих компаниях этот процесс до сих пор выполняется руками. Программист заходит на сервер, запускает git pull и далее проходится по списку выше. Это худший способ деплоить. Деплой относится к тем задачам, которые должны быть автоматизированы от и до.

Deploy Notification

Есть одно важное правило общее для всех — деплоить можно только вперед. Деплой нельзя «откатывать». В первую очередь это касается миграций, но про базы мы пока не говорим.

Если после или во время деплоя что-то пошло не так, то нужно деплоить снова, причем именно предыдущую версию.

Также деплои можно классифицировать по способу обновления и отката:

  • Последовательное обновление — сервера обновляются по очереди
  • Сине-зеленый деплой — полное дублирование инфраструктуры с подменой

Отдельно стоит сказать про канареечный релиз — 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 — популярное решение для настройки (На Хекслете есть соответствующий курс).

- hosts: all

  tasks:

    - lineinfile:
        create: yes
        regexp: ~/.local
        path: ~/.bash_profile
        line: "export PATH=$PATH:~/.local/bin"

    - name: install packages
      apt: pkg=python3-pip state=latest update_cache=yes
      tags: pip
      become: yes

    - pip:
        name: pip
        state: latest
      become: yes

Ключевое понятие Ansible — Playbook (плейбук). Это файл в формате YAML, в котором описывается, что нужно сделать на указанной машине.

В каждом плейбуке используются готовые модули, поставляемые вместе с Ansible. Этих модулей сотни. С их помощью можно делать практически всё: от установки программ до настройки сети и управления правами файловой системы.

Ansible — универсальный инструмент. С его помощью можно не только настраивать окружение, но и деплоить. При этом для деплоя есть готовый модуль — deploy helper.

В случаях, где используется, например, Docker, развертывание осуществляется системами оркестрации, среди которых выделяется Kubernetes.


Самостоятельная работа

Выложите на Render проект, над которым работали в течение всего курса.

  • Добавьте в Makefile команду запуска приложения

PORT ?= 8000

start:
	php -S 0.0.0.0:$(PORT) -t public public/index.php
  • Добавьте в свой репозиторий Dockerfile из репозитория-примера.

  • Задеплойте проект на Render. Проверьте, что он запускается. Он должен быть доступен по адресу https://<project_name>.onrender.com


Дополнительные материалы

  1. Среды разработки
  2. DevOps
  3. Непрерывное развертывание
  4. Terraform
  5. Ansible
  6. 6 способов деплоя веб-приложений
  7. Пример задеплоенного на Render.com приложения

Аватары экспертов Хекслета

Остались вопросы? Задайте их в разделе «Обсуждение»

Вам ответят команда поддержки Хекслета или другие студенты

Для полного доступа к курсу нужен базовый план

Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.

Получить доступ
1000
упражнений
2000+
часов теории
3200
тестов

Открыть доступ

Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно

  • 130 курсов, 2000+ часов теории
  • 1000 практических заданий в браузере
  • 360 000 студентов
Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»

Наши выпускники работают в компаниях:

Логотип компании Альфа Банк
Логотип компании Aviasales
Логотип компании Yandex
Логотип компании Tinkoff
Рекомендуемые программы
профессия
от 25 000 ₸ в месяц
Разработка веб-приложений на Laravel
10 месяцев
с нуля
Старт 26 декабря

Используйте Хекслет по-максимуму!

  • Задавайте вопросы по уроку
  • Проверяйте знания в квизах
  • Проходите практику прямо в браузере
  • Отслеживайте свой прогресс

Зарегистрируйтесь или войдите в свой аккаунт

Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»