Пошаговая инструкция · Самостоятельная установка
Как установить 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 opensslapt завершился без ошибки.
Шаг 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-gpgsigning-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 SHA256SUMSGPG сообщает 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 versionrestic 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/префикс и ключи доступа. У этой учётной записи должны быть нужные права только на выбранный репозиторий. Пароль шифрования берётся из отдельного файла.
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.txtcheck.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 serverBackup завершился без ошибки и сообщил ID snapshot.
Шаг 16. Проверьте snapshot и восстановите тестовый файл #
Посмотрите список snapshots и выполните check. Замените SNAPSHOT_ID идентификатором нужной копии; восстановление идёт в новый временный каталог, не поверх рабочих файлов. cmp при совпадении ничего не печатает.
/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-dataCheck успешен, 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-pagerTimer показывает следующую дату, ручной 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 будут сохранены; сейчас ни одна копия не удалена.
Если результат шага отличается #
Вернитесь к проверке того шага, на котором появилась ошибка. Первая ошибка в выводе обычно полезнее последних строк: последующие команды могли не получить нужный файл или работающую службу. Не повторяйте установку целиком поверх частично настроенного приложения.
Если страница не открывается, сначала проверьте домен и входящие порты, затем состояние приложения и его журнал. Если сайт открывается, но отдельное действие не работает, проверьте связанные компоненты — обработчик фоновых задач, почту или права пользователя. Официальные источники в конце статьи относятся к выбранному способу установки.