You might run
caddy-config \
--os-path=my-caddy,path=/etc/caddy/Caddyfile \
--incus="unix://" \
--client-cert=/home/my-user/.config/incus/client.crt \
--client-key=/home/my-user/.config/incus/client.key
Make sure to have a block like:
{
admin localhost:2019
}
in your caddyfile so it can reload.
You need to configure each service you wanna serve with:
config:
user.label.my-caddy.service: my-service-group
user.label.my-caddy: "<long-info-here>"
This is untested.
The label will get another format
Atm. we are using a single label “edge” / “my-caddy” whatever you name it, this produced stuff like:
services:
wiki:
labels:
caddy-external: "incus-compose.org,upstream=8080,redirs='www.incus-compose.org,uri wiki.incus-compose.org,uri docs.incus-compose.org,uri'"
caddy-internal: "incus-compose.org,upstream=8080,template=internal_acme.caddyfile,redirs='www.incus-compose.org,uri,template=internal_acme.caddyfile wiki.incus-compose.org,uri,template=internal_acme.caddyfile docs.incus-compose.org,uri,template=internal_acme.caddyfile'"
This is much to much info compressed in our own language 
new will be:
services:
wiki:
labels:
caddy-external.0.domain: incus-compose.org
caddy-external.0.upstream: 8080
caddy-external.0.redirs.0: www.incus-compose.org,uri
caddy-external.0.redirs.1: wiki.incus-compose.org,uri
caddy-external.0.redirs.2: docs.incus-compose.org,uri
caddy-internal.0.domain: incus-compose.org
caddy-internal.0.upstream: 8080
caddy-internal.0.redirs.0: www.incus-compose.org,uri,template=internal_acme.caddyfile
caddy-internal.0.redirs.1: wiki.incus-compose.org,uri,template=internal_acme.caddyfile
caddy-internal.0.redirs.2: docs.incus-compose.org,uri,template=internal_acme.caddyfile
We will support both formats.
This is how my compose.yaml looks like:
name: caddy
services:
external:
image: docker.io/library/caddy:2.11.4-alpine
container_name: external
restart: unless-stopped
volumes:
- config-external:/config
- logs-external:/var/log/caddy/
- data:/data
- ./sites:/var/www:ro
command: |
sh -c 'if [ ! -f /config/Caddyfile ]; then echo -e "{\n\tadmin localhost:2019\n}\n:80 {\n\trespond \"Caddy initializing...\" 503\n}\n" > /config/Caddyfile; fi; exec caddy run --config /config/Caddyfile --adapter caddyfile'
ports:
- published: 80
target: 80
# x-incus-compose:
# nat: true
- published: 443
target: 443
# x-incus-compose:
# nat: true
networks:
default:
ipv4_address: 10.179.214.5/23
x-incus:
ipv4.gateway: 10.179.214.1
internal:
image: docker.io/library/caddy:2.11.4-alpine
container_name: internal
restart: unless-stopped
volumes:
- config-internal:/config
- logs-internal:/var/log/caddy/
- data:/data
- ./sites:/var/www:ro
command: |
sh -c 'if [ ! -f /config/Caddyfile ]; then echo -e "{\n\tadmin localhost:2019\n}\n:80 {\n\trespond \"Caddy initializing...\" 503\n}\n" > /config/Caddyfile; fi; exec caddy run --config /config/Caddyfile --adapter caddyfile'
networks:
default:
ipv4_address: 10.179.214.6/23
x-incus:
ipv4.gateway: 10.179.214.1
caddy-config:
image: ghcr.io/jochumdev/incus-caddy-config/caddy-config:1.0.0-beta.1
container_name: caddy-config
restart: unless-stopped
depends_on:
external:
condition: service_healthy
internal:
condition: service_healthy
environment:
INCUS_CADDY_INCUS: "${INCUS_CADDY_INCUS}"
INCUS_CADDY_DATA_DIR: "/var/lib/caddy-config"
INCUS_CADDY_INSTANCES: "caddy-external,project=caddy,instance=external,global_template=external.caddyfile caddy-internal,project=caddy,instance=internal,global_template=internal.caddyfile"
INCUS_CADDY_HTTP_ADDRESS: ":9153"
INCUS_CADDY_LOG: "INFO"
INCUS_CADDY_TEMPLATES_DIR: "/etc/caddy/templates"
secrets:
- token
volumes:
- caddy-config:/var/lib/caddy-config
- ./templates:/etc/caddy/templates:ro
secrets:
token:
environment: INCUS_TOKEN
volumes:
config-external:
logs-external:
config-internal:
logs-internal:
data:
caddy-config:
networks:
default:
external: true
name: incusbr0
My internal_acme.caddyfile
{{ .Domain }} {
tls /data/caddy/certificates/acme-v02.api.letsencrypt.org-directory/{{ .Domain }}/{{ .Domain }}.crt /data/caddy/certificates/acme-v02.api.letsencrypt.org-directory/{{ .Domain }}/{{ .Domain }}.key
log {
output file /var/log/caddy/{{ .Domain }}-access.log
}
{{- if .Redirect }}
redir {{ .Redirect }} permanent
{{- else if .Upstreams }}
reverse_proxy {{ range $i, $u := .Upstreams }}{{ if $i }} {{ end }}{{ $u }}{{ end }}
{{- end }}
}