Ainda não tem acesso? Estude com a gente! Matricule-se
Ainda não tem acesso? Estude com a gente! Matricule-se

Conflito na porta 8080 Tomcat e Jenkins

Estou com conflito de portas com o Jenkins e Tomcat, usando o Vagrant, como faço via script no bootstrap.sh já fazer a alteração de uma dessas portas?

16 respostas
server.port=8090

ou para uma porta aleatória

server.port=0

Mais informações na documentação https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#howto-change-the-http-port

Olá André, tudo bem?

Usei o server.port = 8090, não resolveu e usei esse comando abaixo: config.vm.network "forwarded_port", guest: 8080, host: 8090

Também não resolveu.

Posta o erro aqui pra analisarmos.

André, na verdade não aparece nenhum erro, estou usando o código de vocês como segue abaixo o deploy do curso, o vraptor-musicjungle.war, não sei onde alterar essa porta no Vagrant, alterar dentro do servidor OK, mas já quero subir a alteração da porta no próprio Vagrant, para não conflitar com o Jenkins.

==> aws_web: Running provisioner: puppet... ==> aws_web: Running Puppet with web.pp... ==> aws_web: Notice: Compiled catalog for ip-172-31-87-66.ec2.internal in environment production in 0.08 seconds ==> aws_web: Notice: /Stage[main]/Main/Exec[apt-update]/returns: executed successfully ==> aws_web: Notice: /Stage[main]/Main/Package[tomcat8]/ensure: created ==> aws_web: Notice: /Stage[main]/Main/Package[mariadb-server]/ensure: created ==> aws_web: Notice: /Stage[main]/Main/Exec[musicjungle]/returns: executed successfully ==> aws_web: Notice: /Stage[main]/Main/Exec[user_mariadb]/returns: executed successfully ==> aws_web: Notice: /Stage[main]/Main/File[/var/lib/tomcat8/webapps/vraptor-musicjungle.war]/ensure: defined content as '{md5}8c34dedbfa82c3afeff2d300739d18a6' ==> aws_web: Notice: /Stage[main]/Main/File_line[production]/ensure: created ==> aws_web: Notice: /Stage[main]/Main/Service[tomcat8]: Triggered 'refresh' from 2 events ==> aws_web: Notice: Applied catalog in 44.93 seconds

Para alterar a porta no Vagrant modifique o arquivo Vagrantfile . Para mais detalhes dá uma olhada nesse artigo https://woliveiras.com.br/posts/configurar-vagrant/

André, fiz a alteração sugerida, mas deu esse erro: G:\Meu Drive\Devops>vagrant up aws_web --provider=aws There are errors in the configuration of this machine. Please fix the following errors and try again:

vm:

  • The following settings shouldn't exist: forward_port

Lembrando que estou subindo a máquina no AWS da Amazon e não no VirtualBox.

Segue meu Vagrant file abaixo:

##Vagrant file

#vagrant plugin install vagrant-aws

#vagrant box add --force dummy https://github.com/mitchellh/vagrant-aws/raw/master/dummy.box

#vagrant up aws_web --provider=aws

#vagrant destroy -f aws_web

Vagrant.configure("2") do |config|

#config.vm.box = "dummy"

#config.vm.provider "virtualbox" config.vm.provider "aws"

config.vm.forward_port 8080, 8090

config.vm.provider :aws do |aws, override|

#dados do access key
aws.access_key_id = "AKIAIHBUII7MRIKMPGKQ"
aws.secret_access_key = "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"

 aws.region = "us-east-1"
 aws.instance_type = "t2.micro"
 aws.keypair_name = "devops"
 #aws.ami = "ami-d732f0b7" 

#a identificacao da AMI, abaixo é Ubuntu 18.04
aws.ami = "ami-0ac019f4fcb7cb7e6"

#nome do security group
aws.security_groups = "devops-vagrant"


#nome do usuario, no caso do Ubuntu é ubuntu
override.ssh.username = "ubuntu"

#caminho e nome do arquivo pem
#   override.vm.box = "dummy"
override.ssh.username = "ubuntu"
override.ssh.private_key_path = "C:\\aws\\devops.pem"

end

#novo ambiente aws_web, agora com puppet config.vm.define :aws_web do |aws_web_config|

aws_web_config.vm.box = "dummy"
aws_web_config.vm.synced_folder '.', '/vagrant', type: "rsync"

aws_web_config.vm.provider :aws do |aws|
    aws.tags = { 'Name' => 'Devops (vagrant)'}
end

## shell e puppet provisioner
aws_web_config.vm.provision "shell", path: "manifests/bootstrap.sh"
aws_web_config.vm.provision "puppet" do |puppet|
   puppet.manifest_file = "web.pp"
   puppet.synced_folder_type = 'rsync'
end

end

config.vm.define :web do |web_config|

#usando ubuntu 18.04
web_config.vm.box = "ubuntu/bionic64"
web_config.vm.network "private_network", ip: "192.168.50.10"
web_config.vm.provision "shell", path: "manifests/bootstrap.sh"
web_config.vm.provision "puppet" do |puppet|
  puppet.manifest_file = "web.pp"
end

end

end

Tenta

config.vm.forwarded_port 8080, 8090

ou

config.vm.network "forwarded_port", guest: 80, host: 8090

Acho que no artigo o cara escreveu errado .

Documentação do Vagrant: https://www.vagrantup.com/docs/networking/forwarded_ports.html

Eu usei esse comando: config.vm.network "forwarded_port", guest: 80, host: 8090

Não deu erro no Deploy, mas não funcionou.

Não é possível acessar esse site A conexão com ec2-34-238-240-156.compute-1.amazonaws.com foi recusada. Pesquise ec2 238 240 156 compute amazonaws 8090 no Google ERR_CONNECTION_REFUSED

A porta 8090 já está aberta no Security group do aws.

Que estranho cara. Parece ser algum tipo de erro de infraestrutura. Mas pelo menos agora temos um código de erro mais sucinto para pesquisarmos.

Estou sem ideias e depois de pesquisar não achei a solução, preciso estudar mais sobre esse assunto. Algum instrutor poderia nos ajudar a chegar nessa solução?

Eu até tenho uma ideia, mas não sei como fazer isso no Vagrant, após a instalação do Tomcat fazer a troca dentro do arquivo server.xml e salvar isso, ter um comando para fazer o restart dos serviços do Tomcat e Jenkins no Ubuntu.

Acredito que isso resolva, mas não sei como fazer.

Kleber, deixa eu ver se entendi bem, você tem um conflito de portas é isso?

Posta o seu Vagrantfile aqui pra gente ver e me informa quais são as portas usadas pelo tomcat e pelo jenkins.

Wanderson, tenho sim, tanto o Jenkins e Tomcat são usadas pela porta 8080, só que no Vagrant, é instalado na porta padrão.

Segue o Vagrantfile e bootstrap.sh

###VAGRANTFILE
#vagrant plugin install vagrant-aws
#vagrant box add --force dummy https://github.com/mitchellh/vagrant-aws/raw/master/dummy.box
#vagrant up aws_web --provider=aws
#vagrant destroy -f aws_web 

Vagrant.configure("2") do |config|

  #config.vm.box = "dummy"
  #config.vm.provider "virtualbox"
  config.vm.provider "aws"


 # Port Forwarding
  #config.vm.network :forwarded_port, guest: 8080, host: 8090
 config.vm.network "forwarded_port", guest: 80, host: 8090


  config.vm.provider :aws do |aws, override|

    #dados do access key
    aws.access_key_id = "AKIAIHBUII7MRIKMPGKQ"
    aws.secret_access_key = "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"

     aws.region = "us-east-1"
     aws.instance_type = "t2.micro"

     aws.keypair_name = "devops"
     #aws.ami = "ami-d732f0b7" 

    #a identificacao da AMI, abaixo é Ubuntu 18.04
    aws.ami = "ami-0ac019f4fcb7cb7e6"

    #nome do security group
    aws.security_groups = "devops-vagrant"


    #nome do usuario, no caso do Ubuntu é ubuntu
    override.ssh.username = "ubuntu"

    #caminho e nome do arquivo pem
    #   override.vm.box = "dummy"
    override.ssh.username = "ubuntu"
    override.ssh.private_key_path = "C:\\aws\\devops.pem"

  end

  #novo ambiente aws_web, agora com puppet
  config.vm.define :aws_web do |aws_web_config|

    aws_web_config.vm.box = "dummy"
    aws_web_config.vm.network "private_network", ip: "172.31.84.10"
    aws_web_config.vm.synced_folder '.', '/vagrant', type: "rsync"

    aws_web_config.vm.provider :aws do |aws|
        aws.tags = { 'Name' => 'Devops (vagrant)'}
    end

    ## shell e puppet provisioner
    aws_web_config.vm.provision "shell", path: "manifests/bootstrap.sh"
    aws_web_config.vm.provision "puppet" do |puppet|
       puppet.manifest_file = "web.pp"
       puppet.synced_folder_type = 'rsync'
    end
  end


  config.vm.define :web do |web_config|
    #usando ubuntu 18.04
    web_config.vm.box = "ubuntu/bionic64"
    web_config.vm.network "private_network", ip: "192.168.50.10"
    web_config.vm.provision "shell", path: "manifests/bootstrap.sh"
    web_config.vm.provision "puppet" do |puppet|
      puppet.manifest_file = "web.pp"
    end
  end

end

Wanderson, como não coube no outra resposta por limitação de caracter, segue abaixo o bootstrap.

######BOOTSTRAP.SH

####BOOTSTRAP.SH

#!/bin/bash


# BEGIN ########################################################################
echo -e "-- ------------------ --\n"
echo -e "-- BEGIN BOOTSTRAPING --\n"
echo -e "-- ------------------ --\n"


# VARIABLES ####################################################################
echo -e "-- Setting global variables\n"
APACHE_CONFIG=/etc/apache2/apache2.conf
VIRTUAL_HOST=localhost
DOCUMENT_ROOT=/var/www/html

# BOX ##########################################################################
echo -e "-- Updating packages list\n"
apt-get update -y -qq

#Puppet#########################################################################
apt-get -y install puppet && puppet module install puppetlabs-apache

echo "Puppet installed!"
sudo apt-get install ruby-dev

# APACHE #######################################################################
echo -e "-- Installing Apache web server\n"
apt-get install -y apache2

echo -e "-- Adding ServerName to Apache config\n"
grep -q "ServerName ${VIRTUAL_HOST}" "${APACHE_CONFIG}" || echo "ServerName ${VIRTUAL_HOST}" >> "${APACHE_CONFIG}"

echo -e "-- Allowing Apache override to all\n"
sed -i "s/AllowOverride None/AllowOverride All/g" ${APACHE_CONFIG}

echo -e "-- Updating vhost file\n"
cat > /etc/apache2/sites-enabled/000-default.conf <<EOF
<VirtualHost *:80>
    ServerName ${VIRTUAL_HOST}
    DocumentRoot ${DOCUMENT_ROOT}

    <Directory ${DOCUMENT_ROOT}>
        Options Indexes FollowSymlinks
        AllowOverride All
        Order allow,deny
        Allow from all
        Require all granted
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/${VIRTUAL_HOST}-error.log
    CustomLog ${APACHE_LOG_DIR}/${VIRTUAL_HOST}-access.log combined
</VirtualHost>
EOF

echo -e "-- Restarting Apache web server\n"
service apache2 restart

# JAVA #########################################################################
echo -e "-- Installing JAVA packages\n"
apt-get install -y openjdk-8-jre > /dev/null 2>&1
apt-get install -y openjdk-8-jdk > /dev/null 2>&1

# JENKINS #########################################################################
echo -e "-- Including Jenkins packages\n"
wget -q -O - https://pkg.jenkins.io/debian/jenkins-ci.org.key | apt-key add - > /dev/null 2>&1


sh -c "echo deb http://pkg.jenkins.io/debian-stable binary/ > /etc/apt/sources.list.d/jenkins.list"


echo -e "-- Updating packages list\n"
apt-get update -y -qq


echo -e "-- Installing Jenkins automation server\n"

#apt-get install jenkins -y -qq
sudo apt install jenkins



# END 

Então, até onde sei, você não pode fazer isso. Dois processos não podem usar a mesma porta.

Então recomendo você fazer foward de uma porta para cada serviço (jenkins, tomcat) e configurar cada um separadamente.

Sabe o que quero dizer e como fazer isso?

Oi Kleber,

Realmente não tem como rodar dois processos na mesma porta, mas isso vc já sabe :) Como solução, vc pode então mudar a porta do Tomcat ou do Jenkins. Vou te mostrar como:

1) Mudando a porta do Jenkins

Talvez alterar a porta do Jenkins seja mais fácil desde que mude a forma de instalação. Quero dizer, não instale o Jenkins pelo apt-get e sim baixe o Arquivo WAR manualmente pelo link abaixo:

http://mirrors.jenkins.io/war-stable/latest/jenkins.war

Vc pode usar wgetpara automatizar o download no seu script bootstrap.sh (talvez precisa instalar o wget antes no ubuntu).

wget http://mirrors.jenkins.io/war-stable/latest/jenkins.war

Uma vez baixado, vc pode iniciar o Jenkins já alterando a porta padrão:

java -jar jenkins.war --httpPort=9090

Isso faz que o Jenkins rode na porta 9090.

2) Mudando a porta do Tomcat

Para mudar a porta padrão do Tomcat vc precisa mexer no arquivo /var/lib/tomcat8/conf/server.xml. Nesse arquivo XML é preciso substituir o elemento port='8080' com um outra.

Essa substituição vc pode fazer atraves do seu arquivo manifest do puppet. Abaixo defini uma função que executará esse substituição (8080 por 8088) e chamei essa função:

#exec e package

#coloque depois do chamada package 
#chamada da funcao replace_string para executar a substituicao
replace_string { "alterar porta do tomcat":
    file => "/var/lib/tomcat8/conf/server.xml",
    orig => "port=\"8080\"",
        replace => "port=\"8088\"",
    require => Package["tomcat8"],
    notify => Service["tomcat8"]
}

#... outras definições

#função que executa um string replace atraves da ferramenta sed
define replace_string($file, $orig, $replace) {
    exec { "Replace '$orig' com '$replace' no '$file'":
        command => "/bin/sed -i -e 's/$orig/$replace/g' '$file'"
    }
}

Tudo bem? Testei isso com um Vagrant VM local.

abs, Nico