Показ страницы «Under maintenance» через nginx в приложении «launcher rebuild app»?

Обслуживание сайта с помощью команды “./launcher rebuild app” занимает некоторое время для полной пересборки сайта (установка новых плагинов и т.д. из git).
Есть ли рекомендуемый способ показать статическую страницу с надписью “Ведутся технические работы”, пока я пересобираю Discourse?

Я думал использовать nginx. Это предполагает остановку Docker для обслуживания порта 80 и настройку nginx как обратного прокси-сервера, который перехватывает трафик и перенаправляет его либо в контейнер Docker, либо на мою статическую страницу.

Я планирую делать это, вручную редактируя nginx.conf на нужный вариант:

server {
    listen 80;
    server_name ваш-домен-discourse.com;

    location / {
        proxy_pass http://localhost:80;
        proxy_set_header Host $http_host;
        proxy_http_version 1.1;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto https;
        proxy_redirect http:// https://;
    }
}

а затем заменяя его на:

server {
    listen 80;
    server_name ваш-домен-discourse.com;

    location / {
        root /путь/к/вашей/странице/технических/работ;
    }
}

Каковы ваши предложения? Я использую серверы AWS EC2. Есть ли лучший способ?

Привет, @PrettyGirl

Да, есть. Посмотрите здесь:

Мой подход, который я считаю более простым и эффективным, — это использование двух контейнеров, чтобы вы могли собрать новый контейнер, пока старый продолжает работать. Это значительно сокращает время простоя. Другие считают, что запуск дополнительного веб-сервера проще.

Это сработает во многих случаях, но всё равно будет происходить простои, когда потребуется обновить контейнер с данными.

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

На самом деле, возможно, самое простое решение — запустить вручную второй контейнер nginx с сообщением «Скоро вернёмся» во время обновления, например:

./launcher stop app
docker run nginx --name back-soon # и ещё несколько команд, чтобы убедиться, что страница отображается
./launcher bootstrap app
./launcher destroy app
docker stop back-soon
./launcher start app

Однако в этом случае вам потребуется получить сертификат и поддерживать его актуальность для контейнера back-soon, что усложняет процесс.

РЕДАКТИРОВАНИЕ: Вот каноническая тема для этого обсуждения: Add an offline page to display when Discourse is rebuilding or starting up - #83 by amotl