Last verified:
Every Docker self-hosting stack hits the same fork in the road: something has to route incoming traffic to containers and keep HTTPS certificates fresh. The two answers you will find in every r/selfhosted thread are Nginx Proxy Manager - nginx with a friendly web UI - and Traefik, the cloud-native proxy that configures itself from container labels.
Both terminate TLS, both renew Letโs Encrypt automatically, both are free. They differ in philosophy: clicks versus code.
TL;DR: Which One Should You Pick?
Pick Nginx Proxy Manager if you want a working reverse proxy in fifteen minutes, prefer configuring in a web UI, and your stack changes every few weeks, not every few hours.
Pick Traefik if your services live in docker-compose files anyway, you want routing to update itself when containers change, and you value config that lives in git.
Traefik vs NPM at a Glance
| Traefik | Nginx Proxy Manager | |
|---|---|---|
| Configuration | Docker labels / YAML (code) | Web UI (clicks) |
| Service discovery | Automatic from Docker/K8s | Manual per host |
| Letโs Encrypt | Built in, incl. DNS challenge | Built in, incl. DNS challenge |
| Middleware | Rich (auth, rate limit, headers) | Basic (access lists, redirects) |
| Forward auth (SSO) | First-class | Possible, more manual |
| Config in version control | Natural | Not really (database) |
| Learning curve | Real but bounded | Minimal |
| RAM at idle | ~50-150 MB | ~50-150 MB |
Where Nginx Proxy Manager Wins
Time to first HTTPS. Deploy the container, open the UI, add a proxy host, request a certificate: done before your coffee cools. For a stack of five to twenty mostly stable services, that simplicity is not beginner training wheels, it is the appropriate amount of tooling. Underneath sits boring, battle-proven nginx, and when something misbehaves, decades of nginx debugging lore apply directly.
The limits are structural: configuration lives in a database instead of files, so there is no meaningful git history, no code review, and no automatic reaction when containers come and go.
Where Traefik Wins
Autonomy at scale. Traefik watches the Docker socket and builds its routing table from labels in your compose files - deploy an app and its route, TLS certificate, and middleware exist seconds later without touching the proxy. Configuration lives next to the services it describes, versioned and reviewable. The middleware system is the sleeper feature: forward auth in front of any app (pairs perfectly with Authentik), rate limiting, IP allowlists, and header policies, all declared per service.
The cost is the learning curve and debugging that happens in labels and logs rather than a UI.
VPS Requirements Compared
Both proxies are rounding errors on the host that runs your apps:
| Spec | Traefik | Nginx Proxy Manager |
|---|---|---|
| Minimum RAM | 256 MB | 256 MB |
| Recommended RAM | 512 MB | 512 MB |
| Storage | 5-10 GB | 5-10 GB |
| CPU | Low | Low |
| Key requirement | Host bandwidth + latency | Same |
Since every request to every app transits the proxy, the providerโs network is what you are actually buying. Hetzner from 5.49 EUR per month includes 20 TB of traffic and consistently low European latency - our default for proxy-fronted stacks. Vultr from 5 USD, with 32 locations, minimizes round-trips for globally scattered users, and Contabo from 5.99 EUR provides the cheapest RAM headroom for the apps behind the proxy. Deep dives: best VPS for Traefik and best VPS for Nginx Proxy Manager, plus the full VPS comparison.
Verdict
This is a workflow choice, not a quality contest. NPM turns proxying into a settings page; Traefik turns it into infrastructure-as-code. Start with NPM if the phrase โDocker labelsโ made you tired; start with Traefik if your compose files are already in git and you would rather never click through a certificate form again.
The common migration path runs one way - NPM first, Traefik once the stack grows dynamic - and that is a perfectly good way to learn both.
Frequently asked questions
Is Nginx Proxy Manager good enough for a serious self-hosted setup?
Yes, up to a point that most homelabs never pass. NPM fronts dozens of services reliably, renews Let's Encrypt certificates on schedule, and its access lists cover basic protection. The ceiling appears when you want per-service middleware, config in version control, or automatic wiring of frequently changing containers - the workflows Traefik was designed around. Until then, NPM is not a compromise.
How steep is the Traefik learning curve really?
One honest weekend. The concepts - entrypoints, routers, services, middlewares - are unfamiliar for an afternoon, then the model clicks. After that, exposing a new app is two or three Docker labels in your compose file and no clicking anywhere. People who abandon Traefik usually skipped the concepts and copied labels they did not understand; learn the four terms first and it stays predictable.
Do Traefik or NPM need their own VPS?
No - the proxy should live on the same VPS as the Docker apps it fronts, where it consumes almost nothing: both idle around 50 to 150 MB RAM. What matters is the host's network quality and bandwidth allowance, since every byte of every app flows through it. Buy network and uptime, not extra cores, and any 4 to 8 GB general-purpose plan hosting your stack carries the proxy for free.