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 ).
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.
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.
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”