Заметки о разворачивании системы поддержки сайта

Нелирическое вступление

Относительно часто встречаются сайты, разработка и поддержка которых должна удовлетворять следующим требованиям:

  • минимальное время простоя рабочего сайта при обновлениях функционала или исправлении ошибок;
  • наличие полной истории всех исправлений;
  • возможность отследить авторство любого исправления;

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

Описание

Поддерживаемый проект должен состоять как минимум из трёх совершенно независимых друг от друга сайтов. У них нет ни общей бд, ни общего кода, ни каких-либо ещё разделяемых ресурсов.

Единственное, что объединяет все сайты проекта -- общий репозиторий системы контроля версий.

Production

Рабочий, он же боевой, сайт. Все обновления данного сайта делаются только и исключительно посредством системы контроля версий, например, git. В идеале все пути внесения изменения правок помимо git на боевом сайте должны быть исключены как административно, так и технически. Допустимо после обновления прогнать скрипт апдейта структур базы данных, но и только.

Боевой сайт, в идеале, обновляется строго после успешного обновления pred-production сайта.

Pred-production

Используется при обновлении боевого сайта. Конкретнее, до обновления боевого сайта:

  • на pred-production делается полная копия текущего боевого сайта. Если на сайте используются внешние сервисы, крайне желательно настроить работу с ними так, чтобы поведение pred-production сайта было неотличимо от боевого.
  • на pred-production накатывается ровно то же самое обновление, что будет накачено впоследствии на боевой. Процедура обновления pred-production должна в точности повторять процедуру обновления боевого.
  • тщательно проверяется работа всего pred-production. Если есть глюки, то выясняется их причина, устраняется на development сайте и вся процедура обновления pred-production повторяется с самого начала.

Development

На этом сайте происходит вся работа по развитию проекта. На него могут иметь полный доступ все программисты и вообще на нём можно творить что угодно.

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

Development-2,3,N

Иногда бывает полезно иметь несколько development сайтов, например, при разработке какого-то отдельного крупного функционала. В этом случае разработка хранится в репо в виде отдельной ветки. В один прекрасный момент на основном development сайте такая ветка сливается с основным потоком разработки.

Необходимые замечания

Production и pred-production сайты могут находиться на одной и той машине. Это сильно облегчает и ускоряет клонирование pred-production сайта.

Development сайты обязаны находиться на отдельной машине, лучше на другом физическом сервере. На них может случиться абсолютно что угодно и лучше перестраховаться.

Репозитарий системы контроля версий, в идеале, должен находиться на третьем удалённом сервере.