Нелирическое вступление
Относительно часто встречаются сайты, разработка и поддержка которых должна удовлетворять следующим требованиям:
- минимальное время простоя рабочего сайта при обновлениях функционала или исправлении ошибок;
- наличие полной истории всех исправлений;
- возможность отследить авторство любого исправления;
Предлагаемая архитектура в той или иной степени обеспечивает выполнение данных требований.
Описание
Поддерживаемый проект должен состоять как минимум из трёх совершенно независимых друг от друга сайтов. У них нет ни общей бд, ни общего кода, ни каких-либо ещё разделяемых ресурсов.
Единственное, что объединяет все сайты проекта -- общий репозиторий системы контроля версий.
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 сайты обязаны находиться на отдельной машине, лучше на другом физическом сервере. На них может случиться абсолютно что угодно и лучше перестраховаться.
Репозитарий системы контроля версий, в идеале, должен находиться на третьем удалённом сервере.