Back to Kamal

Kamal Configuration

docs/configuration/overview.md

latest5.0 KB
Original Source

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 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.

yaml
service: myapp

The Docker image name

The image will be pushed to the configured registry.

yaml
image: my-image

Labels

Additional labels to add to the container:

yaml
labels:
  my-label: my-value

Volumes

Additional volumes to mount into the container:

yaml
volumes:
  - /path/on/host:/path/in/container:ro

Registry

The Docker registry configuration, see Docker Registry:

yaml
registry:
  ...

Servers

The servers to deploy to, optionally with custom roles, see Servers:

yaml
servers:
  ...

Environment variables

See Environment variables:

yaml
env:
  ...

Asset path

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.

You can also specify mount options after a colon, such as ro for read-only or z/Z for SELinux labels

yaml
asset_path: /path/to/assets

Hooks path

Path to hooks, defaults to .kamal/hooks. See Hooks for more information:

yaml
hooks_path: /user_home/kamal/hooks

Secrets path

Path to secrets, defaults to .kamal/secrets. Kamal will look for <secrets_path>-common and <secrets_path> (or <secrets_path>.<destination> when using destinations):

yaml
secrets_path: /user_home/kamal/secrets

Error pages

A directory relative to the app root to find error pages for the proxy to serve. Any files in the format 4xx.html or 5xx.html will be copied to the hosts.

yaml
error_pages_path: public

Require destinations

Whether deployments require a destination to be specified, defaults to false:

yaml
require_destination: true

Primary role

This defaults to web, but if you have no web role, you can change this:

yaml
primary_role: workers

Allowing empty roles

Whether roles with no servers are allowed. Defaults to false:

yaml
allow_empty_roles: false

Retain containers

How many old containers and images we retain, defaults to 5:

yaml
retain_containers: 3

Minimum version

The minimum version of Kamal required to deploy this configuration, defaults to nil:

yaml
minimum_version: 1.3.0

Readiness delay

Seconds to wait for a container to boot after it is running, default 7.

This only applies to containers that do not run a proxy or specify a healthcheck:

yaml
readiness_delay: 4

Deploy timeout

How long to wait for a container to become ready, default 30:

yaml
deploy_timeout: 10

Drain timeout

How long to wait for a container to drain, default 30:

yaml
drain_timeout: 10

Run directory

Directory to store kamal runtime files in on the host, default .kamal:

yaml
run_directory: /etc/kamal

SSH options

See SSH:

yaml
ssh:
  ...

Builder options

See Builders:

yaml
builder:
  ...

Accessories

Additional services to run in Docker, see Accessories:

yaml
accessories:
  ...

Proxy

Configuration for kamal-proxy, see Proxy:

yaml
proxy:
  ...

SSHKit

See SSHKit:

yaml
sshkit:
  ...

Boot options

See Booting:

yaml
boot:
  ...

Logging

Docker logging configuration, see Logging:

yaml
logging:
  ...

Aliases

Alias configuration, see Aliases:

yaml
aliases:
  ...