Мы использовали социальный веб-сайт в стандартной конфигурации LAMP. У нас был Live-сервер, тестовый сервер и сервер разработки, а также машины локальных разработчиков. Все управлялись с помощью GIT.
На каждом компьютере у нас были файлы PHP, а также служба MySQL и папка с изображениями, которые пользователи могли загружать. На сервере Live выросло около 100 КБ (!) Повторных пользователей, дамп был около 2 ГБ (!), Папка с изображениями - около 50 ГБ (!). К тому времени, когда я ушел, наш сервер достиг предела своего ЦП, Ram и, самое главное, ограничения одновременных сетевых соединений (мы даже скомпилировали нашу собственную версию драйвера сетевой карты, чтобы максимально использовать сервер 'lol'). Мы не можем ( и вы не предполагаете, что на вашем сайте ) поместить 2 ГБ данных и 50 ГБ изображений в GIT.
Чтобы легко управлять всем этим в GIT, мы игнорировали бы двоичные папки (папки, содержащие изображения), вставляя эти пути к папкам в .gitignore. У нас также была папка с именем SQL вне пути к корню документа Apache. В этой папке SQL мы бы помещали наши файлы SQL от разработчиков в инкрементные нумерации (001.florianm.sql, 001.johns.sql, 002.florianm.sql и т. Д.). Этими файлами SQL управлял также GIT. Первый файл sql действительно будет содержать большой набор схем БД. Мы не добавляем данные пользователя в GIT (например, записи таблицы пользователей или таблицы комментариев), но такие данные, как конфиги или топология, или другие данные, специфичные для сайта, сохранялись в файлах sql (и, следовательно, GIT). В основном это разработчики (которые лучше знают код), которые определяют, что и что не поддерживается GIT в отношении схемы и данных SQL.
Когда дело доходит до выпуска, администратор входит на сервер dev, объединяет ветку live со всеми разработчиками и необходимыми ветвями на машине dev в ветку обновлений и отправляет ее на тестовый сервер. На тестовом сервере он проверяет, все ли действительный процесс обновления для живого сервера, и в быстрой последовательности направляет весь трафик в Apache на сайт-заполнитель, создает дамп БД, указывает рабочий каталог с «живого» на «обновление». ', выполняет все новые sql-файлы в mysql и перенаправляет трафик обратно на правильный сайт. Когда все заинтересованные стороны согласились после проверки тестового сервера, администратор сделал то же самое с тестового сервера на живой сервер. После этого он объединяет живую ветку на рабочем сервере с главной веткой на всех серверах и перебазирует все живые ветви. Разработчики сами отвечали за перебазирование своих веток, но они обычно знают, что делают.
Если были проблемы на тестовом сервере, например. у слияний было слишком много конфликтов, затем код был возвращен (указывая рабочую ветвь обратно на «живую»), и файлы sql никогда не выполнялись. В тот момент, когда были выполнены sql-файлы, в то время это рассматривалось как необратимое действие. Если файлы SQL не работали должным образом, то БД была восстановлена с использованием дампа (и разработчики отговорили его за предоставление плохо проверенных файлов SQL).
Сегодня мы поддерживаем папки sql-up и sql-down с эквивалентными именами файлов, где разработчики должны проверить, что оба обновляемых файла sql могут быть в равной степени понижены. В конечном итоге это может быть выполнено с помощью bash-скрипта, но это хорошая идея, если человеческий глаз следит за процессом обновления.
Это не здорово, но управляемо. Надеюсь, что это дает представление о реальном, практичном, относительно высоком доступном сайте. Будь это немного устаревшим, но все же последующим.