Как обработать обновление сервера

У меня есть несколько веб-сайтов, хранящихся на сервере.

Если я хочу обновить конфигурацию apache, я хочу сообщить всем своим клиентам, что обновление будет через 30 минут.

Я могу изменить каждый сайт, чтобы показать это сообщение, но мне было интересно, как я могу сделать это автоматически? Какой профессиональный способ сделать это?

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

4 ответа

Решение

На этапе обновления всех ваших пакетов вы просто продолжаете работать Apache, и никто не заметит.

Фактический перезапуск apache может быть выполнен таким образом, что отдельные пользователи не заметят этого, используя изящный перезапуск. Это позволит каждому рабочему потоку завершить обслуживание текущей страницы и затем не принимать новые запросы. Затем сервер перезагрузится, что займет всего несколько секунд, и снова начнет обслуживать запросы.

Это не твоя проблема. Проблема в том, что делать, если что-то пойдет не так. В котором apache не будет перезагружаться, и ваш пользователь заметит. Итак, вы хотите убедиться, что ничего не может пойти не так.

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

Вы можете использовать mod_layout, чтобы добавить пользовательский код HTML или PHP в начало или конец страницы. См. FAQ по mod_layout для хорошего обзора того, как использовать мод, но его можно так же просто использовать, как:

<VirtualHost www.foo.com:80>
    LayoutFooter "Insert some sort of message here..."
</VirtualHost>

Есть много способов сделать это, но я мог бы сделать рекомендацию сделать это с Javascript.

Вы можете в любое время вставить скрипт на каждый сайт. Пусть скрипт проверит URL на вашем сервере, это может быть просто текстовый файл с 0 или 1, или вы можете поместить туда сообщение (JSON - хороший протокол для использования). Сценарий на стороне клиента, проверьте URL для этой переменной. Если это 1, отобразить сообщение, а если 0 - нет. Возможно, вы даже захотите закодировать сообщение в этом текстовом файле на тот случай, если вам нужно будет показать какое-либо сообщение всем пользователям вашего сайта о задержке или любую другую информацию.

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

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

Я хочу сообщить всем своим клиентам, что через 30 минут произойдет обновление.

Вам нужна некоторая дополнительная возможность по сравнению просто с обслуживанием статического контента - вы можете сделать это с помощью серверных включений или с помощью автоматического предварительного добавления PHP или развернуть собственное решение, используя язык, на котором вы разрабатываете свой сайт. Затем просто измените содержимое включаемого файла., Однако это не тривиальное упражнение - для поддержки этого вам необходимо убедиться, что обслуживаемый HTML-контент не кэшируется (или имеет очень короткое время кэширования). Кроме того, если вы используете маршрут PHP, вы не можете просто записать вывод прямо в браузер, если вам нужно использовать куки / сеансы / перенаправление.

когда Apache перезапускается или обновляется, "страница обслуживания" не будет. Как я могу вместо этого показать для каждого веб-сайта страницу по умолчанию "в процессе обновления", если apache не работает?

Это намного сложнее. Учитывая, что перезапуск вашего экземпляра Apache не должен занимать больше нескольких секунд, это не стоит усилий. Если перезапуск занимает более 5 секунд, значит, вам нужно решить другую проблему.

Другие вопросы по тегам