Skip to main content

Installation with Docker and systemd

If docker is installed on your system, installing Draupnir is as simple as creating the following systemd unit file.

Pre-requisites​

This guide assumes you have read over the different options available for starting Draupnir and understand the requirements Draupnir has, which you can read here.

Preparing your system​

The first thing that you will need to do is create the directory /var/lib/draupnir, which will be used to store Draupnir's persistent data.

You will then want to copy your configuration file for Draupnir to /var/lib/draupnir/config/production.yaml.

Then you will want to copy the following systemd unit file to /etc/systemd/system/draupnir.service.

[Unit]
Description=Draupnir Docker Container
After=docker.service
Requires=docker.service

After=network-online.target
Wants=network-online.target

[Service]
Type=exec
# This controls the docker tag your bot is pinned to. Update it to Switch draupnir version.
Environment=DRAUPNIR_TAG=3.1.0
# Update Draupnir
ExecStartPre=docker image pull ghcr.io/the-draupnir-project/draupnir:${DRAUPNIR_TAG}
# Clean up any accidentally existing containers
ExecStartPre=docker container rm --force draupnir

ExecStart=docker container run --rm --pull=never --name=draupnir -v /var/lib/draupnir:/data ghcr.io/the-draupnir-project/draupnir:${DRAUPNIR_TAG} bot --draupnir-config /data/config/production.yaml

ExecStop=-docker container stop --time=10 draupnir

# Let Docker handle timeout instead
TimeoutStopSec=infinity

Restart=always
RestartSec=30

[Install]
WantedBy=multi-user.target

You will then need to run systemctl daemon-reload to register the service file.

Finally run systemctl enable draupnir.service to tell systemd to start Draupnir the next time your system boots.

Managing Draupnir​

Now you can start draupnir with systemctl start draupnir.service.

If you need to access the logs, you can use journalctl -u draupnir.service. If you need to follow the logs because you want to watch Draupnir start, you can use -f option.

Draupnir can then be restarted or stopped with systemctl restart draupnir.service and systemctl stop draupnir.service respectively.