Skip to main content

Automate backups using restic

Project description

ENACrestic

License: MIT release to PyPI Python Version

Last commit GitHub commit activity Github Stars Github Forks Github Watchers GitHub contributors

ENACrestic

A simple Qt GUI to automate backups with restic

  1. Automate your restic backups at a choosen frequency
  2. Run restic forget in a regular basis (and transparently) to keep your backup light and useful
  3. Let you see when:
  • pre_backup_in_progress pre_backup script is running
  • backup_in_progress restic backup is running
  • forget_in_progress restic forget is running
  • unlock_in_progress restic unlock is running
  • backup_success backup is completed
  • error last operation failed
  • no_network last backup failed because of a network timeout (maybe the VPN is not running?)

Installation

This has been tested and validated on

  • Ubuntu 18.04 LTS
  • Ubuntu 20.04 LTS
  • Ubuntu 22.04 LTS
sudo apt install restic python3-pip qt5dxcb-plugin python3-pyqt5
pip3 install --user --upgrade pip
pip3 install --user enacrestic

Upgrade

To upgrade ENACrestic to latest release, just run the following command:

pip3 install --user --upgrade enacrestic

Config ENACrestic

Note: For this documentation, we have chosen to use the vi text editor. Adapt the commands below by replacing it with the editor of your choice. (nano, gedit, ...)

mkdir ~/.enacrestic

Write environment setup file

Choose the right section according to your destination storage

vi ~/.enacrestic/env.sh
# 1. recommended destination: S3 Bucket
export RESTIC_REPOSITORY=s3:s3.epfl.ch/bucket_name/restic_MyComputerName
export AWS_ACCESS_KEY_ID=TheBucketRWAccessKey
export AWS_SECRET_ACCESS_KEY=TheBucketRWSecretKey

# 2. alternative destination: SSH / SFTP
export RESTIC_REPOSITORY=sftp:my-server.epfl.ch:/home/username/path

Note, although Restic is able to manage several computers being backed up on a same respository, it's not recommended with ENACrestic. Keep a dedicated RESTIC_REPOSITORY per machine.

Write password file (mandatory)

Add a one line password in it. This is used to encrypt your backups.

vi ~/.enacrestic/.pw

Be careful ! If you loose this password ... you loose your backups.

Define what to backup (mandatory)

Add one line per folder / file that has to be backed up.

vi ~/.enacrestic/bkp_include
# 1. recommended scenario: backup all your home directory
/home/username/

# 2. alternative scenario: backup only choosen folders
/home/username/.enacrestic/
/home/username/Documents/
/home/username/Teaching/
/home/username/Pictures/
/home/username/Projects/
/home/username/Learn/
/home/username/.gitconfig
/home/username/.mozilla/
/home/username/.ssh/
# heavy !
/home/username/Videos/

note: Lines starting with a # are ignored.

Define what to exclude from the backup (optional but recommended)

Add one line per folder / file / expression that has to be excluded.

Before running your first backup, you might want to exclude heavy and unnecessary folders (Like the Downloads or the Trash). You can use the baobab utility to find those.

Here is an example of some typical things you might want to exclude from backup:

vi ~/.enacrestic/bkp_exclude
*.iso
*.sav
*.bak
*.bak2
*.log
*.ost
*.part
*.temp
*.tmp
*.vhd
*.vhdx
*.vmdk
*.vdi
/home/username/Downloads/
/home/username/ENACdrives/
/home/username/.local/share/Trash/
/home/username/VirtualBox VMs/
/home/username/snap/
/home/username/.cache/
/home/username/**/nobackup*
/home/username/.local/share/virtualenvs/
/home/username/.arduino15/
/home/username/.atom/
/home/username/.npm/
/home/username/.nvm/

Exact syntax is described here

Make it available to your shell (mandatory)

Add the following 2 lines to have:

  • enacrestic in your $PATH
  • enacrestic's env variables available.
vi ~/.bashrc # or ~/.zshrc or whatever is your shell rc file
export "PATH=$PATH:$HOME/.local/bin"
. $HOME/.enacrestic/env.sh

Now close + open a new terminal to get it all into your environment ... or simply reload your rc file:

. ~/.bashrc # or ~/.zshrc or whatever is your shell rc file

All done !

🎉 Setup is now complete! You're now ready to send your 1st backup. 🎉

Run ENACrestic on your computer

  • from Ubuntu's Application launcher
  • or from command line with the single command enacrestic

You'll see a new icon in the system tray (upper-right corner of your screen) with following icon.

just_launched

This is the indicator that ENACrestic is running in the background and it'll change over time, reflecting current state.

By clicking on it, you can view detailed status and opt-in for the auto-start feature (start ENACrestic when Ubuntu user session is started).

From now on, ENACrestic is running in the background and doing the backups on a regular basis.

You can check it's activity by reading the ~/.enacrestic/last_backups.log file.

Note: First backup can take a long time! Please consider having enough time for the 1st backup to complete. It'll be the longest backup ever, since everything has to be copied. All future backups will then be only incremental.

Run ENACrestic on a server

Add a dedicated Systemd service file:

vi /etc/systemd/system/enacrestic.service
[Unit]
Description=ENACrestic

[Install]
WantedBy=multi-user.target

[Service]
Type=simple
User=root
Group=root
WorkingDirectory=/root
ExecStart=/root/.local/bin/enacrestic --no-gui
KillSignal=SIGTERM
Restart=on-failure
RestartSec=30

Enable and start it:

systemctl daemon-reload
systemctl enable enacrestic.service
systemctl start enacrestic.service

That will ensure enacrestic service is started when the server boot.

You can know its status with the following commands:

systemctl status enacrestic.service
tail -n 50 -f /root/.enacrestic/last_backups.log

Note on old backups retention policy

By default, every 10 backups, a restic forget will clean repository from backups that don't need to be kept, according the following retention policy:

  • keep the last 3 backups
  • keep the last 24 hourly backups
  • keep the last 7 daily backups
  • keep the last 4 weekly backups
  • keep the last 12 monthly backups
  • keep the last 5 yearly backups

What ENACrestic doesn't do

ENACrestic is here to help you, running backups on a regular basis. If you want to browse backups, restore files/folders, you'll have to use restic itself. Here are basic commands:

List the snapshots (backups)

restic snapshots -c --password-file  ~/.enacrestic/.pw

Mount the backups ...

... and be able to

  • browse the different snapshots
  • restore any file / folder
mkdir -p ~/mnt/my_backups
restic mount ~/mnt/my_backups --password-file  ~/.enacrestic/.pw

Now you can browse ~/mnt/my_backups folder and copy from it anything you want to restore. When done, you can simply Ctrl-c in the terminal where you had issued the restic mount ... command.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

enacrestic-0.7.2.tar.gz (9.5 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

enacrestic-0.7.2-py3-none-any.whl (9.5 MB view details)

Uploaded Python 3

File details

Details for the file enacrestic-0.7.2.tar.gz.

File metadata

  • Download URL: enacrestic-0.7.2.tar.gz
  • Upload date:
  • Size: 9.5 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.11.5

File hashes

Hashes for enacrestic-0.7.2.tar.gz
Algorithm Hash digest
SHA256 a99491d24d20dd06e068ae5f704e417239647b93e1349b25ccbe8aeee4f9e1fa
MD5 42b5391e9eec166f0b84a4654db49633
BLAKE2b-256 722113de99d7c9e37b0cc74391d8af93f382ad410b2d2fce336574eb09faec92

See more details on using hashes here.

File details

Details for the file enacrestic-0.7.2-py3-none-any.whl.

File metadata

  • Download URL: enacrestic-0.7.2-py3-none-any.whl
  • Upload date:
  • Size: 9.5 MB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.11.5

File hashes

Hashes for enacrestic-0.7.2-py3-none-any.whl
Algorithm Hash digest
SHA256 22657b54224bdf4a089f5bd6b9a00fd3130a928b36ca64a87b448679630204d9
MD5 3e21c3881991c1dc185aad35f56f8664
BLAKE2b-256 37fde995198a10e195ea55bc8465ba16f825fa65ccc6304c596639cc65ed7ef2

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page