Let op! Op het moment ondersteunt stack deze functionaliteit nog niet i.v.m. Beta versie van hun sftp setup.
In het begin heb ik geprobeerd dit met webdav te doen, alleen dit leidde regelmatig tot probleme met volle caches en ander gedoe. Dus toen er bij TransIP laatst een aanbieding was om 250GB extra en SFTP toegang tot je stack voor €3,03 per maand. Om automatische backups te realiseren heb ik besloten Restic te gebruiken. Het opzetten hiervan was niet zo simpel als ik hoopte, dus hierbij deel ik graag mijn ervaring
Mijn server draait Ubuntu 18.04. De meeste informatie in deze guide zal ook bruikbaar zijn voor andere linux distro's. Voor windows/mac gebruikers raad ik Stack z'n eigen client aan.
Op de dashboardpagina van jouw Stack (te vinden op jouwnaam.stackstorage.com/settings) vind je de volgende 2 velden onder sftp:
Maar nee! Stack heeft het eigenlijk correct neergezet en je dient dus in te loggen met sftp jouwnaam@jouwnaam.stackstorage.com@jouwnaam.stackstorage.com.
Goed, nu dat we dat even hebben laten bezinken, gaan we verder met het instellen van een wachtwoord.
Op de tokens pagina (jouwnaam.stackstorage.com/settings/tokens), kunnen we een nieuwe token aanmaken voor onze sftp verbinding. In dit voorbeeld zal ik hiernaar refereren met <token>
Om met de Stack te communiceren zou gebruik gemaakt kunnen worden van de ingebouwde SFTP functionaliteit van restic. Maar helaas, zoals bleek uit een eerdere versie van deze post, werkte dit niet naar behoren.
Daarom gebruiken we sshfs om een sftp locatie te 'mounten' als netwerkschijf.
Op ubuntu is sshfs makkelijk te installeren met apt install sshpass.
Ik heb dit scriptje geplaatst in mijn home directory genaamd restic_env.sh
met de volgende inhoud:
de eerste 2 variables specificeren welke restic repository we willen gebruiken en welk wachtwoord we ervoor gebruiken. Hier duidt je ook aan in welke folder je de sshfs schijf wil mounten.
De laatste variable vertelt sshfs wat ons sftp wachtwoord is.
Als laatste mounten we de sftp netwerkschijf in de locatie van $RESTIC_REPOSITORY met als subfolder in stack 'backup'.
Voordat we dit bestand kunnen uitvoeren dienen we de folder gedefinieerd in $RESTIC_REPOSITORY aan te maken op onze server sudo mkdir /media/backup En zorgen dat wij als gebruiker in de folder mogen (sudo chown $USER /media/backup)
Als je een subfolder gebruikt op stack (in dit voorbeeld 'backup') Zorg dan dat deze folder is aangemaakt op stack.
Vergeet ook niet de juiste permissies aan het script bestand te geven met chmod +x ~/.restic_env
Hiervoor stellen we eerst onze environment variables in:
. ~/.restic_env
Daarna voeren we het volgende commando uit:
restic init
Hierin kun je zelf instellen hoeveel dagen, weken, maanden en jaren aan backups je wil bewaren.
Ook kun je instellen welke folders je graag wil backuppen. Het is ook mogelijk een .gitignore achtig bestand te linken met daarin filters voor at niet in de backup moet.
* 2 */2 * * jort /etc/backup/backup_service.sh 2>&1 | /usr/bin/logger -t backup-service
Het is belangrijk om het script als je eigen user te laten runnen, omdat anders de stack ssh hostname niet gevonden kan worden. Verder log ik wat er gebeurt zodat ik met grep backup-service /var/log/syslog makkelijk kan zien of de backups gewerkt hebben.
restic snapshots
Voor meer informatie over hoe je restic kan gebruiken om o.a. backups terug te zetten kun je het best terecht op de restic documentatie .
Ondanks deze struikelblokken heb ik deze setup nu een week draaiend en werkt het perfect. Ik hoop dat deze guide jullie help met het maken van je eigen backups, laat vooral weten als er foutjes/verbeteringen zijn voor deze guide.
Stack + Restic setup
Een paar maanden terug kreeg ik van iemand een gratis code voor 1TB aan opslag bij TransIP stack. Een mooi gebaar uiteraard, zeker omdat ik al een tijdje zat te zoeken naar een manier om dagelijkse backups te maken van mijn home-server.In het begin heb ik geprobeerd dit met webdav te doen, alleen dit leidde regelmatig tot probleme met volle caches en ander gedoe. Dus toen er bij TransIP laatst een aanbieding was om 250GB extra en SFTP toegang tot je stack voor €3,03 per maand. Om automatische backups te realiseren heb ik besloten Restic te gebruiken. Het opzetten hiervan was niet zo simpel als ik hoopte, dus hierbij deel ik graag mijn ervaring
Mijn server draait Ubuntu 18.04. De meeste informatie in deze guide zal ook bruikbaar zijn voor andere linux distro's. Voor windows/mac gebruikers raad ik Stack z'n eigen client aan.
Stap 1: account gegevens verzamelen
Als eerste moeten we de loging gegevens van onze stack halen. Dit lijkt op het eerste ook makkelijk, maar er kan veel verwarring ontstaan over hoe de accountgegevens worden gegeven.Op de dashboardpagina van jouw Stack (te vinden op jouwnaam.stackstorage.com/settings) vind je de volgende 2 velden onder sftp:
- Server: jouwnaam.stackstorage.com
- Gebruikersnaam: jouwnaam@jouwnaam.stackstorage.com
Maar nee! Stack heeft het eigenlijk correct neergezet en je dient dus in te loggen met sftp jouwnaam@jouwnaam.stackstorage.com@jouwnaam.stackstorage.com.
Goed, nu dat we dat even hebben laten bezinken, gaan we verder met het instellen van een wachtwoord.
Op de tokens pagina (jouwnaam.stackstorage.com/settings/tokens), kunnen we een nieuwe token aanmaken voor onze sftp verbinding. In dit voorbeeld zal ik hiernaar refereren met <token>
Stap 2: Installeren van Restic en sshfs
Restic is redelijk simpel te installeren met de gebruiksaanwijzingen in hun documentatie.Om met de Stack te communiceren zou gebruik gemaakt kunnen worden van de ingebouwde SFTP functionaliteit van restic. Maar helaas, zoals bleek uit een eerdere versie van deze post, werkte dit niet naar behoren.
Daarom gebruiken we sshfs om een sftp locatie te 'mounten' als netwerkschijf.
Op ubuntu is sshfs makkelijk te installeren met apt install sshpass.
Stap 3: environment file/script
Om te voorkomen dat we telkens onze authenticatie gegevens in moeten vullen, maken we een klein scriptje wat automatisch environment variables instelt.Ik heb dit scriptje geplaatst in mijn home directory genaamd restic_env.sh
met de volgende inhoud:
Bash:
1
2
3
4
5
6
7
8
9
| #!/bin/bash export RESTIC_REPOSITORY="media/backup_folder" export RESTIC_PASSWORD="<Plaats hier een lang en veilig wachtwoord>" export SSHPASS='<token>' if [ ! -d $RESTIC_REPOSITORY ] then echo $SSHPASS | sshfs -o password_stdin jouwnaam@jouwnaam.stackstorage.com:/backup $RESTIC_REPOSITORY fi |
de eerste 2 variables specificeren welke restic repository we willen gebruiken en welk wachtwoord we ervoor gebruiken. Hier duidt je ook aan in welke folder je de sshfs schijf wil mounten.
De laatste variable vertelt sshfs wat ons sftp wachtwoord is.
Als laatste mounten we de sftp netwerkschijf in de locatie van $RESTIC_REPOSITORY met als subfolder in stack 'backup'.
Voordat we dit bestand kunnen uitvoeren dienen we de folder gedefinieerd in $RESTIC_REPOSITORY aan te maken op onze server sudo mkdir /media/backup En zorgen dat wij als gebruiker in de folder mogen (sudo chown $USER /media/backup)
Als je een subfolder gebruikt op stack (in dit voorbeeld 'backup') Zorg dan dat deze folder is aangemaakt op stack.
Vergeet ook niet de juiste permissies aan het script bestand te geven met chmod +x ~/.restic_env
Stap 4: het maken van de repo
We dienen eerst een repo aan te maken.Hiervoor stellen we eerst onze environment variables in:
. ~/.restic_env
Daarna voeren we het volgende commando uit:
restic init
offtopic:
Je kunt ook sshpass -p <token> gebruiken i.p.v -e
Je kunt ook sshpass -p <token> gebruiken i.p.v -e
Stap 5: Het backup script
In de een na laatste stap maken we een scriptje die cron voor ons dagelijk kan runnen om backups te maken, en oude backups weg te gooien. Ik heb mijn script gebaseerd op dat van erikw op github . Het ziet er als volgt uit:Bash:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
| #!/usr/bin/env bash # Prune backups and make a new backup # Exit on failure, pipe failure set -e -o pipefail # Clean up lock if we are killed. # If killed by systemd, like $(systemctl stop restic), then it kills the whole cgroup and all it's subprocesses. # However if we kill this script ourselves, we need this trap that kills all subprocesses manually. exit_hook() { echo "In exit_hook(), being killed" >&2 jobs -p | xargs kill restic unlock } trap exit_hook INT TERM # How many backups to keep. RETENTION_DAYS=14 RETENTION_WEEKS=5 RETENTION_MONTHS=12 RETENTION_YEARS=3 BACKUP_PATHS="/home/jort /var/lib /var/www /var/opt /etc /opt /storage/nextcloud /usr/local" BACKUP_EXCLUDE_FILE="/etc/backup/excludes" # Set environment variables source /home/jort/.restic-env # Remove locks from other stale processes to keep the automated backup running. restic unlock & wait $! # Do the Backup restic backup --verbose --one-file-system --no-cache --exclude-file=$BACKUP_EXCLUDE_FILE $BACKUP_PATHS & wait $! restic forget --verbose --prune --keep-daily $RETENTION_DAYS --keep-weekly $RETENTION_WEEKS --keep-monthly $RETENTION_MONTHS --keep-yearly $RETENTION_YEAR& wait $! echo "Backup & cleaning is done" |
Hierin kun je zelf instellen hoeveel dagen, weken, maanden en jaren aan backups je wil bewaren.
Ook kun je instellen welke folders je graag wil backuppen. Het is ook mogelijk een .gitignore achtig bestand te linken met daarin filters voor at niet in de backup moet.
Stap 6: Cron
De laatste stap die we nog moeten doen is het maken van een cronjob om het script in de vorige stap automatisch uit te voeren. Ik heb ervoor gekozen om elke 2 dagen een backup te maken. Hiervoor heb ik de volgende cron entry:* 2 */2 * * jort /etc/backup/backup_service.sh 2>&1 | /usr/bin/logger -t backup-service
Het is belangrijk om het script als je eigen user te laten runnen, omdat anders de stack ssh hostname niet gevonden kan worden. Verder log ik wat er gebeurt zodat ik met grep backup-service /var/log/syslog makkelijk kan zien of de backups gewerkt hebben.
Backups bekijken
Om te zien welke snapshots (lees: backups) restic gemaakt heeft gebruiken we het volgende commando:restic snapshots
Voor meer informatie over hoe je restic kan gebruiken om o.a. backups terug te zetten kun je het best terecht op de restic documentatie .
Final remarks
Zoals je kan zien is het niet heel straight-forward om backups te maken naar stack. Het zou een stuk makkelijker zijn als stack het mogelijk zou maken om public/private ssh key pairs te gebruiken, Zodat restic meteen met stack kan verbinden.Ondanks deze struikelblokken heb ik deze setup nu een week draaiend en werkt het perfect. Ik hoop dat deze guide jullie help met het maken van je eigen backups, laat vooral weten als er foutjes/verbeteringen zijn voor deze guide.
[ Voor 18% gewijzigd door jortdbokx op 02-02-2019 23:38 . Reden: Waarschuwing ]