Рубрики
Uncategorized

Проверьте свои файлы конфигурации NGINX с помощью Docker

Создайте скрипт Bash для проверки ваших файлов конфигурации Nginx из любого места. Tagged с Docker, Nginx, DevOps.

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

Предположим, у вас есть ваши веб -серверы, которые выпускают любую версию Nginx, и вы настроены для автоматического развертывания файлов конфигурации Nginx (через Jenkins, Stridercd, TeamCity, Travis CI, CD или любой другой инструмент CICD, которые вам нравятся) из GIT Repository или любой другой источник.

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

Чтобы избежать такой ситуации, вы бы хотели, чтобы ваши проверки имели место как можно скорее в процессе обновления.

Это случалось с нами несколько раз, поэтому я решил написать небольшой сценарий, который проверил бы nginx.conf файлы до разрешения развертывания.

Первое, что мы хотели сделать, это иметь возможность проверить файлы конфигурации Nginx с сервера с Nginx. Это было довольно легко сделать с этой командой: nginx -c/etc/nginx/nginx.conf -t

С допустимыми файлами конфигурации он возвращает это:

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

С неверными файлами конфигурации он возвращает что -то вроде этого:

2018/04/13 21:26:15 [emerg] 1#1: unexpected ";" in /etc/nginx/nginx.conf:155
nginx: [emerg] unexpected ";" in /etc/nginx/nginx.conf:155
nginx: configuration file /etc/nginx/nginx.conf test failed

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

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

docker run --rm -t -a stdout --name my-nginx -v $PWD/config/:/etc/nginx/:ro nginx:latest nginx -c /etc/nginx/nginx.conf -t

Команда Docker кратко объяснила:

  • --RM : Удаляет контейнер после завершения выполнения
  • -t -A Stdout : Выводит журналы контейнера на стандартном выходе
  • -Назгнуть my-nginx : Название контейнера Docker
  • -v $ pwd/config/:/etc/nginx/: ro : Карты конфигурация Подпапалка в папку конфигурации NGINX внутри контейнера
  • nginx: последний : Nginx изображение версия для использования с hub.docker.com
  • nginx -c/etc/nginx/nginx.conf -t : Команда Nginx для проверки файла nginx.conf

Там могут быть некоторые настройки, необходимые для работы на Docker для Windows

Это предполагает, что у вас есть следующая структура папок:

  • ./
  • ./config
  • ./config/nginx.conf

При этом каждый может запустить эту команду в родительской папке каталога конфигурации и посмотреть, если их nginx.conf Файл действителен или нет.

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

Вот что мы получили в файле с именем checknginx.sh :

#!/bin/bash
rootPath=$1
nginxVersion=1.13  # Could also be passed as an argument using $2

result=$(docker run --rm -t -a stdout --name my-nginx -v ${rootPath}/config/:/etc/nginx/:ro nginx:$nginxVersion nginx -c /etc/nginx/nginx.conf -t)

# Look for the word successful and count the lines that have it
# This validation could be improved if needed
successful=$(echo $result | grep successful | wc -l)

if [ $successful = 0 ]; then
    echo FAILED
    echo "$result"
    exit 1
else
    echo SUCCESS
fi

Этот скрипт можно вызвать с помощью следующей команды: bash checknginx.sh $ pwd

Он выводит УСПЕХ Если все в порядке или следующее, если есть ошибка:

FAILED
2018/04/13 21:26:15 [emerg] 1#1: unexpected ";" in /etc/nginx/nginx.conf:155
nginx: [emerg] unexpected ";" in /etc/nginx/nginx.conf:155
nginx: configuration file /etc/nginx/nginx.conf test failed

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

Это также могло быть добавлено в Предварительный Коммит или pre-push Git Hook для репозитория отслеживает эти конфигурации, но до сих пор мы не чувствовали необходимости это делать.

Спасибо за чтение, надеюсь, вы цените:)

Оригинал: «https://dev.to/simdrouin/validate-your-nginx-configuration-files-easily-with-docker-4ihi»