Come on and fight me…
I just tried out caddy for the first time and found it to be fantastic, I have used both Traefik and Nginx Proxy Manager extensively and although they were both great, the simplicity of the Caddfilr is fantastic. With a few snippets configured, I can add a host with a single line that just defines the port and url, it’s like magic.
Has anyone got any known traps ( or tips) with caddy to make it useful.
The issues I have had previously with Traefik were the need to have multiplelines to configure it (and configure the host and router separately), and the difference between local docker services ( I do like using labels to configure, but with lots of services it gets a bit fragmented and difficult toanahe) and remote services ( had to use the file config).
With NPM, I find using the GUI to configure the servers difficult ( and challenging to keep consistent ) and I had a time that it forgot something ( can’t remember if it was certificates or something else ) and that was the straw that broke the camel’s back for me.
Anyway, currently I am happy with caddy and am not planning on replacing it (at least for a month or two :D ). It would be nice if there was a GUI, but no big drama honestly, and the text config is great.
It’s interesting how different people have different approaches … I migrate from Caddy to Traefik because I found it magical … Whenever I need to add another selfhosted service I just adapt a docker-compose like this one
version: '3.8' services: homeassistant: container_name: homeassistant image: ghcr.io/home-assistant/home-assistant:stable #image: homeassistant/raspberrypi4-homeassistant:stable volumes: - ./media/:/media - ./config/:/config - /etc/localtime:/etc/localtime:ro environment: - TZ=${TZ} restart: unless-stopped networks: - t2_proxy - backend labels: - traefik.enable=true - traefik.docker.network=t2_proxy - traefik.http.routers.homeassistant.rule=Host(`home.mydomain.bla.bla`) - traefik.http.routers.homeassistant.entrypoints=websecure - traefik.http.routers.homeassistant.tls.certresolver=myresolver - traefik.http.services.homeassistant.loadbalancer.server.port=8123 networks: backend: external: true t2_proxy: external: true
As you can see I just need to change the host and the port in the labels to have a new domain pointing to the right port … I wasn’t able to find an easier way to add a new service to caddy
This! I’ve setup Traefik and use traefik-redis and traefik-kop to pull in labels from my other Raspberry Pis so I can spin up my containers on any of the Docker hosts without having to change anything in the proxy config.
Yeah, I had lots of service configured like that, and you are correct that it is awesome, however I have other services on other hosts (not on docker swarm either) so I needed to delve into file config quite often, and doing some web dev work, I had services that weren’t dockerized, so I ended up creating dummy services (socat containers) to make them easy. It just got a bit frustrating and taking too much headspace, I was able to setup caddy in about 2 hours one evening, so I am pretty happy so far, and I can see all my hosts in a single file which is great ( I ended up with orphaned routes etc… from containers I forgot about when I was testing things).
As you say, different people come at the same problem and come away with totally different views ( which is pretty great that there are enough option that we can all find something that works for our needs ).
First time I heard of migrating from Caddy to Traefik and not the other way around. The usual complaint about Traefik is that it’s too complicated to manage all of the moving parts. I have only used Caddy with Dockerized setups though so I don’t know what the others are like.
Well, this way it works great for my needs … If I don’t need a service anymore I just remove its docker-compose and
puff
it’s gone the service and the reverse proxy config all in one single atomic thanos-like snap of fingers I wasn’t able to find a way to do the same with Caddy and I don’t get what do you mean with “moving parts”Completely a personal preference, but this is one reason I prefer caddy. I like to keep the configs separate and not clutter up my compose files.
It means I need to update two things when adding a new service (a compose file plus my caddy file), but I like the separation of concerns.
It also makes my proxy config consistent for all services, regardless of whether that run in docket or elsewhere.
You can do that with Traefik, I have all my reverse proxy config in a file that hot reloads by Traefik dynamically, so I don’t even have to restart Traefik, or even the compose files (that’s the problem with Traefik labels), just run compose, add service to said dynamic file, save, and the website is now reachable on the browser.
I just use dockerized service and I plan to move to k8s so I don’t have (nor plan to) deal with anything besides dockerized services
Yeah, then I can see the appeal of keeping everything in the same configs.