Незаметное обновление сайта

Extalionez

Клоун
Заблокирован
Регистрация
21 Авг 2008
Сообщения
368
Реакции
191
  • Автор темы
  • Заблокирован
  • #1
Здравствуйте. Есть выделенный сервак. На нём 1 сайт с высокой посещаемостью. Возник вопрос - как обновить сразу большое кол-во файлов так, чтобы никаких ошибок не возникало. Поясню - если изменить только 1 файл, то разумеется на сайте возникнет 500-я ошибка, а значит надо обновить все файлы сразу. Подскажите, плз, ламеру как это сделать. Спасибо!!!
 
делается папка copy_of_site, в нее складываете сайт с уже обновленными файлами, в конфиге апача указываете новый путь к сайту и перезапускаете апач.
 
1) Рядом папку с копией создай, накатай в неё обновления и переименуй в папку с названием сайта. Подойдёт для небольших объёмов, когда картинки и прочий медийный контент отдельно от кода лежит. Должно быть абсолютно незаметно для пользователя, если в каталоге с сайтом не хранятся данные сессий или чего-то подобного.

2) Просто загрузи файлы на сервер в любой каталог, а потом перенеси в нужное место с заменой старых, даже 10000 файлов сейчас в течении менее чем секунды переносятся...

3) По-умному, сайт на время апдейта закрывают (подмена индекс файла, через htaccess или функциями CMS) с выводом заглушки: "Технические работы"
 
1) Рядом папку с копией создай, накатай в неё обновления и переименуй в папку с названием сайта. Подойдёт для небольших объёмов, когда картинки и прочий медийный контент отдельно от кода лежит. Должно быть абсолютно незаметно для пользователя, если в каталоге с сайтом не хранятся данные сессий или чего-то подобного.

2) Просто загрузи файлы на сервер в любой каталог, а потом перенеси в нужное место с заменой старых, даже 10000 файлов сейчас в течении менее чем секунды переносятся...

3) По-умному, сайт на время апдейта закрывают (подмена индекс файла, через htaccess или функциями CMS) с выводом заглушки: "Технические работы"
но когда посещаемость большая, активность, добавления. Тут уже так не отделаться.
В таком случае нужно что-то подобное синхронизации файлов и БД.
Сам постоянно мучаюсь. Пока обновление делаю на ПК, на сайте что-нибудь уже добавят. Приходиться скачивать БД, снова обновлять ее (поля всякие и т.п.) и выкладывать на хост.
 
Как я это обычно делаю:
1. Создаю папку например www_test
2. Копирую туда все что нужно
3. Настройка, отладка.
4. Затем просто смотрю, если все хорошо можно уже ставить на проект (Просто поменять основную папку например с www на www2, а www_test соответственно на www).
 
Обычно сайт закрывают, затем уже переименовывают папки с копированием кэша, сессий и т.д в новую папку (если по какой-то причине они хранятся в папке с сайтом, а не отдельно) и открывают снова. Такое делают даже на сайтах с очень большой посещаемостью. Если посещаемость слишком большая, то там уже не один сервер используется, там другие схемы.
 
Еще можно использовать репозиторий.
Сделал правки, протестировал - обновил репозиторий, с него обновил сайт (вручную или по расписанию), правки вносятся быстро и нужно перезаписывать ту информацию, которая не обновляется.
 
Еще можно использовать репозиторий.
Сделал правки, протестировал - обновил репозиторий, с него обновил сайт (вручную или по расписанию), правки вносятся быстро и нужно перезаписывать ту информацию, которая не обновляется.

+1 постоянно так работаем, и пока проблем не было (большая часть сайтов это magento которая обычно довольно таки нервно относится к обновлениям). В частности настроен хук, т.е. когда в ветку мастер делается пуш, bitbucket запрашивает определенную страницу на сервере которая и подает команду git pull
 
Мы обновляем так: скрипту деплоя скармливается метка, по которой он тянет из гита архив (архив собирается Дженкинсом). Далее скрипт кладет на хост файл maintenance trigger, по которому движок знает что нужно перевестись в режим майнтенанса и заблочить все страницы. Далее архив распаковывается с замещением файлов и шлется уведомление в Graphite, майнтенас триггер удаляется. Точно так же раскладывается по нодам. Но это сайт с миллионом уников.

На менее нагруженных сайтах просто из гита тянет. Сперва git fetch чтобы в локальный гит затянуть, затем checkout по метке в нужное дерево. Это быстро отрабатывает.
 
Назад
Сверху