Black Friday: eerste maand gratis per kwartaal · t/m 30 nov Bekijk de pakketten Voorwaarden
Nieuw hier? Probeer een Minecraft-server of Discord-bot 24 uur gratis. Gratis proberen
ServerSparkServerSpark

Kennisbank

Back-ups van je VPS maken met restic (automatisch en versleuteld)

Een VPS heeft geen back-ups. Maak elke nacht versleutelde back-ups met restic naar SFTP- of S3-opslag, met een systemd-timer, bewaarregels en een testrestore.

NVMe-nodesNachtelijke back-upsBinnen minuten online

Bijgewerkt op 30 oktober 2026

Een VPS komt zonder back-ups: je beheert hem zelf, dus jij bepaalt ook wat er bewaard wordt en waar. De eenvoudigste degelijke oplossing is restic: het versleutelt je bestanden, uploadt alleen wat veranderd is en bewaart bijvoorbeeld 7 dagelijkse, 4 wekelijkse en 6 maandelijkse snapshots. Zet ze ergens anders dan op de VPS zelf, zoals op een andere server via SFTP of in S3-compatibele objectopslag. Hieronder een opzet die je in zo'n twintig minuten overneemt.

Gecontroleerd op 29 oktober 2026 aan de hand van de documentatie van restic (restic.readthedocs.io). De commando's zijn voor Ubuntu 24.04 en Debian 12/13; op Rocky Linux en AlmaLinux komt restic uit de EPEL-repository (eerst dnf install epel-release).

1. Installeer restic en maak een wachtwoordbestand

apt update && apt install -y restic
mkdir -p /root/.restic && chmod 700 /root/.restic
openssl rand -base64 32 > /root/.restic/password && chmod 600 /root/.restic/password
Bewaar dat wachtwoord ook ergens anders, bijvoorbeeld in je wachtwoordmanager. De documentatie van restic is er duidelijk over: ben je je wachtwoord kwijt, dan ben je je data voorgoed kwijt. Een back-up die je niet kunt openen, is geen back-up.

2. Kies waar de back-ups heen gaan

Optie A: een andere server via SFTP. Elke Linux-machine of opslagdienst met SSH-toegang werkt. Maak op de VPS een SSH-sleutel voor root (ssh-keygen -t ed25519), zet de publieke sleutel op de back-upserver en controleer dat ssh gebruiker@backup-host zonder wachtwoord inlogt. Daarna:

export RESTIC_REPOSITORY="sftp:gebruiker@backup-host:/srv/restic-mijnvps"
export RESTIC_PASSWORD_FILE=/root/.restic/password
restic init

Optie B: S3-compatibele objectopslag. Zet de toegangssleutel in de omgeving en gebruik het endpoint van je aanbieder:

export AWS_ACCESS_KEY_ID=jouw-sleutel
export AWS_SECRET_ACCESS_KEY=jouw-geheim
export RESTIC_REPOSITORY="s3:https://jouw-endpoint/jouw-bucket/mijnvps"
export RESTIC_PASSWORD_FILE=/root/.restic/password
restic init

Zet de export-regels in /root/.restic/env (chmod 600), zodat het script hieronder ze kan inlezen.

3. Bepaal wat je back-upt

  • Je eigen data en configuratie: /etc, /home, /root, /srv, /opt en /var/www als je die gebruikt.
  • Databases: kopieer niet de losse bestanden van een draaiende database. Maak eerst een dump, bijvoorbeeld mysqldump --all-databases --single-transaction > /root/db.sql of pg_dumpall -U postgres > /root/db.sql, en back-up die dump.
  • Niet nodig: het besturingssysteem zelf, /proc, /sys, caches en mappen als node_modules. Die installeer je zo opnieuw.

4. Een back-upscript en een dagelijkse timer

Sla dit op als /usr/local/sbin/backup.sh en voer er chmod 700 op uit:

#!/bin/sh
set -e
. /root/.restic/env
# mysqldump --all-databases --single-transaction > /root/db.sql   # haal de # weg als je MySQL/MariaDB draait
restic backup /etc /home /root /srv /opt --exclude-caches --exclude node_modules
restic forget --keep-daily 7 --keep-weekly 4 --keep-monthly 6 --prune

Draai het één keer met de hand (/usr/local/sbin/backup.sh) en bekijk de uitvoer. Laat systemd het daarna elke nacht draaien. /etc/systemd/system/backup.service:

[Unit]
Description=restic backup

[Service]
Type=oneshot
ExecStart=/usr/local/sbin/backup.sh

/etc/systemd/system/backup.timer:

[Unit]
Description=Nightly restic backup

[Timer]
OnCalendar=*-*-* 03:30
RandomizedDelaySec=15m
Persistent=true

[Install]
WantedBy=timers.target
systemctl daemon-reload && systemctl enable --now backup.timer
systemctl list-timers backup.timer

--prune maakt de ruimte van snapshots die forget heeft weggehaald echt vrij. Tijdens het prunen is de repository een tijdje vergrendeld; daarom draait het direct na de back-up.

5. Controleren en terugzetten (doe dit nu één keer)

. /root/.restic/env
restic snapshots                                   # alle snapshots tonen
restic check                                       # controleren of de repository gezond is
restic restore latest --target /tmp/restore-test --include /etc/hostname
cat /tmp/restore-test/etc/hostname

Krijg je je bestand terug? Dan werken je back-ups. Oefen dit voordat je het nodig hebt; alles terugzetten op een nieuwe VPS is hetzelfde commando zonder --include.

Liever geen omkijken naar back-ups?

Gameservers bij ServerSpark krijgen elke nacht een versleutelde back-up op een andere locatie, plus back-upslots die je zelf beheert in SparkPanel. Een VPS niet, want je hebt volledige roottoegang en wij kijken niet in je server. VPS S kost €7,99 per maand bij betaling per kwartaal (€8,29 maandelijks); zie VPS-hosting en eerste stappen op een nieuwe VPS.

Veelgestelde vragen

Zitten er back-ups bij een VPS van ServerSpark? Nee. Een VPS beheer je zelf. Maak je eigen back-ups naar een andere plek, bijvoorbeeld met restic naar een andere server via SFTP of naar S3-compatibele opslag.

Hoe maak ik automatisch back-ups van een VPS? Zet restic backup en restic forget --prune in een script en laat dat elke nacht draaien met een systemd-timer (OnCalendar=*-*-* 03:30, Persistent=true).

Kan ik de back-ups op dezelfde VPS bewaren? Dat kan, maar het beschermt je niet: raakt de server weg, beschadigd of gehackt, dan gaan de back-ups mee. Bewaar altijd een kopie ergens anders.

Wat als ik mijn restic-wachtwoord kwijt ben? Dan zijn de back-ups niet meer te ontsleutelen. Volgens de documentatie van restic ben je de data dan voorgoed kwijt, dus bewaar een kopie in een wachtwoordmanager.

Hoe back-up ik een MySQL- of PostgreSQL-database? Maak eerst een dump met mysqldump --single-transaction of pg_dumpall en back-up dat bestand, in plaats van de databasebestanden te kopiëren terwijl de database draait.