Обновите файл конфигурации Nginx в контейнере с нулевым временем простоя

Мы используем Nginx в качестве обратного прокси-сервера для облачных сервисов Docker. Сценарий реализован для обновления файла конфигурации Nginx всякий раз, когда новая служба развертывается в облаке докеров или если служба получает новый URL-адрес в облаке докеров.

Nginx и скрипт запускались в док-контейнере по отдельности. Файл конфигурации Nginx монтируется в Host (ECS). После обновления файла конфигурации с помощью скрипта необходимо перезагрузить Nginx, чтобы изменения вступили в силу.

Во-первых, я хотел бы знать, является ли это лучшим способом обновления файла конфигурации Nginx, а также как лучше всего перезагрузить Nginx без простоев?

Должен ли я пересоздавать контейнер Nginx после каждого обновления? если да, то как?

или можно перезагрузить Nginx с хоста, отслеживая изменения в файле конфигурации (с помощью скрипта) и перезагрузив его с помощью команды ниже?

docker exec NginxcontainerID | nginx -s reload    

person Matrix    schedule 04.03.2017    source источник


Ответы (1)


Должен ли я пересоздавать контейнер Nginx после каждого обновления? если да, то как?

Нет, вам просто нужно перезагружать службу nginx большую часть времени. Вы можете использовать:

docker exec nginxcontainername/id nginx -s reload

or

docker kill -s HUP nginxcontainername/id 

Еще один вариант — использовать собственное изображение, проверять контрольную сумму конфигурации nginx и перезагружать nginx при ее изменении. Пример скрипта:

nginx "$@"
oldcksum=`cksum /etc/nginx/conf.d/default.conf`

inotifywait -e modify,move,create,delete -mr --timefmt '%d/%m/%y %H:%M' --format '%T' \
/etc/nginx/conf.d/ | while read date time; do

    newcksum=`cksum /etc/nginx/conf.d/default.conf`
    if [ "$newcksum" != "$oldcksum" ]; then
        echo "At ${time} on ${date}, config file update detected."
        oldcksum=$newcksum
        nginx -s reload
    fi

done

Вам необходимо установить пакет inotifywait.

person Farhad Farahi    schedule 05.03.2017
comment
Спасибо за ответ. это помогло. Мне интересно, знаете ли вы, как лучше всего иметь высокодоступный контейнер Nginx, архитектуру для аварийного переключения? Я задал его под этим вопросом, но пока не получил ответа. stackoverflow.com/questions/41379428/ - person Matrix; 07.03.2017