Ambiente Docker locale per usare domini .test su porta 80/443 con HTTPS locale via mkcert, senza esporre porte per ogni singolo progetto.
In pratica:
- Traefik è l’unico servizio che espone
80:80e443:443sulla macchina - gli altri container restano su rete Docker interna
- ogni app risponde tramite hostname (es.
api.test,app.test) - i certificati TLS locali sono caricati da
certs/
- Docker + Docker Compose
mkcertinstallato (vedi certs/README.md)- Domini
.testrisolti in locale verso127.0.0.1(es. tramite/etc/hosts)
Esempio /etc/hosts:
127.0.0.1 whoami.test api.testDalla root del repository:
cp traefik/dynamic.example.yml traefik/dynamic.ymlPoi avvia lo stack:
docker compose up -dTest base:
- Configurazione statica Traefik: traefik/static.yml
- Configurazione dinamica (TLS + middleware): traefik/dynamic.yml
- Certificati locali: cartella certs
- Rete condivisa tra progetti:
localproxy
L’idea è collegare il tuo progetto alla rete localproxy e dichiarare le label Traefik sul servizio, senza ports esposte (oppure con porte esposte non significative).
Esempio minimale per un servizio api interno su porta 3000:
services:
api:
image: node:20-alpine
working_dir: /app
command: sh -c "npm ci && npm run dev"
volumes:
- ./:/app
labels:
- traefik.enable=true
- traefik.docker.network=localproxy
- traefik.http.routers.api.rule=Host(`api.test`)
- traefik.http.routers.api.entrypoints=websecure
- traefik.http.routers.api.tls=true
- traefik.http.services.api.loadbalancer.server.port=3000
networks:
- localproxy
networks:
localproxy:
external: true
name: localproxyNote:
- non aggiungere
ports:al servizio (Traefik fa da ingresso unico) loadbalancer.server.portdeve essere la porta interna reale del container- se usi più servizi, assegna hostname diversi (
app.test,admin.test, ecc.)
Dalla cartella certs:
mkcert -cert-file api.test.pem -key-file api.test-key.pem api.testSe non l’hai già fatto, copia il file di esempio:
cp traefik/dynamic.example.yml traefik/dynamic.ymlPoi apri traefik/dynamic.yml e aggiungi i tuoi certificati sotto tls.certificates:
tls:
certificates:
- certFile: /etc/traefik/certs/api.test.pem
keyFile: /etc/traefik/certs/api.test-key.pem- aggiungi
api.testa/etc/hosts - riavvia questo stack:
docker compose up -d --force-recreate- Scegli un dominio locale (
nomeprogetto.test) - Crea cert con
mkcert - Aggiungi label Traefik al servizio
- Collega il progetto alla rete esterna
localproxy - Aggiorna
/etc/hosts - Avvia stack Traefik + progetto
Con questo setup puoi eseguire più progetti in parallelo usando sempre 80/443, senza conflitti di porte locali.