Traefik
Traefik v3 serves as the reverse proxy for all dde projects, routing HTTP and HTTPS traffic based on hostname.
What It Does
Section titled “What It Does”- Routes traffic to project containers based on their configured hostname (e.g.
myapp.test) - Provides both HTTP (port 80) and HTTPS (port 443) access
- Automatically picks up new projects and TLS certificates without restart
- Traefik labels are set automatically by
project:initandproject:up
Network
Section titled “Network”Traefik runs on the shared dde network. To reach project containers, project:up also attaches Traefik to each project’s per-project network (dde-services-<project> for the main checkout, dde-services-<project>-<suffix> for a worktree) and project:down detaches it again. Project containers themselves live only on the per-project network — joining dde as well would let parallel checkouts (main + worktree) shadow each other’s service-name DNS aliases.
Docker does not preserve runtime network connect attachments across a container re-create, so system:update and system:down + system:up would otherwise leave previously running projects unreachable. Traefik reconciles its attachments on every start: it discovers every existing dde-services-* network that still has project containers and re-attaches itself, restarting once so its docker provider picks up the new networks.
See Core Concepts → Networking for the full picture.
TLS certificates are generated automatically by mkcert when you run project:up. HTTPS works out of the box for all .test domains.
Routing Configuration
Section titled “Routing Configuration”In v2, Traefik routing is configured via Docker labels, which are generated automatically by project:init based on your project’s hostname configuration in .dde/config.yml. You do not need to set labels manually.
The generated labels follow the Traefik v3 format, e.g.:
labels: - "traefik.enable=true" - "traefik.http.routers.myapp.rule=Host(`myapp.test`)" - "traefik.http.routers.myapp.tls=true"Migration from v1
Section titled “Migration from v1”In v1, routing was configured via VIRTUAL_HOST and VIRTUAL_PORT environment variables on containers. These are no longer used in v2. Run dde project:init to regenerate the correct Traefik label configuration for your project.