caddy-incus-upstreams
Status: HIGHLY experimental, patches welcome 🚩
Incus dynamic upstreams for Caddy v2+ 🧨
Usage
Set the following config on your Incus instance.
incus config set <instance-name> user.caddyserver.http.enable=true
incus config set <instance-name> user.caddyserver.http.matchers.host=<domain>
incus config set <instance-name> user.caddyserver.http.upstream.port=<port>
Build a fresh caddy with this plugin.
xcaddy build \
--with git.coopcloud.tech/decentral1se/caddy-incus-upstreams
Wire up a Caddyfile based on this example.
example.com {
reverse_proxy {
dynamic incus
}
}
Notes
The plugin responds to the following Incus events:
api.EventLifecycleInstanceStarted
api.EventLifecycleInstanceRestarted
It currently only retrieves the ipv4 addresses of the instances.
Hackin'
Create this Caddyfile in the root of the project repository.
{
debug
http_port 6565
}
http://foo.localhost {
reverse_proxy {
dynamic incus
}
}
Then create a new instance and assign the relevant config.
incus launch images:alpine/3.20 foo
incus config set foo user.caddyserver.http.enable=true
incus config set foo user.caddyserver.http.matchers.host=foo.localhost
incus config set foo user.caddyserver.http.upstream.port=80
Serve something from your instance.
incus shell foo
apk add python3
python3 -m http.server 80
Run Caddy with the plugin baked in.
xcaddy run
And finally, route a request to the instance via Caddy.
curl -X GET http://foo.localhost:6565
🧨
ACK
License

Description
Languages
Go
100%