Traefik es uno de los métodos modernos que se utiliza para configurar un proxy inverso para contenedores docker. Cuando desee ejecutar varias aplicaciones en contenedores acoplables que expongan los puertos 80 y 443, traefik puede ser la mejor opción para el proxy inverso. Traefik proporciona su propio panel de monitoreo. También puede usar Traefik para el balanceador de carga HTTP. En este artículo, vamos a configurar Traefik v2.4 en Ubuntu 20.04 con un ejemplo simple.
requisitos previos
- Ubuntu 20.04 LTS
- Docker CE (edición comunitaria)
- Conexión a Internet para descargar paquetes
- Cuenta de usuario con privilegios de Sudo
- Un dominio para el panel traefik [Should be maintained A record]
- Un dominio para el sitio de wordpress [Should be maintained A record]
En este artículo, usamos ‘linuxtechi.local’ como dominio y ‘traefik.linuxtechi.local’ como FQDN para el tablero de Traefik.
Pasos para configurar Traefik en Ubuntu 20.04
En este artículo, primero configuraremos Traefik y luego registraremos WodressPress Container en traefik para proxy inverso y equilibrio de carga. Configuraremos Traefik para servir todo a través de HTTPS utilizando el certificado Let’s encrypt SSL.
Siga los pasos a continuación para configurar el proxy inverso Traefik.
1 ) Configurar Traefik
Cree archivos de configuración y configure una contraseña cifrada para acceder al panel de control de traefik. Puede utilizar la utilidad htpasswd para crear la contraseña cifrada. Para usar la utilidad htpasswd, instale la utilidad con el siguiente comando.
$ sudo apt-get install -y apache2-utils
Una vez completada la instalación, ejecute el siguiente comando para generar una contraseña cifrada. En este ejemplo he usado “[email protected]#” para cifrar. Puedes tener tus propias suposiciones. El usuario se toma como «administrador», puede reemplazarlo con su propio nombre de usuario.
$ htpasswd -nb admin [email protected]#
Obtendrá una contraseña cifrada como:
[email protected]:~$ htpasswd -nb admin [email protected]# admin:$apr1$V.9MT9VH$MtLgwiAa4jq1ngDVvTdJu/ [email protected]:~$
Copie este resultado y guárdelo en algún lugar, ya que necesitamos usar esta contraseña cifrada en el archivo de configuración de Traefik para configurar la autenticación básica para el tablero de Traefik.
Ahora cree un archivo de configuración llamado traefik.toml usando el formato TOML. Usaremos tres proveedores de Traefik, a saber, api, docker y acme. Acme proporciona certificados TLS de vamos a cifrar.
Cree un archivo traefik.toml con los siguientes contenidos
$ vi traefik.toml [entryPoints] [entryPoints.web] address = ":80" [entryPoints.web.http.redirections.entryPoint] to = "websecure" scheme = "https" [entryPoints.websecure] address = ":443" [api] dashboard = true [certificatesResolvers.lets-encrypt.acme] email = "[email protected]" storage = "acme.json" [certificatesResolvers.lets-encrypt.acme.tlsChallenge] [providers.docker] watch = true network = "web" [providers.file] filename = "traefik_secure.toml"
Guarde y cierre el archivo
En el archivo anterior, el punto de entrada web maneja el puerto 80 mientras que el punto de entrada websecure maneja el puerto 443 para la conexión SSL/TLS.
Todo el tráfico en el puerto 80 se redirige a la fuerza al punto de entrada seguro de la web para asegurar las conexiones. No olvide cambiar el correo electrónico y el dominio en el archivo anterior ‘traefik.toml’ que se adapte a su configuración.
Vamos a crear el otro archivo ‘traefik_secure.toml’ con los siguientes contenidos.
$ vi traefik_secure.toml [http.middlewares.simpleAuth.basicAuth] users = [ "admin:$apr1$V.9MT9VH$MtLgwiAa4jq1ngDVvTdJu/" ] [http.routers.api] rule = "Host(`traefik.linuxtechi.local`)" entrypoints = ["websecure"] middlewares = ["simpleAuth"] service = "[email protected]" [http.routers.api.tls] certResolver = "lets-encrypt"
Guardar y salir del archivo.
El contenido de arriba habilitará la autenticación de nombre de usuario y contraseña para el tablero de Traefik y también habilitará el cifrado de certificados TLS para enrutadores http.
No olvide cambiar la cadena de contraseña para el usuario administrador y la entrada del host en el archivo anterior que se adapte a su configuración.
2) Ejecución del contenedor traefik
Cree una nueva red acoplable para que el proxy la comparta entre contenedores. Use el siguiente comando para crear una red acoplable.
$ docker network create web
Cuando inicie el contenedor traefik, agregue el contenedor a esta red. Puede agregar contenedores adicionales a esta red para que Traefik funcione como un proxy inverso.
Cree un archivo vacío que contenga información de Vamos a cifrar y modifique el permiso en consecuencia.
$ touch acme.json $ chmod 600 acme.json
Una vez que este archivo json se mueva al contenedor docker, la propiedad se cambiará a raíz automáticamente.
Crea un contenedor traefik usando el siguiente comando:
$ docker run -d -v /var/run/docker.sock:/var/run/docker.sock -v $PWD/traefik.toml:/traefik.toml -v $PWD/traefik_secure.toml:/traefik_secure.toml -v $PWD/acme.json:/acme.json -p 80:80 -p 443:443 --network web --name traefik traefik:v2.4
Como el comando es demasiado largo, se ha dividido en varias líneas.
Ahora puede acceder al tablero de traefik para monitorear la salud de los contenedores. Vaya a https://su_dominio.com/dashboard/ [Replace your_domain with your own domain] y proporcionar credenciales de administrador [username is admin and password is encrypted password created in above step]. En mi caso, la URL sería:
https://traefik.linuxtechi.local/dashboard/
Una vez que haya iniciado sesión en el tablero, tendrá la siguiente interfaz.
3) Registrar Contenedores en Traefik
Ha configurado Traefik que se ejecuta en su servidor. En este paso, agregaré un contenedor de WordPress para Traefik al proxy. El contenedor de WordPress se administrará con Docker Compose.
Vamos a crear un archivo docker-compose.yml con los siguientes contenidos.
$ vi docker-compose.yml
Para especificar la versión y la red que usaremos, agregue las siguientes líneas al archivo.
version: "3" networks: web: external: true internal: external: false
He usado la versión 3 porque es la última versión de Docker Compose. Traefik reconocerá nuestras aplicaciones solo si forman parte de la misma red. En los pasos anteriores, creé la red docker manualmente con el nombre de red web, por lo que incluí esta red en el archivo docker-compose.yml y la expuse a un proxy externo para traefik. He definido otra red para conectar nuestra aplicación con el contenedor de la base de datos que no es necesario exponer a través de traefik.
Ahora defina cada uno de los servicios. En primer lugar, cree un servicio para la aplicación de WordPress. Agregue las siguientes líneas en el archivo docker-compose.yml.
services: wordpress: image: wordpress:latest environment: WORDPRESS_DB_HOST: mysql:3306 WORDPRESS_DB_USER: dbuser WORDPRESS_DB_PASSWORD: [email protected]# WORDPRESS_DB_NAME: wordpress_db labels: - traefik.http.routers.blog.rule=Host(`blog.linuxtechi.local`) - traefik.http.routers.blog.tls=true - traefik.http.routers.blog.tls.certresolver=lets-encrypt - traefik.port=80 networks: - internal - web depends_on: - mysql
He usado traefik.port=80, traefik usará este puerto para enrutar el tráfico al contenedor de WordPress.
Reemplace Host: blog.linuxtechi.com con su propio dominio de sitio de WordPress
Ahora, debe configurar el servicio MySQL para la base de datos. Agregue las siguientes líneas al final del archivo docker-compose.yml
mysql: image: mysql:latest environment: MYSQL_ROOT_PASSWORD: [email protected]# MYSQL_DATABASE: wordpress_db MYSQL_USER: dbuser MYSQL_PASSWORD: [email protected]# networks: - internal labels: - traefik.enable=false
En este ejemplo, he usado la última imagen de MySQL para un contenedor de base de datos. Las variables de entorno para el servicio wordress y mysql se han definido en el propio archivo. El servicio MySQL no es necesario para el proxy usando traefik, por lo que solo he usado redes internas.
Su archivo docker-compose.yml completo se verá así:
version: "3" networks: web: external: true internal: external: false services: wordpress: image: wordpress:latest environment: WORDPRESS_DB_HOST: mysql:3306 WORDPRESS_DB_USER: dbuser WORDPRESS_DB_PASSWORD: [email protected]# WORDPRESS_DB_NAME: wordpress_db labels: - traefik.http.routers.blog.rule=Host(`blog.linuxtechi.local`) - traefik.http.routers.blog.tls=true - traefik.http.routers.blog.tls.certresolver=lets-encrypt - traefik.port=80 networks: - internal - web depends_on: - mysql mysql: image: mysql:latest environment: MYSQL_ROOT_PASSWORD: [email protected]# MYSQL_DATABASE: wordpress_db MYSQL_USER: dbuser MYSQL_PASSWORD: [email protected]# networks: - internal labels: - traefik.enable=false
Guarde el archivo y salga del archivo.
Ahora ejecute el siguiente comando para crear un contenedor de MySQL y wordpress.
$ docker-compose up -d
Ahora navegue al tablero de Traefik y haga clic en enrutadores HTTP, encontrará nuevos contenedores agregados al tablero.
Ahora usa la url blog.linuxtechi.local [Replace with your domain]. Será redirigido al asistente de instalación de WordPress con conexión TLS.
Complete el asistente de instalación. Ahora está todo bien para usar su sitio de WordPress.
Conclusión:
En este artículo, ha aprendido a configurar traefik en Ubuntu 20.04. Tiene una idea de cómo registrar contenedores automáticamente en traefik para el equilibrio de carga y el proxy inverso. Además, aprendiste a configurar sitios de WordPress con el proxy traefik.
Leer también : Cómo configurar el registro privado de Docker en Ubuntu 20.04