Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.
Recetas de instalación
importante
El AWS OpsWorks Stacks servicio llegó al final de su vida útil el 26 de mayo de 2024 y se ha desactivado tanto para los clientes nuevos como para los existentes. Recomendamos encarecidamente a los clientes que migren sus cargas de trabajo a otras soluciones lo antes posible. Si tienes preguntas sobre la migración, ponte en contacto con el AWS Support equipo en AWS Re:post
Las recetas de instalación se asignan al evento Setup del ciclo de vida de la capa y se ejecutan después de que se arranca una instancia. Realizan tareas como instalar paquetes, crear los archivos de configuración e iniciar servicios. Cuando terminen de ejecutarse las recetas de configuración, AWS OpsWorks Stacks ejecuta las recetas de implementación para implementar cualquier aplicación en la nueva instancia.
tomcat::setup
La receta tomcat::setup
se asignará a un evento Setup del ciclo de vida de la capa.
include_recipe 'tomcat::install' include_recipe 'tomcat::service' service 'tomcat' do action :enable end # for EBS-backed instances we rely on autofs bash '(re-)start autofs earlier' do user 'root' code <<-EOC service autofs restart EOC notifies :restart, resources(:service => 'tomcat') end include_recipe 'tomcat::container_config' include_recipe 'apache2' include_recipe 'tomcat::apache_tomcat_bind'
La receta tomcat::setup
es, en gran medida, una metarreceta. Incluye un conjunto de recetas dependientes que controlan la mayoría de los detalles de instalación y configuración de Tomcat y los paquetes relacionados. La primera parte de tomcat::setup
ejecuta las siguientes recetas, que se tratarán más adelante:
-
La receta tomcat::install instala el paquete del servidor Tomcat.
-
La receta tomcat::service configura el servicio de Tomcat.
La parte central de tomcat::setup
habilita e inicia el servicio de Tomcat:
-
El recurso de servicio
de Chef habilita el servicio de Tomcat en el arranque. -
El recurso bash
de Chef ejecuta un script de Bash para iniciar el daemon autofs, que es necesario para las instancias respaldadas por Amazon. EBS El recurso, a continuación, notifica al recurso service
que reinicie el servicio de Tomcat.Para obtener más información, consulte: autofs
(para Amazon Linux) o Autofs (para Ubuntu).
La última parte de tomcat::setup
crea archivos de configuración, e instala y configura el servidor front-end de Apache:
-
La receta tomcat::container_config crea los archivos de configuración.
-
La
apache2
receta (que es la abreviatura deapache2::default
) es una receta integrada en AWS OpsWorks Stacks que instala y configura un servidor Apache. -
La receta tomcat:: apache_tomcat_bind configura el servidor Apache para que actúe como front-end para el servidor Tomcat.
nota
A menudo ahorrará tiempo y esfuerzo si utiliza recetas integradas para realizar algunas de las tareas necesarias. Esta receta utiliza la receta apache2::default
integrada para instalar Apache en lugar de implementarlo desde cero. Para ver otro ejemplo del uso de las recetas integradas, consulte Recetas de implementación.
En las siguientes secciones se describen más en detalle las recetas de configuración de los libros de recetas de Tomcat. Para obtener más información acerca de las recetas de apache2
, consulte opsworks-cookbooks/apache2
tomcat::install
La tomcat::install
receta instala el servidor Tomcat, el Open JDK y una biblioteca de conectores Java que gestiona la conexión al servidor My. SQL
tomcat_pkgs = value_for_platform( ['debian', 'ubuntu'] => { 'default' => ["tomcat#{node['tomcat']['base_version']}", 'libtcnative-1', 'libmysql-java'] }, ['centos', 'redhat', 'fedora', 'amazon'] => { 'default' => ["tomcat#{node['tomcat']['base_version']}", 'tomcat-native', 'mysql-connector-java'] }, 'default' => ["tomcat#{node['tomcat']['base_version']}"] ) tomcat_pkgs.each do |pkg| package pkg do action :install end end link ::File.join(node['tomcat']['lib_dir'], node['tomcat']['mysql_connector_jar']) do to ::File.join(node['tomcat']['java_dir'], node['tomcat']['mysql_connector_jar']) action :create end # remove the ROOT webapp, if it got installed by default include_recipe 'tomcat::remove_root_webapp'
La receta lleva a cabo las siguientes tareas:
-
Crea una lista de paquetes que se van a instalar según el sistema operativo de la instancia.
-
Instala cada paquete de la lista.
El paquete de recursos
de Chef utiliza el proveedor adecuado ( yum
para Amazon Linux yapt-get
para Ubuntu) para controlar la instalación. Los proveedores de paquetes instalan Open JDK como una dependencia de Tomcat, pero la biblioteca My SQL Connector debe instalarse de forma explícita. -
Utiliza un recurso de enlace
de Chef para crear un enlace simbólico en el directorio lib del servidor Tomcat a la biblioteca My SQL Connector del. JDK Con los valores de atributo predeterminados, el directorio lib de Tomcat está
/usr/share/tomcat6/lib
y la biblioteca My SQL connector (mysql-connector-java.jar
) está dentro./usr/share/java/
La tomcat::remove_root_webapp
receta elimina la aplicación ROOT web (de forma /var/lib/tomcat6/webapps/ROOT
predeterminada) para evitar algunos problemas de seguridad.
ruby_block 'remove the ROOT webapp' do block do ::FileUtils.rm_rf(::File.join(node['tomcat']['webapps_base_dir'], 'ROOT'), :secure => true) end only_if { ::File.exists?(::File.join(node['tomcat']['webapps_base_dir'], 'ROOT')) && !::File.symlink?(::File.join(node['tomcat']['webapps_base_dir'], 'ROOT')) } end
La declaración only_if
garantiza que la receta elimine el archivo únicamente si existe.
nota
La versión de Tomcat se especifica mediante el atributo ['tomcat']['base_version']
, que está establecido en 6 en el archivo de atributos. Para instalar Tomcat 7, puede usar JSON atributos personalizados para anular el atributo. Solo tiene que editar la configuración de la pila e introducir lo siguiente JSON en el JSON cuadro Custom Chef o añadirlo a cualquier configuración personalizada existente: JSON
{ 'tomcat' : { 'base_version' : 7 } }
El JSON atributo personalizado anula el atributo predeterminado y establece la versión de Tomcat en 7. Para obtener más información acerca de la anulación de atributos, consulte Anulación de atributos.
tomcat::service
La receta tomcat::service
crea la definición de servicio de Tomcat.
service 'tomcat' do service_name "tomcat#{node['tomcat']['base_version']}" case node[:platform] when 'centos', 'redhat', 'fedora', 'amazon' supports :restart => true, :reload => true, :status => true when 'debian', 'ubuntu' supports :restart => true, :reload => false, :status => true end action :nothing end
La receta utiliza los recursos de serviciosupports
para definir el modo en que Chef controla el reinicio, la recarga y los comandos de estado del servicio en los diferentes sistemas operativos.
-
true
indica que Chef puede utilizar el script init u otro proveedor de servicios para ejecutar el comando. -
false
indica que Chef debe intentar ejecutar el comando por otros medios.
Observe que action
está establecido en :nothing
. Para cada evento del ciclo de vida, AWS OpsWorks Stacks inicia una ejecución de Chef para ejecutarnotifies
en los recursos template
que se utilizan para crear los archivos de configuración. Las notificaciones resultan cómodas para reiniciar un servicio, ya que solo lo hacen si la configuración ha cambiado. Además, si una ejecución de Chef tiene varias notificaciones de reinicio de un servicio, Chef lo reinicia como máximo una vez. Esta práctica evita problemas que podrían producirse si se intenta reiniciar un servicio que no está totalmente operativo, una fuente común de errores en Tomcat.
El servicio de Tomcat debe definirse para cualquier ejecución de Chef que utilice notificaciones de reinicio. Por lo tanto, tomcat::service
viene incluido en varias recetas para garantizar que se defina el servicio con cada ejecución de Chef. Si una ejecución de Chef incluye varias instancias de tomcat::service
, no se produce penalización alguna, ya que Chef garantiza que la receta se ejecute solo una vez por ejecución, independientemente del número de veces que esté incluida.
tomcat::container_config
La receta tomcat::container_config
crea los archivos de configuración a partir de los archivos de plantilla del libro de recetas.
include_recipe 'tomcat::service' template 'tomcat environment configuration' do path ::File.join(node['tomcat']['system_env_dir'], "tomcat#{node['tomcat']['base_version']}") source 'tomcat_env_config.erb' owner 'root' group 'root' mode 0644 backup false notifies :restart, resources(:service => 'tomcat') end template 'tomcat server configuration' do path ::File.join(node['tomcat']['catalina_base_dir'], 'server.xml') source 'server.xml.erb' owner 'root' group 'root' mode 0644 backup false notifies :restart, resources(:service => 'tomcat') end
La receta llama primero a tomcat::service
, que define el servicio si es necesario. La mayor parte de la receta consiste en dos recursos de plantilla
Archivo de configuración del entorno de Tomcat
El primer recurso template
utiliza el archivo de plantilla tomcat_env_config.erb
para crear un archivo de configuración del entorno de Tomcat que se utiliza para definir las variables de entorno, por ejemplo JAVA_HOME
. El nombre de archivo predeterminado es el argumento del recurso template
. tomcat::container_config
utiliza un atributo path
para anular el valor predeterminado y el nombre del archivo de configuración /etc/sysconfig/tomcat6
(Amazon Linux) o /etc/default/tomcat6
(Ubuntu). El recurso template
también especifica el propietario, el grupo y la configuración de modo del archivo, e indica a Chef que no cree archivos de backup.
Si examina el código fuente, verá que existen tres versiones de tomcat_env_config.erb
, cada una en un subdirectorio diferente del directorio templates
. Los directorios ubuntu
y amazon
contienen las plantillas para sus respectivos sistemas operativos. La carpeta default
contiene una plantilla ficticia con una única línea de comentario, que se utiliza solo si se intenta ejecutar esta receta en una instancia con un sistema operativo no admitido. La receta tomcat::container_config
no precisa especificar qué tomcat_env_config.erb
utilizar. Chef elige automáticamente el directorio adecuado para el sistema operativo de la instancia basándose en las reglas descritas en Especificidad de archivos
Los archivos tomcat_env_config.erb
de este ejemplo se componen, en gran parte, de comentarios. Para establecer otras variables de entorno, tan solo quite el comentario de las líneas correspondientes y proporcione sus valores de preferencia.
nota
Cualquier opción de configuración que pueda cambiar debe definirse como un atributo, en lugar de estar codificada en la plantilla. De esta forma, no es necesario volver a escribir la plantilla para cambiar una opción de configuración, basta con anular el atributo.
La plantilla de Amazon Linux establece una variable de entorno únicamente, tal y como se muestra en el siguiente fragmento.
... # Use JAVA_OPTS to set java.library.path for libtcnative.so #JAVA_OPTS="-Djava.library.path=/usr/lib" JAVA_OPTS="${JAVA_OPTS} <%= node['tomcat']['java_opts'] %>" # What user should run tomcat #TOMCAT_USER="tomcat" ...
JAVA_ se OPTS puede usar para especificar opciones de Java, como la ruta de la biblioteca. Si se usan los valores de atributo predeterminados, la plantilla no establece opciones de Java para Amazon Linux. Puede configurar sus propias opciones de Java anulando el ['tomcat']['java_opts']
atributo, por ejemplo, utilizando JSON atributos personalizados. Para ver un ejemplo, consulta Crear una pila.
La plantilla de Ubuntu establece varias variables de entorno, como se muestra en el siguiente fragmento de la plantilla.
# Run Tomcat as this user ID. Not setting this or leaving it blank will use the # default of tomcat<%= node['tomcat']['base_version'] %>. TOMCAT<%= node['tomcat']['base_version'] %>_USER=tomcat<%= node['tomcat']['base_version'] %> ... # Run Tomcat as this group ID. Not setting this or leaving it blank will use # the default of tomcat<%= node['tomcat']['base_version'] %>. TOMCAT<%= node['tomcat']['base_version'] %>_GROUP=tomcat<%= node['tomcat']['base_version'] %> ... JAVA_OPTS="<%= node['tomcat']['java_opts'] %>" <% if node['tomcat']['base_version'].to_i < 7 -%> # Unset LC_ALL to prevent user environment executing the init script from # influencing servlet behavior. See Debian bug #645221 unset LC_ALL <% end -%>
Si se usan los valores de atributo predeterminados, la plantilla establece las variables de entorno de Ubuntu de la siguiente manera:
-
TOMCAT6_USER
yTOMCAT6_GROUP
, que representan el usuario y grupo de Tomcat, están establecidos entomcat6
.Si establece ['tomcat'] ['base_version'] en
tomcat7
, los nombres de las variables se resuelven comoTOMCAT7_USER
yTOMCAT7_GROUP
, y ambos se establecen entomcat7
. -
JAVA_OPTS
se establece en-Djava.awt.headless=true -Xmx128m -XX:+UseConcMarkSweepGC
:-
Al establecer
-Djava.awt.headless
entrue
se informa al motor de gráficos que la instancia no tiene encabezado y no tiene una consola, para abordar así el comportamiento defectuoso de determinadas aplicaciones gráficas. -
-Xmx128m
se asegura de que JVM tiene los recursos de memoria adecuados (128 MB para este ejemplo). -
-XX:+UseConcMarkSweepGC
especifica la recopilación simultánea de elementos no utilizados, lo que ayuda a limitar las pausas causadas por la recopilación.Para obtener más información, consulte: Mejoras del recolector Concurrent Mark Sweep
.
-
-
Si la versión de Tomcat es inferior a la 7, la plantilla no establece
LC_ALL
para abordar un error de Ubuntu.
nota
Con los atributos predeterminados, algunas de estas variables de entorno se establecen sencillamente en sus valores predeterminados. Sin embargo, al establecer explícitamente las variables de entorno en los atributos, puede definir JSON atributos personalizados para anular los atributos predeterminados y proporcionar valores personalizados. Para obtener más información acerca de la anulación de atributos, consulte Anulación de atributos.
Para ver los archivos de plantilla completos, consulte el código fuente
Archivo de configuración server.xml
El segundo template
recurso se utiliza server.xml.erb
para crear el archivo system.xml
de configuraciónserver.xml.erb
no contiene ninguna configuración específica del sistema operativo, por lo que se encuentra en el subdirectorio del directorio. template
default
La plantilla utiliza la configuración estándar, pero puede crear un archivo system.xml
para Tomcat 6 o Tomcat 7. Por ejemplo, el siguiente código de la sección del servidor de la plantilla configura los agentes de escucha adecuados para la versión especificada.
<% if node['tomcat']['base_version'].to_i > 6 -%> <!-- Security listener. Documentation at /docs/config/listeners.html <Listener className="org.apache.catalina.security.SecurityListener" /> --> <% end -%> <!--APR library loader. Documentation at /docs/apr.html --> <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" /> <!--Initialize Jasper prior to webapps are loaded. Documentation at /docs/jasper-howto.html --> <Listener className="org.apache.catalina.core.JasperListener" /> <!-- Prevent memory leaks due to use of particular java/javax APIs--> <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" /> <% if node['tomcat']['base_version'].to_i < 7 -%> <!-- JMX Support for the Tomcat server. Documentation at /docs/non-existent.html --> <Listener className="org.apache.catalina.mbeans.ServerLifecycleListener" /> <% end -%> <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" /> <% if node['tomcat']['base_version'].to_i > 6 -%> <Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" /> <% end -%>
La plantilla utiliza atributos en lugar de ajustes codificados, por lo que puede cambiarlos fácilmente mediante la definición de atributos personalizados. JSON Por ejemplo:
<Connector port="<%= node['tomcat']['port'] %>" protocol="HTTP/1.1" connectionTimeout="20000" URIEncoding="<%= node['tomcat']['uri_encoding'] %>" redirectPort="<%= node['tomcat']['secure_port'] %>" />
Para obtener más información, consulte el código fuente
tomcat:: apache_tomcat_bind
La receta tomcat::apache_tomcat_bind
habilita el servidor Apache para que actúe como front-end de Tomcat, recibiendo las solicitudes entrantes y enviándolas a Tomcat para devolver después las respuestas al cliente. En este ejemplo se utiliza mod_proxy
execute 'enable mod_proxy for apache-tomcat binding' do command '/usr/sbin/a2enmod proxy' not_if do ::File.symlink?(::File.join(node['apache']['dir'], 'mods-enabled', 'proxy.load')) || node['tomcat']['apache_tomcat_bind_mod'] !~ /\Aproxy/ end end execute 'enable module for apache-tomcat binding' do command "/usr/sbin/a2enmod #{node['tomcat']['apache_tomcat_bind_mod']}" not_if {::File.symlink?(::File.join(node['apache']['dir'], 'mods-enabled', "#{node['tomcat']['apache_tomcat_bind_mod']}.load"))} end include_recipe 'apache2::service' template 'tomcat thru apache binding' do path ::File.join(node['apache']['dir'], 'conf.d', node['tomcat']['apache_tomcat_bind_config']) source 'apache_tomcat_bind.conf.erb' owner 'root' group 'root' mode 0644 backup false notifies :restart, resources(:service => 'apache2') end
Para habilitar mod_proxy
, debe habilitar el módulo proxy
y un módulo basado en protocolo. Dispone de dos opciones para el módulo de protocolo:
-
HTTP:
proxy_http
-
JServProtocolo Apache
(AJP): proxy_ajp
AJPes un protocolo interno de Tomcat.
Ambos recursos executea2enmod
, que habilita el módulo especificado para crear los symlinks requeridos:
-
El primer recurso
execute
habilita el móduloproxy
. -
El segundo recurso
execute
habilita el módulo de protocolo, que está establecido enproxy_http
de forma predeterminada.Si lo prefiereAJP, puede definir el atributo personalizado JSON para anular el
apache_tomcat_bind_mod
atributo y configurarlo en.proxy_ajp
La apache2::service
receta es una receta integrada AWS OpsWorks en Stacks que define el servicio de Apache. Para obtener más información, consulta la receta
El recurso template
utiliza apache_tomcat_bind.conf.erb
para crear un archivo de configuración denominado tomcat_bind.conf
de forma predeterminada. Coloca el archivo en el directorio ['apache']['dir']/.conf.d
. El atributo ['apache']['dir']
se define en el archivo de atributos apache2
integrado y se establece de forma predeterminada en /etc/httpd
(Amazon Linux) o /etc/apache2
(Ubuntu). Si el recurso template
crea o cambia el archivo de configuración, el comando notifies
programa un reinicio del servicio de Apache.
<% if node['tomcat']['apache_tomcat_bind_mod'] == 'proxy_ajp' -%> ProxyPass <%= node['tomcat']['apache_tomcat_bind_path'] %> ajp://localhost:<%= node['tomcat']['ajp_port'] %>/ ProxyPassReverse <%= node['tomcat']['apache_tomcat_bind_path'] %> ajp://localhost:<%= node['tomcat']['ajp_port'] %>/ <% else %> ProxyPass <%= node['tomcat']['apache_tomcat_bind_path'] %> http://localhost:<%= node['tomcat']['port'] %>/ ProxyPassReverse <%= node['tomcat']['apache_tomcat_bind_path'] %> http://localhost:<%= node['tomcat']['port'] %>/ <% end -%>
La plantilla usa las ProxyPassReversehttp://localhost:8080