Всеки има резервни копия, докато не опита да възстанови едно. Папката се оказва празна, cron задачата е умряла през март или архивът стои на същия диск, който току-що се е повредил. restic решава повечето от това: криптира от ваша страна, пази всяко парче данни веднъж и прави възстановяването на един файл толкова лесно, колкото архивирането на целия сървър.
Ето настройка, на която наистина бихме се доверили, на Ubuntu или Debian.
1. Инсталирайте restic
apt update && apt install -y restic
restic self-update
Пакетите на дистрибуцията изостават; self-update изтегля текущата версия.
2. Изберете място за хранилището
Хранилището не бива да е на сървъра, който защитавате. Два обичайни избора:
- Друг сървър през SFTP:
sftp:backup@203.0.113.20:/srv/restic/web1 - S3-съвместимо обектно хранилище:
s3:https://s3.example.com/my-bucket/web1
3. Запазете данните за достъп
Дръжте всичко в един файл, който само root чете, за да ползват таймерът и вашият shell едни и същи настройки:
cat > /root/.restic-env <<'EOF'
export RESTIC_REPOSITORY="s3:https://s3.example.com/my-bucket/web1"
export RESTIC_PASSWORD_FILE="/root/.restic-pass"
export AWS_ACCESS_KEY_ID="your-key-id"
export AWS_SECRET_ACCESS_KEY="your-secret"
EOF
openssl rand -base64 32 > /root/.restic-pass
chmod 600 /root/.restic-env /root/.restic-pass
Сега копирайте съдържанието на /root/.restic-pass в мениджъра си на пароли. Без него копията не могат да бъдат декриптирани — нито от вас, нито от някой друг.
4. Инициализирайте и направете първото копие
source /root/.restic-env
restic init
restic backup /etc /home /root /srv /var/www \
--exclude-caches --exclude '/root/.cache'
restic snapshots
Настройте пътищата спрямо това къде реално са данните ви. Docker volume-ите са в /var/lib/docker/volumes; данните на приложенията често са в /srv или /opt.
5. Бази данни: първо дъмп, после копие
Не архивирайте суровите файлове на работеща база. Направете дъмп точно преди копието:
mkdir -p /var/backups/db
sudo -u postgres pg_dump -Fc mydb > /var/backups/db/mydb.dump
Добавете /var/backups/db към пътищата за архивиране. В нашето ръководство за PostgreSQL има повече за дъмповете.
6. Насрочете го със systemd
Тук таймерът е по-добър от cron: пише в journal-а и наваксва пропуснато изпълнение, ако сървърът е бил изключен в уречения час.
# /etc/systemd/system/restic-backup.service
[Unit]
Description=restic backup
[Service]
Type=oneshot
ExecStart=/bin/bash -c 'source /root/.restic-env && restic backup /etc /home /root /srv /var/www /var/backups/db --exclude-caches && restic forget --keep-daily 7 --keep-weekly 4 --keep-monthly 6 --prune'
# /etc/systemd/system/restic-backup.timer
[Unit]
Description=Daily restic backup
[Timer]
OnCalendar=*-*-* 03:30:00
Persistent=true
[Install]
WantedBy=timers.target
systemctl daemon-reload
systemctl enable --now restic-backup.timer
systemctl list-timers restic-backup.timer
forget --prune пази 7 дневни, 4 седмични и 6 месечни snapshot-а и изтрива останалите. Ако имате стъпка с дъмп на базата, сложете я в ред ExecStartPre=.
7. Наистина възстановете нещо
Това е стъпката, която превръща „имаме копия" във факт. Върнете една директория във временна папка и я разгледайте:
source /root/.restic-env
restic restore latest --target /tmp/restore-test --include /etc/nginx
ls -la /tmp/restore-test/etc/nginx
restic check
Направете го веднъж сега и после на всеки няколко месеца. restic check проверява структурата на хранилището; възстановяването доказва, че данните наистина са там.
restic и Managed Backups
Те не си съперничат. Managed Backups правят всеки ден точка за възстановяване на целия сървър, която връщате от панела — бързото решение след неуспешно обновяване. Струват $2 на месец и са безплатни с всеки годишен план. restic дава копия на ниво файл извън сървъра в хранилище, което контролирате, а това е важно, когато проблемът е файл, изтрит миналия вторник, или когато искате копие изцяло извън нашата инфраструктура.
Ако пазите чувствителни данни, комбинирайте това с пълно криптиране на диска или вижте сценария за криптирано хранилище, за да поддържате собствена цел за копията. План Micro стига за повечето малки сървъри заедно с техните задачи за архивиране.
Коментари
Още няма коментари. Бъди първият.