Backup & Recovery
Open Source
Deploy Kopia Backup Server on a VPS
Fast, encrypted, deduplicated backups with flexible storage backends — snapshot policies, systemd automation, web UI, and S3-compatible object storage support.
At a Glance
| Project | Kopia |
| License | Apache 2.0 |
| Recommended Plan | RamNode Cloud VPS 1 GB+ (2 GB+ for large repos) |
| OS | Ubuntu 22.04 / 24.04 LTS |
| Storage | Local filesystem or S3-compatible |
| Estimated Setup Time | 30–45 minutes |
Prerequisites
- A RamNode VPS with at least 1 GB RAM
- Ubuntu 22.04 or 24.04 LTS with root or sudo access
- (Optional) S3-compatible storage bucket for off-site backups
- A strong repository password — no recovery if lost
1
Install Kopia
Add APT repository
sudo apt update && sudo apt install -y curl gnupg2
curl -s https://kopia.io/signing-key | sudo gpg --dearmor -o /etc/apt/keyrings/kopia-keyring.gpg
echo "deb [signed-by=/etc/apt/keyrings/kopia-keyring.gpg] http://packages.kopia.io/apt/ stable main" | sudo tee /etc/apt/sources.list.d/kopia.listInstall
sudo apt update
sudo apt install -y kopia
kopia --version2
Create a Backup Repository
Option A: Local filesystem
sudo mkdir -p /opt/kopia-repo
kopia repository create filesystem --path /opt/kopia-repo --password "YOUR_STRONG_PASSWORD"Option B: S3-compatible storage
kopia repository create s3 \
--bucket your-bucket-name \
--prefix kopia/ \
--access-key YOUR_ACCESS_KEY \
--secret-access-key YOUR_SECRET_KEY \
--region us-east-1 \
--password "YOUR_STRONG_PASSWORD"Verify
kopia repository status3
Configure Snapshot Policies
Set compression and retention
kopia policy set --global --compression=zstd
kopia policy set --global \
--keep-latest 10 \
--keep-hourly 0 \
--keep-daily 7 \
--keep-weekly 4 \
--keep-monthly 6 \
--keep-annual 0Set exclusions
kopia policy set --global \
--add-ignore ".cache" \
--add-ignore "node_modules" \
--add-ignore ".npm" \
--add-ignore "*.tmp" \
--add-ignore "*.log"Verify policies
kopia policy show --global4
Create Your First Snapshots
Snapshot critical directories
kopia snapshot create /etc
kopia snapshot create /var/www
kopia snapshot create /home
kopia snapshot create /opt/myapp/dataEstimate and list
kopia snapshot estimate /var/www
kopia snapshot list --all5
Automate Backups with systemd
Create backup script
sudo tee /usr/local/bin/kopia-backup.sh > /dev/null << 'EOF'
#!/bin/bash
set -euo pipefail
export KOPIA_PASSWORD="YOUR_STRONG_PASSWORD"
DIRS="/etc /var/www /home"
for dir in $DIRS; do
if [ -d "$dir" ]; then
kopia snapshot create "$dir"
fi
done
kopia maintenance run --full
EOF
sudo chmod +x /usr/local/bin/kopia-backup.shCreate systemd service
# /etc/systemd/system/kopia-backup.service
[Unit]
Description=Kopia Backup Job
After=network-online.target
Wants=network-online.target
[Service]
Type=oneshot
ExecStart=/usr/local/bin/kopia-backup.sh
User=root
Nice=10
IOSchedulingClass=idleCreate systemd timer
# /etc/systemd/system/kopia-backup.timer
[Unit]
Description=Run Kopia Backup Daily at 3:00 AM
[Timer]
OnCalendar=*-*-* 03:00:00
Persistent=true
RandomizedDelaySec=300
[Install]
WantedBy=timers.targetEnable and test
sudo systemctl daemon-reload
sudo systemctl enable --now kopia-backup.timer
systemctl list-timers kopia-backup.timer
# Test manually
sudo systemctl start kopia-backup.service
sudo journalctl -u kopia-backup.service --no-pager -l6
Restore Data
Restore full snapshot
kopia snapshot list /var/www
kopia restore <SNAPSHOT_ID> /tmp/restore-test/Mount and restore single file
mkdir -p /mnt/kopia-mount
kopia mount <SNAPSHOT_ID> /mnt/kopia-mount &
cp /mnt/kopia-mount/path/to/file /destination/
umount /mnt/kopia-mountCompare snapshots
kopia diff <SNAPSHOT_ID_1> <SNAPSHOT_ID_2>7
Enable the Web UI (Optional)
Create Kopia server service
# /etc/systemd/system/kopia-server.service
[Unit]
Description=Kopia Repository Server
After=network-online.target
[Service]
Type=simple
User=root
Environment=KOPIA_PASSWORD=YOUR_STRONG_PASSWORD
ExecStart=/usr/bin/kopia server start \
--address=127.0.0.1:51515 --insecure
Restart=on-failure
RestartSec=10
[Install]
WantedBy=multi-user.targetEnable and access via SSH tunnel
sudo systemctl daemon-reload
sudo systemctl enable --now kopia-server.service
# From local machine:
ssh -L 51515:127.0.0.1:51515 user@your-vps-ip
# Then open http://localhost:515158
Repository Maintenance
Maintenance and integrity checks
kopia maintenance run --full
kopia repository validate-provider
kopia snapshot verify --verify-files-percent=5
kopia snapshot list --allQuick Reference
| Task | Command |
|---|---|
| Check repo status | kopia repository status |
| Create snapshot | kopia snapshot create /path |
| List snapshots | kopia snapshot list --all |
| Restore | kopia restore ID /target/ |
| Show policy | kopia policy show --global |
| Full maintenance | kopia maintenance run --full |
Performance Tuning
- Low-memory VPS:
kopia policy set --global --upload-parallel=2 - Limit cache:
kopia cache set --content-cache-size-mb=500 --metadata-cache-size-mb=500 - Schedule off-peak: Adjust systemd timer for low-traffic periods
