Restic is a backup program written in go that makes doing backups easy. Here’s how i do it.


Install restic with your distribution package manager here or just download the binary from


bunzip2 restic_0.9.5_linux_amd64.bz2

sudo mv restic_0.9.5_linux_amd64.bz2 /usr/local/bin/restic

sudo chmod + /usr/local/bin/restic

Now restic should be in your $PATH. Test it with restic help.


With restic you put your backups into a repository. A repository can be on your local disk, a ssh server or even cloud storage provider like AWS S3. I am using a simple webspace where i can login via ssh to store my server backup. To do so your ssh server needs to know your ssh key:

# on your local machine
cat .ssh/

# login to your ssh server
ssh <user>@<ip>

echo < contents> >> .ssh/authorized_keys

# create a backup folder on your server
mkdir backup

# logout

Now you’re able to backup some files with restic. Specify a RESTIC_REPOSITORY and RESTIC_PASSWORD environment variable. The password is for the encryption on the server. You cannot restore your backup anymore without knowing your password.

export RESTIC_REPOSITORY=sftp:<user>@<ip>:backup
export RESTIC_PASSWORD=s3cret

# init the repository on your server
restic init

# backup your .config directory for example
restic backup .config

# list your backups
restic snapshots

# restore your backup
restic restore <id> --target /tmp/restic_restore 

Environment variables

If you don’t want to export your environment variables everytime you use restic, just put them in ~/.profile or ~/.bashrc file.

Automatic backup with docker

I’ve created a docker image wich is hosted on It runs tinycron with a simple sh script. You can use it to backup your container volumes:

version: '3'


  # some service that saves data in /var/service/data
    image: someservice
      - data:/var/service/data

    image: janstuemmel/restic 
    restart: always
      # mount your volume to /backup/<your backup name>, because backup 
      # script will backup each folder in /backup seperatly
      - data:/backup/data
      CRON: '@daily'
      # set your hostname here, because in a container restic will see 
      # the guest hostname
      RESTIC_HOST: your_host_name
      RESTIC_ARGS: --exclude cache
      RESTIC_REPOSITORY: sftp:<user>@<ip>:backup
      RESTIC_PASSWORD: s3cret