Удаленное резервное копирование и репликация с Plakar
Реплицируйте снапшоты plakar на удаленный сервер через HTTPS или в S3-совместимое объектное хранилище. Автоматизируйте резервное копирование и удаленную синхронизацию с помощью встроенного планировщика plakar в качестве сервиса systemd на Debian 12 или Ubuntu 24.04.
Зачем нужны удаленные бекапы?
Локальные бекапы защищают от случайного удаления и повреждения файлов. Они не защищают от отказа диска, шифровальщиков или скомпрометированного сервера. Если бекапы лежат на той же машине, что и данные, одно событие уничтожит и то, и другое. Правило 3-2-1 гласит: три копии, два разных носителя, одна копия удаленно. Это руководство покрывает удаленную часть.
Эта статья продолжает Резервное копирование Linux VPS с помощью Plakar. У вас уже должен быть установлен plakar на VPS с Debian 12 или Ubuntu 24.04, локальное хранилище Kloset в /var/backups/plakar и как минимум один снапшот. Если нет, начните с того руководства.
В plakar встроены два варианта удаленного копирования. Путь А реплицирует снапшоты на второй сервер с plakar server через HTTPS. Путь Б отправляет снапшоты в S3-совместимое объектное хранилище. Оба используют plakar sync и сохраняют шифрование Kloset из конца в конец. Выбирайте один путь или оба. Раздел автоматизации в конце применим к обоим.
Как реплицировать снапшоты plakar на удаленный сервер?
Запустите plakar server на втором VPS для предоставления хранилища Kloset по HTTP. Поставьте перед ним Caddy для автоматического TLS. С исходной машины скомпилируйте плагин HTTP-интеграции, добавьте удаленный сервер как именованное хранилище и отправьте снапшоты с помощью plakar sync to. Данные остаются зашифрованными в хранилище Kloset и при передаче через HTTPS.
Для этого раздела нужны две машины. VM1 — продакшн-сервер с существующими бекапами plakar. VM2 — удаленный сервер бекапов в другом дата-центре или у другого провайдера. VM2 нужно доменное имя, указывающее на его IP-адрес, для TLS-сертификатов. В примерах используется backup.example.com как домен.
Все команды в этом руководстве выполняются от root. Если вы используете sudo-пользователя, добавляйте sudo перед каждой командой.
Как настроить plakar server на VM2?
Установите plakar на VM2, используя те же шаги из основной статьи:
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
Создайте хранилище Kloset на VM2. Сгенерируйте надежную парольную фразу и сохраните её в менеджере паролей. Это другое хранилище, не как на VM1, поэтому у него своя парольная фраза:
mkdir -p /var/backups/plakar
openssl rand -base64 32
Сохраните вывод. Эта парольная фраза понадобится на VM2 и VM1. Создайте хранилище:
plakar at /var/backups/plakar create
repository passphrase:
Введите сгенерированную парольную фразу. Ограничьте права директории хранилища:
chmod 700 /var/backups/plakar
Сохраните парольную фразу в файл, чтобы plakar server мог запускаться без интерактивных запросов:
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
Зарегистрируйте хранилище по имени:
plakar store add backups \
location=/var/backups/plakar \
passphrase_cmd="cat /etc/plakar/passphrase"
Запустите plakar server для предоставления хранилища по HTTP. Привяжите его только к localhost. Caddy будет обрабатывать внешние соединения:
plakar at @backups server -listen 127.0.0.1:9876
Сервер работает на переднем плане и логирует запросы в stdout. Оставьте этот терминал открытым. Позже вы настроите сервис systemd.
По умолчанию plakar server отключает операции удаления. Это не позволяет удаленным клиентам удалять снапшоты. Для синхронизации достаточно записи.
Как поставить Caddy перед plakar server для TLS?
Caddy обеспечивает автоматический HTTPS с сертификатами Let's Encrypt. Он терминирует TLS и проксирует запросы к plakar server на localhost.
Перед установкой Caddy убедитесь, что DNS A-запись для backup.example.com указывает на IP-адрес VM2.
Установите Caddy на 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
Замените Caddyfile конфигурацией reverse proxy. Замените backup.example.com вашим доменом:
cat > /etc/caddy/Caddyfile <<'EOF'
backup.example.com {
reverse_proxy 127.0.0.1:9876
}
EOF
Перезагрузите Caddy:
systemctl reload caddy
systemctl status caddy
● caddy.service - Caddy
Loaded: loaded (/lib/systemd/system/caddy.service; enabled; preset: enabled)
Active: active (running)
Протестируйте с VM1:
curl -I https://backup.example.com
Как защитить plakar-сервер правилами файрвола?
Откройте порты 80 (ACME challenge) и 443 (HTTPS). Порт 9876 привязан к 127.0.0.1. Подробная настройка файрвола описана в [-> linux-firewall-ufw-nftables-vps].
С UFW:
ufw allow 80/tcp
ufw allow 443/tcp
ufw status
С nftables:
nft add rule inet filter input tcp dport 80 accept
nft add rule inet filter input tcp dport 443 accept
Как запустить plakar server как сервис systemd на VM2?
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
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)
Как установить HTTP-интеграцию на VM1?
Вернитесь на VM1. Скомпилируйте HTTP-плагин из исходников:
apt install -y golang-go make
curl -fsSL https://plugins.plakar.io/kloset/recipe/v1.0.0/http.yaml -o /tmp/http.yaml
plakar pkg build /tmp/http.yaml
Сборка создает HTTP-интеграцию из исходного репозитория и генерирует архив .ptar. Установите собранный плагин:
plakar pkg add ./http_v1.0.5_linux_amd64.ptar
plakar pkg list
http@v1.0.5
Как синхронизировать снапшоты с VM1 на удаленный сервер?
Зарегистрируйте удаленный сервер как именованное хранилище. passphrase_cmd должен возвращать парольную фразу хранилища VM2, а не 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
plakar store add remote \
https://backup.example.com \
passphrase_cmd="cat /etc/plakar/remote-passphrase"
Отправьте все снапшоты из локального хранилища на удаленный:
plakar at @mybackups sync to @remote
info: sync: synchronization from fs:///var/backups/plakar to https://backup.example.com completed: 3 snapshots synchronized
Plakar читает из @mybackups с его парольной фразой и пишет в @remote с парольной фразой VM2. Передаются только недостающие снапшоты и блоки данных.
Отправьте один снапшот по ID:
plakar at @mybackups sync a5bcf13b to @remote
Синхронизируйте только снапшоты за последние 7 дней:
plakar at @mybackups sync -since 7d to @remote
Как проверить репликацию на удаленном сервере?
На VM2, выведите список снапшотов:
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
Восстановите файл из синхронизированного снапшота:
plakar at @backups cat a5bcf13b:/etc/hostname
Для полного теста восстановления:
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
Как синхронизировать бекапы plakar в S3-совместимое хранилище?
Добавьте S3-совместимый бакет как именованное хранилище и отправляйте снапшоты с помощью plakar sync.
Как установить S3-интеграцию?
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
plakar pkg list
http@v1.0.5
s3@v1.0.7
Как добавить S3-хранилище?
Сначала создайте бакет у вашего S3-провайдера. Бакет должен уже существовать.
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"
Инициализируйте хранилище Kloset внутри бакета:
plakar at @s3 create
Как отправить снапшоты в 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
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
Какие S3-права нужны plakar?
s3:GetObjectиs3:ListBucketдля чтения снапшотов и метаданныхs3:PutObjectдля записи новых снапшотовs3:DeleteObjectдля очистки блокировок при синхронизации
Создайте выделенного IAM-пользователя с политикой, ограниченной только бакетом бекапов. Если провайдер поддерживает версионирование бакета и блокировку объектов, включите оба.
Как автоматизировать бекапы и синхронизацию plakar?
Настройте планировщик plakar для локальных бекапов, затем свяжите удаленную синхронизацию с таймером systemd.
Как настроить хранилища для автоматической работы?
Если вы следовали Резервное копирование Linux VPS с помощью Plakar, у вас уже есть именованное хранилище mybackups с passphrase_cmd. Также нужно удаленное хранилище (remote или s3) с настроенным passphrase_cmd.
plakar at @mybackups ls
plakar at @remote ls
Как написать scheduler.yaml для plakar?
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
Как синхронизировать автоматически после бекапов?
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
Как запустить планировщик plakar как сервис systemd?
Флаг -foreground удерживает планировщик на переднем плане, чтобы systemd мог отслеживать процесс:
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
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
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
Что-то пошло не так?
"backend 'http' does not exist" или "backend 's3' does not exist". Плагин интеграции не установлен. Скомпилируйте из исходников с plakar pkg build.
"connection refused" при синхронизации на удаленный. Проверьте, что plakar server работает на VM2 и Caddy запущен. Проверьте DNS A-запись.
"TLS handshake error" от Caddy. Проверьте логи Caddy: journalctl -u caddy --since "10 minutes ago".
Запрос парольной фразы при синхронизации. Проверьте оба файла паролей:
cat /etc/plakar/passphrase
cat /etc/plakar/remote-passphrase
Планировщик сразу останавливается. Без флага -foreground plakar scheduler start демонизируется. Убедитесь, что строка ExecStart содержит -foreground.
Синхронизация занимает много времени в первый раз. Начальная синхронизация передает все существующие снапшоты. Последующие инкрементальные. Запускайте в сессии tmux или screen.
Пропущенные снапшоты на удаленной стороне. Сравните списки:
plakar at @mybackups ls
plakar at @remote ls
Синхронизация идемпотентна. Запустите повторно.
Для Docker-нагрузок рассмотрите Резервное копирование и восстановление томов Docker на VPS вместе с этой настройкой.
Авторское право 2026 Virtua.Cloud. Все права защищены. Данный контент является оригинальным произведением команды Virtua.Cloud. Воспроизведение, повторная публикация или распространение без письменного разрешения запрещены.
Готовы попробовать?
Разверните свой сервер за секунды. Linux, Windows или FreeBSD.
Смотреть тарифы VPS