2.4 KiB
2.4 KiB
Traefik — Proxy inverso y TLS para Portainer
Esta guía muestra cómo exponer Portainer detrás de Traefik con HTTPS automático (Let's Encrypt) y reglas limpias.
Requisitos
- Traefik corriendo en el mismo host (como servicio en otro
docker-composeo stack). - Resolución DNS del dominio hacia tu host.
Etiquetas (labels) de ejemplo para Portainer
Añade estas etiquetas al servicio portainer cuando uses Traefik (en el mismo compose o en un overlay). Nota: si mantienes ports: 9443:9443, la UI seguirá accesible directamente; con Traefik se recomienda eliminar la exposición directa y publicar solo vía proxy.
services:
portainer:
image: portainer/portainer-ce:lts
container_name: portainer
restart: always
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- portainer_data:/data
# Quita los puertos directos si usas Traefik
# ports:
# - 9443:9443
labels:
- "traefik.enable=true"
- "traefik.http.routers.portainer.rule=Host(`portainer.tudominio.com`)"
- "traefik.http.routers.portainer.entryPoints=websecure"
- "traefik.http.routers.portainer.tls=true"
- "traefik.http.services.portainer.loadbalancer.server.port=9443"
- "traefik.http.routers.portainer.tls.certresolver=myresolver"
Configuración Traefik (resumen)
Traefik necesita:
entryPointsweb(80) ywebsecure(443).certResolverconfigurado (por ejemplo,myresolvercon ACME/Let's Encrypt).
Ejemplo mínimo de traefik.yml (referencia):
entryPoints:
web:
address: ":80"
websecure:
address: ":443"
certificatesResolvers:
myresolver:
acme:
email: tu-email@ejemplo.com
storage: /letsencrypt/acme.json
httpChallenge:
entryPoint: web
Volúmenes para Traefik (contenedor):
- /var/run/docker.sock:/var/run/docker.sock:ro
- ./letsencrypt:/letsencrypt
Pasos
- Configura y levanta Traefik con
webywebsecure, y uncertResolver. - Aplica las labels a Portainer y evita exponer puertos directos.
- Apunta el DNS
portainer.tudominio.comal host. - Accede por:
https://portainer.tudominio.com
Notas
- Si Portainer corre en 9443 con certificado propio, especifica
loadbalancer.server.port=9443(como en el ejemplo). - Para publicar en HTTP interno puedes cambiar a puerto 9000 (HTTP) y ajustar labels acorde (
server.port=9000). - Revisa logs de Traefik y Portainer si hay errores de TLS o reglas.