docker-composemagento2traefiklets-encryptbitnami

Configure Docker, Traefik and Bitnami Magento2 for SSL / letsencrypt / certbot


I am trying to configure bitnami's docker implementation of Magento from GitHub to run with Traefik.

I have these two files: docker-compose.yml

# Copyright Broadcom, Inc. All Rights Reserved.
# SPDX-License-Identifier: APACHE-2.0

version: '2'
services:
  traefik:
    image: traefik:latest
    restart: unless-stopped
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - "./traefik.yaml:/etc/traefik/traefik.yaml"
      - "./traefik/data:/data"
      - "/var/run/docker.sock:/var/run/docker.sock"
  mariadb:
    image: docker.io/bitnami/mariadb:10.6
    environment:
      - ALLOW_EMPTY_PASSWORD=no
      - MARIADB_ROOT_PASSWORD=${MARIADB_ROOT_PASSWORD}
      - MARIADB_USER=${DB_USER}
      - MARIADB_PASSWORD=${MARIADB_PASSWORD}
      - MARIADB_DATABASE=${DB_NAME}
    volumes:
      - 'mariadb_data:/bitnami/mariadb'
  magento:
    image: docker.io/bitnami/magento:2
    # ports:
    #   - '80:8080'
    #   - '443:8443'
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.magento.rule=Host(`${MAGENTO_HOST_URL}`)"
      - "traefik.http.routers.magento.entrypoints=websecure"
      - "traefik.http.services.magento.loadbalancer.server.port=5006"
    environment:
      - MAGENTO_HOST=${MAGENTO_HOST_URL}
      - MAGENTO_ENABLE_HTTPS=no
      - MAGENTO_ENABLE_ADMIN_HTTPS=no
      - MAGENTO_DATABASE_HOST=mariadb
      - MAGENTO_DATABASE_PORT_NUMBER=3306
      - MAGENTO_DATABASE_USER=${DB_USER}
      - MAGENTO_DATABASE_NAME=${DB_NAME}
      - MAGENTO_DATABASE_PASSWORD=${MARIADB_PASSWORD}
      - ELASTICSEARCH_HOST=elasticsearch
      - ELASTICSEARCH_PORT_NUMBER=9200
      - ALLOW_EMPTY_PASSWORD=no
      - MAGENTO_ADMIN_URL_PREFIX=${MAGENTO_ADMIN_URL_PREFIX}
      - MAGENTO_USERNAME=${MAGENTO_USERNAME}
      - MAGENTO_PASSWORD=${MAGENTO_PASSWORD}
      - MAGENTO_EMAIL=${MAGENTO_EMAIL}
    volumes:
      - 'magento_data:/bitnami/magento'
    depends_on:
      - mariadb
      - elasticsearch
  elasticsearch:
    image: docker.io/bitnami/elasticsearch:7
    volumes:
      - 'elasticsearch_data:/bitnami/elasticsearch/data'
  # phpmyadmin:
  #   image: phpmyadmin
  #   restart: unless-stopped
  #   ports:
  #     - 8081:80
  #   environment:
  #     - PMA_ARBITRARY=1
  #     - PMA_HOST=mariadb
volumes:
  mariadb_data:
    driver: local
  magento_data:
    driver: local
  elasticsearch_data:
    driver: local

and traefik.yaml

entryPoints:
  web:
    address: ":80"
    http:
      redirections:
        entryPoint:
          to: websecure
          scheme: https
          permanent: true
  websecure:
    address: ":443"
    http:
      tls:
        certResolver: letsencrypt

providers:
  docker: {}

certificatesResolvers:
  letsencrypt:
    acme:
      email: valid@example.com # redacted - my real email address here
      storage: /data/letsencrypt.json
      httpChallenge:
        entryPoint: web


With this setup, I get a 502 error when connecting to either http:// or https:// ${MAGENTO_HOST_URL}

When I 'toggle' Traefik off like in this docker-compose.yml, http:// works.

# Copyright Broadcom, Inc. All Rights Reserved.
# SPDX-License-Identifier: APACHE-2.0

version: '2'
services:
  # traefik:
  #   image: traefik:latest
  #   restart: unless-stopped
  #   ports:
  #     - "80:80"
  #     - "443:443"
  #   volumes:
  #     - "./traefik.yaml:/etc/traefik/traefik.yaml"
  #     - "./traefik/data:/data"
  #     - "/var/run/docker.sock:/var/run/docker.sock"
  mariadb:
    image: docker.io/bitnami/mariadb:10.6
    environment:
      - ALLOW_EMPTY_PASSWORD=no
      - MARIADB_ROOT_PASSWORD=${MARIADB_ROOT_PASSWORD}
      - MARIADB_USER=${DB_USER}
      - MARIADB_PASSWORD=${MARIADB_PASSWORD}
      - MARIADB_DATABASE=${DB_NAME}
    volumes:
      - 'mariadb_data:/bitnami/mariadb'
  magento:
    image: docker.io/bitnami/magento:2
    ports:
      - '80:8080'
      - '443:8443'
    # labels:
    #   - "traefik.enable=true"
    #   - "traefik.http.routers.magento.rule=Host(`${MAGENTO_HOST_URL}`)"
    #   - "traefik.http.routers.magento.entrypoints=websecure"
    #   - "traefik.http.services.magento.loadbalancer.server.port=5006"
    environment:
      - MAGENTO_HOST=${MAGENTO_HOST_URL}
      - MAGENTO_ENABLE_HTTPS=no
      - MAGENTO_ENABLE_ADMIN_HTTPS=no
      - MAGENTO_DATABASE_HOST=mariadb
      - MAGENTO_DATABASE_PORT_NUMBER=3306
      - MAGENTO_DATABASE_USER=${DB_USER}
      - MAGENTO_DATABASE_NAME=${DB_NAME}
      - MAGENTO_DATABASE_PASSWORD=${MARIADB_PASSWORD}
      - ELASTICSEARCH_HOST=elasticsearch
      - ELASTICSEARCH_PORT_NUMBER=9200
      - ALLOW_EMPTY_PASSWORD=no
      - MAGENTO_ADMIN_URL_PREFIX=${MAGENTO_ADMIN_URL_PREFIX}
      - MAGENTO_USERNAME=${MAGENTO_USERNAME}
      - MAGENTO_PASSWORD=${MAGENTO_PASSWORD}
      - MAGENTO_EMAIL=${MAGENTO_EMAIL}
    volumes:
      - 'magento_data:/bitnami/magento'
    depends_on:
      - mariadb
      - elasticsearch
  elasticsearch:
    image: docker.io/bitnami/elasticsearch:7
    volumes:
      - 'elasticsearch_data:/bitnami/elasticsearch/data'
  # phpmyadmin:
  #   image: phpmyadmin
  #   restart: unless-stopped
  #   ports:
  #     - 8081:80
  #   environment:
  #     - PMA_ARBITRARY=1
  #     - PMA_HOST=mariadb
volumes:
  mariadb_data:
    driver: local
  magento_data:
    driver: local
  elasticsearch_data:
    driver: local

I have tried toggling MAGENTO_ENABLE_HTTPS on and off, but no combination appears to work with Traefik.

Any hints would be much appreciated.


Solution

  • Turns out my error was this line

          - "traefik.http.services.magento.loadbalancer.server.port=5006"
    

    Remove it, and all is well. I am not using a load balancer, but I suspect the port number is the issue.