Roles

Roles are used to configure different types of servers in the deployment. The most common use for this is to run a 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 Traefik, but you can set traefik to change it.

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
    traefik: true
    cmd: "bin/jobs"
    options:
      memory: 2g
      cpus: 4
    healthcheck:
      ...
    logging:
      ...
    labels:
      my-label: workers
    env:
      ...
    asset_path: /public