Compose Setup
The Compose file
Section titled “The Compose file”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:
Place it in the installation directory. This is its content:
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:
docker compose configWhat the parts do
Section titled “What the parts do”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.
Images
Section titled “Images”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:
docker compose pullDo not start the containers yet. The database has to exist first.
Continue with Database.