Это мой первый пост, будьте снисходительны и дайте мне знать, если что -нибудь улучшится.
Предположим, у вас есть ваши веб -серверы, которые выпускают любую версию 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.comnginx -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»