Правильный способ обновления файлов сервера без простоев

1

Я думал об этом методе обновления файлов сервера без простоя:

  1. Загрузите новые файлы в новую папку, например, в /www/v1/
  2. В httpd.conf обновите DocumentRoot, чтобы указать на новую папку
  3. Перезапустите apache.

Есть ли недостатки в этом? Есть ли способ лучше?

Могут ли быть какие-либо ошибки состояния гонки, когда к файлу обращаются в момент момента перезапуска?

  • 0
    Лучшим способом было бы управлять вашим кодом через GIT. Затем вы можете сделать: git pull (PS: у вас может быть время простоя с перезапуском apache)
  • 0
    Он мгновенно обновляет файлы на сервере
Показать ещё 1 комментарий
Теги:
httpd.conf

2 ответа

3

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

На более крупных объектах, со сложными потребностями, все будет сложнее и дорого. Большинство сайтов имеют более простые требования. Даже миграция базы данных может быть запланирована на минимальные сбои - но также будет сложной и должна быть проработана с запланированным временем простоя.

Поскольку переключение между копиями сайта на одном и том же компьютере (или небольшом числе машин) легко (эффективно перемещая Apache или Nginx DocumentRoot) технику, которая легко доступна (и не требует нескольких машин и балансировки нагрузки для достижения ):

  1. Хотя сайт по-прежнему работает счастливо в своем текущем местоположении на диске...
  2. Проверьте и подготовьте полностью отдельную копию сайта в новом каталоге
  3. Запуск любой требуемой composer install или извлечение/подготовка объекта по мере необходимости
  4. Измените символическую ссылку между старым и новым веб-сайтом.

На практике это то, что делает Capistrano (и другие подобные инструменты). Базовый каталог выложен следующим образом:

base-directory
   releases
      20151010-0925/
          vendor/  (composer-installed files)
          web/index.php
      20151120-1007/
          vendor/  (composer-installed files)
          web/index.php
   current (symlink to ../releases/20151010-0925/)
   shared/ (files shared between releases)

При развертывании новой версии веб-сайта - создайте новую полностью сформированную версию, а затем, когда она будет завершена, измените "текущую" символическую ссылку.

Корень документа Apache в этом экземпляре будет указывать на .../base/current/web/ через символическую ссылку на базу веб-сайта.

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

Я использовал эту технику из тривиальных, одностраничных, HTML/CSS-сайтов в трехкомпонентные кластеры, на которых работают тысячи одновременных пользователей.

0

Лучшим решением было бы установить балансировщик нагрузки для высокой доступности (например, HAProxy) вашего сервера.

Изображение 174551

В противном случае у вас всегда будет простой. Подумайте о следующих случаях: сброс apache, обновление базы данных, обновление активов, непредвиденные ошибки во время обновления и т.д.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню