loading...

Múltiples aplicaciones en contenedores docker con proxy reverso Nginx y SSL.

horaciodegiorgi profile image Horacio Degiorgi ・3 min read

Primero un poco del porqué armar un esquema como el siguiente:

  • Tengo varias aplicaciones que prefiero mantener aisladas: moodle, wordpress y una web app.
  • Tengo un server con suficiente RAM y Linux (ubuntu-server instalado)
  • Tengo conocimientos de docker.
  • Desarrollo las aplicaciones en local en docker.
  • Tengo pensado migrar una de las aplicaciones a su propio server más adelante.
  • Tengo una única IP pública donde puedo apuntar todos los dominios y subdominios que necesite.

El esquema que persigo es el siguiente:
esquema de un webproxy y varias aplicaciones en docker

Algunos ingredientes de esta receta:

  • conocimientos básicos de docker y docker-compose.
  • un contenedor que permita gestionar los certificados SSL y funcione como proxy reverso.
  • un contenedor moodle.
  • un contenedor wordpress
  • un contenedor php 7.2 para la aplicación web.
  • un contenedor mysql
  • un contenedor postgresql.

Cada contenedor puede ser definido en su archivo docker-compose o todos juntos en el mismo.
Pensando en que voy a migrar alguna de las aplicaciones fuera del host voy a crear tres archivos docker-composer.yml.

Primero configurar el NGINX-PROXY-SERVER con el contenedor creado por Evert Ramos que encontramos en Github.

Creamos un directorio para clonar dentro el repositorio.
1- Luego de clonarlo solo tenemos que editar el archivo de configuración copiando el ejemplo que trae el repositorio. Lo importante ahí es la IP pública del server y el nombre de la red interna docker que llamaremos "webproxy". Usando esta red los distintos contenedores se conectarán mediante la red interna y le solicitarán a uno de los servicios que se instalan la creación de certificados. Otro de los servicios instalados permiten la publicación externa usando el módulo proxy-reverso de nginx.
2- creamos otro directorio e instalamos el contenedor para wordpress. Para esta sección usé el repositorio del nezar
La instalación es muy simple y lo único que hay que agregar el es código siguiente al final del archivo docker-compose.yml para indicar que use la red creada anteriormente.

Importante: la sección de base de datos y otros datos no los he colocado aquí, el repositorio tiene toda la información necesaria.

Arrancamos los servicios.

Primero tenemos que arrancar el webproxy con docker-compose up -d

Una vez iniciado este contenedor y los servicios que corre quedan a la espera de otros contenedores en la misma red que expongan las variables de entorno: LETSENCRYPT_EMAIL ,LETSENCRYPT_HOST y VIRTUAL_HOST.
Toma estas variables y realiza una petición a letsencryt para obtener los certificados.
Si. Parece magia pero con solo estos pasos el contenedor con el wordpress queda publicado con un certificado SSL que se autorenueva.

Cualquier otro contenedor que lleve las mismas variables y se encuentre en la misma red queda publicado con las mismas condiciones y el "candado cerrado" indicando que es una web segura.

si te quedan dudas sobre los pasos o algo técnico puedo ayudar si me contactas por twitter

Discussion

pic
Editor guide
Collapse
chafarleston profile image
charles paul requena palomino

wow una consulta y para moodle

Collapse
horaciodegiorgi profile image
Horacio Degiorgi Author

tengo una receta para moodle 3.8 con docker compose.
gist.github.com/horaciod/2975a118d...
saludos

Collapse
chafarleston profile image
charles paul requena palomino

pero no tiene las variables de letsencryt para los certificados

Collapse
eduardo_dx profile image
Eduardo D.

Muy buen post, ahora ya me aclaro unas dudas.
Muchas gracias

Collapse
efrenmartinez profile image
Efrén Martínez

Excelente post.🤗🤗 Sin duda Docker será lo primero que aprenda en el 2020 👉👈