[Настройка Linux, Системное администрирование, Серверное администрирование, Резервное копирование] Настраиваем Restic с systemd на Linux
Автор
Сообщение
news_bot ®
Стаж: 6 лет 9 месяцев
Сообщений: 27286
Restic — хорошо известная программа для резервного копирования. Она достаточно проста, чтобы переноситься на любую ОС, и, вероятно, поэтому с ней не прилагается полноценный пример настройки на среднестатистической Linux-системе. Исправим это данным постом.
Поставим задачу следующим образом:
- Автоматический бэкап запускается ежедневно.
- Бэкап хранит только важные файлы и данные.
- Бэкап также включает в себя содержимое баз PostgreSQL, которое можно восстановить psql -f.
TL;DR поста
SPL
Пишем два юнита / таймера для systemd, запускаем restic под выделенным пользователем с CAP_DAC_READ_SEARCH, для PostgreSQL архивируем результат pg_dumpall.
Здесь предполагается, что бэкап производится на машине с Ubuntu Server 20.04 и выполняется на rest-server, работающий на 192.168.1.200. Тем не менее, конфигурация тривиально адаптируется к любому облачному провайдеру. Также предполагается, что репозиторий уже проинициализирован командой restic -r rest:http://192.168.1.200/your-repo/ init.
Бэкапим файлы/директории
Выполнять ПО с правами суперпользователя без особой надобности нежелательно, поэтому создадим для наших задач отдельного пользователя restic без группы и командной оболочки:
# useradd -m -N -s /usr/sbin/nologin restic
Нам понадобится следующий сервис systemd с параметром и таймер к нему:
/etc/systemd/system/restic@.service:
[Unit]
# юнит активируется с параметром после @, то есть в
# systemctl start restic@your-repo.service
# %I означает "your-repo"
Description=Restic backup on %I
After=syslog.target
After=network-online.target
[Service]
Type=oneshot
User=restic
# читать список файлов к бэкапу будем из /etc/restic/your-repo.files
ExecStart=/usr/local/bin/restic backup --files-from /etc/restic/%I.files
# считаем репозиторий и пароль из /etc/restic/your-repo.env
EnvironmentFile=/etc/restic/%I.env
# выполняем restic с capability DAC_READ_SEARCH, дающей право
# обходить права доступа ФС в Linux, это нужно для бэкапа
# директорий, которые могут читать только другие пользователи
# или суперпользователь
AmbientCapabilities=CAP_DAC_READ_SEARCH
[Install]
WantedBy=multi-user.target
/etc/systemd/system/restic@.timer:
[Unit]
# таймер, будучи запущенным с параметром после @
# (restic@your-repo.timer), запустит restic@your-repo.service
Description=Run Restic at 12:00 AM
[Timer]
# запускаем restic ежедневно в 12 часов ночи
OnCalendar=*-*-* 12:00:00
[Install]
WantedBy=timers.target
Адрес репозитория и пароль от него подаются на вход через файл с переменными среды в /etc/restic/your-repo.env. systemd читает их при старте юнита с правами root, поэтому имеет смысл задать разрешения директории /etc/restic/ соответствующим образом (т.е. 700 и владельцем установить root):
RESTIC_PASSWORD=your_repo_password
RESTIC_REPOSITORY=rest:http://192.168.1.200/your-repo/
Нам также понадобится список файлов/директорий к бэкапу в /etc/restic/your-repo.files:
/var/lib/docker
/etc/postgresql
/etc/restic
...
Бэкап PostgreSQL
Restic позволяет подачу данных для бэкапа через стандартный вход, так что мы можем скормить ему дамп, полученный pg_dumpall. Так как systemd запускает указанное директивой ExecStart вызовом execve(3), для использования перенаправления вывода и сжатия нам понадобится отдельный скрипт /usr/local/bin/pgdump.sh:
#!/usr/bin/env bash
set -euo pipefail
/usr/bin/sudo -u postgres pg_dumpall --clean \
| gzip --rsyncable \
| /usr/local/bin/restic backup --host $1 --stdin \
--stdin-filename postgres-$1.sql.gz
Сервис /etc/systemd/system/restic-pg@.service достаточно тривиален:
[Unit]
Description=Restic PostgreSQL backup on %I
After=syslog.target
After=network-online.target
After=postgresql.service
Requires=postgresql.service
[Service]
Type=oneshot
User=restic
ExecStart=/usr/local/bin/pgdump.sh %I
EnvironmentFile=/etc/restic/%I.env
[Install]
WantedBy=multi-user.target
Таймер /etc/systemd/system/restic-pg@.timer не отличается от виденного выше:
[Unit]
Description=Run Restic on PostgreSQL at 12:00 AM
[Timer]
OnCalendar=*-*-* 0:00:00
[Install]
WantedBy=timers.target
Завершаем
Запустим таймеры и включим их автозагрузку:
# systemctl enable --now restic@your-repo.timer restic-pg@your-repo.timer
Проверим, работает ли построенная система:
# systemctl start restic@your-repo.service
# systemctl start restic-pg@your-repo.service
Данный набор юнитов позволяет бэкапиться в неограниченное количество репозиториев, нужно лишь создать соответствующие /etc/restic/repo-name.{env,files}.
Ссылки
- Рецепт бэкапа PostgreSQL в контейнере, из которого вырос скрипт в посте.
- Документация systemd: systemd.service, systemd.timer.
- Этот пост в моем блоге на английском языке.
===========
Источник:
habr.com
===========
Похожие новости:
- [*nix] Основы Bash-скриптинга для непрограммистов. Часть 2
- [Open source, Разработка под Linux, Финансы в IT] Мейнтейнер ядра Linux объяснил сокращение срока поддержки LTS до двух лет — это стандартная процедура получения денег
- [PostgreSQL, C++, Visual Studio, Разработка под Windows] Использование libpq в VisualStudio (Windows)
- [Системное администрирование, IT-инфраструктура, DevOps] Изучаем ELK. Часть II — Установка Kibana и Logstash
- [Настройка Linux, Системное администрирование] Настраиваем домашний почтовый сервер и уходим с «бесплатной» почты
- [PHP, PostgreSQL, SQL] Установка Redmine за 15 минут (RVM + RoR + Unicorn + Nginx)
- [Высокая производительность, PostgreSQL, SQL, Администрирование баз данных] Агрегаты в БД — эффективная обработка потока «фактов»
- [Настройка Linux, Системное программирование, Серверное администрирование] Релиз серверного дистрибутива Zentyal 7.0 на пакетной базе Ubuntu 20.04 LTS
- [Настройка Linux, Системное администрирование, Софт, Накопители] Самый актуальный гайд по установке Linux на SSD-накопители в 2021 году
- [Системное администрирование, DevOps, Kubernetes] Аварии как опыт #2. Как развалить Elasticsearch при переносе внутри Kubernetes
Теги для поиска: #_nastrojka_linux (Настройка Linux), #_sistemnoe_administrirovanie (Системное администрирование), #_servernoe_administrirovanie (Серверное администрирование), #_rezervnoe_kopirovanie (Резервное копирование), #_restic, #_postgresql, #_systemd, #_linux, #_backup, #_bekapy (бэкапы), #_rezervnoe_kopirovanie (резервное копирование), #_nastrojka_linux (
Настройка Linux
), #_sistemnoe_administrirovanie (
Системное администрирование
), #_servernoe_administrirovanie (
Серверное администрирование
), #_rezervnoe_kopirovanie (
Резервное копирование
)
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 22-Ноя 01:30
Часовой пояс: UTC + 5
Автор | Сообщение |
---|---|
news_bot ®
Стаж: 6 лет 9 месяцев |
|
Restic — хорошо известная программа для резервного копирования. Она достаточно проста, чтобы переноситься на любую ОС, и, вероятно, поэтому с ней не прилагается полноценный пример настройки на среднестатистической Linux-системе. Исправим это данным постом. Поставим задачу следующим образом:
TL;DR постаSPLПишем два юнита / таймера для systemd, запускаем restic под выделенным пользователем с CAP_DAC_READ_SEARCH, для PostgreSQL архивируем результат pg_dumpall.
Здесь предполагается, что бэкап производится на машине с Ubuntu Server 20.04 и выполняется на rest-server, работающий на 192.168.1.200. Тем не менее, конфигурация тривиально адаптируется к любому облачному провайдеру. Также предполагается, что репозиторий уже проинициализирован командой restic -r rest:http://192.168.1.200/your-repo/ init. Бэкапим файлы/директории Выполнять ПО с правами суперпользователя без особой надобности нежелательно, поэтому создадим для наших задач отдельного пользователя restic без группы и командной оболочки: # useradd -m -N -s /usr/sbin/nologin restic
Нам понадобится следующий сервис systemd с параметром и таймер к нему: /etc/systemd/system/restic@.service: [Unit]
# юнит активируется с параметром после @, то есть в # systemctl start restic@your-repo.service # %I означает "your-repo" Description=Restic backup on %I After=syslog.target After=network-online.target [Service] Type=oneshot User=restic # читать список файлов к бэкапу будем из /etc/restic/your-repo.files ExecStart=/usr/local/bin/restic backup --files-from /etc/restic/%I.files # считаем репозиторий и пароль из /etc/restic/your-repo.env EnvironmentFile=/etc/restic/%I.env # выполняем restic с capability DAC_READ_SEARCH, дающей право # обходить права доступа ФС в Linux, это нужно для бэкапа # директорий, которые могут читать только другие пользователи # или суперпользователь AmbientCapabilities=CAP_DAC_READ_SEARCH [Install] WantedBy=multi-user.target /etc/systemd/system/restic@.timer: [Unit]
# таймер, будучи запущенным с параметром после @ # (restic@your-repo.timer), запустит restic@your-repo.service Description=Run Restic at 12:00 AM [Timer] # запускаем restic ежедневно в 12 часов ночи OnCalendar=*-*-* 12:00:00 [Install] WantedBy=timers.target Адрес репозитория и пароль от него подаются на вход через файл с переменными среды в /etc/restic/your-repo.env. systemd читает их при старте юнита с правами root, поэтому имеет смысл задать разрешения директории /etc/restic/ соответствующим образом (т.е. 700 и владельцем установить root): RESTIC_PASSWORD=your_repo_password
RESTIC_REPOSITORY=rest:http://192.168.1.200/your-repo/ Нам также понадобится список файлов/директорий к бэкапу в /etc/restic/your-repo.files: /var/lib/docker
/etc/postgresql /etc/restic ... Бэкап PostgreSQL Restic позволяет подачу данных для бэкапа через стандартный вход, так что мы можем скормить ему дамп, полученный pg_dumpall. Так как systemd запускает указанное директивой ExecStart вызовом execve(3), для использования перенаправления вывода и сжатия нам понадобится отдельный скрипт /usr/local/bin/pgdump.sh: #!/usr/bin/env bash
set -euo pipefail /usr/bin/sudo -u postgres pg_dumpall --clean \ | gzip --rsyncable \ | /usr/local/bin/restic backup --host $1 --stdin \ --stdin-filename postgres-$1.sql.gz Сервис /etc/systemd/system/restic-pg@.service достаточно тривиален: [Unit]
Description=Restic PostgreSQL backup on %I After=syslog.target After=network-online.target After=postgresql.service Requires=postgresql.service [Service] Type=oneshot User=restic ExecStart=/usr/local/bin/pgdump.sh %I EnvironmentFile=/etc/restic/%I.env [Install] WantedBy=multi-user.target Таймер /etc/systemd/system/restic-pg@.timer не отличается от виденного выше: [Unit]
Description=Run Restic on PostgreSQL at 12:00 AM [Timer] OnCalendar=*-*-* 0:00:00 [Install] WantedBy=timers.target Завершаем Запустим таймеры и включим их автозагрузку: # systemctl enable --now restic@your-repo.timer restic-pg@your-repo.timer
Проверим, работает ли построенная система: # systemctl start restic@your-repo.service
# systemctl start restic-pg@your-repo.service Данный набор юнитов позволяет бэкапиться в неограниченное количество репозиториев, нужно лишь создать соответствующие /etc/restic/repo-name.{env,files}. Ссылки
=========== Источник: habr.com =========== Похожие новости:
Настройка Linux ), #_sistemnoe_administrirovanie ( Системное администрирование ), #_servernoe_administrirovanie ( Серверное администрирование ), #_rezervnoe_kopirovanie ( Резервное копирование ) |
|
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 22-Ноя 01:30
Часовой пояс: UTC + 5