Docker (Recommended)
Relution Installation with Docker on Linux Host
Introduction
This guide was last checked on Rocky / Alma Linux 8, 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 you begin, ensure that the following requirements are met:
- The host machine can connect to the Internet.
- You have
rootorsudopermissions. - Optional: A valid SSL certificate for the URL.
Important: Self-signed certificates do not work, as mobile devices do not trust them. You can manually install your root certificate on a device, but this procedure is not recommended due to the high effort. Certificates from Let’s Encrypt → have been tested and work.
Preparation
If you are familiar with vim, you can set it as the default editor. Please skip this section if you wish to continue using the standard editor.
sudo dnf install -y vim
sudo update-alternatives --install /usr/bin/editor editor /usr/bin/vim 100
Overview
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, you must first install Docker and docker compose.
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
Configure Containers
Create a directory for Relution configuration files, e.g., for docker compose.
mkdir -p /opt/relution
Download and Edit Configuration Files
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
Edit the file:
vim /opt/relution/compose.yaml
Adapt the file to your environment. You must replace at least the following placeholder:
| Placeholder | Description |
|---|---|
%POSTGRES_PASSWORD% | The password of the Relution database user |
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 your environment. You must replace the following placeholders:
| Placeholder | Description |
|---|---|
%EXT_HOSTNAME_URL% | The external address of the Relution server, e.g., https://mdm.example.com |
%POSTGRES_PASSWORD% | The password of the Relution database user |
%SYSTEM_ADMIN_PASSWORD% | The initial password of the system administrator. Change this after the first login and then remove this line. |
%SYSTEM_ADMIN_EMAIL% | The email address of the system administrator |
Note on Passwords: The Compose file defines three services:
database,relution, andtraefik. Use secure random passwords for the passwords (e.g., withpwgen -snc 48 1). If you replace the password placeholder in one container (e.g.,%POSTGRES_PASSWORD%), make sure to use the same password in theapplication.yml.
Data Persistence: The default configuration maps the PostgreSQL data directories to the host system. Relution stores all its data in the database, so no additional configuration is required. Ensure that you include PostgreSQL in your backup strategy.
Configuring Traefik (Reverse Proxy)
Traefik is used as a reverse proxy to enable access to Relution while providing SSL/TLS encryption. Without Traefik or a similar proxy, access to Relution is only possible locally via localhost.
Automatic Certificate Creation (Let’s Encrypt)
Download the Traefik configuration file and adapt it to your 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
Note: The external URL here is specified without a preceding
https://, unlike in theapplication.yml.
Alternatively Sourced Certificates (Static)
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.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
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
...
Configuring nginx Alternative to Traefik (Reverse Proxy)
Nginx is used as a reverse proxy to enable access to Relution while providing SSL/TLS encryption. Without Nginx or a similar proxy, access to Relution is only possible locally via localhost.
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 your 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.
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
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 you encounter startup issues with Relution, please send the complete log as a Zip file to support. Support is subject to a fee.