Docker (Recommended)
This guide was last checked on Rocky / Alma Linux 9 and 10
(Status Dec. 2025). We recommend using Linux for the host system.
This guide covers the installation and configuration of a basic Relution instance, which runs in Docker containers.
Prerequisites
Before beginning, ensure that the following requirements are met:
- The host machine can connect to the Internet.
rootorsudopermissions are available.- Optional: A valid SSL certificate for the URL.
Preparation
vim can optionally be set as the default editor. Skip this section to continue using the standard editor.
sudo dnf install -y vim
sudo update-alternatives --install /usr/bin/editor editor /usr/bin/vim 100
The installation is divided into the following main steps:
- Install Docker and Docker Compose.
- Configure Containers.
- Configure Traefik or nginx.
Installing Docker and Docker Compose
To run Relution in a Docker container, Docker and docker compose must first be installed.
Install Docker
Please follow these commands for Alma / Rocky Linux:
dnf install -y dnf-utils wget
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
dnf install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
Make sure to start and enable the Docker service after installation so that it is available after a system reboot.
systemctl enable docker
systemctl start docker
kernel-modules-extra package, which prevents the Docker service from starting. In this case, perform the steps in Docker Fails to Start on EL10 → before starting Docker for the first time. On EL9 this is not required.Configure Containers
Create a directory for Relution configuration files, e.g., for docker compose.
mkdir -p /opt/relution
mkdir /opt/relution/secrets
Prepare Secrets
Use secure random passwords for the secrets (e.g., with pwgen -snc 48 1).
Create the following files:
| Placeholder | Description |
|---|---|
/opt/relution/secrets/postgres_password | The password of the Relution database user |
/opt/relution/secrets/system_admin_password | The initial password of the system administrator. Change this after the first login. |
compose.yaml
Download the file:
wget https://raw.githubusercontent.com/relution-io/relution-setup/master/docker/Linux/opt/relution/compose.yaml \
--directory-prefix=/opt/relution
The Compose file defines three services: database, relution, and traefik.
application.yml
Download the file:
wget https://raw.githubusercontent.com/relution-io/relution-setup/master/docker/Linux/opt/relution/application.yml \
--directory-prefix=/opt/relution
Edit the file:
vim /opt/relution/application.yml
Adapt the file to the environment. The following placeholders must be replaced:
| Placeholder | Description |
|---|---|
%EXT_HOSTNAME_URL% | The external address of the Relution server, e.g., https://mdm.example.com |
%SYSTEM_ADMIN_EMAIL% | The email address of the system administrator |
Configuring Traefik (Reverse Proxy)
Automatic Certificate Creation (Let’s Encrypt)
Download the Traefik configuration file and adapt it to the environment:
wget https://raw.githubusercontent.com/relution-io/relution-setup/master/docker/Linux/opt/relution/relution.yaml \
--directory-prefix=/opt/relution/configs/traefik
In the file /opt/relution/configs/traefik/relution.yaml, the placeholder external.url must be replaced with the actual external URL under which Relution should be made available:
vim /opt/relution/configs/traefik/relution.yaml
http:
routers:
relution:
rule: Host(`external.url`) # Replace placeholder
https://, unlike in the application.yml.Shutting Down
To shut down and remove the containers (the images remain):
cd /opt/relution/
docker compose down
Updating Relution
To update the services, use the following commands:
cd /opt/relution/
docker compose pull # Downloads the latest image
docker compose up -d # Stops and restarts the containers
The Relution service will be unavailable until the container restart is complete.
If startup issues with Relution occur, please send the complete log as a Zip file to support. Support is subject to a fee.
Optional
Traefik with static Certificates
Download the configuration file for static certificates:
wget https://raw.githubusercontent.com/relution-io/relution-setup/master/docker/Linux/opt/relution/relution.static_cert.yaml \
--directory-prefix=/opt/relution/configs/traefik
In the file /opt/relution/configs/traefik/relution.static_cert.yaml, the placeholder external.url must be replaced with the actual external URL under which Relution should be made available:
vim /opt/relution/configs/traefik/relution.static_cert.yaml
http:
routers:
relution:
rule: Host(`external.url`) # Replace placeholder
The certificate chain and the corresponding private key must be placed under server.pem and server.key in the directory /opt/relution/certs/static.
Furthermore, the traefik: block in the compose.yml must be adjusted:
...
traefik:
...
command:
- --providers.file.directory=/opt/traefik/
- --entryPoints.web.address=:80
- --entryPoints.web.http.redirections.entryPoint.to=websecure
- --entryPoints.web.http.redirections.entryPoint.scheme=https
- --entryPoints.websecure.address=:443
...
volumes:
- ./configs/traefik:/opt/traefik
- ./certs/static:/opt/certs
...
Nginx Alternative to Traefik (Reverse Proxy)
Download the nginx configuration file:
wget https://raw.githubusercontent.com/relution-io/relution-setup/master/docker/Linux/opt/relution/relution-nginx.conf \
--directory-prefix=/opt/relution
Replace the traefik: block in the compose.yaml with this nginx: block:
nginx:
image: nginx:stable
restart: unless-stopped
container_name: nginx
depends_on:
- relution
environment:
TZ: "Europe/Berlin"
NGINX_HOST: "%EXT_HOSTNAME%"
ports:
- "80:80"
- "443:443"
volumes:
- "/opt/relution/relution-nginx.conf:/etc/nginx/conf.d/relution-nginx.conf"
- "/opt/relution/server.pem:/etc/nginx/server.pem"
- "/opt/relution/server.key:/etc/nginx/server.key"
For increased security, the use of better DH parameters is recommended.
Generate key:
openssl dhparam -out /opt/relution/dhparams.pem 4096Adjust
relution-nginx.conf: Add the line (and activatessl_staplingif necessary):ssl_dhparam /etc/nginx/dhparams.pem;Extend
compose.yamlVolumes: Adjust theVolumesof the nginx container to include the DH parameters:volumes: - "/opt/relution/relution-nginx.conf:/etc/nginx/conf.d/relution-nginx.conf" - "/opt/relution/server.pem:/etc/nginx/server.pem" - "/opt/relution/server.key:/etc/nginx/server.key" - "/opt/relution/dhparams.pem:/etc/nginx/dhparams.pem" # Added
The configuration expects the SSL certificate and key to be in /opt/relution/server.pem and /opt/relution/server.key. Otherwise, adjust the Volumes of the nginx container accordingly.
/Microsoft-Server-ActiveSync location in the nginx configuration must point to the SMG service instead of Relution. See Secure Mail Gateway →.Access is forbidden during login from Relution 26.4.0 onwards, since the proxy’s request is not classified as trustworthy by default. In addition, the header proxy_set_header X-Forwarded-Proto $scheme; must be set correctly in the nginx configuration. For the solution, see Login: Access is forbidden →.Starting Relution
Navigate to the Relution directory and start the Docker containers:
cd /opt/relution/
docker compose up -d
This will download the images and start the services. It may take some time for the services to become available.
To view the log output of a specific container (e.g., Relution):
docker logs -f <container_name> # Example: docker logs -f relution