Cómo actualizar Traefik 1.7 a 2.0



Cuando planeé por primera vez en actualizar Traefik a la versión 2.0, de primeras pensé que iba a ser un montón de trabajo pero después de ojear la guía oficial para migrar de v1 a v2 me di cuenta de que tampoco eran tantos cambios.

Por si os interesa, la guía oficial para actualizar Traefik v1  a v2 es esta: 

 

Official Guide: Traefik v1 to v2

La actualización de Traefik v1 a v2 se puede resumir en 4 pasos:
    1. Añadir la configuración vieja del fichero traefik.toml al fichero docker-compose de Traefik
    2. Actualizar la sintaxis de los labels
    3. Quitar el volumen del archivo traefik.toml que en la versión 2 no hace falta
    4. Actualizar a la nueva sintaxis los archivos docker-compose de los ficheros que trabajen con Traefik
Ahora os mostraré el cambio del archivo docker-compose.yml de la versión 1 a la dos:
 
Traefik 1.7 docker-compose.yml (old)
version: '3'

services:
  traefik:
    image: traefik:v1.7.26-alpine
    restart: always
    ports:
      - 80:80
      - 443:443
    networks:
      - web
    labels:
      - "traefik.frontend.rule=Host:traefik.mydomain.com"
      - "traefik.frontend.entryPoints=http,https"
      - "traefik.port=8080"
    volumes:
     - /var/run/docker.sock:/var/run/docker.sock
     - ./config/traefik.toml:/traefik.toml
     - ./config/acme.json:/acme.json
    container_name: traefik
networks:
  web:
    external: true
Traefik 2.0 docker-compose.yml (new)
version: '3'

services:
  traefik:
    image: traefik:v2.3.0
    command:
        - "--api.insecure=true"
        - "--providers.docker=true"
        - "--entryPoints.web.address=:80"
        - "--entryPoints.websecure.address=:443"
        - "--certificatesResolvers.le.acme.email=my@email.com"
        - "--certificatesResolvers.le.acme.storage=acme.json"
        - "--certificatesResolvers.le.acme.tlsChallenge=true"
        - "--certificatesResolvers.le.acme.httpChallenge=true"
        - "--certificatesResolvers.le.acme.httpChallenge.entryPoint=web"
    restart: always
    ports:
      - 80:80
      - 443:443
    networks:
      - web
    labels:
      - traefik.http.routers.http_catchall.rule=HostRegexp(`{any:.+}`)
      - traefik.http.routers.http_catchall.entrypoints=web
      - traefik.http.routers.http_catchall.middlewares=https_redirect
      - traefik.http.middlewares.https_redirect.redirectscheme.scheme=https
      - traefik.http.middlewares.https_redirect.redirectscheme.permanent=true
    volumes:
     - /var/run/docker.sock:/var/run/docker.sock
     - ./config/acme.json:/acme.json
    container_name: traefik
networks:
  web:
    external: true
Una vez actualizado el fichero docker-compose.yml de Traefik, ya estaría listo para funcionar, pero todavía tenemos pendiente actualizar la sintaxis de TODOS los archivos docker-compose.yml que utilicen Traefik.
 
En este ejemplo os mostraré como he tenido que cambiar un proyecto que tenía en docker-compose para la nueva sintaxis de Traefik, el único cambio en el fichero docker-compose afectó al apartado labels.
 
Wordpress docker-compose.yml (viejo)
version: '3'

services:
  wordpress:
    image: wordpress
    restart: unless-stopped
    depends_on:
      - wordpress_db
    networks:
      - web
      - wordpress_net
    env_file:
      - wp_env
    volumes:
      - ./config/php.conf.uploads.ini:/usr/local/etc/php/conf.d/uploads.ini
      - wordpress:/var/www/html
    links:
      - wordpress_db:mysql
    labels:
      - "traefik.enable=true"
      - "traefik.frontend.rule=Host:mywordpress.domain.com"
      - "traefik.frontend.entryPoints=http,https"
      - "traefik.port=80"
    container_name: wordpress
  wordpress_db:
    image: mariadb
    restart: unless-stopped
    networks:
      - web
      - wordpress_net
    env_file:
      - wp_db_env
    volumes:
      - ./wp-data:/docker-entrypoint-initdb.d
      - wordpress_db:/var/lib/mysql
    expose:
      - 3306
    container_name: wordpress_db

volumes:
  wordpress:
  wordpress_db:
networks:
  web:
    external: true
  wordpress_net:
    driver: bridge

Wordpress docker-compose.yml (nuevo)

version: '3'

services:
  wordpress:
    image: wordpress
    restart: unless-stopped
    depends_on:
      - wordpress_db
    networks:
      - web
      - wordpress_net
    env_file:     
      - wp_env
    volumes:
      - ./config/php.conf.uploads.ini:/usr/local/etc/php/conf.d/uploads.ini
      - wordpress:/var/www/html
    links:
      - wordpress_db:mysql
    labels:
      - traefik.http.routers.wordpress.rule=Host(`mywordpress.domain.com`)
      - traefik.http.routers.wordpress.tls=true
      - traefik.http.routers.wordpress.tls.certresolver=le
      - traefik.http.services.wordpress.loadbalancer.server.port=80
    container_name: wordpress
  wordpress_db:
    image: mariadb
    restart: unless-stopped
    networks:
      - web
      - wordpress_net
    env_file:
      - wp_db_env
    volumes:
      - ./wp-data:/docker-entrypoint-initdb.d
      - wordpress_db:/var/lib/mysql
    expose:
      - 3306
    container_name: wordpress_db

volumes:
  wordpress:
  wordpress_db:
networks:
  web:
    external: true
  wordpress_net:
    driver: bridge

Dejar un comentario

Tienes que esperar para comentar otra vez. Tiempo de espera: