systemd example

Below is an example how to use systemd to start a docker-compose based Solidblocks RDS instances, together with timers, to schedule backups.

/opt/dockerfiles/instance1/docker-compose.yml

version: "3"
services:
  instance1:
    image: ghcr.io/pellepelster/solidblocks-rds-postgresql:17-v0.3.2
    environment:
      - "DB_INSTANCE_NAME=instance1"
      - "DB_..." # see https://pellepelster.github.io/solidblocks/rds/index.html#configuration
    ports:
      - "5432:5432"
    volumes:
      - "/storage/data:/storage/data"
      - "/storage/backup:/storage/backup"

/etc/systemd/system/rds@.service

[Unit]
Description=rds instance %i
Requires=docker.service
After=docker.service

[Service]
Restart=always
RestartSec=10s

WorkingDirectory=/opt/dockerfiles/%i
ExecStartPre=/usr/bin/docker-compose down -v
ExecStartPre=/usr/bin/docker-compose rm -fv
ExecStartPre=/usr/bin/docker-compose pull

ExecStart=/usr/bin/docker-compose up
ExecStop=/usr/bin/docker-compose down -v

[Install]
WantedBy=multi-user.target

/etc/systemd/system/rds-backup-<full|incr>@.service

[Unit]
Description=<full|incr> backup for %i

[Service]
Type=oneshot
WorkingDirectory=/opt/dockerfiles/%i
ExecStart=/usr/bin/docker-compose exec -T instance1 /rds/bin/backup-<full|incr>.sh

/etc/systemd/system/rds-backup-<full|incr>@.timer

[Unit]
Description=<full|incr> backup for %i

[Timer]
OnCalendar=00 00 * * *

Unit=rds-backup-<full|incr>@%i.service

[Install]
WantedBy=multi-user.target

enable system units

systemctl daemon-reload
systemctl enable rds@instance1
systemctl start rds@instance1

systemctl enable rds-backup-<full|incr>@instance1.timer
systemctl start rds-backup-<full|incr>@instance1.timer
systemctl enable rds-backup-<full|incr>@instance1.timer
systemctl start rds-backup-<full|incr>@instance1.timer