Backup offsite e replica con Plakar

10 min di lettura·Matthieu·caddydebiansystemds3ubuntuplakaroffsite-backupbackupreplication|

Replica gli snapshot plakar su un server remoto tramite HTTPS o su storage oggetti compatibile S3. Automatizza i backup e la sincronizzazione offsite con lo scheduler integrato di plakar come servizio systemd su Debian 12 o Ubuntu 24.04.

Perche servono i backup offsite?

I backup locali proteggono dalla cancellazione accidentale e dalla corruzione dei file. Non proteggono da guasti del disco, ransomware o un server compromesso. Se i backup si trovano sulla stessa macchina dei dati, un singolo evento distrugge entrambi. La regola 3-2-1 dice: tre copie, due supporti diversi, una copia offsite. Questa guida copre la parte offsite.

Questo articolo prosegue da dove Esegui il backup del tuo VPS Linux con Plakar si era fermato. Dovresti gia avere plakar installato su un VPS Debian 12 o Ubuntu 24.04, uno store Kloset locale in /var/backups/plakar e almeno uno snapshot. In caso contrario, inizia prima con quella guida.

Due opzioni offsite sono integrate in plakar. Il percorso A replica gli snapshot su un secondo server che esegue plakar server tramite HTTPS. Il percorso B invia gli snapshot su storage oggetti compatibile S3. Entrambi usano plakar sync e mantengono la crittografia Kloset end-to-end. Scegli un percorso o entrambi. La sezione automazione alla fine si applica a entrambi.

Come replicare gli snapshot plakar su un server remoto?

Avvia plakar server su un secondo VPS per esporre uno store Kloset tramite HTTP. Metti Caddy davanti per il TLS automatico. Dalla macchina sorgente, compila il plugin di integrazione HTTP, aggiungi il server remoto come store nominato e invia gli snapshot con plakar sync to. I dati restano crittografati a riposo nello store Kloset e in transito tramite HTTPS. Questo approccio ti da il controllo completo su entrambi gli endpoint.

Servono due macchine per questa sezione. VM1 e il server di produzione con i backup plakar esistenti. VM2 e il server di backup remoto in un altro datacenter o provider. VM2 ha bisogno di un nome di dominio che punta al suo indirizzo IP per i certificati TLS. Gli esempi usano backup.example.com come dominio.

Tutti i comandi di questa guida vengono eseguiti come root. Se usi un utente sudo, anteponi sudo a ogni comando.

Come configurare plakar server su VM2?

Installa plakar su VM2 seguendo gli stessi passaggi dell'articolo principale:

apt update
apt install -y curl gnupg2
curl -fsSL https://plakar.io/dist/keys/community-v1.1.0.gpg | gpg --dearmor -o /usr/share/keyrings/plakar.gpg
echo "deb [signed-by=/usr/share/keyrings/plakar.gpg] https://plakar.io/dist/repos/deb/ stable main" | tee /etc/apt/sources.list.d/plakar.list
apt update
apt install -y plakar
plakar version
plakar/v1.0.6

Crea uno store Kloset su VM2. Genera una passphrase forte e salvala in un gestore di password. E uno store diverso da quello di VM1, quindi ha la sua passphrase:

mkdir -p /var/backups/plakar
openssl rand -base64 32

Salva l'output. Ti servira questa passphrase su VM2 e VM1. Crea lo store:

plakar at /var/backups/plakar create
repository passphrase:

Inserisci la passphrase generata. Limita i permessi della directory dello store:

chmod 700 /var/backups/plakar

Salva la passphrase in un file per far partire plakar server senza prompt interattivi:

mkdir -p /etc/plakar
cat > /etc/plakar/passphrase <<'EOF'
YOUR_GENERATED_PASSPHRASE_HERE
EOF
chmod 600 /etc/plakar/passphrase
chown root:root /etc/plakar/passphrase
ls -la /etc/plakar/passphrase
-rw-------  1 root root 45 Mar 20 14:00 /etc/plakar/passphrase

Registra lo store per nome:

plakar store add backups \
  location=/var/backups/plakar \
  passphrase_cmd="cat /etc/plakar/passphrase"

Avvia plakar server per esporre lo store tramite HTTP. Legalo solo a localhost. Caddy gestira le connessioni esterne:

plakar at @backups server -listen 127.0.0.1:9876

Il server gira in primo piano e registra le richieste su stdout. Lascia questo terminale aperto. Configurerai un servizio systemd piu tardi.

Per impostazione predefinita, plakar server disabilita le operazioni di cancellazione. Questo impedisce ai client remoti di rimuovere snapshot. Per la sincronizzazione, l'accesso in scrittura e sufficiente. Mantieni le cancellazioni disabilitate a meno che tu non abbia un motivo specifico.

Come mettere Caddy davanti a plakar server per il TLS?

Caddy fornisce HTTPS automatico con certificati Let's Encrypt. Termina il TLS e inoltra le richieste a plakar server su localhost. I client esterni si connettono sulla porta 443 e Caddy inoltra alla porta 9876.

Prima di installare Caddy, assicurati che il record DNS A per backup.example.com punti all'indirizzo IP di VM2. Caddy ne ha bisogno per ottenere un certificato TLS tramite la sfida ACME HTTP-01. Anche la porta 80 deve essere aperta.

Installa Caddy su VM2:

apt install -y debian-keyring debian-archive-keyring apt-transport-https curl
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | tee /etc/apt/sources.list.d/caddy-stable.list
apt update
apt install -y caddy

Sostituisci il Caddyfile predefinito con una configurazione reverse proxy. Sostituisci backup.example.com con il tuo dominio reale:

cat > /etc/caddy/Caddyfile <<'EOF'
backup.example.com {
    reverse_proxy 127.0.0.1:9876
}
EOF

Ricarica Caddy per applicare la configurazione:

systemctl reload caddy
systemctl status caddy
 caddy.service - Caddy
     Loaded: loaded (/lib/systemd/system/caddy.service; enabled; preset: enabled)
     Active: active (running)

Caddy ottiene il certificato TLS automaticamente alla prima richiesta. Testa da VM1 o qualsiasi macchina esterna:

curl -I https://backup.example.com

Una risposta 200 o 404 significa che Caddy sta inoltrando correttamente al server plakar. Un errore TLS significa che il certificato non e ancora pronto.

Come proteggere il server plakar con regole firewall?

Apri le porte 80 (sfida ACME) e 443 (HTTPS). La porta 9876 resta legata a 127.0.0.1, quindi non e raggiungibile dall'esterno neanche senza una regola di blocco esplicita. Per una configurazione firewall dettagliata, consulta [-> linux-firewall-ufw-nftables-vps].

Con UFW:

ufw allow 80/tcp
ufw allow 443/tcp
ufw status

Con nftables, aggiungi al tuo set di regole:

nft add rule inet filter input tcp dport 80 accept
nft add rule inet filter input tcp dport 443 accept

Dopo l'emissione del certificato, puoi chiudere la porta 80 se configuri Caddy per usare la sfida TLS-ALPN-01. La sfida HTTP-01 predefinita richiede che la porta 80 resti aperta per i rinnovi.

Come eseguire plakar server come servizio systemd su VM2?

Crea un'unita systemd per far partire plakar server all'avvio e riavviarlo in caso di errore:

cat > /etc/systemd/system/plakar-server.service <<EOF
[Unit]
Description=Plakar Backup Server
After=network.target

[Service]
Type=simple
ExecStart=/usr/bin/plakar at @backups server -listen 127.0.0.1:9876
Restart=on-failure
RestartSec=10
User=root
StandardOutput=journal
StandardError=journal

[Install]
WantedBy=multi-user.target
EOF

Ferma il server in primo piano se e ancora in esecuzione (Ctrl+C in quel terminale), poi abilita il servizio systemd. enable --now lo fa sopravvivere ai riavvii e lo avvia immediatamente:

systemctl daemon-reload
systemctl enable --now plakar-server.service
systemctl status plakar-server.service
 plakar-server.service - Plakar Backup Server
     Loaded: loaded (/etc/systemd/system/plakar-server.service; enabled; preset: enabled)
     Active: active (running)

Monitora i log del server:

journalctl -u plakar-server.service -f

Come installare l'integrazione HTTP su VM1?

Torna su VM1. Plakar ha bisogno dell'integrazione HTTP per connettersi agli store remoti. Il backend HTTP e un plugin distribuito separatamente dal pacchetto principale. Compilalo dai sorgenti usando la ricetta dal server plugin di plakar. Servono Go e Make:

apt install -y golang-go make

Scarica il file ricetta e compila il plugin:

curl -fsSL https://plugins.plakar.io/kloset/recipe/v1.0.0/http.yaml -o /tmp/http.yaml
plakar pkg build /tmp/http.yaml

La compilazione crea l'integrazione HTTP dal suo repository sorgente e produce un archivio .ptar nella directory corrente. Installa il plugin compilato:

plakar pkg add ./http_v1.0.5_linux_amd64.ptar

Il nome esatto del file dipende dalla versione e dall'architettura. Controlla cosa ha prodotto pkg build con ls *.ptar. Elenca i plugin installati:

plakar pkg list
http@v1.0.5

Come sincronizzare gli snapshot da VM1 al server remoto?

Registra il server remoto come store nominato. Sostituisci backup.example.com con il tuo dominio. Il passphrase_cmd deve restituire la passphrase dello store di VM2, non quella di VM1. Copia la passphrase di VM2 in un file separato su VM1:

cat > /etc/plakar/remote-passphrase <<'EOF'
VM2_STORE_PASSPHRASE_HERE
EOF
chmod 600 /etc/plakar/remote-passphrase
chown root:root /etc/plakar/remote-passphrase

Aggiungi lo store remoto:

plakar store add remote \
  https://backup.example.com \
  passphrase_cmd="cat /etc/plakar/remote-passphrase"

Invia tutti gli snapshot dal tuo store locale al remoto:

plakar at @mybackups sync to @remote
info: sync: synchronization from fs:///var/backups/plakar to https://backup.example.com completed: 3 snapshots synchronized

Plakar legge da @mybackups usando la sua passphrase e scrive in @remote usando la passphrase di VM2. Vengono trasferiti solo gli snapshot e i blocchi dati mancanti. Le sincronizzazioni successive saltano i dati gia presenti sul remoto.

Invia un singolo snapshot per ID:

plakar at @mybackups sync a5bcf13b to @remote

Sincronizza solo gli snapshot degli ultimi 7 giorni:

plakar at @mybackups sync -since 7d to @remote

Come verificare la replica sul server remoto?

Su VM2, elenca gli snapshot per confermare il loro arrivo:

plakar at @backups ls
2026-03-20T10:05:12Z   a5bcf13b   1.4 MiB        0s /etc
2026-03-20T10:06:01Z   5fc17459       0 B        0s /home
2026-03-20T10:06:15Z   7ed22fb8      24 B        0s /var/www

Gli ID degli snapshot e i timestamp corrispondono a quelli su VM1. Ripristina un singolo file da uno snapshot sincronizzato per verificare l'integrita dei dati:

plakar at @backups cat a5bcf13b:/etc/hostname

L'hostname di VM1 viene stampato su stdout. Per un test di ripristino completo:

mkdir -p /tmp/restore-test
plakar at @backups restore -to /tmp/restore-test a5bcf13b
ls /tmp/restore-test/etc/
info: a5bcf13b: OK /etc
info: restore: restoration of a5bcf13b:/etc at /tmp/restore-test completed successfully
rm -rf /tmp/restore-test

Come sincronizzare i backup plakar su storage compatibile S3?

Aggiungi un bucket compatibile S3 come store nominato, poi invia gli snapshot con plakar sync. Funziona con qualsiasi provider che supporti il protocollo S3. Fornisci il tuo endpoint, bucket e credenziali. Nessuna configurazione specifica del provider e necessaria lato plakar.

Come installare l'integrazione S3?

Il backend S3 e un plugin, come HTTP. Compilalo dai sorgenti:

curl -fsSL https://plugins.plakar.io/kloset/recipe/v1.0.0/s3.yaml -o /tmp/s3.yaml
plakar pkg build /tmp/s3.yaml
plakar pkg add ./s3_v1.0.7_linux_amd64.ptar

Se Go e Make non sono ancora installati, installali prima: apt install -y golang-go make.

Entrambi i plugin dovrebbero essere installati:

plakar pkg list
http@v1.0.5
s3@v1.0.7

Come aggiungere uno store S3?

Crea prima un bucket presso il tuo provider S3. Il bucket deve gia esistere. Plakar non crea bucket.

Aggiungi lo store S3 con plakar store add. Sostituisci endpoint, nome del bucket e credenziali con i tuoi:

plakar store add s3 \
  s3://s3.eu-west-1.example.com/my-plakar-backups \
  access_key=YOUR_ACCESS_KEY \
  secret_access_key=YOUR_SECRET_KEY \
  use_tls=true \
  passphrase_cmd="cat /etc/plakar/passphrase"

Il formato s3:// e s3://endpoint/nome-bucket. Imposta use_tls=true per connessioni HTTPS all'endpoint S3.

Inizializza uno store Kloset nel bucket:

plakar at @s3 create

Plakar chiede una passphrase. Inserisci la stessa passphrase restituita da passphrase_cmd.

Come inviare gli snapshot a S3?

Invia tutti gli snapshot dal tuo store locale a S3:

plakar at @mybackups sync to @s3
info: sync: synchronization from fs:///var/backups/plakar to s3://s3.eu-west-1.example.com/my-plakar-backups completed: 3 snapshots synchronized

Invia un singolo snapshot:

plakar at @mybackups sync a5bcf13b to @s3

Elenca gli snapshot sullo store S3:

plakar at @s3 ls
2026-03-20T10:05:12Z   a5bcf13b   1.4 MiB        0s /etc
2026-03-20T10:06:01Z   5fc17459       0 B        0s /home
2026-03-20T10:06:15Z   7ed22fb8      24 B        0s /var/www

Ripristina un file dallo store S3:

plakar at @s3 cat a5bcf13b:/etc/hostname

Per un ripristino completo di directory da S3:

mkdir -p /tmp/restore-test
plakar at @s3 restore -to /tmp/restore-test a5bcf13b:/etc/ssh
ls /tmp/restore-test/etc/ssh/
rm -rf /tmp/restore-test

Quali permessi S3 servono a plakar?

Le credenziali S3 necessitano di questi permessi minimi sul bucket:

  • s3:GetObject e s3:ListBucket per leggere snapshot e metadati
  • s3:PutObject per scrivere nuovi snapshot
  • s3:DeleteObject per la pulizia dei lock durante le operazioni di sincronizzazione

Crea un utente IAM dedicato o un account di servizio con una policy limitata al solo bucket di backup. Non riutilizzare credenziali con accesso piu ampio.

Se il tuo provider supporta il versioning del bucket e l'object lock, attiva entrambi. Il versioning protegge dalle sovrascritture accidentali. L'object lock (in modalita compliance o governance) impedisce la cancellazione dei dati di backup per un periodo di retention configurabile.

Come automatizzare i backup e la sincronizzazione plakar?

Configura lo scheduler plakar per i backup locali, poi concatena la sincronizzazione offsite con un timer systemd. L'obiettivo: i backup vengono eseguiti secondo un programma, poi gli snapshot si sincronizzano automaticamente verso la destinazione remota. Nessun intervento manuale dopo la configurazione iniziale.

Come configurare gli store per il funzionamento non presidiato?

Se hai seguito Esegui il backup del tuo VPS Linux con Plakar, hai gia uno store nominato mybackups con un passphrase_cmd. Serve anche lo store offsite (remote o s3) configurato con passphrase_cmd. Entrambi gli store devono funzionare senza prompt interattivi.

Testa che entrambi gli store siano accessibili:

plakar at @mybackups ls
plakar at @remote ls

Se uno dei comandi chiede una passphrase, il passphrase_cmd non e configurato correttamente.

Come scrivere uno scheduler.yaml per plakar?

Lo scheduler plakar esegue task di backup a intervalli definiti. Crea una configurazione:

cat > /etc/plakar/scheduler.yaml <<'EOF'
agent:
  tasks:
    - name: backup etc
      repository: "@mybackups"
      backup:
        path: /etc
        interval: 24h
        check: true
    - name: backup home
      repository: "@mybackups"
      backup:
        path: /home
        interval: 24h
    - name: backup www
      repository: "@mybackups"
      backup:
        path: /var/www
        interval: 24h
EOF
chmod 600 /etc/plakar/scheduler.yaml

Lo scheduler non supporta nativamente la sincronizzazione come tipo di task. Usa uno script wrapper e un timer systemd per il passo di sincronizzazione.

Come sincronizzare automaticamente dopo i backup?

Crea uno script wrapper che sincronizza tutti gli snapshot verso la destinazione offsite:

cat > /etc/plakar/sync-offsite.sh <<'SCRIPT'
#!/bin/bash
set -euo pipefail

# Change to "s3" if using S3 instead of a remote server
OFFSITE_STORE="remote"

echo "$(date -Iseconds) Starting offsite sync to @${OFFSITE_STORE}"
plakar at @mybackups sync to @${OFFSITE_STORE}
echo "$(date -Iseconds) Offsite sync complete"
SCRIPT
chmod 700 /etc/plakar/sync-offsite.sh

Come eseguire lo scheduler plakar come servizio systemd?

Crea un'unita systemd per lo scheduler su VM1. Il flag -foreground mantiene lo scheduler in primo piano:

cat > /etc/systemd/system/plakar-scheduler.service <<EOF
[Unit]
Description=Plakar Backup Scheduler
After=network.target

[Service]
Type=simple
ExecStart=/usr/bin/plakar scheduler start -foreground -tasks /etc/plakar/scheduler.yaml
ExecStop=/usr/bin/plakar scheduler stop
Restart=on-failure
RestartSec=30
User=root
StandardOutput=journal
StandardError=journal

[Install]
WantedBy=multi-user.target
EOF

Crea un timer systemd per lo script di sincronizzazione offsite:

cat > /etc/systemd/system/plakar-sync.service <<EOF
[Unit]
Description=Plakar Offsite Sync
After=network.target

[Service]
Type=oneshot
ExecStart=/etc/plakar/sync-offsite.sh
User=root
StandardOutput=journal
StandardError=journal
EOF
cat > /etc/systemd/system/plakar-sync.timer <<EOF
[Unit]
Description=Run Plakar Offsite Sync Daily

[Timer]
OnCalendar=*-*-* 03:30:00
Persistent=true

[Install]
WantedBy=timers.target
EOF

Abilita tutto:

systemctl daemon-reload
systemctl enable --now plakar-scheduler.service
systemctl enable --now plakar-sync.timer
info: Plakar scheduler up
systemctl status plakar-scheduler.service
 plakar-scheduler.service - Plakar Backup Scheduler
     Loaded: loaded (/etc/systemd/system/plakar-scheduler.service; enabled; preset: enabled)
     Active: active (running)
systemctl list-timers plakar-sync.timer
NEXT                         LEFT          LAST  PASSED  UNIT                  ACTIVATES
Fri 2026-03-21 03:30:00 UTC  15h left      n/a   n/a     plakar-sync.timer     plakar-sync.service
journalctl -u plakar-scheduler.service --since today
journalctl -u plakar-sync.service --since today

Se esegui anche lo script di backup database da Esegui il backup del tuo VPS Linux con Plakar, concatena il timer di sincronizzazione per avviarsi dopo il completamento dei backup database.

Qualcosa non funziona?

"backend 'http' does not exist" o "backend 's3' does not exist". Il plugin di integrazione non e installato. Compilalo dai sorgenti con plakar pkg build. Esegui plakar pkg list per vedere cosa e installato.

"connection refused" durante la sincronizzazione al remoto. Controlla che plakar server sia in esecuzione su VM2: systemctl status plakar-server.service. Controlla che Caddy sia in esecuzione: systemctl status caddy. Conferma che il record DNS A punti all'IP di VM2.

curl -I https://backup.example.com

"TLS handshake error" da Caddy. Caddy non e riuscito a ottenere un certificato da Let's Encrypt. Controlla i log di Caddy:

journalctl -u caddy --since "10 minutes ago"

Richiesta "passphrase" durante la sincronizzazione. Controlla entrambi i file passphrase:

cat /etc/plakar/passphrase
cat /etc/plakar/remote-passphrase

"access denied" nella sincronizzazione S3. Ricontrolla la chiave di accesso e la chiave segreta. Conferma che la policy IAM conceda i permessi necessari sul bucket.

Lo scheduler si ferma immediatamente. Senza il flag -foreground, plakar scheduler start si demonizza. Assicurati che la riga ExecStart includa -foreground:

ExecStart=/usr/bin/plakar scheduler start -foreground -tasks /etc/plakar/scheduler.yaml

La sincronizzazione impiega molto tempo la prima volta. La sincronizzazione iniziale trasferisce tutti gli snapshot esistenti. Le successive sono incrementali. Eseguila in una sessione tmux o screen.

Snapshot mancanti sul lato remoto. Confronta le liste:

plakar at @mybackups ls
plakar at @remote ls

Se i numeri differiscono, esegui di nuovo la sincronizzazione. E idempotente.

Lo scheduler non si avvia dopo il riavvio. Controlla che il servizio sia abilitato:

systemctl is-enabled plakar-scheduler.service

Il timer di sincronizzazione non si attiva. Controlla se il timer e attivo:

systemctl is-active plakar-sync.timer

Per i workload Docker, considera Backup e ripristino dei volumi Docker su un VPS insieme a questa configurazione.


Copyright 2026 Virtua.Cloud. Tutti i diritti riservati. Questo contenuto e un'opera originale del team Virtua.Cloud. La riproduzione, ripubblicazione o redistribuzione senza autorizzazione scritta e vietata.

Pronto a provare?

Distribuisci il tuo server in pochi secondi. Linux, Windows o FreeBSD.

Vedi piani VPS