[{"data":1,"prerenderedAt":219},["ShallowReactive",2],{"seo-verification":3,"blog-traefik-v3-vps-reverse-proxy-docker-https-es":6},{"google":4,"bing":5},"EycwPY2XMyTkVzas3n1ygeNJFGAH513qrMjfDljzsMQ","",{"key":7,"data":8},"blog-traefik-v3-vps-reverse-proxy-docker-https-es",{"id":9,"slug":10,"slugs":11,"title":15,"excerpt":16,"readTime":17,"views":18,"isPinned":19,"publishedAt":20,"updatedAt":21,"category":22,"categories":27,"featuredImage":29,"bgImage":30,"posterImage":31,"relatedSolution":29,"intro":32,"sections":33,"ctaTitle":29,"ctaBody":29,"ctaButton":150,"ctaUrl":151,"relatedPosts":152},434,"traefik-v3-vps-reverse-proxy-docker-https",{"fr":12,"en":13,"ar":14,"es":10},"traefik-v3-vps-reverse-proxy","traefik-v3-vps-docker-reverse-proxy-https","traefik-v3-على-vps-ريفرس-بروكسي-docker","Traefik v3 en VPS: reverse proxy Docker con HTTPS automático","Despliega Traefik v3 en tu VPS: HTTPS automático con Let's Encrypt, enrutamiento por etiquetas Docker, dashboard seguro.",9,0,false,"2026-10-12T00:00:00+00:00","2026-10-13T14:10:28+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":25},3,"Despliegue","deploiement","bg-success\u002F10 text-success",[28],{"id":23,"name":24,"slug":25,"color":26,"icon":25},null,"\u002Fblog\u002Fcovers\u002Fbg.svg","\u002Fblog\u002Fcovers\u002Ftraefik-v3-vps-reverse-proxy-poster.svg","Tienes tres contenedores Docker en tu VPS: una app Node, un backend Python, una herramienta de administración. Cada uno escucha en un puerto diferente, gestionas los certificados manualmente, y cada nuevo servicio implica modificar nginx y recargar la configuración. Traefik v3 resuelve exactamente este problema: lee las labels Docker de tus contenedores, configura las rutas en tiempo real, renueva los certificados Let's Encrypt de forma autónoma, y expone un dashboard de monitorización — todo sin una sola línea de configuración nginx.",[34,38,49,52,74,77,84,87,90,98,137,140,147],{"type":35,"title":36,"body":37},"h2","Por qué Traefik v3 en lugar de nginx para tu stack Docker","nginx es un excelente servidor HTTP, pero su configuración es estática: cada nuevo servicio requiere un nuevo archivo vhost, una recarga del proceso y a menudo una modificación manual de la renovación ACME. Traefik fue diseñado para entornos en contenedores donde la topología cambia constantemente. En la versión 3, lleva esto aún más lejos con soporte nativo de HTTP\u002F3 (QUIC), una sintaxis de middlewares simplificada y un runtime más estricto que rechaza configuraciones ambiguas.",{"type":39,"items":40},"ul",[41,42,43,44,45,46,47,48],"Descubrimiento automático de contenedores mediante labels Docker — sin recarga manual al añadir un servicio.","HTTPS automático con Let's Encrypt (challenge TLS-ALPN-01 o HTTP-01): certificados obtenidos, almacenados y renovados sin intervención.","Middlewares nativos declarables por label: BasicAuth, rate-limit, cabeceras de seguridad, redirecciones — sin escribir ningún módulo nginx.","Dashboard integrado en tiempo real: visualiza todas las rutas, middlewares y estado de los certificados desde el navegador.","Soporte HTTP\u002F3 (QUIC) en una sola línea de configuración: mejora el rendimiento en conexiones de alta latencia.","Enrutamiento por Host, PathPrefix, Headers o cualquier combinación — las reglas se escriben con sintaxis expresiva de Go template.","API REST interna: consulta el estado del enrutador, inspecciona backends activos, automatiza integraciones CI\u002FCD.","Compatible con Docker Swarm, Kubernetes y Nomad — migra sin cambiar tus labels.",{"type":35,"title":50,"body":51},"Requisitos técnicos antes de empezar","Esta instalación requiere un VPS con Debian 12 o Ubuntu 22.04\u002F24.04 (los comandos son idénticos), Docker Engine 25+ y Docker Compose v2.24+ (el comando `docker compose` sin guion). Verifica que los puertos 80 y 443 están abiertos en entrada desde Internet en tu firewall. Necesitarás un nombre de dominio cuyos DNS controles: apunta un registro A a la IP de tu VPS antes de empezar, de lo contrario Let's Encrypt no podrá emitir el certificado. Se requiere una dirección de correo válida para las notificaciones de expiración ACME.",{"type":53,"title":54,"steps":55},"steps","Instalación completa de Traefik v3 paso a paso",[56,58,60,62,64,66,68,70,72],{"body":57},"**Crear la red Docker compartida.** Traefik debe estar en la misma red que los servicios que proxifica. Créala una sola vez: `docker network create traefik-public`. Esta red se referenciará en cada `docker-compose.yml` de tus servicios.",{"body":59},"**Crear el archivo `acme.json` para los certificados.** Let's Encrypt escribirá sus certificados en este archivo. Debe pertenecer a root con permisos estrictamente 600: `touch \u002Fopt\u002Ftraefik\u002Facme.json && chmod 600 \u002Fopt\u002Ftraefik\u002Facme.json`. Si los permisos son incorrectos, Traefik se negará a arrancar.",{"body":61},"**Crear el `docker-compose.yml` de Traefik.** Coloca el archivo en `\u002Fopt\u002Ftraefik\u002Fdocker-compose.yml` con la configuración completa: entrypoints TLS, el resolver ACME de Let's Encrypt y las labels del dashboard protegido.",{"body":63},"**Generar el hash BasicAuth para el dashboard.** Reemplaza la cadena hardcoded por un hash bcrypt real: `echo $(htpasswd -nB admin) | sed -e 's\u002F\\$\u002F\\$\\$\u002Fg'`. El comando `htpasswd` está en el paquete `apache2-utils`. Los signos `$` deben duplicarse (`$$`) en los valores de labels de Docker Compose.",{"body":65},"**Arrancar Traefik.** Desde `\u002Fopt\u002Ftraefik\u002F`: `docker compose up -d`. Verifica los logs: `docker compose logs -f traefik`. Debes ver `\"Starting provider\" providerType=Docker` y luego `\"Attaching router\" routerName=dashboard`.",{"body":67},"**Añadir un servicio detrás de Traefik.** En el `docker-compose.yml` de tu aplicación, únete a la red `traefik-public` (como externa) y añade las cuatro labels clave: `traefik.enable=true`, la regla `Host()`, el entrypoint `websecure`, el certresolver y el puerto del backend.",{"body":69},"**Verificar los certificados Let's Encrypt.** Inspecciona `acme.json`: `cat \u002Fopt\u002Ftraefik\u002Facme.json | python3 -m json.tool | grep -A3 'domain'`. Debes ver tus dominios con una fecha de expiración a 90 días. Alternativamente, el dashboard de Traefik lista todos los certificados activos en la pestaña *Routers*.",{"body":71},"**Validar la redirección HTTP→HTTPS.** Prueba con curl: `curl -v http:\u002F\u002Fapp.dominio.com`. Debes recibir un `301 Moved Permanently` a `https:\u002F\u002F`. Si obtienes conexión rechazada en el puerto 80, verifica que las reglas del firewall permiten ese puerto.",{"body":73},"**Activar HTTP\u002F3 en el navegador.** Añade la cabecera `Alt-Svc` mediante un middleware global en tus labels de Traefik. La cabecera `Alt-Svc: h3=\":443\"; ma=86400` indica al navegador que tu servidor soporta QUIC. Verifica con `curl --http3 https:\u002F\u002Fapp.dominio.com -v`.",{"type":35,"title":75,"body":76},"Middlewares esenciales: BasicAuth, rate-limit y cabeceras de seguridad","Los middlewares de Traefik se aplican mediante labels Docker directamente en el router del servicio afectado. Aquí están los tres middlewares más útiles en producción, declarados en el propio servicio sin tocar la configuración central de Traefik.",{"type":39,"items":78},[79,80,81,82,83],"**BasicAuth en una ruta privada** — para proteger una herramienta de administración (Adminer, Flower, etc.): añade las labels `traefik.http.middlewares.adminauth.basicauth.users` y `traefik.http.routers.myadmin.middlewares=adminauth` en el servicio.","**Rate-limit anti-abuso** — protege una API o un formulario de contacto: configura `ratelimit.average=100` (100 req\u002Fs de media) y `ratelimit.burst=50` (ráfaga de 50 tolerada), luego aplica el middleware al router.","**Cabeceras de seguridad HTTP** — `X-Frame-Options`, `X-Content-Type-Options`, `Strict-Transport-Security`: el middleware `headers` de Traefik acepta todos estos valores directamente como labels, sin archivo de configuración nginx separado.","**Redirect Regex** — para redirigir `www.dominio.com` a `dominio.com`: usa el middleware `redirectregex` con `permanent=true` y una regex `^https:\u002F\u002Fwww\\.(.+)` → `https:\u002F\u002F${1}`.","**Compress** — activa la compresión gzip\u002Fbrotli en todas las respuestas textuales con una sola label: `traefik.http.middlewares.compress.compress=true`. Aplícala globalmente añadiéndola como middleware por defecto en la configuración estática.",{"type":85,"body":86},"tip","**HTTP\u002F3 (QUIC) en dos líneas.** En la sección `command` del `docker-compose.yml` de Traefik, añade `--entrypoints.websecure.http3=true` y expón el puerto UDP 443 (`443:443\u002Fudp`). QUIC establece conexiones hasta un 30% más rápido en redes con pérdidas y elimina el head-of-line blocking de TLS sobre TCP. Los navegadores modernos (Chrome 87+, Firefox 88+, Safari 16.4+) lo activan automáticamente tras el primer intercambio mediante la cabecera `Alt-Svc`. No se necesitan cambios en la aplicación.",{"type":35,"title":88,"body":89},"Migración desde Traefik v2: cambios que rompen la compatibilidad","Traefik v3 introduce rupturas intencionales con v2 para limpiar ambigüedades acumuladas. La buena noticia: la migración es progresiva — las configuraciones v2 y v3 pueden coexistir durante la transición. Aquí están los puntos que rompen con más frecuencia.",{"type":39,"items":91},[92,93,94,95,96,97],"**`docker.swarmMode` renombrado a `docker.swarmmode`** (todo en minúsculas). Si tu config v2 usa la casing antigua, Traefik v3 la ignora silenciosamente y el descubrimiento Swarm no funciona.","**Regla `PathPrefix` sin trailing slash**: en v3, `PathPrefix('\u002Fapi')` es equivalente a `PathPrefix('\u002Fapi\u002F')` — el trailing slash se normaliza. Si tenías reglas que dependían de este comportamiento, revísalas.","**`tls.certificates` en configuración dinámica**: en v3, esta sección debe estar en la configuración estática (`traefik.yml`) o mediante un proveedor dedicado.","**Middleware `errors`**: el parámetro `query` se renombra a `url`. Cualquier configuración que use `errors.query` debe actualizarse a `errors.url`.","**Eliminación del soporte del protocolo `spiffe`**: si usabas autenticación SPIFFE en una infraestructura Consul, migra a una solución mTLS estándar antes de actualizar a v3.","**Configuración `constraints` de Docker**: la sintaxis de las restricciones ha cambiado para alinearse con el formato estándar de tags Docker. Verifica tu lista de restricciones si filtrabas servicios por tag.",{"type":99,"title":100,"headers":101,"rows":106},"comparison","Traefik v3 vs nginx vs Caddy: ¿qué reverse proxy para Docker?",[102,103,104,105],"Criterio","Traefik v3","nginx","Caddy v2",[107,112,117,122,127,132],[108,109,110,111],"Configuración","Labels Docker, TOML o YAML — recarga automática en caliente","Archivos vhost estáticos — recarga manual (`nginx -s reload`)","Caddyfile declarativo — recarga automática en caliente",[113,114,115,116],"HTTPS automático","Integrado de forma nativa (ACME v2, challenge TLS-ALPN o HTTP-01)","Requiere certbot + cron + script de recarga","Integrado de forma nativa, el más sencillo de configurar (una línea)",[118,119,120,121],"Enrutamiento dinámico Docker","Nativo: descubrimiento en tiempo real de contenedores via Docker socket","No nativo: requiere nginx-proxy o modificación manual","Nativo mediante el plugin caddy-docker-proxy (no oficial)",[123,124,125,126],"HTTP\u002F3 (QUIC)","Soportado nativamente desde v3 (2024), activación en una línea","Soportado desde nginx 1.25 (2023), configuración adicional necesaria","Soportado nativamente desde Caddy 2.6 (2022)",[128,129,130,131],"Rendimiento bruto","Ligeramente inferior a nginx en caudales muy altos (>50k req\u002Fs)","Referencia industrial para alto caudal y concurrencia","Comparable a nginx para la mayoría de cargas web estándar",[133,134,135,136],"Curva de aprendizaje","Moderada — conceptos de router\u002Fservicio\u002Fmiddleware a asimilar","Alta para HTTPS + Docker — documentación fragmentada","Baja — la configuración más concisa para casos simples",{"type":35,"title":138,"body":139},"Solución de problemas: los cinco errores más frecuentes","La mayoría de los problemas de Traefik en producción vienen de tres fuentes: los permisos del archivo `acme.json`, la red Docker ausente, y las labels mal escapadas en Compose. Aquí están los errores con sus mensajes reales.",{"type":39,"items":141},[142,143,144,145,146],"**`level=error msg=\"Unable to obtain ACME certificate\" error=\"acme: error 403\"`** — Let's Encrypt no puede verificar tu dominio. Comprueba que el puerto 80 está abierto desde Internet y que el DNS de tu dominio apunta a la IP del VPS.","**`level=error msg=\"The acme.json file has bad file permissions\"` y Traefik se niega a arrancar** — los permisos del archivo no son 600. Corrige: `chmod 600 \u002Fopt\u002Ftraefik\u002Facme.json`. Este check es intencionalmente bloqueante.","**Servicio visible en el dashboard de Traefik pero error 502 Bad Gateway** — el contenedor del servicio no está en la red `traefik-public`. Verifica con `docker inspect \u003Ccontainer> | grep -A20 Networks`. Añade la red en el `docker-compose.yml` del servicio y recrea el contenedor.","**Labels ignoradas silenciosamente, ruta ausente del dashboard** — olvidaste `traefik.enable=true` en el servicio, o `--providers.docker.exposedbydefault=false` está activo y la label está ausente.","**`invalid character '$' in label value`** — los signos `$` en los hashes BasicAuth no están duplicados en el archivo Compose. La sintaxis correcta es `$$2y$$10$$...` en `docker-compose.yml`. Si pasas el valor mediante una variable de entorno, un solo `$` es suficiente.",{"type":35,"title":148,"body":149},"Siguiente paso: reforzar tu stack Docker para producción","Traefik v3 gestiona el enrutamiento y TLS, pero un stack Docker listo para producción requiere más: healthchecks en los contenedores, política de reinicio, logs centralizados, rotación de secretos, copias de seguridad de volúmenes. Consulta nuestra guía **docker-compose-production-checklist** para una lista de verificación completa a aplicar antes de poner en producción cualquier servicio en contenedor en tu VPS.","Descubre nuestros VPS Cloud","\u002Fvps-cloud",[153,169,189,204],{"id":154,"slug":155,"slugs":156,"title":160,"excerpt":161,"readTime":23,"views":162,"isPinned":19,"publishedAt":163,"updatedAt":164,"category":165,"categories":166,"featuredImage":29,"bgImage":30,"posterImage":168,"relatedSolution":29},38,"desplegar-con-traefik",{"fr":157,"en":158,"ar":159,"es":155},"deployer-avec-traefik","deploy-your-applications-with-traefik-on-a-vps","انشر-تطبيقاتك-باستخدام-traefik-على-خادم-vps","Desplegar sus aplicaciones con Traefik en un VPS","Despliegue Traefik como reverse proxy en su VPS: enrutamiento automático de los contenedores Docker, certificados SSL Let's Encrypt y balanceo de carga.",2,"2026-05-13T00:00:00+00:00","2026-09-07T11:26:10+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":25},[167],{"id":23,"name":24,"slug":25,"color":26,"icon":25},"\u002Fblog\u002Fcovers\u002Fdeployer-avec-traefik-poster.svg",{"id":170,"slug":171,"slugs":172,"title":176,"excerpt":177,"readTime":178,"views":179,"isPinned":19,"publishedAt":180,"updatedAt":164,"category":181,"categories":186,"featuredImage":29,"bgImage":30,"posterImage":188,"relatedSolution":29},227,"elegir-reverse-proxy-vps-caddy-traefik-nginx",{"fr":173,"en":174,"ar":175,"es":171},"choisir-reverse-proxy-vps-caddy-traefik-nginx","caddy-traefik-or-nginx-proxy-manager-which-to-choose","caddy-أم-traefik-أم-nginx-proxy-manager-أيهما-تختار","Caddy, Traefik o Nginx Proxy Manager: ¿cuál elegir?","Guía para elegir entre Caddy, Traefik y Nginx Proxy Manager en un VPS con Docker: criterios, tabla comparativa y recomendaciones según su perfil.",10,1,"2026-08-06T00:00:00+00:00",{"id":182,"name":183,"slug":184,"color":185,"icon":184},5,"Comparativas","comparatif","bg-info\u002F10 text-info",[187],{"id":182,"name":183,"slug":184,"color":185,"icon":184},"\u002Fblog\u002Fcovers\u002Fchoisir-reverse-proxy-vps-caddy-traefik-nginx-poster.svg",{"id":190,"slug":191,"slugs":192,"title":196,"excerpt":197,"readTime":17,"views":18,"isPinned":19,"publishedAt":198,"updatedAt":199,"category":200,"categories":201,"featuredImage":29,"bgImage":30,"posterImage":203,"relatedSolution":29},384,"nginx-proxy-manager-vps-proxy-inverso",{"fr":193,"en":194,"ar":195,"es":191},"nginx-proxy-manager-vps-reverse-proxy","nginx-proxy-manager-vps-reverse-proxy-setup","nginx-proxy-manager-على-vps-إعداد-reverse-proxy","Nginx Proxy Manager en VPS: proxy inverso con SSL automático","Configura un proxy inverso visual en tu VPS con Nginx Proxy Manager: SSL Let's Encrypt automático, enrutamiento Docker multi-app, sin editar nginx.conf.","2026-09-26T00:00:00+00:00","2026-09-29T14:40:42+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":25},[202],{"id":23,"name":24,"slug":25,"color":26,"icon":25},"\u002Fblog\u002Fcovers\u002Fnginx-proxy-manager-vps-reverse-proxy-poster.svg",{"id":205,"slug":206,"slugs":207,"title":211,"excerpt":212,"readTime":213,"views":18,"isPinned":19,"publishedAt":180,"updatedAt":214,"category":215,"categories":216,"featuredImage":29,"bgImage":30,"posterImage":218,"relatedSolution":29},229,"checklist-docker-compose-en-produccion",{"fr":208,"en":209,"ar":210,"es":206},"docker-compose-production-checklist","docker-compose-in-production-10-point-checklist","docker-compose-في-الإنتاج-قائمة-التحقق-من-10-نقاط","Docker Compose en producción: checklist de 10 puntos","Checklist de Docker Compose en producción: 10 ajustes esenciales, health checks, secretos sin downtime, estrategia de rollback, solución de errores comunes.",12,"2026-09-29T14:40:45+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":25},[217],{"id":23,"name":24,"slug":25,"color":26,"icon":25},"\u002Fblog\u002Fcovers\u002Fdocker-compose-production-checklist-poster.svg",1791901123904]