[{"data":1,"prerenderedAt":199},["ShallowReactive",2],{"post-\u002Fblog\u002Ftraeffik":3},{"id":4,"title":5,"body":6,"date":189,"description":190,"extension":191,"meta":192,"navigation":193,"path":194,"seo":195,"sitemap":196,"stem":197,"__hash__":198},"blog\u002Fblog\u002Ftraeffik.md","Traefik",{"type":7,"value":8,"toc":185},"minimark",[9,13,22,28,33,41,44,48,56,175,178,181],[10,11,12],"p",{},"Configuring Nginx manually feels like doing taxes. You deploy a container, you want it accessible. Immediately.",[10,14,15,21],{},[16,17,5],"a",{"href":18,"rel":19},"https:\u002F\u002Fgithub.com\u002Ftraefik\u002Ftraefik",[20],"nofollow"," solves this. It’s an edge router that listens to your infrastructure. It watches your Docker socket (or Kubernetes API), detects new services, and creates routes on the fly.",[23,24,25],"blockquote",{},[10,26,27],{},"\"Træfik (pronounced traffic) is a modern HTTP reverse proxy and load balancer that makes deploying microservices easy.\"\n— Traefik Docs",[29,30,32],"h3",{"id":31},"why-it-matters","Why it matters",[10,34,35,36,40],{},"Static configuration is dead. If you are setting up complex networks or routing traffic through ",[16,37,39],{"href":38},"\u002Fblog\u002Fisp-proxy","custom ISP proxies",", you need a gateway that adapts instantly.",[10,42,43],{},"Traefik handles the ingress automatically while you focus on where the traffic goes. It also handles Let's Encrypt certificates without you lifting a finger.",[29,45,47],{"id":46},"the-setup","The Setup",[10,49,50,51,55],{},"Don't overthink it. A simple ",[52,53,54],"code",{},"docker-compose"," gets you running.",[57,58,63],"pre",{"className":59,"code":60,"language":61,"meta":62,"style":62},"language-yaml shiki shiki-themes github-light github-dark","version: '3'\nservices:\n  traefik:\n    image: 'traefik:v2.10'\n    command:\n      - '--api.insecure=true'\n      - '--providers.docker=true'\n    ports:\n      - '80:80'\n      - '8080:8080'\n    volumes:\n      - '\u002Fvar\u002Frun\u002Fdocker.sock:\u002Fvar\u002Frun\u002Fdocker.sock:ro'\n","yaml","",[52,64,65,82,91,99,110,118,127,135,143,151,159,167],{"__ignoreMap":62},[66,67,70,74,78],"span",{"class":68,"line":69},"line",1,[66,71,73],{"class":72},"s9eBZ","version",[66,75,77],{"class":76},"sVt8B",": ",[66,79,81],{"class":80},"sZZnC","'3'\n",[66,83,85,88],{"class":68,"line":84},2,[66,86,87],{"class":72},"services",[66,89,90],{"class":76},":\n",[66,92,94,97],{"class":68,"line":93},3,[66,95,96],{"class":72},"  traefik",[66,98,90],{"class":76},[66,100,102,105,107],{"class":68,"line":101},4,[66,103,104],{"class":72},"    image",[66,106,77],{"class":76},[66,108,109],{"class":80},"'traefik:v2.10'\n",[66,111,113,116],{"class":68,"line":112},5,[66,114,115],{"class":72},"    command",[66,117,90],{"class":76},[66,119,121,124],{"class":68,"line":120},6,[66,122,123],{"class":76},"      - ",[66,125,126],{"class":80},"'--api.insecure=true'\n",[66,128,130,132],{"class":68,"line":129},7,[66,131,123],{"class":76},[66,133,134],{"class":80},"'--providers.docker=true'\n",[66,136,138,141],{"class":68,"line":137},8,[66,139,140],{"class":72},"    ports",[66,142,90],{"class":76},[66,144,146,148],{"class":68,"line":145},9,[66,147,123],{"class":76},[66,149,150],{"class":80},"'80:80'\n",[66,152,154,156],{"class":68,"line":153},10,[66,155,123],{"class":76},[66,157,158],{"class":80},"'8080:8080'\n",[66,160,162,165],{"class":68,"line":161},11,[66,163,164],{"class":72},"    volumes",[66,166,90],{"class":76},[66,168,170,172],{"class":68,"line":169},12,[66,171,123],{"class":76},[66,173,174],{"class":80},"'\u002Fvar\u002Frun\u002Fdocker.sock:\u002Fvar\u002Frun\u002Fdocker.sock:ro'\n",[10,176,177],{},"Now, just add labels to your other containers. Traefik does the rest.",[10,179,180],{},"Stop wasting time reloading configurations.",[182,183,184],"style",{},"html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":62,"searchDepth":84,"depth":84,"links":186},[187,188],{"id":31,"depth":93,"text":32},{"id":46,"depth":93,"text":47},"2025-11-28","Dynamic routing that actually works","md",{},true,"\u002Fblog\u002Ftraeffik",{"title":5,"description":190},{"loc":194},"blog\u002Ftraeffik","A1snfp5HcnZZS5vdhEXDoJdq9cgBi6wZHqhNj5T_qCc",1783186628091]