Kamal Configuration
Configuration is read from the config/deploy.yml
.
Destinations
When running commands, you can specify a destination with the -d
flag, e.g. kamal deploy -d staging
.
In this case the configuration will also be read from config/deploy.staging.yml
and merged with the base configuration.
Extensions
Kamal will not accept unrecognized keys in the configuration file.
However, you might want to declare a configuration block using YAML anchors and aliases to avoid repetition.
You can use prefix a configuration section with x-
to indicate that it is an extension. Kamal will ignore the extension and not raise an error.
The service name
This is a required value. It is used as the container name prefix.
service: myapp
The Docker image name
The image will be pushed to the configured registry.
image: my-image
Labels
Additional labels to add to the container:
labels:
my-label: my-value
Additional volumes to mount into the container
volumes:
- /path/on/host:/path/in/container:ro
Registry
The Docker registry configuration, see Docker Registry:
registry:
...
Servers
The servers to deploy to, optionally with custom roles, see Servers:
servers:
...
Environment variables
env:
...
Asset Bridging
Used for asset bridging across deployments, default to nil
.
If there are changes to CSS or JS files, we may get requests for the old versions on the new container and vice-versa.
To avoid 404s we can specify an asset path. Kamal will replace that path in the container with a mapped volume containing both sets of files. This requires that file names change when the contents change (e.g. by including a hash of the contents in the name).
To configure this, set the path to the assets:
asset_path: /path/to/assets
Path to hooks, defaults to .kamal/hooks
See Hooks for more information:
hooks_path: /user_home/kamal/hooks
Require destinations
Whether deployments require a destination to be specified, defaults to false
:
require_destination: true
The primary role
This defaults to web
, but if you have no web role, you can change this:
primary_role: workers
Allowing empty roles
Whether roles with no servers are allowed. Defaults to false
:
allow_empty_roles: false
Stop wait time
How long we wait for a container to stop before killing it, defaults to 30 seconds:
stop_wait_time: 60
Retain containers
How many old containers and images we retain, defaults to 5:
retain_containers: 3
Minimum version
The minimum version of Kamal required to deploy this configuration, defaults to nil:
minimum_version: 1.3.0
Readiness delay
Seconds to wait for a container to boot after is running, default 7. This only applies to containers that do not specify a healthcheck:
readiness_delay: 4
Run directory
Directory to store kamal runtime files in on the host, default .kamal
:
run_directory: /etc/kamal
SSH options
See SSH:
ssh:
...
Builder options
See Builders:
builder:
...
Accessories
Additionals services to run in Docker, see Accessories:
accessories:
...
Traefik
The Traefik proxy is used for zero-downtime deployments, see Traefik:
traefik:
...
SSHKit
See SSHKit:
sshkit:
...
Boot options
See Booting:
boot:
...
Healthcheck
Configuring healthcheck commands, intervals and timeouts, see Healthchecks:
healthcheck:
...
Logging
Docker logging configuration, see Logging:
logging:
...