Evgenii
что я понимаю и решение принимается ) напишу сейчас своё (оно другое)
Yevhen
мужики, извиняюсь если невнимательно читал, а может вам https://github.com/jwilder/dockerize подойдет?
Evgenii
кстати да, можно запускать контейнер с SED просто чтобы поменять конфиг, а NGINX сделать depends_on 🤕
Dmitry
Я пилю через j2
Evgenii
Я пилю через j2
ну это просто продвинутый sed в контекте задачи
Evgenii
всё равно добавляется ещё одна сущность так сказать
Evgenii
ради простого действия это кажется слишком
Yevhen
раньше у меня еще такой вариант использовался конфиг нжинкса: map $http_host $rootpath { ~^www\.(?P<mypath>.+)\-labs\.cf$ $mypath; default /; } server { listen 443 ssl http2; server_name ~^www\.(.+)\-labs\.cf$; root /var/www/$rootpath/public; include include/ssl.include; include include/brotli.include; ... }
Bogdan (SirEdvin)
Bogdan (SirEdvin)
И никаких проблем
Evgenii
у меня и так есть compose, накидывать ещё генерацию
Evgenii
странная логика, я думал devops это подходы , а не инструменты
Yevhen
и как на дев ходить то?
а код в зависимости от ветки лежал например в каталогах develop / feature / release дергаешь в браузере www.develop-labs.cf или www.release-labs.cf - и все ок )
Evgenii
а код в зависимости от ветки лежал например в каталогах develop / feature / release дергаешь в браузере www.develop-labs.cf или www.release-labs.cf - и все ок )
а, я понял, тогда получается в продакшене работает http://www.develop-labs.cf, клиенты могут открыть по этому домену продакшен ?
Yevhen
и как на дев ходить то?
смысл в том чтоб через map связать имя сервера (server_name) и корень сайта (root)
Evgenii
ага
не хотелось так делать тоже
Evgenii
я так сделал .env NGINX_HOST=google.com (или dev.google.com) compose services: nginx: image: nginx:latest volumes: - ./etc/nginx/server_names/${NGINX_HOST}.server_name:/etc/nginx/conf.d/server_name nginx server { include conf.d/server_name;
Dmitry
всё равно добавляется ещё одна сущность так сказать
Ну да, но она гораздо меньше чем Ansible, но намного удобнее sed
Evgenii
собственно в репе лежит /etc/nginx/server_names/ /etc/nginx/server_names/dev.google.com.server_name /etc/nginx/server_names/google.com.server_name и там server_name google.com; и server_name dev.google.com; мне кажется это самое меньшее из зол
Yevhen
я так сделал .env NGINX_HOST=google.com (или dev.google.com) compose services: nginx: image: nginx:latest volumes: - ./etc/nginx/server_names/${NGINX_HOST}.server_name:/etc/nginx/conf.d/server_name nginx server { include conf.d/server_name;
но так же нужно держать разные конфиги для всех возможных вариантов значения NGINX_HOST а если их будет 100500 штук?
Yevhen
а у меня (при любом из вариантов - или старый с использованием map, или новый с использованием dockerize) конфиг всегда один....
Yevhen
просто сейчас появилась надобность поднимать домен на каждую фичу в репе, а их может быть по десятку на день... Даже не успею все захардкодить )
Yevhen
ну ладно, насчет 100500 я погорячился, но штук 30-40 надо ((((
Dmitry
в запросе же висит host
Yevhen
Как насчет приема на default и магии lua?
насчет lua вы абсолютно правы - это для меня магия...
Tadeusz
та lua вменяемый
Evgenii
у меня очень статичная задача и не хотелось использовать "динамику", возможно реально существуют оправданные флоу, где нужны динамические домены и всё такое и там имеет место на жизнь генератор конфига
Yevhen
в запросе же висит host
но за идею спасибо!
Evgenii
мне кажется можно отпралять ветку хоть гет параметром и в nginx в зависимости от него в нужную папку отправлять
Dmitry
https://gist.github.com/cbmd/4247040
Dmitry
вот что первое в гугле... там стандартными средствами конфига доступна переменная $host
Dmitry
а, ок ок. пропустил требование.
Evgenii
а, ок ок. пропустил требование.
тогда было бы достаточно server_name _
Evgenii
https://gist.github.com/cbmd/4247040
наркомания конечно, но очень остроумно, интересно было почитать
Dmitry
тогда было бы достаточно server_name _
Ну да, верно. у вас же среда одна и с папками нет проблем.
Evgenii
Ну да, верно. у вас же среда одна и с папками нет проблем.
да, но хотело более красиво видеть это в эксплуатации всё таки )
Dmitry
интересно протестировать домены типа ../../../ )))
Dmitry
А кто тут реально генерит конифиги докера через ansible ?
Dmitry
я запарился по поводу ansible-pull и прав, не хотелось никаких ключей класть в контенер, но было бы интересно посмотреть
Evgenii
я ещё понимаю через консул или ansible зачем генерировать .env, может это даже правильно, я просто до этого ещё не дорос, но не более, чем .env или секреты
Dmitry
Ну так вот, что не так с sed?
Evgenii
Ну так вот, что не так с sed?
просто моя задача решается намного проще, вот и всё, хотелось найти самое простое решение, не накладывающее ограничений и не привлекающего инструментария, который не использовался ранее
Bogdan (SirEdvin)
странная логика, я думал devops это подходы , а не инструменты
И этот подход говорит, что конфигурацию серверов нужно делать при помощи чего-то типо Ansible. Можно salt, pappet, chef и так далее.
Dmitry
Еще, кстати, можно прокинуть переменную окружения через `set_by_lua $server_name 'return os.getenv("NGINX_SERVERNAME")'; }` но это опять, вероятно, заставит вас пересобрать nginx
Bogdan (SirEdvin)
это ты сам придумал я так понимаю
А вы предлагаете все на серверах делать ручками, я правильно понимаю?
Evgenii
И этот подход говорит, что конфигурацию серверов нужно делать при помощи чего-то типо Ansible. Можно salt, pappet, chef и так далее.
я писал выше, что секреты и .env они , вероятно, должны делать, но не конфиги nginx (в контекстк той задачи, что я описал, для этого есть docker-compose и он справляется лучше)
Evgenii
А вы предлагаете все на серверах делать ручками, я правильно понимаю?
что именно я сделал руками? всё что выше было описано из примеров кода лежит в гите
Bogdan (SirEdvin)
Так вы же пришли сюда именно потому, что он не справляется.
Evgenii
Так вы же пришли сюда именно потому, что он не справляется.
нет, я пришёл, потому что в Nginx конфиг нельзя прокинуть переменную окружения
Bogdan (SirEdvin)
Evgenii
Ну, установку докера, Гита, добавление репы и git pull
с чего ты решил что я делал это руками? git pull если что teamcity делает
Evgenii
опять таки, делать git pull из ansible, сириусли?
Bogdan (SirEdvin)
Нет, а вот docker-compose файл им раздавать уже вроде нормально
Evgenii
docker-compose лежит в гите рядом с приложением, приложение собирает билд сервер и получается артефакт, Ansible может доставить куда надо этот артефакт и запустить docker-compose up -d
Evgenii
можно было бы на этапе билд сервера подставлять server_name, но хочется иметь возможность и руками разворачивать окружение, минуя его
Evgenii
а руками его может даже не я буду разворачивать, а разработчик, потому что и собирать свой nodejs код он хочет на этапе разработке руками, ему так удобнее
Evgenii
это всё хорошие инструменты, но упарываться и делать всё только ими или вставлять их там, где они не нужны это devops ради devops
Dmitry
Я, если честно, не понял, какое решение Вас устраивает)
Evgenii
я так сделал .env NGINX_HOST=google.com (или dev.google.com) compose services: nginx: image: nginx:latest volumes: - ./etc/nginx/server_names/${NGINX_HOST}.server_name:/etc/nginx/conf.d/server_name nginx server { include conf.d/server_name;
Evgenii
собственно в репе лежит /etc/nginx/server_names/ /etc/nginx/server_names/dev.google.com.server_name /etc/nginx/server_names/google.com.server_name и там server_name google.com; и server_name dev.google.com; мне кажется это самое меньшее из зол
Dmitry
.env лежит в репозитории?
Dmitry
как он проходит от ветки к ветке?
Tadeusz
ты до сих пор ебешься?)
Dmitry
я разработчик, хочу сделать ветку stg2. Что я должен знать для того чтобы все задеплоилось автоматом?)