Self-hosting with Caddy and Docker
Table of Contents
After re-building my VPS because things were a bit messy, I decided to move away from the rather complicated Traefik setup that I had before and move over to Caddy. This took a little while to get my head around, but ultimately is much simpler!
Docker compose #
I’m running Caddy within a docker compose environment using a pretty basic setup in a docker-compose.yml file:
version: "3.7"
networks:
  default:
    name: caddy-proxy
volumes:
  caddy_data:
    external: true
  caddy_config
services:
  caddy:
    image: caddy:2.6.4
    container_name: caddy
    restart: unless-stopped
    ports:
      - "80:80"
      - "443:443"
      - "443:443/udp"
    volumes:
      - $PWD/caddy:/etc/caddy
      - $PWD/sites:/sites
      - caddy_data:/data
      - caddy_config:/config
Caddyfile #
My Caddyfile sits in the caddy subdirectory and is really very simple:
{
	email: example@example.com
}
www.example.com {
	redir https://example.com{uri}
}
example.com {
	root * /sites/example.com
	file_server
}
Here I’m removing the www with a redirect, then I’m serving files from a directory under the mounted /sites directory which was mounted into the caddy container by docker. I can then just copy over my public folder from hugo to serve up this site. Caddy handles all the letsencrypt certificates and things without any messing about!
More services #
With this setup it’s pretty simple to add more services and use Caddy as proxy, for example FreshRSS:
Addition to the services section of docker-compose.yml:
  freshrss:
    image: freshrss/freshrss:latest
    container_name: freshrss
    restart: unless-stopped
    logging:
      options:
        max-size: 10m
    volumes:
      - $PWD/freshrss/data:/var/www/FreshRSS/data
      - $PWD/freshrss/extensions:/var/www/FreshRSS/extensions
    environment:
      - TZ=Europe/London
      - CRON_MIN='2,32'
and the Caddyfile addition:
freshrss.example.com {
	reverse_proxy freshrss:80
}
Comments #
Please go to this post on Mastodon to add any comments or suggestions!