backup

A script to backup docker volumes and stack configuration on the servers.

What it does

  1. Stops all docker services located in /etc/komodo/stacks
  2. Generates a temporary directory.
  3. Copies all stack configuration to temporary directory.
  4. Copies all docker volumes /var/lib/docker/volumes to temporary directory.
  5. Copies all data in /opt (where host bind mounts should be) to temporary directory.
  6. Compresses the temporary directory.
  7. Copies the result to the /backups folder.
  8. Cleans up / removes temporary directory that was created.
  9. Restarts all the services.
  10. Removes backups older than 7 days.

Setup

Before using the backup script, you must mount a network share for backups to be stored in. This is done by editing the /etc/fstab file, and adding the following line.

//<nas_ip>/docker/backups/<machine> /backups cifs credentials=/path/to/smbcredentials,uid=0,gid=0 0 0

Once that is done:

  1. Generate the /backups directory sudo mkdir /backups
  2. Reload the daemon sudo systemctl daemon-reload
  3. Mount the folder sudo mount -a

Automated Installation Script

This repository has an automated installation script that can be ran.

sudo su -c "bash <(wget -qO- https://git.housh.dev/homelab/backup/raw/branch/main/install.sh)" root

Manual Installation

See installation script.

Setup the backup script

sudo wget "https://git.housh.dev/homelab/backup/raw/branch/main/docker-backup.sh" -O /usr/local/bin/docker-backup
sudo chmod +x /usr/local/bin/docker-backup

Systemd Setup

Setup the systemd service and timer, so that backups are ran once a day @ 3 a.m.

cd /etc/systemd/system
sudo wget https://git.housh.dev/homelab/backup/raw/branch/main/backup.service
sudo wget https://git.housh.dev/homelab/backup/raw/branch/main/backup.timer
sudo systemctl daemon-reload
sudo systemctl start backup.timer
sudo systemctl start backup.service

Restore

The backup script also contains a restore command that can restore the stacks and volumes from a backup (hopefully it's never needed!).

Usage

You can use the restore command without an argument to use the last backup as the archive to restore from.

sudo docker-backup restore

Or if you'd like to restore using a specific archive then you can pass in argument that contains the path to the backup archive to use.

sudo docker-backup restore /backups/2025-04-21.tar.gz
Description
A script template to backup docker volumes on the servers.
Readme MIT 54 KiB
Languages
Shell 100%