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