Online zetten: een voordeur met Traefik
Hier bouw je op verder: Een map maken met mkdir en Een bestand maken met nano
Weet je dit niet meer zeker? Lees het terug voordat je verdergaat.
Een bezoeker typt een naam zonder poortnummer: http://… gaat naar poort 80, https://… naar poort 443. Op een server draaien vaak meer sites, en ze kunnen niet allemaal poort 80 hebben. Daarom staat er één programma op poort 80 en 443 dat elk verzoek doorgeeft aan de juiste site: een reverse proxy, de voordeur van je server.
browser van de bezoeker → Traefik, op poort 80 en 443 → de container van jouw site
Hier gebruik je Traefik. Het draait zelf in een container, en kijkt bij Docker welke andere containers er zijn. Een container die een paar labels heeft (regels met instellingen), krijgt vanzelf een plek achter de voordeur. Op de server regelt Traefik ook HTTPS, in les 34. Je start eerst de voordeur zelf, zonder site erachter.
Een netwerk voor de voordeur
Traefik en je site moeten elkaar kunnen bereiken. Daarvoor maak je één keer een netwerk van Docker, web:
docker network create web
Elke container in web kan de andere bereiken, en containers buiten web niet.
Traefik starten
De voordeur hoort niet bij één site, dus hij krijgt een eigen map, naast je project:
mkdir ~/traefik
cd ~/traefik
nano compose.yaml
services:
traefik:
image: traefik:v3
command:
- --providers.docker=true
- --providers.docker.exposedbydefault=false
- --entrypoints.web.address=:80
ports:
- "80:80"
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
networks:
- web
restart: unless-stopped
networks:
web:
external: true
| Regel | Betekenis |
|---|---|
image: traefik:v3 | geen Dockerfile: Docker haalt Traefik van Docker Hub |
--providers.docker=true | kijk bij Docker welke containers er zijn |
--providers.docker.exposedbydefault=false | alleen containers met traefik.enable=true komen achter de voordeur |
--entrypoints.web.address=:80 | een ingang met de naam web, op poort 80 |
/var/run/docker.sock:…:ro | hierlangs vraagt Traefik aan Docker welke containers er zijn |
external: true | het netwerk web bestaat al, maak het niet opnieuw |
docker compose up -d
Open http://gastenboek.localhost in je browser op Windows. Een naam die eindigt op .localhost wijst in je browser altijd naar je eigen computer, en daar luistert Traefik nu op poort 80.
Met docker.sock kan Traefik Docker alles vragen, en :ro verandert daar weinig aan. Geef die toegang daarom alleen aan een programma dat je vertrouwt en bijhoudt, zoals Traefik zelf.
Er gaat iets mis
client version 1.24 is too old
In het logboek van Traefik staat steeds:
Error response from daemon: client version 1.24 is too old. Minimum supported API version is 1.40, please upgrade your client to a newer version
Oorzaak: een oude versie van Traefik, zoals traefik:v3.5, praat met Docker op een manier die Docker 29 niet meer kent.
Oplossing: gebruik image: traefik:v3, en haal de nieuwste op met docker compose pull en docker compose up -d.
network web declared as external, but could not be found
Oorzaak: het netwerk web bestaat niet.
Oplossing: docker network create web, en daarna opnieuw docker compose up -d.
address already in use
failed to bind host port 0.0.0.0:80/tcp: address already in use
Oorzaak: een ander programma heeft poort 80 al. Vaak is het nginx uit Diensten in de Linux-cursus.
Oplossing: zet het uit met sudo systemctl disable --now nginx, en start Traefik opnieuw.
Door naar les 23: je site achter Traefik.