--- sidebar_position: -17.0 sidebar_label: v0.17.0 --- # v0.17.0 This page mirrors the [GitHub release](https://github.com/psviderski/uncloud/releases/tag/v0.17.0), which also includes the full list of commits. This release brings container health monitoring with automatic rollback during rolling deployments, Compose spec support for `healthcheck`, `devices`, and `ulimits`, and various reliability improvements. ## ✨ Highlights {#highlights} ### Container health monitoring and rollback Changes: [7a9eac5](https://github.com/psviderski/uncloud/commit/7a9eac593f9be0f02b42b1bef5b82f311e6af243), [7b88040](https://github.com/psviderski/uncloud/commit/7b88040c73a43e1dea8db79513fec1c3cd5eac79), [ce3cb8a](https://github.com/psviderski/uncloud/commit/ce3cb8a34f3ae027a4c17b3425eb58c466ce3dbc) Rolling deployments now monitor crashes and health checks after starting new containers. If a container keeps restarting or becomes unhealthy, the deployment automatically rolls it back and fails to prevent downtime. https://github.com/user-attachments/assets/4ee73048-9ca2-4c8a-b075-f8c6a0840ee7 #### Compose `healthcheck` support Compose files now support the [`healthcheck`](https://github.com/compose-spec/compose-spec/blob/main/spec.md#healthcheck) attribute, allowing you to define health checks for your services: ```yaml services: app: image: myapp healthcheck: test: curl -f http://localhost:8000/health interval: 5s retries: 3 start_period: 10s start_interval: 1s ``` Use `uc deploy --skip-health` flag to bypass health monitoring for faster emergency deployments. See [Rolling deployments](/docs/guides/deployments/rolling-deployments) for more details on how rolling deployments work and how to configure health checks for your services. ### Control container replacement order during rolling deployments PR: [#248](https://github.com/psviderski/uncloud/pull/248). Thanks to [@nick-potts](https://github.com/nick-potts) for the contribution ❤️ You can now control the order of container replacement during rolling deployments with `deploy.update_config.order` in your Compose file: - `start-first` (default): starts a new container before stopping the old one - `stop-first`: stops the old container before starting a new one (brief downtime) ```yaml services: app: image: myapp deploy: update_config: order: stop-first ``` The default order automatically switches to `stop-first` if a service mounts a volume to prevent data corruption. See [Rolling deployments](/docs/guides/deployments/rolling-deployments) for more details. ### Compose `devices` support PR: [#250](https://github.com/psviderski/uncloud/pull/250). Thanks to [@jabr](https://github.com/jabr) for the contribution ❤️ You can now map host devices into containers, for example, Intel integrated GPU for video transcoding using the [`devices`](https://github.com/compose-spec/compose-spec/blob/main/spec.md#devices) attribute in your Compose file: ```yaml services: app: image: myapp devices: - /dev/dri:/dev/dri - /dev/ttyUSB0:/dev/ttyUSB0:rw ``` ### Compose `ulimits` support PR: [#244](https://github.com/psviderski/uncloud/pull/244). Thanks to [@ipaddicting](https://github.com/ipaddicting) for the contribution ❤️ You can now set [`ulimits`](https://github.com/compose-spec/compose-spec/blob/main/spec.md#ulimits) for service containers in your Compose file. For example, to increase the maximum number of open files: ```yaml services: app: image: myapp ulimits: nofile: soft: 65536 hard: 65536 ``` ### Auto-provision volumes for global services PR: [#243](https://github.com/psviderski/uncloud/pull/243). Thanks to [@zasdaym](https://github.com/zasdaym) for the contribution ❤️ When deploying a [global service](/docs/guides/deployments/deploy-global-services) with a volume, the volume is now automatically created on all machines in the cluster. ## Improvements - SSH connections with `ssh+cli://` prefix (use `ssh` CLI instead of Go native SSH implementation) reuse a single SSH connection via control socket - significantly speeds up `uc` commands - Improved `uc image push` support on macOS by always running proxy to virtualised Docker (except OrbStack that doesn't require it) - Global service deployment stops all running conflicting containers, e.g. left from interrupted deploys, not just the first one - Temporary socat proxy containers created by `uc image push` are labeled with `uncloud.managed` ## Bug fixes - Fixed IPv6 address formatting for HTTP URLs ([#254](https://github.com/psviderski/uncloud/pull/254)) - Fixed `uc image push` when using Rancher Desktop locally ([#251](https://github.com/psviderski/uncloud/pull/251)) - Fixed `uc machine init` to reset an already initialised machine when using `ssh+cli://` connection ## Upgrade to 0.17.0 ### Uncloud CLI locally To upgrade the Uncloud CLI (`uc`) locally: ```bash # Homebrew (macOS, Linux) brew upgrade uncloud # Install script (macOS, Linux) curl -fsS https://get.uncloud.run/install.sh | sh ``` ### Machine daemon To upgrade the Uncloud daemon on your machines, run the following commands on each machine: ```bash # AMD64 curl -fsSL -o uncloudd.tar.gz https://github.com/psviderski/uncloud/releases/download/v0.17.0/uncloudd_linux_amd64.tar.gz # ARM64 # curl -fsSL -o uncloudd.tar.gz https://github.com/psviderski/uncloud/releases/download/v0.17.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 uncloud ```