Installation Guide
The application can be deployed using Docker, Portainer Stacks, or Podman. After the installation, you may want to configure the TIMEZONE and LANGUAGE, as described in the Configure Timezone and Language and need to configure the Duplicati servers to send backup logs to duplistatus, as outlined in the Duplicati Configuration section.
Prerequisites
Ensure you have the following installed:
- Docker Engine - Debian installation guide
- Docker Compose - Linux installation guide
- Portainer (optional) - Docker installation guide
- Podman (optional) - Installation guide
Authentication
duplistatus since version 0.9.x requires user authentication. A default admin account is created automatically when installing the application for the first time or upgrading from an earlier version:
- username:
admin - password:
Duplistatus09
You can create additional users accounts in Settings > Users after the first login.
The system enforces a minimum password length and complexity. These requirements can be adjusted using the PWD_ENFORCE and PWD_MIN_LEN environment variables. Using a password without sufficient complexity or with a short length can compromise security. Please configure these settings carefully.
Container Images
You can use the images from:
- Docker Hub:
docker.io/wsjbr/duplistatus:latest - GitHub Container Registry:
ghcr.io/wsj-br/duplistatus:latest
Option 1: Using Docker Compose
This is the recommended method for local deployments or when you want to customise the configuration. It uses a docker compose file to define and run the container with all its settings.
# download the compose file
wget https://github.com/wsj-br/duplistatus/raw/refs/heads/master/production.yml -O duplistatus.yml
# start the container
docker compose -f duplistatus.yml up -d
Check the Timezone and Locale section to more details on how to adjust the timezone and number/date/time format.
Option 2: Using Portainer Stacks (Docker Compose)
- Go to "Stacks" in your Portainer server and click "Add stack".
- Name your stack (e.g., "duplistatus").
- Choose "Build method" as "Web editor".
- Copy and paste this in the web editor:
# duplistatus production compose.yml
services:
duplistatus:
image: ghcr.io/wsj-br/duplistatus:latest
container_name: duplistatus
restart: unless-stopped
environment:
- TZ=Europe/London
- LANG=en_GB
- PWD_ENFORCE=true
- PWD_MIN_LEN=8
ports:
- "9666:9666"
volumes:
- duplistatus_data:/app/data
networks:
- duplistatus_network
networks:
duplistatus_network:
driver: bridge
volumes:
duplistatus_data:
name: duplistatus_data
- Check the Timezone and Locale section to more details on how to adjust the timezone and number/date/time format.
- Click "Deploy the stack".
Option 3: Using Portainer Stacks (GitHub Repository)
- In Portainer, go to "Stacks" and click "Add stack".
- Name your stack (e.g., "duplistatus").
- Choose "Build method" as "Repository".
- Enter the repository URL:
https://github.com/wsj-br/duplistatus.git - In the "Compose path" field, enter:
production.yml - (optional) Set the
TZ,LANG,PWD_ENFORCEandPWD_MIN_LENenvironment variables in the "Environment variables" section. Check the Timezone and Locale section to more details on how to adjust the timezone and number/date/time format. - Click "Deploy the stack".
Option 4: Using Docker CLI
# Create the volume
docker volume create duplistatus_data
# Start the container
docker run -d \
--name duplistatus \
-p 9666:9666 \
-e TZ=Europe/London \
-e LANG=en_GB \
-v duplistatus_data:/app/data \
ghcr.io/wsj-br/duplistatus:latest
- The
duplistatus_datavolume is used for persistent storage. The container image usesEurope/Londonas the default timezone anden_GBas the default locale (language).
Option 5: Using Podman (CLI) rootless
For basic setups, you can start the container without DNS configuration:
mkdir -p ~/duplistatus_data
# Start the container (standalone)
podman run -d \
--name duplistatus \
--userns=keep-id \
-e TZ=Europe/London \
-e LANG=en_GB \
-p 9666:9666 \
-v ~/duplistatus_data:/app/data \
ghcr.io/wsj-br/duplistatus:latest
Configuring DNS for Podman Containers
If you need custom DNS configuration (e.g., for Tailscale MagicDNS, corporate networks, or custom DNS setups), you can manually configure DNS servers and search domains.
Finding your DNS configuration:
-
For systemd-resolved systems (most modern Linux distributions):
# Get DNS servers
resolvectl status | grep "DNS Servers:" | awk '{print "--dns " $3}'
# Get DNS search domains
resolvectl status | grep "DNS Domain:" | awk '{print "--dns-search " $3}' -
For non-systemd systems or as a fallback:
cat /run/systemd/resolve/resolv.conf 2>/dev/null || cat /etc/resolv.confLook for lines beginning with
nameserver(for DNS servers) andsearch(for search domains). If you are unsure of your DNS settings or network search domains, consult your network administrator for this information.
Example with DNS configuration:
mkdir -p ~/duplistatus_data
# Start the container with DNS configuration
podman run -d \
--name duplistatus \
--userns=keep-id \
--dns 100.100.100.100 \
--dns-search example.com \
-e TZ=Europe/London \
-e LANG=en_GB \
-p 9666:9666 \
-v ~/duplistatus_data:/app/data \
ghcr.io/wsj-br/duplistatus:latest
You can specify multiple DNS servers by adding multiple --dns flags:
--dns 8.8.8.8 --dns 1.1.1.1
You can specify multiple search domains by adding multiple --dns-search flags:
--dns-search example.com --dns-search internal.local
Note: Skip IPv6 addresses (containing :) and localhost addresses (like 127.0.0.53) when configuring DNS servers.
Check the Timezone and Locale section for more details on how to adjust the timezone and number/date/time format.
Option 6: Using Podman Pods
Podman pods allow you to run multiple containers in a shared network namespace. This is useful for testing or when you need to run duplistatus alongside other containers.
Basic pod setup:
mkdir -p ~/duplistatus_data
# Create the pod
podman pod create --name duplistatus-pod --publish 9666:9666/tcp
# Create the container in the pod
podman create --name duplistatus \
--pod duplistatus-pod \
--user root \
-e TZ=Europe/London \
-e LANG=en_GB \
-v ~/duplistatus_data:/app/data \
ghcr.io/wsj-br/duplistatus:latest
# Start the pod
podman pod start duplistatus-pod
Configuring DNS for Podman Pods
When using pods, DNS configuration must be set at the pod level, not the container level. Use the same methods described in Option 5 to find your DNS servers and search domains.
Example with DNS configuration:
mkdir -p ~/duplistatus_data
# Create the pod with DNS configuration
podman pod create --name duplistatus-pod \
--publish 9666:9666/tcp \
--dns 100.100.100.100 \
--dns-search example.com
# Create the container in the pod
podman create --name duplistatus \
--pod duplistatus-pod \
--user root \
-e TZ=Europe/London \
-e LANG=en_GB \
-v ~/duplistatus_data:/app/data \
ghcr.io/wsj-br/duplistatus:latest
# Start the pod
podman pod start duplistatus-pod
Managing the pod:
# Stop the pod (stops all containers in the pod)
podman pod stop duplistatus-pod
# Start the pod
podman pod start duplistatus-pod
# Remove the pod and all containers
podman pod rm -f duplistatus-pod
Essential Configuration
- Configure your Duplicati servers to send backup log messages to duplistatus (required).
- Log in to duplistatus – see instructions in the User Guide.
- Collect initial backup logs – use the Collect Backup Logs feature to populate the database with historical backup data from all your Duplicati servers. This also automatically updates the overdue monitoring intervals based on each server’s configuration.
- Configure server settings – set up server aliases and notes in Settings → Server to make your dashboard more informative.
- Configure NTFY settings – set up notifications via NTFY in Settings → NTFY.
- Configure email settings – set up email notifications in Settings → Email.
- Configure backup notifications – set up per-backup or per-server notifications in Settings → Backup Notifications.
See the following sections to configure optional settings such as timezone, number format, and HTTPS.