Cómo montar un entorno de desarrollo local con Docker, Traefik y mkcert

Cómo montar un entorno de desarrollo local con Docker, Traefik y mkcert

  • Ruben
Cuando desarrollamos aplicaciones web, contar con un entorno local que simule un entorno de producción real es crucial. Esto incluye tener múltiples servicios (como backend, frontend, bases de datos, etc.), enrutamiento de dominios personalizados y certificados HTTPS válidos.

En este artículo, aprenderás a montar un entorno de desarrollo local con Docker, Traefik como proxy inverso y mkcert para generar certificados TLS válidos en tu máquina. Este enfoque te permitirá trabajar con URLs como https://miapp.localhost sin advertencias de seguridad en el navegador.

Requisitos Previos
Antes de comenzar, asegúrate de tener instalados:

Primeramente comenzamos montando nuestro entorno traefix + mkcert:

Creamos nuestra red para docker para traefix y nuestro entorno:

docker network create web

Luego creamos una carpeta con el nombre que querramos por ejemplo: 

mrkdir traefik

Dentro de la misma creamos nuestro docker compose y agregamos la configuración para nuestro entorno, domain, sería los dominios locales que usaremos en nuestro entorno local y para el cual generaremos certificados:

touch docker-compose.yml

services:
  mkcert:
    restart: unless-stopped
    environment:
      - domain=*.home.com,*.site.com,*.local.com
    container_name: mkcert
    volumes:
        - ./certs/:/root/.local/share/mkcert
    image: vishnunair/docker-mkcert
    labels:
      - "traefik.enable=false"
    networks:
      - web

  traefik:
    image: traefik:latest
    container_name: traefik
    restart: unless-stopped
    ports:
      - "80:80"
      - "443:443"
      - "8080:8080"
    volumes:
      - "/var/run/docker.sock:/var/run/docker.sock:ro"
      - "./config/traefik.yml:/etc/traefik/traefik.yml:ro"
      - "./config/dynamic.yml:/etc/traefik/dynamic.yml:ro"
      - "./certs/:/etc/certs:ro"
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.traefik.rule=Host(`traefik.home.com`)"
      - "traefik.http.routers.traefik.entrypoints=https"
      - "traefik.http.routers.traefik.tls=true"
      - "traefik.http.routers.traefik.service=traefik@docker"
      - "traefik.http.services.traefik.loadbalancer.server.port=8080"
    networks:
      - web

networks:
  web:
    external: true

Dentro de la carpeta traefix generamos una carpeta config y agregaremos la configuración necesaria para traefix:

mkrdir config
touch config/traefik.yml
touch config/dynamic.yml

En los cuales agregaremos la siguiente configuración

#traefik.yml
global:
  sendAnonymousUsage: false

api:
  dashboard: true
  insecure: true

providers:
  docker:
    endpoint: "unix:///var/run/docker.sock"
    watch: true
    exposedByDefault: false

  file:
    filename: /etc/traefik/dynamic.yml
    watch: true

log:
  level: INFO
  format: common

entryPoints:
  http:
    address: ":80"
    http:
      redirections:
        entryPoint:
          to: https
          scheme: https
  https:
    address: ":443"

tls:
  certificates:
    - certFile: "/etc/certs/_wildcard.home.com.pem"
      keyFile: "/etc/certs/_wildcard.home.com-key.pem"

    - certFile: "/etc/certs/_wildcard.site.com.pem"
      keyFile: "/etc/certs/_wildcard.site.com-key.pem"

    - certFile: "/etc/certs/_wildcard.local.com.pem"
      keyFile: "/etc/certs/_wildcard.local.com-key.pem"

Dentro de la carpeta traefix ejecutámos:

docker compose up -d

Con esto ya tendriamos nuestro proxy para dominios locales, solo nos quedaría agregar el host del traefix a /etc/host para poder acceder a  traefik.home.com:

127.0.0.1 traefik.home.com 

Para montar nuevas aplicaciones con rutas solo debemos agregar a nuestros dockers compose:

    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.mailhog.rule=Host(`mailhog.home.com`)"
      - "traefik.http.routers.mailhog.entrypoints=https"
      - "traefik.http.routers.mailhog.tls=true"
      - "traefik.http.services.mailhog.loadbalancer.server.port=15672"
      - "traefik.docker.network=web"

A continuación les comparto un docker compose con un grupo de aplicaciones o servicios que uso para el desarrollo día a día, el cual incluye mariadb, redis, rabbitmq y mailog y phpmyadmin:

services:
  mariadb:
    image: mariadb
    restart: unless-stopped
    ports:
      - "3306:3306"
    environment:
      MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
      MYSQL_DATABASE: ${MYSQL_DATABASE}
      MYSQL_USER: ${MYSQL_USER}
      MYSQL_PASSWORD: ${MYSQL_PASSWORD}
    networks:
      - backend
    volumes:
      - backend-database:/var/lib/mysql

  phpmyadmin:
    image: phpmyadmin
    restart: unless-stopped
    environment:
      PMA_HOST: mariadb
      PMA_PORT: 3306
      UPLOAD_LIMIT: 1G
      PHP_INI_SCAN_DIR: /usr/local/etc/php/conf.d
    networks:
      - backend
      - web
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.phpmyadmin.rule=Host(`phpmyadmin.home.com`)"
      - "traefik.http.routers.phpmyadmin.entrypoints=https"
      - "traefik.http.routers.phpmyadmin.tls=true"
      - "traefik.http.services.phpmyadmin.loadbalancer.server.port=80"
      - "traefik.docker.network=web"

  redis:
    image: redis:7
    container_name: redis
    restart: unless-stopped
    ports:
      - "6379:6379"
    networks:
      - backend

  rabbitmq:
    image: rabbitmq:3-management
    container_name: rabbitmq
    restart: unless-stopped
    environment:
      RABBITMQ_DEFAULT_USER: ${RABBITMQ_USER}
      RABBITMQ_DEFAULT_PASS: ${RABBITMQ_PASSWORD}
    ports:
      - "5672:5672"
      - "15672:15672"
    networks:
      - backend
      - web
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.rabbitmq.rule=Host(`rabbitmq.home.com`)"
      - "traefik.http.routers.rabbitmq.entrypoints=https"
      - "traefik.http.routers.rabbitmq.tls=true"
      - "traefik.http.services.rabbitmq.loadbalancer.server.port=15672"
      - "traefik.docker.network=web"

  mailhog:
    image: mailhog/mailhog
    container_name: mailhog
    restart: unless-stopped
    ports:
      - "8025:8025"
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.mailhog.rule=Host(`mailhog.home.com`)"
      - "traefik.http.routers.mailhog.entrypoints=https"
      - "traefik.http.routers.mailhog.tls=true"
      - "traefik.http.services.mailhog.loadbalancer.server.port=15672"
      - "traefik.docker.network=web"
    networks:
      - web
      - backend

volumes:
  backend-database:

networks:
  backend:
    external: true
  web:
    external: true

Recuerde que debe crear .env al lado de este docker compose para los usuarios rabbitmq y mariadb:

MYSQL_ROOT_PASSWORD=
MYSQL_DATABASE=
MYSQL_USER=
MYSQL_PASSWORD=
RABBITMQ_USER=

Además de agregar al host, los dominios del docker compose.

127.0.0.1 mailhog.home.com
127.0.0.1 phpmyadmin.home.com
127.0.0.1 rabbitmq.home.com

Puede agregar nuevos servicios o eliminar en dependencia de las necesidades de su entorno base.

 Espero este contenido les sea de utilidad.

Referencias:
https://dev.to/agusrdz/setting-up-traefik-and-mkcert-for-local-development-48j5
  • Desarrollo
  • Guías prácticas
  • Docker
Robertrep
04 de Dec de 2025

En 2025, Stake Casino se ha convertido en una plataforma de referencia para usuarios de Espana. Para entrar al sitio oficial, solo debes seguir la entrada confiable aqui — <a href=https://www.leo-vegas-wins.net>Conecta login a LeoVegas Espana para apuestas login</a> . Con gran variedad de slots, una navegacion sencilla y opciones fiables, el casino destaca el sector iGaming. “Disfruta titulos clasicos y gana al instante!” Crear una cuenta en Stake es directo. Solo usa el enlace anterior, selecciona Crear Cuenta, completa el formulario, activa el perfil y realiza tu primer deposito para empezar a jugar. “Registrate en 60 segundos y activa tu bono!” El paquete inicial permite multiplicar tu deposito desde el inicio. • fondos adicionales hasta 200 EUR. • Tiradas gratuitas en juegos populares. • Sube niveles en el programa VIP para ventajas especiales. “Activa el 100% para explorar juegos!”

Robertrep
07 de Dec de 2025

Ahora, Stake Casino se ha convertido en una plataforma de referencia para apostadores en ES. Para entrar al sitio oficial, solo debes usar el acceso verificado aqui — <a href=https://www.leovegas-app.net>Reclama elite VIP bonos LeoVegas Casino con priority rewards access elite</a> . Con muchos titulos disponibles, una navegacion sencilla y pagos seguros en Espana, el casino sobresale el casino digital. “Disfruta slots populares y gana ahora!” Abrir tu perfil en Stake es rapido. Solo abre la pagina oficial, toca Unete, ingresa tu informacion, confirma el correo y realiza tu primer deposito para desbloquear todo. “Unete en un minuto y desbloquea la oferta!” El paquete inicial permite aumentar tu saldo desde el inicio. • fondos adicionales hasta €200. • Tiradas gratuitas en juegos populares. • Sube niveles en el programa VIP para ventajas especiales. “Duplica tu primer deposito para explorar juegos!”

Deja un comentario: