Docker con Apache httpd y Tomcat
Docker con Apache httpd y Tomcat
Apache como 프런트엔드 de Tomcat
UsarApache server como frontendagrega mejoras como son:
Proyecto 프로젝트
Primero tenemos que tener instalado Docker,puedes Encentar las instrucciones de instalación desde elsitio oficial.También necesitamos instalarDocker Compose .
재배치
Puedes Encentar el repositorio del proyecto Aquií:https://github.com/rigobertocanseco/docker-apache-httpd-tomcat
감독
El proyecto se encuentra organizado de la siguiente manera 프로젝트
├── docker-compose.yml
├── .env
├── .dockerignore
├── .gitignore
├── httpd
│ ├── certs
│ │ ├── localhost.crt
│ │ ├── localhost.key
│ │ ├── rootCA.crt
│ │ └── rootCA.key
│ ├── 000-default.conf
│ ├── apache2.conf
│ ├── Dockerfile
│ ├── jk.conf
│ └── worker.properties
├── tomcat1
│ ├── Dockerfile
│ ├── sample.war
│ └── server.xml
└── tomcat2
├── Dockerfile
├── sample.war
└── server.xml
docker 작성.yml:Aqítenemos la configuración para nuestro contenedor Docker
env:Nuestras variables de entorno para nuestro contendor
.dockerignore:Archivos a ignorar
.무시: Archivos a ignorar
httpd:Directorio con la configuración para el contenedor con Apache httpd
인증서: Directorio con los certificados SSL
tomcat1:Directorio con la configuración para el contenedor con Apache Tomcat
tomcat2:Directorio con la configuración para el contenedor con Apache Tomcat
아파치 서버 구성
Dockerfile 파일
gist:RigobertoCanseco/0b17cda5b1c595bae893d25e8cd6d804#Dockerfile
와모스 a revisar las partes principales del archivo:gist:RigobertoCanseco/0b17cda5b1c595bae893d25e8cd6d804#Dockerfile?lines=1
FROM ubuntu:latest
ENV DEBIAN_FRONTEND="noninteractive"
ENV SITE_NAME rigobertocanseco.dev
ENV URL_SECURE https://${SITE_NAME}:8443/
# Certificates of demo
ENV APACHE_SSL_CERT_CA rootCA.crt
ENV APACHE_SSL_CERT localhost.crt
ENV APACHE_SSL_PRIVATE localhost.key
# Certificates of prod
#ENV APACHE_SSL_CERT_CA ca_bundle.crt
#ENV APACHE_SSL_CERT certificate.crt
#ENV APACHE_SSL_PRIVATE private.key
apt
es responsible de la administración de paquetes y,por lo tanto,de la instalación.RUN apt-get update && apt-get install -y --no-install-recommends apache2 libapache2-mod-jk
ADD apache2.conf /etc/apache2/apache2.conf
ADD 000-default.conf /etc/apache2/sites-enabled/000-default.conf
ADD worker.properties /etc/libapache2-mod-jk/workers.properties
ADD jk.conf /etc/apache2/mods-available/jk.conf
COPY certs/${APACHE_SSL_CERT_CA} /etc/ssl/certs/${APACHE_SSL_CERT_CA}
COPY certs/${APACHE_SSL_CERT} /etc/ssl/certs/${APACHE_SSL_CERT}
COPY certs/${APACHE_SSL_PRIVATE} /etc/ssl/private/${APACHE_SSL_PRIVATE}
# Modules to apache
RUN a2enmod proxy \
&& a2enmod ssl \
&& a2enmod proxy_ajp \
&& a2enmod rewrite
# Mod Proxy(mod_proxy)
# && a2enmod proxy_http \
# && a2enmod proxy_fcgi \
# && a2enmod proxy_balancer \
# && a2enmod lbmethod_byrequests \
# && a2enmod headers
VOLUME ["/var/log/apache2"]
EXPOSE 80 443
CMD ["apachectl", "-k", "start", "-DFOREGROUND"]
000 기본값입니다.형태
Vamos a ver las partes principales del archivo,aquíse Encuntera la documentación de las directivas de configuración de apache.
<VirtualHost *:80>
...
# Redirect to port secure
#Redirect / ${URL_SECURE}
RewriteEngine on
ReWriteCond %{SERVER_PORT} !^443$
RewriteRule ^/(.*) https://%{HTTP_HOST}/$1 [NC,R,L]
...
</VirtualHost>
<IfModule mod_ssl.c>
<VirtualHost *:443>
...
SSLCertificateFile /etc/ssl/certs/${APACHE_SSL_CERT}
SSLCertificateKeyFile /etc/ssl/private/${APACHE_SSL_PRIVATE}
SSLCACertificatePath /etc/ssl/certs/
SSLEngine on
SSLProxyEngine On
SSLProxyVerify none
SSLProxyCheckPeerCN Off
SSLProxyCheckPeerName Off
SSLProxyCheckPeerExpire Off
ProxyPreserveHost Off
ProxyRequests Off
...
</VirtualHost>
</IfModule>
<IfModule mod_ssl.c>
<VirtualHost *:443>
...
jkMount /sample loadbalancer
JkMount /sample/* loadbalancer
JkMount /status status
JkMount /status/* status
#<Location /server-status>
# SetHandler server-status
# Order Deny,Allow
# Allow from all
#</Location>
#Location /balancer-manager>
# SetHandler balancer-manager
# Order Deny,Allow
# Allow from all
#</Location>
#Header add Set-Cookie "ROUTEID=.%{BALANCER_WORKER_ROUTE}e; path=/" env=BALANCER_ROUTE_CHANGED
#<Proxy balancer://tomcat-cluster>
# BalancerMember ajp://tomcat1:9090 route=tomcat1_1 retry=0
# BalancerMember ajp://tomcat2:9091 route=tomcat1_2 retry=0
# BalancerMember ajp://tomcat1:9090 route=tomcat2_1 retry=0
# BalancerMember ajp://tomcat2:9091 route=tomcat2_2 retry=0
#</Proxy>
#ProxyPass /sample balancer://tomcat-cluster/sample stickysession=JSESSIONID│jsessionid scolonpathdelim=On
#ProxyPassReverse /sample balancer://tomcat-cluster/sample
</VirtualHost>
</IfModule>
apache2.conf
El archivo apache2.conf contiene la configuración para el Apache httpd por default(Ver documentación).
jk。프로비저닝
El archivo jk.config contiene la configuración para el móduloJK Connector.
El conector JK es un component de servidor web que se utiliza para integrar de forma 스텔스 Tomcat con un servidor web como Apache.La comunicación entre el servidor web y Tomcat se realiza a través del protocolo JK(también conocido comoprotocolo AJP).
JkLogLevel info
JkOptions +ForwardKeySize +ForwardURICompat -ForwardDirectories
JkRequestLogFormat "%w %V %T"
일꾼속성
El archivo 일꾼.속성 contiene la configuración paraTomcat worker.유엔 직원들은 Tomcat que est á esperando para ejecutar servlets o cualquier otro contenido en nombre de alg ún servidor 웹을 사용하고 있습니다.En este archivo es donde vamos a configurar la conexión de nuestras instancias Tomcat con Apache httpd por medio de AJP(Ver documentación).
#
#------ worker list ------------------------------------------
#---------------------------------------------------------------------
#
#
# The workers that your plugins should create and work with
#
ps=/
worker.list=loadbalancer,status
#
#
#
#------ DEFAULT LOAD BALANCER WORKER DEFINITION ----------------------
#---------------------------------------------------------------------
#
#
# The loadbalancer (type lb) workers perform wighted round-robin
# load balancing with sticky sessions.
# Note:
# ----&gt; If a worker dies, the load balancer will check its state
# once in a while. Until then all work is redirected to peer
# workers.
worker.loadbalancer.type=lb
worker.loadbalancer.balance_workers=tomcat1_1,tomcat1_2,tomcat2_1,tomcat2_2
worker.loadbalancer.sticky_session=True
worker.status.type=status
#
#------ ajp13_worker WORKER DEFINITION ------------------------------
#---------------------------------------------------------------------
#
#
# Defining a worker named ajp13_worker and of type ajp13
# Note that the name and the type do not have to match.
#
worker.tomcat1_1.port=9090
worker.tomcat1_1.host=host.tomcat1
worker.tomcat1_1.type=ajp13
worker.tomcat1_1.connection_pool_timeout=600
worker.tomcat1_1.route=tomcat1_1
#worker.tomcat1_1.socket_keepalive=1
worker.tomcat1_2.port=9091
worker.tomcat1_2.host=host.tomcat1
worker.tomcat1_2.type=ajp13
worker.tomcat1_2.connection_pool_timeout=600
worker.tomcat1_2.route=tomcat1_2
#worker.tomcat1_2.socket_keepalive=1
worker.tomcat2_1.port=9090
worker.tomcat2_1.host=host.tomcat2
worker.tomcat2_1.type=ajp13
worker.tomcat2_1.connection_pool_timeout=600
worker.tomcat2_1.route=tomcat2_1
#worker.tomcat2_1.socket_keepalive=1
worker.tomcat2_2.port=9091
worker.tomcat2_2.host=host.tomcat2
worker.tomcat2_2.type=ajp13
worker.tomcat2_2.connection_pool_timeout=600
worker.tomcat2_2.route=tomcat2_2
#worker.tomcat2_2.socket_keepalive=1
컨텐트 구성 1 및 컨텐트 2
Dockerfile 파일
Vamos a revisar las partes del archivo Dockerfile:
FROM tomcat:9.0
COPY server.xml /usr/local/tomcat/conf/
# add context to /usr/local/tomcat/webapps
COPY sample.war /usr/local/tomcat/app1/sample.war
COPY sample.war /usr/local/tomcat/app2/sample.war
EXPOSE 9090 9091
샘플전쟁
아쿠콜로카모스는 병사다.
서버xml
En el archivo 서버.xml se encuentra la configuración para el servidor Tomcat,en este caso solo nos interest a revisar lo siguiente:
<Service name="Catalina1">
se encuentra la un tomcat que corre por el puerto 8080,dentro encontramos<Connector protocol="AJP/1.3" ... port="9090" .../>
,<Engine name="Catalina" defaultHost="host.tomcat1" jvmRouter="tomcat1_1">
y<Host name="host.tomcat1" appBase="app1" unpackWARs="true" autoDeploy="true">
<Service name="Catalina2">
se encuentra la un tomcat que corre por el puerto 8081,dentro encontramos<Connector protocol="AJP/1.3" ... port="9091" .../>
,<Engine name="Catalina" defaultHost="host.tomcat1" jvmRouter="tomcat1_2">
y<Host name="host.tomcat1" appBase="app2" unpackWARs="true" autoDeploy="true">
worker.tomcat1_1.route=tomcat1_1
yworker.tomcat1_2.route=tomcat1_2
de worker.속성El Hostname para este Tomcat es host.tomcat1 que también se Encunteran en
worker.tomcat1_1.host=host.tomcat1
yworker.tomcat1_2.host=host.tomcat1
<?xml version="1.0" encoding="UTF-8"?>
<Server port="8005" shutdown="SHUTDOWN">
...
<Service name="Catalina1">
...
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000"/>
...
<!-- Define an AJP 1.3 Connector on port 8009 -->
<Connector protocol="AJP/1.3"
URIEncoding="UTF-8" enableLookups="false"
address="0.0.0.0" port="9090" connectionTimeout="20000"
maxConnections="256" keepAliveTimeout="30000"
redirectPort="8443" secretRequired="false" />
<Engine name="Catalina" defaultHost="host.tomcat1" jvmRouter="tomcat1_1">
...
<Host name="host.tomcat1" appBase="app1" unpackWARs="true" autoDeploy="true">
...
</Host>
</Engine>
</Service>
<Service name="Catalina2">
...
<Connector port="8081" protocol="HTTP/1.1" connectionTimeout="20000"/>
...
<!-- Define an AJP 1.3 Connector on port 8009 -->
<Connector protocol="AJP/1.3"
URIEncoding="UTF-8" enableLookups="false"
address="0.0.0.0" port="9091" connectionTimeout="20000"
maxConnections="256" keepAliveTimeout="30000"
redirectPort="8443" secretRequired="false" />
...
<Engine name="Catalina" defaultHost="host.tomcat1" jvmRouter="tomcat1_2">
...
<Host name="host.tomcat1" appBase="app2" unpackWARs="true" autoDeploy="true">
...
</Host>
</Engine>
</Service>
</Server>
Configuración de docker compose 구성
.환경
2개 변수 de entorno para los puertosque vamos a utilizar
HOST_HTTP_PORT=8080
HOST_HTTPS_PORT=8443
docker 작성.yml 회사
Tenemos configurado 2 servidores Tomcat y el servidor Apache httpd en un Docker Compose(Documentación).
version: '2'
services:
tomcat1:
build: tomcat1/.
tomcat2:
build: tomcat2/.
httpd:
volumes:
- ./logs:/var/log/apache2
ports:
- "${HOST_HTTP_PORT}:80"
- "${HOST_HTTPS_PORT}:443"
build: httpd/.
links:
- tomcat1:host.tomcat1
- tomcat2:host.tomcat2
Ejecutar 서비스 회사
Los comandos de Compileación y Ejeucción de Docker deben ejecutarse desde la raíz del directorio del proyecto después de clonar este repositorio.
$ docker-compose build
$ docker-compose up -d
$ docker-compose ps
`usando el comando docker는 ps deber íamos poder ver el nuevo contenedor en la lista,como se indica a continuación을 작성합니다.
`
Name Command State Ports
-------------------------------------------------------------------------------------------------------------------------------
docker-apache-httpd-tomcat-ssl_httpd_1 apachectl -k start -DFOREG ... Up 0.0.0.0:8443->443/tcp, 0.0.0.0:8080->80/tcp
docker-apache-httpd-tomcat-ssl_tomcat1_1 catalina.sh run Up 8080/tcp, 9090/tcp, 9091/tcp
docker-apache-httpd-tomcat-ssl_tomcat2_1 catalina.sh run Up 8080/tcp, 9090/tcp, 9091/tcp
`Editamos el hostname de nuestra máquina.En linux editamos el archivo/etc/hosts agregamos lo siguiente.
127.0.0.1 demo.com
A partir de este momento es posible accepter Ahttps://demo.com:8443/sample/y para ver el balanceador de cargahttps://demo.com:8443/status/
링크
Tomcat Clustering - A Step By Step Guide
Comparing mod_proxy and mod_jk
Tomcat clustering
mod_jk, mod_proxy and mod_proxy_ajp
APACHE HTTP SERVER CONNECTORS AND LOAD BALANCING GUIDE
Reference
이 문제에 관하여(Docker con Apache httpd y Tomcat), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/rigomortiz/docker-con-apache-httpd-y-tomcat-f9j텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)