Installation

Quick start

Get fsbackup running in under 15 minutes with Docker.

This guide gets fsbackup running with Docker in under 15 minutes.

For a full installation reference see Docker installation or Bare-metal installation.

1. Create the fsbackup user

sudo useradd -r -m --uid 993 -d /var/lib/fsbackup -s /bin/bash fsbackup

The UID must be 993 to match the user baked into the Docker image.

2. Generate the SSH keypair

sudo -u fsbackup ssh-keygen -t ed25519 \
  -f /var/lib/fsbackup/.ssh/id_ed25519_backup -N ""

3. Create directories

sudo mkdir -p /etc/fsbackup/db
sudo mkdir -p /backup/snapshots/{daily,weekly,monthly,annual}
sudo mkdir -p /backup2/snapshots/{daily,weekly,monthly,annual}
sudo chown -R fsbackup:fsbackup /backup/snapshots /backup2/snapshots /var/lib/fsbackup

4. Create config files

sudo mkdir -p /docker/stacks/fsbackup

Create /docker/stacks/fsbackup/docker-compose.yml:

services:
  fsbackup:
    image: ghcr.io/fsbackup/fsbackup:latest
    container_name: fsbackup
    restart: unless-stopped
    user: "993:993"
    ports:
      - "8080:8080"
    volumes:
      - /etc/fsbackup:/etc/fsbackup
      - /var/lib/fsbackup:/var/lib/fsbackup
      - /backup/snapshots:/backup/snapshots
      - /backup2/snapshots:/backup2/snapshots
      - /var/lib/node_exporter/textfile_collector:/var/lib/node_exporter/textfile_collector

Create /etc/fsbackup/fsbackup.conf:

SNAPSHOT_ROOT="/backup/snapshots"
SNAPSHOT_MIRROR_ROOT="/backup2/snapshots"
MIRROR_SKIP_CLASSES=""

5. Start the container

cd /docker/stacks/fsbackup
docker compose up -d

6. Initialize remote hosts

On each machine you want to back up, run:

sudo ./remote/fsbackup_remote_init.sh \
  --pubkey-file /var/lib/fsbackup/.ssh/id_ed25519_backup.pub

7. Trust SSH host keys

docker exec -it fsbackup /opt/fsbackup/utils/fs-trust-host.sh <hostname>

8. Verify and run

# Check all targets are reachable
docker exec -it fsbackup /opt/fsbackup/bin/fs-doctor.sh --class class1

# Dry run first
docker exec -it fsbackup /opt/fsbackup/bin/fs-runner.sh daily --class class1 --dry-run

# Run for real
docker exec -it fsbackup /opt/fsbackup/bin/fs-runner.sh daily --class class1

The web UI is now available at http://<host>:8080.