Caddy as your primary web server is super simple.
But when you need to scale your application Caddy is limited to its static configuration.
To overcome this issue we are using
docker-gen to generate configuration everytime a container spawns or dies.
Now scaling is easy!
This image is created to be used in a single container.
version: "3" services: caddy-gen: container_name: caddy-gen image: "wemakeservices/caddy-gen:latest" restart: always volumes: - /var/run/docker.sock:/tmp/docker.sock:ro # needs socket to read events - ./certs/acme:/etc/caddy/acme # to save acme - ./certs/ocsp:/etc/caddy/ocsp # to save certificates ports: - "80:80" - "443:443" depends_on: - whoami whoami: # this is your service image: "katacoda/docker-http-server:v2" labels: - "virtual.host=myapp.com example.com" # your domains separated with a space - "virtual.alias=www.myapp.com" # alias for your domain (optional) - "virtual.port=80" # exposed port of this container - "firstname.lastname@example.org" # ssl is now on - "virtual.websockets" # enable websocket passthrough
docker-compose.yml example file.
caddy-gen is configured with
The main idea is simple.
Every labeled service exposes a
virtual.host to be handled.
Then, every container represents a single
upstream to serve requests.
There are several options to configure:
virtual.hostis basically a domain name, see
virtual.alias(optional) domain alias, useful for
wwwprefix with redirect. For example
www.myapp.com. Alias will always redirect to the host above.
virtual.portexposed port of the container
virtual.tls-emailcould be empty, unset or set to valid email
virtual.tls-email) could be empty, unset or set to a valid set of tls directive value(s)
virtual.websocketwhen set, enables websocket connection passthrough
Note, that options should not differ for containers of a single service.
Backing up certificates
Certificates are stored in
volumes to save them on your host machine.
This image supports three build-time arguments:
CADDY_VERSIONto change the current version of
FOREGO_VERSIONto change the current version of
DOCKER_GEN_VERSIONto change the current version of
Full changelog is available here.
MIT. See LICENSE.md for more details.