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

    ProjectKopia
    LicenseApache 2.0
    Recommended PlanRamNode Cloud VPS 1 GB+ (2 GB+ for large repos)
    OSUbuntu 22.04 / 24.04 LTS
    StorageLocal filesystem or S3-compatible
    Estimated Setup Time30–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.list
    Install
    sudo apt update
    sudo apt install -y kopia
    kopia --version
    2

    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 status
    3

    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 0
    Set 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 --global
    4

    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/data
    Estimate and list
    kopia snapshot estimate /var/www
    kopia snapshot list --all
    5

    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.sh
    Create 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=idle
    Create 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.target
    Enable 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 -l
    6

    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-mount
    Compare 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.target
    Enable 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:51515
    8

    Repository Maintenance

    Maintenance and integrity checks
    kopia maintenance run --full
    kopia repository validate-provider
    kopia snapshot verify --verify-files-percent=5
    kopia snapshot list --all

    Quick Reference

    TaskCommand
    Check repo statuskopia repository status
    Create snapshotkopia snapshot create /path
    List snapshotskopia snapshot list --all
    Restorekopia restore ID /target/
    Show policykopia policy show --global
    Full maintenancekopia 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