Когда сайт написан, встает вопрос о том, как выложить его в интернет. Стандартный путь включает три пункта:
- Покупка домена
- Покупка хостинга и его настройка
- Деплой
Первый пропустим, так как скоро мы его опишем в https://guides.hexlet.io. Про два других поговорим в этом уроке.
Процесс деплоя
Деплой — процесс выкладки новой версии сайта на сервер или сервера. Этот процесс может быть сложным, также он зависит от используемых технологий.
Во время деплоя выполняются следующие задачи:
- Код проекта скачивается на сервер (обычно через клонирование 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 — популярное решение для настройки (На Хекслете есть соответствующий курс).
- 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
Дополнительные материалы
- Среды разработки
- DevOps
- Непрерывное развертывание
- Terraform
- Ansible
- 6 способов деплоя веб-приложений
- Пример задеплоенного на Render.com приложения
Остались вопросы? Задайте их в разделе «Обсуждение»
Вам ответят команда поддержки Хекслета или другие студенты
- Статья «Как учиться и справляться с негативными мыслями»
- Статья «Ловушки обучения»
- Статья «Сложные простые задачи по программированию»
- Вебинар «Как самостоятельно учиться»
Для полного доступа к курсу нужен базовый план
Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.