What's new
✨ Custom Caddy configuration (per-service and global)
For advanced routing and behavior, use x-caddy instead of x-ports in Compose files. It allows you to provide custom Caddy configuration for a service in Caddyfile format. See Ingress & HTTPS docs for details.
- Use templates like
{{upstreams 8000}}to automatically insert healthy container IPs forreverse_proxy. - Deploy global Caddy config with
uc caddy deploy --caddyfileorx-caddyin a Compose file forcaddyservice. - Invalid Caddy configs are skipped instead of breaking everything.
- View the complete generated Caddyfile served by Caddy with
uc caddy config:
New documentation
- Concepts > Ingress & HTTPS: How Caddy works as a reverse proxy, publishing services, custom Caddy config, and managing
caddyservice. - CLI reference: Automatically generated CLI reference docs.
Improvements
- Caddy now uses Caddyfile format instead of JSON which is more human-friendly.
- Caddy keeps its data between restarts (certificates are preserved) using a persistent volume.
Upgrade to 0.12.0
⚠️ After upgrading both machines and CLI, you need to redeploy the caddy service to be able to use the new custom Caddy configs. This update will also lose all the previously issued TLS certificates because a persistent data wasn't used before.
Please follow Deploying or updating Caddy.
Uncloud CLI locally
To upgrade the Uncloud CLI (uc) locally:
# Homebrew (macOS, Linux)
brew upgrade uncloud
# Install script (macOS, Linux)
curl -fsS https://get.uncloud.run/install.sh | shMachine daemon
To upgrade the Uncloud daemon on your machines, run the following commands on each machine:
# AMD64
curl -fsSL -o uncloudd.tar.gz https://github.com/psviderski/uncloud/releases/download/v0.12.0/uncloudd_linux_amd64.tar.gz
# ARM64
# curl -fsSL -o uncloudd.tar.gz https://github.com/psviderski/uncloud/releases/download/v0.12.0/uncloudd_linux_arm64.tar.gz
tar -xf uncloudd.tar.gz
sudo install uncloudd /usr/local/bin/uncloudd
rm uncloudd uncloudd.tar.gz
sudo systemctl restart uncloudChangelog
- e99e769 chore: add Caddy gRPC service to retrieve Caddyfile config from machines
- c01365b chore: add header to generated Caddyfile that it's autogenerated
- 3cda5cc chore: caddy client to get caddy config
- 813c397 chore: change reverse_proxy upstreams from 'to' to the directive arguments
- 48dc1dd chore: delete unused image digest resolver
- 81f4e3a chore: fix mockery for linux in .mise.lock
- 455174c chore: generate sites in Caddyfile from x-ports alongside caddy.json
- 11949ee chore: include validation errors for user-defined Caddy configs as a comment in Caddyfile
- 8bf9fc0 chore: introduce mockery for generating mocks, generate for CaddyfileValidator
- db60a81 chore: lint
- 066d411 chore: parse Created time on container with CreatedTime
- 93fef88 chore: refactor Caddyfile generator to accept a validator
- 75fdbaf chore: relax ports+Caddy spec validation to allow host mode ports
- b437659 chore: update comments in generated Caddyfile
- 290e6db docs(ingress): Publishing service and Managing Caddy
- 9f5ca9a feat: add 'uc caddy config' command to show the current Caddyfile
- 3a6eef4 feat: add --caddyfile flag to 'uc caddy deploy' and 'uc run' commands
- 0397086 feat: concatenate custom Caddy configs for services into final Caddyfile (no upstream interpolation)
- b046b78 feat: migrate Caddy to generated Caddyfile, mount persistent data volume
- 5cc005a feat: validate and append custom per-service Caddy configs to generated Caddyfile
- 0107363 fix: allow host mode x-ports with x-caddy in compose
- 5a1e61c fix: broken links to completions docs in CLI reference
- 6476908 fix: format for --publish flag
- ff213e7 fix: unmarshaling of ServiceSpec in ServiceContainer struct