Удельта

Пошаговая инструкция · Самостоятельная установка

Как установить restic и настроить резервное копирование сервера

Пошаговая инструкция для самостоятельной установки. Настроим зашифрованное резервное копирование файлов с Ubuntu в отдельное S3-хранилище. Запустим первую копию вручную, восстановим тестовый файл и только потом включим ежедневное расписание.

Зашифрованная резервная копия файлов сохраняется в удалённом хранилище и проверяется восстановлением

Что подготовить и как читать инструкцию #

restic устанавливается на сервер, данные которого нужно сохранять. Внешнее S3-хранилище становится репозиторием копий: restic шифрует содержимое до отправки и не загружает повторно одинаковые блоки. Резервная копия на другом диске того же VPS не защитит от потери всей машины или доступа к ней.

Подготовьте Ubuntu 26.04 LTS, SSH с sudo и базовую защиту по инструкции подготовки сервера. Docker для этого сценария не нужен. Требования зависят от количества файлов и времени, отведённого на копирование; оцените их по статье о сервере для restic. Возможности инструмента описаны на странице restic.

Команды выполняйте в терминале сервера после подключения по SSH, если шаг не указывает другое место. sudo даёт команде права администратора. Действия в браузере выполняйте на своём компьютере. Домены, IP-адреса и значения ВАШ_ПАРОЛЬ из примеров заменяйте своими до выполнения команды.

Двигайтесь по одному шагу и проверяйте результат перед следующим. Блок с <<EOF или другим именем завершения копируйте целиком: он записывает содержимое одного файла. При работе в nano сохраняйте файл клавишами Ctrl+O, Enter и выходите Ctrl+X. Если прервали SSH-сеанс, снова перейдите в указанный каталог; переменные предыдущего сеанса потребуется задать заново.

Шаг 1. Откройте административный терминал #

Для копирования /etc и системных файлов нужны права root. sudo -i открывает такую оболочку. set -e останавливает её при ошибке: если она закрылась, исправьте причину и снова войдите, а не продолжайте с незаданными переменными.

Откройте административный терминал
sudo -i
set -e

Вы в административной оболочке; дальнейшие команды относятся серверу.

Шаг 2. Установите средства загрузки и проверки #

curl скачивает файлы, bzip2 распаковывает релиз, GPG проверяет подпись разработчика.

Установите средства загрузки и проверки
apt update
apt install ca-certificates curl bzip2 gnupg openssl

apt завершился без ошибки.

Шаг 3. Подготовьте каталог релиза #

Берём restic 0.19.1 для amd64. На сервере uname -m должен показывать x86_64; для другой архитектуры нужен её официальный файл и соответствующая строка контрольной суммы.

Подготовьте каталог релиза
install -d -m 0750 /opt/restic-download-0.19.1
cd /opt/restic-download-0.19.1
RELEASE_URL=https://github.com/restic/restic/releases/download/v0.19.1

Вы в каталоге релиза, RELEASE_URL задан для текущего SSH-сеанса.

Шаг 4. Скачайте программу и проверочные файлы #

Получим архив, SHA256SUMS и подпись списка. Сам список без доверенной подписи ещё не подтверждает происхождение файла.

Скачайте программу и проверочные файлы
curl -fLO "$RELEASE_URL/restic_0.19.1_linux_amd64.bz2"
curl -fLO "$RELEASE_URL/SHA256SUMS"
curl -fLO "$RELEASE_URL/SHA256SUMS.asc"

Все три файла скачаны без ошибки.

Шаг 5. Получите ключ разработчика #

Скачиваем публичный GPG-ключ и создаём отдельный каталог проверки, не меняя личное хранилище GPG.

Получите ключ разработчика
curl -fsSL https://restic.net/gpg-key-alex.asc -o signing-key.asc
install -d -m 0700 verify-gpg

signing-key.asc и verify-gpg существуют.

Шаг 6. Сверьте отпечаток ключа #

Проверка требует точного совпадения с отпечатком, указанным в официальной документации restic. Команда при успехе ничего не печатает.

Сверьте отпечаток ключа
gpg --homedir ./verify-gpg --show-keys --with-colons signing-key.asc \
  | awk -F: '$1 == "fpr" {print $10; exit}' \
  | grep -qx CF8F18F2844575973F79D4E191A6868BD3F7A907

Проверка завершилась без ошибки. При несовпадении не импортируйте ключ и не продолжайте.

Шаг 7. Проверьте подпись списка #

Импортируем подтверждённый публичный ключ в отдельное хранилище и проверим SHA256SUMS.asc. Предупреждение о доверии личности владельца ключа отличается от ошибки криптографической подписи.

Проверьте подпись списка
gpg --homedir ./verify-gpg --import signing-key.asc
gpg --homedir ./verify-gpg --verify SHA256SUMS.asc SHA256SUMS

GPG сообщает Good signature; ошибка BAD signature запрещает продолжение.

Шаг 8. Проверьте скачанный архив #

Теперь сравним байты программы с подписанным списком.

Проверьте скачанный архив
grep '  restic_0.19.1_linux_amd64.bz2$' SHA256SUMS | sha256sum --check

Вывод содержит restic_0.19.1_linux_amd64.bz2: OK.

Шаг 9. Установите бинарный файл #

Распакуем программу и поместим её в /usr/local/bin. Это установка утилиты; репозиторий резервных копий ещё не создан.

Установите бинарный файл
bzip2 -dc restic_0.19.1_linux_amd64.bz2 > restic
install -m 0755 restic /usr/local/bin/restic
/usr/local/bin/restic version

restic version показывает 0.19.1.

Шаг 10. Создайте пароль шифрования #

Пароль защищает содержимое копий restic. Он не совпадает с ключами доступа S3 и должен сохраняться отдельно от единственного сервера: без него копия не расшифруется.

Создайте пароль шифрования
install -d -m 0700 /etc/restic /var/cache/restic
umask 077
openssl rand -base64 48 > /etc/restic/password

Файл /etc/restic/password создан; его закрытая внешняя копия сохранена.

Шаг 11. Заполните реквизиты S3 #

В шаблоне замените S3 endpoint, bucket/префикс и ключи доступа. У этой учётной записи должны быть нужные права только на выбранный репозиторий. Пароль шифрования берётся из отдельного файла.

Заполните реквизиты S3
cat > /etc/restic/repository.env <<'EOF'
RESTIC_REPOSITORY='s3:https://s3.example.com/my-backup-bucket/server-01'
RESTIC_PASSWORD_FILE='/etc/restic/password'
RESTIC_CACHE_DIR='/var/cache/restic'
RESTIC_HOST='server-01'
AWS_ACCESS_KEY_ID='REPLACE_WITH_ACCESS_KEY'
AWS_SECRET_ACCESS_KEY='REPLACE_WITH_SECRET_KEY'
AWS_DEFAULT_REGION='REPLACE_WITH_REGION'
EOF
chmod 600 /etc/restic/password /etc/restic/repository.env

Нет примерных реквизитов; оба файла защищены правами 600.

Шаг 12. Создайте команду с постоянными настройками #

Обёртка restic-server загружает закрытый файл окружения и запускает restic. Так таймер и ручные проверки используют один репозиторий, а секреты не повторяются в каждой команде.

Создайте команду с постоянными настройками
cat > /usr/local/sbin/restic-server <<'EOF'
#!/bin/bash
set -euo pipefail
set -a
source /etc/restic/repository.env
set +a
exec /usr/local/bin/restic "$@"
EOF
chmod 700 /usr/local/sbin/restic-server

Файл создан и доступен для запуска только root.

Шаг 13. Подготовьте файл для проверки восстановления #

Создадим небольшой известный файл в /srv/backup-check. Позже сравним восстановленные байты с оригиналом.

Подготовьте файл для проверки восстановления
install -d -m 0750 /srv/backup-check
printf 'restic restore check\n' > /srv/backup-check/check.txt

check.txt содержит тестовую строку.

Шаг 14. Создайте новый репозиторий #

init создаёт структуру в указанном S3-префиксе. Это только новая пустая установка; существующий репозиторий не нужно инициализировать повторно.

Создайте новый репозиторий
/usr/local/sbin/restic-server init --repository-version 2

Инициализация успешна; сохраните идентификатор репозитория.

Шаг 15. Сделайте первую копию #

Копируем /etc и /srv в зашифрованный snapshot. --one-file-system не переходит на другие смонтированные файловые системы: отдельные диски требуют явного включения в план копирования.

Сделайте первую копию
/usr/local/sbin/restic-server backup /etc /srv --one-file-system --tag server

Backup завершился без ошибки и сообщил ID snapshot.

Шаг 16. Проверьте snapshot и восстановите тестовый файл #

Посмотрите список snapshots и выполните check. Замените SNAPSHOT_ID идентификатором нужной копии; восстановление идёт в новый временный каталог, не поверх рабочих файлов. cmp при совпадении ничего не печатает.

Проверьте snapshot и восстановите тестовый файл
/usr/local/sbin/restic-server snapshots --tag server
/usr/local/sbin/restic-server check
RESTORE_DIR="$(mktemp -d /var/tmp/restic-restore.XXXXXX)"
/usr/local/sbin/restic-server restore SNAPSHOT_ID \
  --target "$RESTORE_DIR" --include /srv/backup-check/check.txt
cmp /srv/backup-check/check.txt "$RESTORE_DIR/srv/backup-check/check.txt"
# Полная проверка с чтением данных S3:
/usr/local/sbin/restic-server check --read-data

Check успешен, cmp не нашёл различий. --read-data читает сохранённые данные и может занять долгое время.

Шаг 17. Сохраните службу резервного копирования #

Служба описывает одну процедуру backup и использует ту же закрытую обёртку. Проверьте пути и имя host server-01; для дампов баз данных добавляйте согласованный отдельный шаг, копирование их работающих файлов не заменяет дамп.

Сохраните службу резервного копирования
cat > /etc/systemd/system/restic-backup.service <<'EOF'
[Unit]
Description=Encrypted server backup with restic
Wants=network-online.target
After=network-online.target

[Service]
Type=oneshot
User=root
UMask=0077
Nice=10
ExecStart=/usr/local/sbin/restic-server backup /etc /srv --one-file-system --tag server
EOF

Файл restic-backup.service сохранён с вашими путями.

Шаг 18. Сохраните расписание #

Timer запускает службу по указанному времени. Persistent позволяет выполнить пропущенное задание после включения сервера.

Сохраните расписание
cat > /etc/systemd/system/restic-backup.timer <<'EOF'
[Unit]
Description=Daily restic server backup

[Timer]
OnCalendar=*-*-* 02:15:00 UTC
RandomizedDelaySec=15m
Persistent=true

[Install]
WantedBy=timers.target
EOF

Файл restic-backup.timer сохранён; время расписания вам подходит.

Шаг 19. Включите расписание и проверьте запуск #

Перечитаем службы, включим timer, посмотрим следующую дату и запустим одну проверку вручную. После завершения в журнале не должно быть ошибки доступа S3 или пароля.

Включите расписание и проверьте запуск
systemctl daemon-reload
systemctl enable --now restic-backup.timer
systemctl list-timers restic-backup.timer
systemctl start restic-backup.service
journalctl -u restic-backup.service -n 100 --no-pager

Timer показывает следующую дату, ручной backup завершился успешно.

Шаг 20. Просмотрите будущую политику хранения #

Этот пример сохраняет ежедневные, еженедельные и ежемесячные копии host server-01 с тегом server. --dry-run только показывает решение и ничего не удаляет. Удаление и prune вводите отдельно после проверки восстановления и согласования срока хранения.

Просмотрите будущую политику хранения
/usr/local/sbin/restic-server forget \
  --host server-01 --tag server --group-by host,paths,tags \
  --keep-daily 7 --keep-weekly 4 --keep-monthly 6 --dry-run

Понятно, какие snapshots будут сохранены; сейчас ни одна копия не удалена.

Если результат шага отличается #

Вернитесь к проверке того шага, на котором появилась ошибка. Первая ошибка в выводе обычно полезнее последних строк: последующие команды могли не получить нужный файл или работающую службу. Не повторяйте установку целиком поверх частично настроенного приложения.

Если страница не открывается, сначала проверьте домен и входящие порты, затем состояние приложения и его журнал. Если сайт открывается, но отдельное действие не работает, проверьте связанные компоненты — обработчик фоновых задач, почту или права пользователя. Официальные источники в конце статьи относятся к выбранному способу установки.

Обсудить установку и настройку

Материал был полезен?

Сообщить об ошибке или задать вопрос редакции

Сообщение увидит редакция. Не указывайте пароли и личные данные. Текст удаляется через 180 дней.

О материале

ИнфраструктураРуководствоЗадача: установитьУровень: практикаrestic

Последнее обновление:

Обсуждение

Комментарии проходят подтверждение адреса и проверку редакцией.