Traefik: Enrutando nuestro WordPress

Cloud, Seguridad, Tecnología de sistemas

Trevenque Group » Blog » Soluciones Empresariales » Traefik: Enrutando nuestro WordPress

En el anterior post instalamos docker  y docker-compose  en una instancia EC2 de Amazon para testear el funcionamiento de Traefik como proxy inverso.

Dejamos corriendo la instalación de Traefik v2.3.6 con una url asegurada mediante certificado SSL Let’s Encrypt.

En este post utilizaremos de nuevo docker  y docker-compose  para levantar un WordPress que será enrutado a través de Traefik y será éste el encargado de dotarlo de certificado y el enrutamiento necesario. Traefik analizará a través del socket de Docker que le hemos pasado en su configuración que hay un nuevo contenedor en el sistema y a través de las labels  de éste le diremos qué url tendrá dicho contenedor y cómo servirlo, en este caso a través de https.

Recordemos que tenemos generado un Wildcard DNS para que todos los subdominios apunten a la IP de nuestra instancia EC2. En este caso, usaremos la url blog.canonigos.me  para desplegar el WordPress.

Generando el fichero docker-compose.yml

Vamos a crear un directorio wordpress  dentro del home de nuestro usuario y a generar un fichero docker-compose.yml  como el siguiente dentro de él:

# wordpress/docker-compose.yml
version: '3.7'

services:
  db:
    image: mariadb
    container_name: db
    volumes:
      - db-data:/var/lib/mysql
    networks:
      - default
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: PasswordSecreta
      MYSQL_DATABASE: wpdb
      MYSQL_USER: blog_dbuser
      MYSQL_PASSWORD: blogdbpassword
  wordpress:
    depends_on:
      - db
    image: wordpress:latest
    container_name: wordpress
    environment:
      WORDPRESS_DB_HOST: db:3306
      WORDPRESS_DB_NAME: wpdb
      WORDPRESS_DB_USER: blog_dbuser
      WORDPRESS_DB_PASSWORD: blogdbpassword
    volumes:
      - ./wp-data:/var/www/html/wp-content
    networks:
      - proxy
      - default
    restart: always
    labels:
      - "traefik.enable=true"
      - "traefik.docker.network=proxy"
      - "traefik.http.routers.wordpress-secure.entrypoints=websecure"
      - "traefik.http.routers.wordpress-secure.rule=Host(`blog.canonigos.me`)"

volumes:
  db-data:
    name: wp-db-data
networks:
  proxy:
    external: true

En este fichero hemos definido dos servicios, uno llamado db  que correrá una imagen de MariaDB 10.5 y otro llamado wordpress  que es la imagen oficial de WordPress (el tag latest  incluye Apache2 + PHP 7.4.13).

Mas allá de configurar contraseñas y dependencias entre los servicios para definir el orden de arranque, son importantes varias cosas:

  • El contenedor WordPress tiene configuradas dos redes, la externa del proxy  que será la que utilizará Traefik para mandarle el tráfico cuando visitemos el blog y la default  por la que se comunicará con el servicio del contenedor db , la base de datos de nuestro WordPress.
  • Hemos creado un volumen llamado wp-db-data  para albergar los datos del contenedor db , así podremos actualizar la versión de WordPress o reiniciar el servicio sin miedo a perder los datos.
  • Las labels  de Traefik asignan este servicio al entrypoint websecure  (es decir, que irá sobre https) y el Host del que Traefik recogerá las peticiones y las enviará a este contenedor.

De esta forma, queda enrutada que cualquier petición que entre a Traefik con el Host:blog.canonigos.me  irá al servicio wordpress  de este stack que vamos a levantar.

Arrancando nuestro WordPress

Vamos a arrancar pues este docker-compose con nuestra aplicación:

admin@ip-10-0-3-96:~/wordpress$ docker-compose up -d
Creating network "wordpress_default" with the default driver
Creating volume "wp-db-data" with default driver
Pulling db (mariadb:)...

latest: Pulling from library/mariadb
da7391352a9b: Pull complete
14428a6d4bcd: Pull complete
2c2d948710f2: Pull complete
22776aa82430: Pull complete
90e64230d63d: Pull complete
f30861f14a10: Pull complete
e8e9e6a3da24: Pull complete
420a23f08c41: Pull complete
bd73f23de482: Pull complete
a8690a3260b7: Pull complete
4202ba90333a: Pull complete
a33f860b4aa6: Pull complete
Digest: sha256:cdc553f0515a8d41264f0855120874e86761f7c69407b5cfbe49283dc195bea8
Status: Downloaded newer image for mariadb:latest
Pulling wordpress (wordpress:latest)...
latest: Pulling from library/wordpress
6ec7b7d162b2: Pull complete
db606474d60c: Pull complete
afb30f0cd8e0: Pull complete
3bb2e8051594: Pull complete
4c761b44e2cc: Pull complete
c2199db96575: Pull complete
1b9a9381eea8: Pull complete
50450ffc67ee: Pull complete
4d1e5a768e83: Pull complete
5e8be0d1df16: Pull complete
7a6395859d40: Pull complete
7306499d3dce: Pull complete
fa6f0ba15ac6: Pull complete
308a9ead128f: Pull complete
2db781a8732e: Pull complete
63d3161e9e46: Pull complete
a08dd591ed8a: Pull complete
931a26282f2a: Pull complete
f5c6b405e809: Pull complete
caf2bb847f73: Pull complete
Digest: sha256:dadd8e9c2ef6dc2fe146cbc5f2edc0ed8ae1026ae252b52f25791be4d7d16600
Status: Downloaded newer image for wordpress:latest
Creating wordpress-db ... done
Creating wordpress ... done

Tras esperar un minuto aproximadamente deberíamos poder acceder a la url que hemos definido y que Traefik pasará a nuestro recién creado stack.

Os adjunto capturas del proceso de instalación ya en el navegador:

Traefik: Enrutando nuestro WordPress

Qué ha hecho Traefik por nosotros

Traefik nos ha generado un nuevo enrutamiento para nuestra url blog.canonigos.me enlazando este host con nuestro stack de docker-compose  recién desplegado:

Además ha generado un nuevo certificado para la url y ha configurado las cabeceras necesarias para que dicho certificado se muestre correctamente:

De esta forma Traefik ha solventado fácilmente muchas partes de la configuración y exposición de nuestra aplicación WordPress así como la segurización de la misma tanto por la capa de certificado como la cabeceras de seguridad.

En próximos posts hablaremos de las capacidades de Traefik como Ingress Controller  de Kubernetes.

¿Te ha gustado? ¡Compártelo!

Logo Trevenque

trevenque group

Ofrecemos un conjunto de servicios completos para que puedas desarrollar tu negocio, gestionar tus datos de manera inteligente y tomar decisiones rentables.

4 comentarios en «Traefik: Enrutando nuestro WordPress»

    • Hola Seba,

      Es bastante simple, te explicamos:

      Debes crear una carpeta nueva, por ejemplo wordpress2, donde alojaremos una nueva configuración de docker-compose.

      Por ejemplo:


      # wordpress2/docker-compose.yml
      version: '3.7'

      services:
      db:
      image: mariadb
      container_name: db2
      volumes:
      - db-data-2:/var/lib/mysql
      networks:
      - default
      restart: always
      environment:
      MYSQL_ROOT_PASSWORD: PasswordSecreta
      MYSQL_DATABASE: wpdb
      MYSQL_USER: blog_dbuser
      MYSQL_PASSWORD: blogdbpassword
      wordpress:
      depends_on:
      - db
      image: wordpress:latest
      container_name: wordpress2
      environment:
      WORDPRESS_DB_HOST: db:3306
      WORDPRESS_DB_NAME: wpdb
      WORDPRESS_DB_USER: blog_dbuser
      WORDPRESS_DB_PASSWORD: blogdbpassword
      volumes:
      - ./wp-data:/var/www/html/wp-content
      networks:
      - proxy
      - default
      restart: always
      labels:
      - "traefik.enable=true"
      - "traefik.docker.network=proxy"
      - "traefik.http.routers.wordpress-secure.entrypoints=websecure"
      - "traefik.http.routers.wordpress-secure.rule=Host(`blog2.canonigos.me`)


      volumes:
      db-data-2:
      name: wp-db-data-2
      networks:
      proxy:
      external: true

      Debes prestar especial atención a lo siguiente:

      – Los nombres de los contenedores definidos en las claves container_name deberán ser únicos, como ves los he cambiado por wordpress2 y db2 respectivamente para que no colisionen con los del anterior servidor WordPress. Si omites el container_name, Docker generará un nombre de contenedor relacionado con el nombre de la carpeta donde se aloja el fichero docker-compose.yml.
      – Las etiquetas o labels que interpreta Traefik definidas en el contenedor de WordPress han de tener una nueva configuración de Host, en este caso blog2.canonigos.me que será el hostname que tendrá esta nueva instancia.
      – Y, por último, los volúmenes definidos para la persistencia de los datos en el fichero docker-compose.yml también deben ser nombrados de forma única, en este caso yo le he puesto wp-db-data-2. Es una buena práctica nombrar estos volúmenes con información relacionada al sitio que van a alojar, por ejemplo blog2.canonigos-db-data.

      Con esto debes poder lanzar dentro de este nuevo directorio wordpress2 un docker-compose up y tener una nueva instancia de WordPress funcionando que tendrá su certificado generado automáticamente por Traefik vía Let’s Encrypt, recuerda que el hostname definido dentro de las labels que interpreta Traefik tendrá que apuntar también a la misma ip del servidor.

      Por favor, cuando lo hayas probado cuéntanos si te funciona correctamente 😉

      ¡Un saludo!

      Responder
    • ¡Hola!

      Ante todo gracias por enviarnos tu consulta y disculpa la tardanza de nuestra respuesta.

      En el caso que nos comentas tendrás que utilizar dos características de Traefik. La primera es un Router específico que debes aplicar en la label del contenedor de la instancia wordpress1. Algo así cómo:

      traefik.http.routers.wordpress1.rule=PathPrefix(`/wordpress1{regex:$$|/.*}`)

      De igual forma, para la aplicación wordpress2 en su definición de docker-compose.

      Y después tendrás que utilizar un middleware de tipo stripprefix también como label dentro de la definición del contenedor:

      traefik.http.middlewares.wordpress1-stripprefix.stripprefix.prefixes=/wordpress1

      Y de la misma forma para la aplicación wordpress2.

      Tienes más info sobre este router y middleware aquí:

      https://doc.traefik.io/traefik/routing/routers/
      https://doc.traefik.io/traefik/middlewares/http/stripprefix/

      ¡Esperamos que puedas echarlo a andar! ¡Cuéntanos al respecto!

      Un saludo.

      Responder

Deja un comentario

Artículos similares

Sigue de cerca la actualidad de Grupo Trevenque y las últimas tendencias tecnológicas y de Business Intelligence.

Ver todas las noticias