All guides
Getting started
VPS
- VPS operating systems
- VPS snapshots and
off-site backups - How to host your own VPN on a VPS with WireGuard
- How to run a Tor relay, bridge or onion service on a VPS
- How to
self-host BTCPay Server on a VPS - How to run a Bitcoin or Monero node on a VPS
Dedicated servers
- Using IPMI and the KVM console on a dedicated server
- Choosing a RAID layout for your dedicated server
Windows RDP
Windows Server 2019 , 2022 or 2025 vsWindows 10 and 11 for RDP- How to connect to a Windows RDP server from any device
GPU servers
Security
On this page
Snapshots let you roll an Offshore VPS back quickly. Backups let you recover when the server, or your access to it, is gone. You want both. This guide explains the difference, the snapshot limits per plan, how to take snapshots that databases survive, and how to set up encrypted
Snapshots vs backups
A snapshot is a
A backup is a copy of your data stored somewhere else: another server, another location, your own hardware. It is independent of the VPS, can keep many versions, and lets you restore single files. The usual rule is 3-2-1: three copies of your data, on two kinds of storage, one of them
| Aspect | Snapshot | |
|---|---|---|
| What it copies | The whole disk | The files and database dumps you choose |
| Where it lives | On our platform, with your VPS | On a machine you control, elsewhere |
| Restore | Rolls back the whole disk | Single files or a full rebuild |
| Versions | 2 to 5, depending on the plan | As many as your retention rule keeps |
| Protects against | Bad updates, configuration mistakes | Lost servers, lost access, mistakes noticed weeks later |
Snapshots per plan
| Plans | Snapshots |
|---|---|
| Dinghy, Sloop, Cutter | 2 |
| Schooner, Brigantine | 3 |
| Frigate, Flagship | 5 |
When all slots are in use, say in your request which snapshot to replace.
Create, restore and delete snapshots
Create
On your server's page in the client area, under Server actions, choose Take a snapshot and give it a name that says why it exists, such as before-php-upgrade
Restore
Under Server actions, choose Restore a snapshot and name the snapshot. The VPS comes back in the state of the snapshot, and the request shows as done once it is back online. Check that your services started and that scheduled jobs and certificates still look right.
Delete
Ask for it with Delete a snapshot under Server actions, naming the snapshot. Deleting a snapshot is permanent. Keep at least one
Take consistent snapshots
A snapshot of a running server is
Stop the database for a moment
The simplest option. Stop the service (it is called postgresql
systemctl stop mariadb
Request the snapshot, and start the service again once the request shows as done (the database stays down until then):
systemctl start mariadb
Dump the databases first
The better option when the database must stay up: a dump taken just before you request the snapshot is consistent even if the live database files are not, and you can reuse it for mysqldump
mkdir -p /root/db-dumps
chmod 700 /root/db-dumps
mariadb-dump --all-databases --single-transaction --routines --events > /root/db-dumps/mariadb.sql
For PostgreSQL:
runuser -u postgres -- pg_dumpall > /root/db-dumps/postgresql.sql
Off-site backups with restic or Borg
restic and Borg both encrypt on your server before anything leaves it, deduplicate data and keep many versions cheaply. The destination only ever sees encrypted data, so it can be any machine you reach over SSH: a second VPS, a storage server in another of our locations, or a machine at home. Back up /etc/home/root
restic
On the VPS, install restic, create an SSH key for root and copy it to the backup host. Then generate a random repository password, initialize the repository and run the first backup:
apt install -y restic
ssh-keygen -t ed25519 -N "" -f /root/.ssh/id_ed25519
ssh-copy-id backup@BACKUP_HOST
install -m 600 /dev/null /root/.restic-pass
openssl rand -base64 32 > /root/.restic-pass
export RESTIC_REPOSITORY=sftp:backup@BACKUP_HOST:/srv/restic/web1
export RESTIC_PASSWORD_FILE=/root/.restic-pass
restic init
restic backup /etc /home /root /var/www --exclude-caches
restic snapshots
Borg
Borg must also be installed on the backup host, because it runs there over SSH. Set up the SSH key as in the restic example. These commands are for Borg 1.2 and 1.4, the versions packaged in current Debian and Ubuntu releases:
apt install -y borgbackup
install -m 600 /dev/null /root/.borg-pass
openssl rand -base64 32 > /root/.borg-pass
export BORG_REPO=ssh://backup@BACKUP_HOST/./borg/web1
export BORG_PASSCOMMAND="cat /root/.borg-pass"
borg init --encryption=repokey-blake2
borg create --stats --compression zstd '::{hostname}-{now}' /etc /home /root /var/www
borg list
borg key export "$BORG_REPO" /root/borg-key.txt
Store borg-key.txt
Automate, prune and test
Put the two export/usr/local/sbin/offsite-backup
chmod 700 /usr/local/sbin/offsite-backup
crontab -e
In root's crontab, add a line to run it every night at 03:30:
30 3 * * * /usr/local/sbin/offsite-backup
End the script with a retention rule so old versions are removed. These keep a week of daily,
restic forget --keep-daily 7 --keep-weekly 4 --keep-monthly 6 --prune
For Borg:
borg prune --keep-daily 7 --keep-weekly 4 --keep-monthly 6
borg compact
An untested backup may not restore when you need it. Once
restic check
restic restore latest --target /root/restore-test
With Borg, list the archives, then extract one into an empty directory:
borg check
mkdir -p /root/restore-test
cd /root/restore-test
borg extract '::ARCHIVE_NAME' etc
A server that pushes its own backups can also delete them if an attacker gains root. To prevent that, make the repository --append-onlyborg serve --append-onlyauthorized_keys
Dedicated and GPU customers can open a ticket from the client area with the server’s IP address and what they tried. First reply target: under