Как я могу создать поддомен для предоставления приложения, работающего в док-контейнере в конвейере Jenkins? - PullRequest
0 голосов
/ 06 мая 2018

все

У меня есть битнами Дженкинс, выпущенный в ec2 экземпляре AWS. На той же машине я запускаю свой конвейер, в котором я использую docker для нескольких процессов, один из которых запускает базу данных, а tomcat для приложения .war. Дело в том, что я хочу иметь доступ к нему из субдомена или другого домена (приложение, которое я запускаю в этом контейнере Docker, чтобы иметь возможность наблюдать за изменениями).

Для этого я использую traefik и вижу все контейнеры, работающие в одной сети EC2. Я также могу перенаправить его на определенный URL. Чего я не знаю, так это как создать новый поддомен для этой работы. Traefic запустил его с помощью следующей команды (чтобы вы могли видеть, как я сопоставляю порты):

sudo docker run -d -p 9090:8080 -p 8888:80 --network public --name traefik -v $PWD/traefik.toml:/etc/traefik/traefik.toml -v /var/run/docker.sock:/var/run/docker.sock traefik

На следующем изображении я показываю трафик с IP-адресом, который я хочу выставить снаружи, и путем (в данном случае это домен с расширением, но я также пробовал поддомен):

enter image description here

Файл конфигурации traefic в pastebin имеет следующий вид: ссылка на файл конфигурации в pastebin

Из того, что я видел, приложение bitnami использует tomcat, поправьте меня, если нет. У меня есть домен во freenom, так как это тест, который я делаю.

Было бы целесообразно создать поддомен, а также расширение: http: /midominio.ga/test

Большое спасибо, любая помощь приветствуется.


Редактировать 1: я знаю, что могу открыть его, сопоставив порт контейнера со свободным портом EC2, где я запускаю jenkins, но я предпочел создать его в поддомене или в идеале в расширении исходного домена динамически.

Редактировать 2:

Я попытаюсь объяснить мой случай лучше. У меня есть экземпляр EC2 под управлением bitnami jenkins. Внутри моего конвейера у меня есть следующее:

 stage ('Postgres: despliegue inicial de la base de datos') {
            def dbImage = docker.build("catalogador/catalogador-tfg-db:${BRANCH_NAME}","--label jenkins ./database")
            dbHostname = "${BRANCH_NAME}-${BUILD_NUMBER}-db"
            db = dbImage.run("-p 5432:5432 --network public --name ${dbHostname}")
            timeout(time: 3, unit: 'MINUTES') {
                sh "until [ \$(docker logs ${dbHostname} --tail 50 2>&1 | grep 'init process complete' | wc -l) -gt 0 ]; do sleep 10; done"
            }

        }

        stage ('Tomcat: despliegue de la aplicación') {
            def webImage = docker.build("asd/asd-tfg-app:${BRANCH_NAME}","--label jenkins ./appserver")
            def webJavaOpts = "-Dspring.datasource.url=jdbc:postgresql://${dbHostname}:5432/${dbName} " +
                    "-Dspring.datasource.username=${dbUser} " +
                    "-Dspring.datasource.password=${dbPassword} "
            webHostname = "${BRANCH_NAME}-${BUILD_NUMBER}-app"
            def proxyOpts = "-l 'traefik.frontend.rule=Host:${testingDomainName};PathPrefixStrip:/${webProxyPrefixPath}' " +
                    "-l 'traefik.port=9090'"
            web = webImage.run("-p 9999:8080 -p 9898:80 --network public --link ${dbHostname} --name ${webHostname} -e JAVA_OPTS='${webJavaOpts}' ${proxyOpts}")
            timeout(time: 3, unit: 'MINUTES') {
                sh "until [ \$(docker logs ${webHostname} --tail 50 2>&1 | grep 'Server startup' | wc -l) -gt 0 ]; do sleep 10; done"
            }
        } 

Что я хочу знать, так это как создать поддомен в этом экземпляре EC2 с помощью Bitnami Jenkins. Таким образом, вместо доступа к моему приложению через http: // mydomain: 9999, вы можете получить к нему доступ через URL субдомена http: //subdomain.mydomain.com или обычный домен с расширением http: // mydomain.com/extension ,

Я не знаю, как это сделать, потому что на изображении битнами Дженкинса есть tomcat, apache2 и т. Д. Я даже не знаю, какой из них он использует. Я думаю, кот, потому что именно там у него война Дженкинса. Даже создавать каждый раз, когда я запускаю свой конвейер, другой поддомен может быть отличным.

Еще раз спасибо.

1 Ответ

0 голосов
/ 24 августа 2018

У меня была очень похожая проблема: я настроил CNAME субдомена так, чтобы он указывал на ту же машину, на которой работает мой докер-контейнер, запустил обратный прокси-сервер Nginx, который прослушивает все док-контейнеры, а затем пересылает все трафик из порта 80 в нужный контейнер. Работает как брелок в производстве. таким образом, 1 машина может обслуживать несколько док-контейнеров с разными поддоменами :), дайте мне знать, если не ясно, я могу предоставить примеры и ссылки для решения проблемы.

Это используемый мной образ докера nginx, который прослушивает весь контейнер на машине и перенаправляет запросы http в конкретный контейнер на основе переменной среды, в которой был запущен контейнер, устанавливая переменную субдомена, как описано в ЧИТАЙТЕ по ссылке ниже. введите описание ссылки здесь

...