Como faço para configurar rapidamente o servidor Tomcat com o aplicativo da Web Java no Linux (Debian)?

1

Recentemente, eu estava configurando um aplicativo da Web em execução no Tomcat no Windows. O que eu tive que fazer foi o seguinte:

  • Descompacte o Tomcat em qualquer pasta que eu queira
  • Copiar pasta com meu aplicativo da web em ./webapps (mostrado em relação ao tomcat root)
  • Configurar o caminho do JRE em algum arquivo de configuração para o Tomcat
  • Executar startup.bat - esta janela do console produzida com saída de depuração útil

O caso do Linux parece ser bem diferente. Após a instalação realizada normalmente por meio de apt , o tomcat já estava em execução. Também ocupa um grande número de pastas diferentes no sistema de arquivos . O servidor foi iniciado automaticamente, java ou não (na verdade, eu ainda não tenho Java, tanto quanto eu sei), então não há saída do console. Deve haver pasta com logs em algum lugar embora.

Então, minha pergunta é como fazer com o Tomcat o que fiz no Windows. Preciso reproduzir essa abordagem ou até mesmo automatizá-la. Seria ótimo se eu pudesse fazer o instalador em lote que configuraria o Tomcat e meu aplicativo da web - mas essa não é a questão.

    
por Tomáš Zato 01.10.2015 / 09:35

1 resposta

2

Automatizando a implantação do Tomcat

A instalação do Tomcat pronto para uso no linux, ou usando apt ou o gerenciador de pacotes de sua escolha é fácil; mas como você observou, é difícil saber onde tudo está e o que está configurado.

Descobri que a maneira MAIS configurável de automatizar a instalação do Tomcat no Linux é usando o Chef. O ChefDK pode ser instalado e, em seguida, usando o Tomcat Cookbook para o Chef você pode configurar e implantar o chefe de novo e de novo!

A vantagem de instalar o Tomcat com o Chef é uma instalação consistente do Tomcat de maneira padrão, compatível e em linha com a documentação do Tomcat para instalação no Linux.

Pré-requisito Java

O livro de receitas do Tomcat não instala o Java, então geralmente eu combino o Java Cookbook para automatizar a instalação do seu JRE com o Tomcat.

Papel do Chef para instalar o Tomcat

Abaixo está um exemplo Papel do Chef que usei para implantar o JRE e depois o Tomcat em uma caixa linux.

  • As duas principais etapas que instalam o JRE, em seguida, o Tomcat estão na seção run_list do arquivo JSON
  • A seção override_attributes da função Chef define os atributos das receitas Java e Tomcat.
{
  "name": "java-appserver-small",
  "default_attributes": {},
  "override_attributes": {
    "java": {
      "jdk_version": "7"
    },
    "oracle": {
      "accept_oracle_download_terms": true
    },
    "tomcat": {
      "java_options": "${JAVA_OPTS} -Djava.awt.headless=true -Dfile.encoding=UTF-8 -server -Xms512m -Xmx3g -XX:NewSize=256m -XX:MaxNewSize=256m -XX:PermSize=256m -XX:MaxPermSize=512m -XX:+DisableExplicitGC -XX:+CMSClassUnloadingEnabled"
    }
  },
  "json_class": "Chef::Role",
  "description": "Role for Java Apps Servers using OpenJDK7 - 15GB Memory",
  "chef_type": "role",
  "run_list": [
    "recipe[java]",
    "recipe[tomcat]"
  ]
}

É um pouco de aprendizado, mas uma vez que você saiba como automatizar qualquer coisa no linux com o chef - é um ótimo começo para uma rápida reimplantação e automação de qualquer coisa que você possa imaginar.

Automatizando a implantação de um aplicativo (WAR)

Você pode adicionar uma terceira receita à sua função Chef que implantará um aplicativo no Tomcat. Geralmente o Tomcat pode ser configurado  para descompactar e implantar automaticamente um arquivo WAR .

Modifique o run_list na função para incluir outra receita:

"run_list": [
  "recipe[java]",
  "recipe[tomcat]",
  "recipe[app-deploy]"
]

Implementar o WAR a partir do arquivo local na instância do linux

O chef de receita usará app-deploy é um conjunto de instruções para copiar um arquivo WAR predefinido para o Tomcat diretório webapps . No exemplo de receita abaixo, o caminho do arquivo WAR é definido em um arquivo de atributos separado, mas você poderia codificar o local para copiar também.

#
# Cookbook Name:: myChefCookbook
# Recipe:: app-deploy
#
# This recipe only installs the application.
# Base app server is setup via the java app server role.
#

# Copy WAR to webapps for auto-deployment
execute "cp #{node['myappfile']} /var/lib/tomcat/webapps/" do
  action :run
  not_if { File.exist?("/var/lib/tomcat/webapps/#{server_file(node['myappfile'])}") }
end

A receita copia o arquivo WAR, o Tomcat o implementa.

Implantar o WAR do bucket do AWS S3 para a instância do AWS Linux

O exemplo da receita final abaixo copia (usando as ferramentas da AWS) o arquivo WAR de um depósito S3 da Amazon para o instância do linux executando o Tomcat, implementado pelo chef, no provedor de nuvem do Amazon Web Services.

# Copy  WAR to webapps for auto-deployment - Requires that the instance have role with access to bucket
execute "aws s3 cp #{node['urls']['myappurl']} /var/lib/tomcat/webapps/" do
  action :run
  not_if { File.exist?("/var/lib/tomcat/webapps/#{server_file(node['urls']['myappurl'])}") }
end
    
por 01.10.2015 / 10:21