В последнее время все чаще встречаю задачи связанные с автоматизацией разработки и автоматической публикацией новых версий сайта.

Давайте попробую описать те варианты которые встречались в моей практике.

Простой вариант

Самый простой вариант это обычный сайт в одном экземпляре и его редактирование в реальном времени через FTP/SFTP. Тут обычно используется простейший редактор типа Atom с плагином Remote FTP.

Это вполне простое и экономичное решение если сайт простой и частые перебои в его работе не создают значительных потерь финансов или репутации.

Обычный хостинг, GitLab & Deploy Bot

Чуть более сложное решение. Сайт у нас все еще на обычном shared-хостинге. Нет возможности тонко настраивать веб-сервер. Но уже есть потребность в GIT. Например когда над кодом начинают работать 2 человека. Или перебои начинают приносить потери. Нужно контролировать версии и периодически делать откаты.

В этом случае оптимально код держать на GitLab, а публикацию делать с помощью специальных ботов типа DeployBot. Доступа по FTP/SFTP вполне хватает для таких механик.

Как правило тут уже используется Vagrant для настройки и запуска виртуальных серверов на компьютерах разработчика. При этом конфигурация и скрипты запуска виртуальных машин вместе с приложением могут храниться в GIT вместе с кодом самого приложения.

( VPS | DS ) + GitLab & GitLab CI

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

Тут уже появляется возможность использовать GitLab CI.

Самый простой вариант установки GL Runner на сервер. Подключить к репо приложения на GitLab. И при очередном комите в ветку мастер выполнять git pull на стороне сервера.

Вариант посложнее — запускать множество GL Runner с Докер контейнерами для автотестов и ручного тестирования.

Итого

Усложнять систему разработки и доставки приложений можно бесконечно. Это лишь описание сценариев начального уровня сложности. С ростом нагрузки, растут требования к отказоустойчивости и надежности. Добавляются этапы процесса доставки приложения. Увеличивается число разработчиков. Количество тестов и т д.

Бывают печальными ситуации когда для ресурса с 0 посещаемостью начинают использовать сверх сложную систему контроля версий. Или когда есть критически важное приложение которое публикую практически вручную. Важно уметь выбирать максимально простые решения, но не проще чем это допустимо.