После того как сайт написан, встаёт вопрос о том как выложить его в интернет. Стандартный путь включает три пункта:
Первый я пропущу (скоро мы его опишем в https://guides.hexlet.io), а вот про два других поговорим.
Деплой — процесс выкладки новой версии сайта на сервер (или сервера). Этот процесс может быть довольно сложным и сильно зависит от используемых технологий. Во время деплоя выполняются следующие задачи (ниже всего лишь один из возможных вариантов, причём довольно примитивный):
Как это ни странно, но во многих компаниях прямо сейчас весь этот процесс выполняется руками. Программист заходит на сервер, запускает git pull
и далее проходится по списку выше. Это худший способ деплоить. Деплой относится к тем задачам, которые должны быть автоматизированы от и до.
Несмотря на разнообразие способов деплоя, есть одно важное правило общее для всех — деплоить можно только вперёд! Деплой нельзя «откатывать» (в первую очередь это касается миграций, но про базы мы пока не говорим). Если после или во время деплоя что-то пошло не так, то правильно деплоить снова, но предыдущую версию.
Кроме того, деплои можно классифицировать по способу обновления и отката:
Отдельно стоит сказать про канареечный релиз (canary release). При таком подходе переключение на использование новой версии происходит постепенно, сначала для небольшого процента пользователей, а затем и для всех.
Способ деплоя сильно зависит от используемого хостинга и даже способа настройки серверного окружения. Выделяют следующие типы хостингов:
git push
. Кроме цены важно учитывать используемые технологии и подходы. PaaS обладает наибольшим числом ограничений по тому, что и как можно делать, но в обмен вы получаете не просто автоматизированный хостинг, но и платформу, которая автоматически «скейлится» (масштабируется) под нагрузку.Все способы деплоя можно грубо разбить на две большие категории. Деплой на PaaS и деплой на все остальное.
Самый простой способ начать деплоить. Большинство PaaS-хостеров имеют бесплатные планы, достаточные для выкладки учебных проектов. Из плюсов: не придётся покупать адрес, домен третьего уровня предоставляется бесплатно. Самое популярное PaaS-решение на текущий день — Heroku, у этого сервиса прекрасная документация, следуя которой можно быстро выложить свой первый сайт. Пошаговое руководство, описывающее выкладку сайта на PHP доступно по ссылке: https://devcenter.heroku.com/articles/getting-started-with-php. Heroku используется на Хекслете для JavaScript- и PHP-проектов. Пользователям из РФ для регистрации на этом сервисе необходимо подключить VPN и указать другую страну. Также в качестве бесплатной альтернативы Heroku мы предлагаем Railway. Он поддерживает деплой как из Github репозиториев, так и из локальных с помощью cli-утилиты.
heroku create
Creating sharp-rain-871... done, stack is cedar-14
https://sharp-rain-871.herokuapp.com/ | https://git.heroku.com/sharp-rain-871.git
Git remote heroku added
git push heroku master
remote: Building source:
remote:
remote: -----> PHP app detected
remote: -----> Bootstrapping...
remote: -----> Installing platform packages...
remote: NOTICE: No runtime required in composer.json; requirements
remote: from dependencies in composer.lock will be used for selection
remote: - php (7.1.3)
remote: - apache (2.4.20)
remote: - nginx (1.8.1)
remote: -----> Installing dependencies...
remote: Composer version 1.4.1 2017-03-10 09:29:45
remote: Loading composer repositories with package information
remote: Installing dependencies from lock file
remote: Package operations: 12 installs, 0 updates, 0 removals
remote: - Installing psr/log (1.0.2): Loading from cache
remote: - Installing monolog/monolog (1.22.1): Loading from cache
...
remote: - Installing symfony/twig-bridge (v3.2.7): Loading from cache
remote: Generating optimized autoload files
remote: -----> Preparing runtime environment...
remote: -----> Checking for additional extensions to install...
remote: -----> Discovering process types
remote: Procfile declares types -> web
remote:
remote: -----> Compressing...
remote: Done: 14.8M
remote: -----> Launching...
remote: Released v17
remote: https://gsphpjon.herokuapp.com/ deployed to Heroku
remote:
remote: Verifying deploy... done.
To https://git.heroku.com/gsphpjon.git
+ 264e577...4f2369c master -> master (forced update)
Если не брать в расчёт самый примитивный виртуальный хостинг, который не позволяет никак настраивать серверное окружение, все остальные виды хостингов имеют схожие задачи для выкладки.
Самая первая задача — настроить окружение. Если в виртуальном хостинге всегда есть набор предустановленных программ, то во всех остальных видах хостинга нет ничего, кроме голой операционной системы. Установка необходимого ПО такой же автоматизируемый процесс как процесс деплоя и у него есть даже собственное название — Управление конфигурациями (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.
Выложите на Heroku (или Railway) тот код, который вы написали на Slim в течение этого курса.
Вам ответят команда поддержки Хекслета или другие студенты.
Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.
Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно
Наши выпускники работают в компаниях:
Зарегистрируйтесь или войдите в свой аккаунт