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

Тема в разделе "Администрирование серверов", создана пользователем Extalionez, 10 янв 2013.

Модераторы: mefish, stooper
  1. Extalionez

    Extalionez Клоун

    Заблокирован
    Регистр.:
    21 авг 2008
    Сообщения:
    368
    Симпатии:
    185
    Здравствуйте. Есть выделенный сервак. На нём 1 сайт с высокой посещаемостью. Возник вопрос - как обновить сразу большое кол-во файлов так, чтобы никаких ошибок не возникало. Поясню - если изменить только 1 файл, то разумеется на сайте возникнет 500-я ошибка, а значит надо обновить все файлы сразу. Подскажите, плз, ламеру как это сделать. Спасибо!!!
     
  2. efs

    efs SEO оптимизатор дискрипторов одностраничных сайтов

    Moderator
    Регистр.:
    20 ноя 2009
    Сообщения:
    827
    Симпатии:
    480
    делается папка copy_of_site, в нее складываете сайт с уже обновленными файлами, в конфиге апача указываете новый путь к сайту и перезапускаете апач.
     
  3. latteo

    latteo Эффективное использование PHP, MySQL

    Moderator
    Регистр.:
    28 фев 2008
    Сообщения:
    1.450
    Симпатии:
    1.244
    1) Рядом папку с копией создай, накатай в неё обновления и переименуй в папку с названием сайта. Подойдёт для небольших объёмов, когда картинки и прочий медийный контент отдельно от кода лежит. Должно быть абсолютно незаметно для пользователя, если в каталоге с сайтом не хранятся данные сессий или чего-то подобного.

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

    3) По-умному, сайт на время апдейта закрывают (подмена индекс файла, через htaccess или функциями CMS) с выводом заглушки: "Технические работы"
     
    Extalionez нравится это.
  4. danneo

    danneo Честный

    Регистр.:
    13 ноя 2007
    Сообщения:
    1.445
    Симпатии:
    113
    но когда посещаемость большая, активность, добавления. Тут уже так не отделаться.
    В таком случае нужно что-то подобное синхронизации файлов и БД.
    Сам постоянно мучаюсь. Пока обновление делаю на ПК, на сайте что-нибудь уже добавят. Приходиться скачивать БД, снова обновлять ее (поля всякие и т.п.) и выкладывать на хост.
     
  5. Hard1k

    Hard1k Создатель

    Регистр.:
    3 май 2013
    Сообщения:
    13
    Симпатии:
    0
    Как я это обычно делаю:
    1. Создаю папку например www_test
    2. Копирую туда все что нужно
    3. Настройка, отладка.
    4. Затем просто смотрю, если все хорошо можно уже ставить на проект (Просто поменять основную папку например с www на www2, а www_test соответственно на www).
     
  6. glavriba

    glavriba Создатель

    Регистр.:
    15 апр 2013
    Сообщения:
    18
    Симпатии:
    1
    Обычно сайт закрывают, затем уже переименовывают папки с копированием кэша, сессий и т.д в новую папку (если по какой-то причине они хранятся в папке с сайтом, а не отдельно) и открывают снова. Такое делают даже на сайтах с очень большой посещаемостью. Если посещаемость слишком большая, то там уже не один сервер используется, там другие схемы.
     
  7. Stael47

    Stael47 Писатель

    Регистр.:
    4 мар 2014
    Сообщения:
    1
    Симпатии:
    0
    Еще можно использовать репозиторий.
    Сделал правки, протестировал - обновил репозиторий, с него обновил сайт (вручную или по расписанию), правки вносятся быстро и нужно перезаписывать ту информацию, которая не обновляется.
     
  8. Alekc

    Alekc Постоялец

    Регистр.:
    9 мар 2014
    Сообщения:
    50
    Симпатии:
    26
    +1 постоянно так работаем, и пока проблем не было (большая часть сайтов это magento которая обычно довольно таки нервно относится к обновлениям). В частности настроен хук, т.е. когда в ветку мастер делается пуш, bitbucket запрашивает определенную страницу на сервере которая и подает команду git pull
     
  9. Stabr

    Stabr Создатель

    Регистр.:
    13 мар 2014
    Сообщения:
    31
    Симпатии:
    3
    Мы обновляем так: скрипту деплоя скармливается метка, по которой он тянет из гита архив (архив собирается Дженкинсом). Далее скрипт кладет на хост файл maintenance trigger, по которому движок знает что нужно перевестись в режим майнтенанса и заблочить все страницы. Далее архив распаковывается с замещением файлов и шлется уведомление в Graphite, майнтенас триггер удаляется. Точно так же раскладывается по нодам. Но это сайт с миллионом уников.

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