This is an original planning guide. It is not a vendor manual, an official standard, or legal advice. Example addresses use documentation ranges. Review every command before you paste it.
Where Traefik sits
Traefik is a reverse proxy. Static configuration sets entrypoints and providers. Dynamic configuration sets routers and services. Docker labels are one provider. A file provider is enough for a lab that is not a cluster. Do not install a container runtime only to try a sample that assumed Docker.
The lab entrypoint binds 127.0.0.1:8080 and a router sends one path to a service you run, or to a tiny local service. The dashboard and the API are admin surfaces. They bind to loopback or stay off. They do not ride along on the public entrypoint.
A certificate resolver that talks to a public CA runs only when the name is yours and DNS points here. The lab does not enable one. example.com in a sample is documentation.
The generators draft routers, services, and TLS. Read the entrypoint address. The migration guide's Nginx-to-Traefik converter is a draft of a later move, not the first lab.
A loopback site you can fetch
Step 1 for Traefik is the provider. Use a file provider and write one router and one service. A Docker-only sample is out of scope if you have no Docker. Check: Traefik loads the file without a container runtime. If the check fails, do not reload again and do not point a name at this host. Restore the previous file. The generators for Traefik draft a site in the browser and do not open a firewall. Delete every listen-on-every-address line for the lab. Replace prompt-for-this. A config from a neighbouring web server is not this syntax.
Step 2 for Traefik is the entrypoint. Bind it to 127.0.0.1:8080. A public bind is the web guide's later decision. Check: A local request hits the service. If the check fails, do not reload again and do not point a name at this host. Restore the previous file. The generators for Traefik draft a site in the browser and do not open a firewall. Delete every listen-on-every-address line for the lab. Replace prompt-for-this. A config from a neighbouring web server is not this syntax.
Step 3 for Traefik is the dashboard. Leave it off or on loopback. An API on the public entrypoint is an admin port. Check: An outside address cannot open the dashboard. If the check fails, do not reload again and do not point a name at this host. Restore the previous file. The generators for Traefik draft a site in the browser and do not open a firewall. Delete every listen-on-every-address line for the lab. Replace prompt-for-this. A config from a neighbouring web server is not this syntax.
Step 4 for Traefik is the resolver. Do not enable a public certificate resolver in this lab. A sample resolver will try to talk to a CA. Check: Logs show no certificate attempt. If the check fails, do not reload again and do not point a name at this host. Restore the previous file. The generators for Traefik draft a site in the browser and do not open a firewall. Delete every listen-on-every-address line for the lab. Replace prompt-for-this. A config from a neighbouring web server is not this syntax.
Step 5 for Traefik is both files. Copy static and dynamic configs before you reload. Rollback needs both. Check: The previous copies are in the ticket's file list. If the check fails, do not reload again and do not point a name at this host. Restore the previous file. The generators for Traefik draft a site in the browser and do not open a firewall. Delete every listen-on-every-address line for the lab. Replace prompt-for-this. A config from a neighbouring web server is not this syntax.
# Traefik lab. Review before you paste.
# File provider. Entrypoint on 127.0.0.1:8080.
# Dashboard off or bound to loopback.
# No public certificate resolver in the lab.
# One router, one service you run.
# prompt-for-this is not a password to keep.
Certificates come after the name is yours
Add the resolver in a later window with a name you control. Until then the lab is plain HTTP on loopback, which proves the router and the service.
A mis-set resolver that tries to obtain a certificate for a name you do not own is a failed lab, even if the route would have worked on HTTP.
Rollback is the previous static and dynamic files, both copied, because Traefik splits them.
What not to paste
Traefik is not Nginx. Do not paste a server block into the dynamic file.
Docker is not required to learn the file provider.
The dashboard is not a public status page.
The hour you stop
Write the hostname, the role, and the clock time before you change Traefik. If this host is also serving users, it is not the lab and this first hour belongs on a spare. The provisioning guide is how the spare gets built. A change without a spare is a change you can still postpone.
Keep the console or the out-of-band path open for the whole hour. Reloading a network service, a firewall, or a secure-shell daemon from the only session is how a lab becomes a drive across town. The hardware guide names that path for a physical machine. A virtual machine uses the hypervisor console. A cloud instance uses the serial console the platform gives you. Test it before the reload, not after.
The address 192.0.2.10/24 and the gateway 192.0.2.1 are documentation. They belong in the lab note and nowhere else. On a real network, use the prefix the network desk already assigned. On a cloud instance, use the address the platform assigned and do not hard-code the documentation range into user-data. If a generator filled the documentation address into a production draft, delete it.
prompt-for-this is a reminder that a secret is missing. It is not a password you set, not a token you commit, and not a string you leave in a configuration file because the service started. The real secret lives in the password store. The ticket says who can read it. A file that still contains the reminder is a file you have not finished.
One service is enough for the first hour on Traefik. The purpose from the fundamentals page says which service. Every other package stays uninstalled until its own guide has a ticket. A host that enables a web server, a database, and a queue in the first hour has three changes and no proof. Finish the login, the address, and the update. Then stop.
Read the package transaction before you accept it. A count of packages is not a review. If the list contains a repository you did not add, stop. If it contains a kernel, the patch guide's reboot decision applies and the console stays open. If it contains software this role does not need, remove that line from the plan rather than installing it and disabling it later.
The previous image, the previous configuration file, or the previous package version is the rollback. Write the path down while the host still works. A rollback you invent after a failed reload is a guess. The migration guide assumes the old copy is still there. Do not delete it in the same hour to free a disk.
When the checks pass, copy the notes into the ticket and leave the host alone. The next host waits until a second person can repeat the login and the address from the notes. A fleet built from memory drifts. A fleet built from the file the provisioning guide stored stays boring, which is the point of Traefik in production.
If a step on Traefik fails twice, stop for the day. The failure is the result. Adding a forum command beside a half-applied config produces a host nobody can rebuild. Rebuild from the image instead. The time you lose is smaller than the time you will spend explaining the hybrid.
Hand the finished lab to the guide that matches the role: web, mail, storage, backup, or hardening. Traefik being installed is not the same as the role being ready. The role guide has its own proof. Do not skip it because the package manager exited without an error.
A second person reads the hostname, the address, and the rollback path aloud before you build the next host. If they cannot find those three in the ticket, the notes are not done. Silence is not agreement. The check is the sentence they repeat back.
Store the working notes next to the image version. A month from now Traefik will still boot from that pair, and the chat where you remembered a flag will be gone. The file is the memory. The host is replaceable. That is the whole point of writing this hour down.
Traefik checks before a public listener
Confirm this before you call the change done: Traefik is the process that is listening, confirmed on the host. The lab site binds to 127.0.0.1, not to every address. The config test passed before the reload. A fetch of the test page from the host itself succeeded. The admin or dashboard port is not reachable from a public address. The document root is readable by the worker and not writable by it. No certificate was requested for a name you do not control. The generator draft was edited until it matched this file. The previous config is saved. prompt-for-this was not left in a password field. Logs from the test do not contain a secret. A second person read the listen address. The dashboard is not public. No public certificate resolver ran. The file provider is what loaded the route. Static and dynamic previous files are both saved. And docker was not installed solely for this lab. If one of those fails, stop.
Tools for this guide
These tools run in the browser on this site. They do not log into your machines.
- Traefik Router & Service Config Generator
- Traefik Reverse Proxy Config Generator
- Traefik SSL/TLS Config Generator
Related pillar guides
Guides in this cluster
These supporting pages belong to this pillar.
- Cheat Sheet: Traefik Config Cheat Sheet
- Troubleshooting: Traefik Troubleshooting Guide
- How-To: How to Configure Router & Service on Traefik
- How-To: How to Configure Reverse Proxy on Traefik
- How-To: How to Configure SSL/TLS on Traefik
- How-To: How to Configure HTTP to HTTPS Redirect on Traefik
- How-To: How to Configure WWW Redirect on Traefik
- How-To: How to Configure Gzip & Brotli Compression on Traefik
- How-To: How to Configure Browser Caching on Traefik
- How-To: How to Configure Rate Limiting on Traefik
- How-To: How to Configure Basic Authentication on Traefik
- How-To: How to Configure Security Headers on Traefik
- How-To: How to Configure CORS on Traefik
- How-To: How to Configure WebSocket Proxy on Traefik
- How-To: How to Configure IP Allow/Deny on Traefik
- How-To: How to Configure URL Rewrite on Traefik
- How-To: How to Configure Access Log Format on Traefik
- How-To: How to Configure Maintenance Mode on Traefik
- How-To: How to Configure Request Size Limits on Traefik
- How-To: How to Configure Timeout Tuning on Traefik
- How-To: How to Configure Multiple Sites on One Server on Traefik