Skip to content
Rulemapping

Automation Platform Documentation

Compose Setup

The file does not have to be typed out — it can be copied or downloaded from the documentation site at docs.rulemapping.com, which is also the safer route, as copying it out of the PDF loses the leading spaces that YAML indentation depends on:

downloads/docker-compose.yml

Place it in the installation directory. This is its content:

docker-compose.yml
name: rap-${PREFIX}
services:
ktdocker:
# The tag must match the license: 3.24.x requires :VERSION 3240
image: registry.onstackit.cloud/rms/ktdocker:3.24.28
container_name: ktdocker0
restart: unless-stopped
environment:
TZ: ${TZ}
ports:
- "8080:8080"
volumes:
- ./rw:/rw
- ./rwshared:/rwshared
healthcheck:
test: ["CMD", "/bin/curl", "-fsS", "-o", "/dev/null", "http://localhost:8080/${PREFIX}/"]
interval: 30s
timeout: 5s
retries: 3
start_period: 120s
logging:
driver: json-file
options:
max-size: "10m"
max-file: "5"
aimiddleware:
image: registry.onstackit.cloud/rms/rmsaimiddlewaredocker:1.1.12
container_name: rmsaimiddleware0
restart: unless-stopped
environment:
TZ: ${TZ}
# Path prefix the reverse proxy publishes the middleware under. The
# application recognises its own middleware by this prefix.
ROOT_PATH: /rmsaimiddleware
ports:
- "8000:8000"
volumes:
- ./config:/app/config:ro
- ./data/aimiddleware:/app/data
healthcheck:
test: ["CMD", "curl", "-fsS", "-o", "/dev/null", "http://localhost:8000/health"]
interval: 30s
timeout: 5s
retries: 3
start_period: 30s
logging:
driver: json-file
options:
max-size: "10m"
max-file: "5"
# One-off commands against the instance. Not started by `up` because of
# the "tools" profile:
# docker compose --profile tools run --rm cms /finish-installation
cms:
image: registry.onstackit.cloud/rms/ktdocker:3.24.28
profiles: ["tools"]
environment:
TZ: ${TZ}
volumes:
- ./rw:/rw
- ./rwshared:/rwshared
entrypoint: ["/rw/bin/cms.sh"]
logging:
driver: json-file
options:
max-size: "10m"
max-file: "5"

Verify that Compose resolves every variable — this prints the file with all ${…} substituted and fails on anything missing:

Terminal window
docker compose config

restart: unless-stopped is not just convenience. The application container rotates its logs before midnight and then exits deliberately. This policy brings it back. Without it you would have to write a systemd unit yourself.

./rw and ./rwshared are bind mounts into the installation directory, see Configuration.

Log limits cap the container logs at 5 × 10 MB per service. Without this, the JSON log files grow unbounded.

The cms service exists so one-off maintenance commands run with exactly the same image and mounts as the application. It is in the tools profile, so docker compose up ignores it.

The images were already pulled in Container Registry. The tags in the file above must be the ones you pulled — they are the only place a version is recorded, and they change only on an upgrade.

Later on, after changing a tag in docker-compose.yml, fetch the new image with:

Terminal window
docker compose pull

Do not start the containers yet. The database has to exist first.

Continue with Database.