selfhosted-apps-docker/kopia_backup/readme.md

3.8 KiB

Kopia

guide-by-example

logo

WORK IN PROGRESS
WORK IN PROGRESS
WORK IN PROGRESS

Purpose & Overview

Backups.

Kopia is an open source backup utility with basicly all modern features.
Cross-platform, deduplication, encryption, compression, multithreaded speed, cloud storage support, CLI and GUI versions, snapshots mounting,...

Written in golang.

In this setup kopia cli is installed directly on the host system.
A script is created that backs up the entire docker directory and /etc locally.
Systemd service and timer are used to run the backup periodicly.

Some aspects of Kopia

  • backup configuration is stored in a repository where backups will be stored
    this includes global policy, that is global in sense of repo, not all of kopia
  • you connect and disconnect from a repository before working with it,
    only one repository can be connected at time
  • currently to ignore some folders, one can create CACHEDIR.TAG with specific content and set policy: --ignore-cache-dirs true
  • Maintence is automatic
  • ..

Files and directory structure

/home/
│ └── ~/
│     └── docker/
│         ├── container-setup #2
│         ├── container-setup #1
│         ├── ...
│
/mnt/
│ └── mirror/
│      └── KOPIA/
│            └── arch_docker_host/
│
/opt/
  └── kopia-backup-home-etc.sh

The setup

install kopia

for arch linux, kopia is on AUR yay kopia-bin

repo creation and policy

use of sudo so that kopia has access everywhere
config files are therefore in /root/config/kopia

  • sudo kopia policy get --global

  • sudo kopia policy list

  • sudo kopia policy set --global --ignore-cache-dirs true --keep-annual 1 --keep-monthly 6 --keep-weekly 4 --keep-daily 14 --keep-hourly 0 --keep-latest 14

  • mkdir -p /mnt/mirror/KOPIA/docker_host_kopia

  • sudo kopia repository create filesystem --path /mnt/mirror/KOPIA/docker_host_kopia

  • sudo kopia repository connect filesystem --path /mnt/mirror/KOPIA/docker_host_kopia

  • sudo kopia repository status

  • sudo kopia snapshot create /home/spravca/docker /etc

  • sudo kopia snapshot list

  • sudo kopia mount k7e2b0a503edd7604ff61c68655cd5ad7 /mnt/tmp &

  • sudo umount /mnt/tmp

the backup script

/opt/kopia-backup-home-etc.sh

#!/bin/bash

#sudo kopia policy set --global --keep-annual 1 --keep-monthly 6 --keep-weekly 4 --keep-daily 14 --keep-hourly 0 --keep-latest 14

REPOSITORY_PATH='/mnt/mirror/KOPIA/docker_host_kopia'
BACKUP_THIS='/home /etc'
export KOPIA_PASSWORD='aaa'

kopia repository connect filesystem --path $REPOSITORY_PATH
kopia snapshot create $BACKUP_THIS
kopia repository disconnect

Automatic execution using systemd

Accessing the backup files

Mounting using systemd

  • the name of mount and automount files MUST correspond with the path
    instead of / a - is used, but otherwise it must be the mounting path in name
  • for mounting that does not fail on boot, and mounts the target only on request enable automount file, not mount file, so:
    sudo systemctl enable mnt-mirror.automount

mnt-mirror.mount

[Unit]
Description=3TB truenas mirror mount

[Mount]
What=//10.0.19.11/Mirror
Where=/mnt/mirror
Type=cifs
Options=rw,username=kopia,password=aaa,file_mode=0644,dir_mode=0755,uid=1000,gid=1000

[Install]
WantedBy=multi-user.target

mnt-mirror.automount

[Unit]
Description=3TB truenas mirror mount

[Automount]
Where=/mnt/mirror

[Install]
WantedBy=multi-user.target

Remote backup