Roles

Roles are used to configure different types of servers in the deployment. The most common use for this is to run web servers and job servers.

Kamal expects there to be a web role, unless you set a different primary_role in the root configuration.

Role configuration

Roles are specified under the servers key:

servers:

Simple role configuration

This can be a list of hosts if you don’t need custom configuration for the role.

You can set tags on the hosts for custom env variables (see Environment variables):

  web:
    - 172.1.0.1
    - 172.1.0.2: experiment1
    - 172.1.0.2: [ experiment1, experiment2 ]

Custom role configuration

When there are other options to set, the list of hosts goes under the hosts key.

By default, only the primary role uses a proxy.

For other roles, you can set it to proxy: true to enable it and inherit the root proxy configuration or provide a map of options to override the root configuration.

For the primary role, you can set proxy: false to disable the proxy.

You can also set a custom cmd to run in the container and overwrite other settings from the root configuration.

  workers:
    hosts:
      - 172.1.0.3
      - 172.1.0.4: experiment1
    cmd: "bin/jobs"
    options:
      memory: 2g
      cpus: 4
    logging:
      ...
    proxy:
      ...
    labels:
      my-label: workers
    env:
      ...
    asset_path: /public