Загрузка резервных копий в Dropbox с помощью crontab и dropboxd

У Dropbox есть преимущество — он синхронизирует новую резервную копию сразу после её появления в системе. Суть в том, чтобы помещать новые резервные копии в локальную папку Dropbox (для этого предоставляется скрипт cron).

Прежде чем продолжить, имейте в виду:

  1. Вы можете использовать Dropbox для хранения файлов в объёме, разрешённом вашим тарифным планом.
  2. В бесплатном тарифе можно подключить до 3 устройств к Dropbox (кстати, для устройств Android это ограничение можно обойти).
  3. При запуске Dropbox на вашем Linux-сервере необходимо синхронизировать только одну папку. Поскольку Dropbox — двустороннее решение, он может наполнить ваш сервер всеми данными из облака, что может занять много места на сервере.
  4. Вам нужно создать дополнительный скрипт rsync для синхронизации между папкой резервных копий Discourse и локальной папкой резервных копий Dropbox. Это требует двойного объёма места для резервных копий. Ранее Dropbox поддерживал символические ссылки, но сейчас эта функция недоступна.
  5. Для доступа к вашим резервным копиям права root не требуются, однако в этом руководстве я запускаю демон Dropbox от имени root (вероятно, небезопасно, предлагаю улучшить).

Сначала настройте резервное копирование в Discourse в разделе /admin/site_settings/category/backups (мои собственные значения указаны в скобках):

максимальное количество резервных копий (3) — определяет, сколько файлов будет сохранено в Dropbox
частота резервного копирования (1) — ежедневно
время резервного копирования (3:30 UTC) — по умолчанию
уровень сжатия gzip при резервном копировании (6) — выберите между скоростью сжатия (1) или меньшим размером (9), но в случае использования VPS ваш хост-провайдер может перезагрузить сервер при длительной высокой загрузке CPU

Затем подключите ваш сервер к Dropbox с помощью команд оболочки (важно: поскольку я запускаю службу от имени root, на этом этапе я вошел как root — поэтому вы можете попробовать использовать обычного пользователя):

cd ~ && wget -O - "https://www.dropbox.com/download?plat=lnx.x86_64" | tar xzf -
# будет создана директория .dropbox-dist
# запустите демон Dropbox
sh ~/.dropbox-dist/dropboxd

При первом использовании Dropbox на сервере вы увидите уникальную веб-ссылку. Скопируйте её и вставьте в веб-браузер, затем следуйте инструкциям. После этого в вашей домашней папке будет создана директория Dropbox. Официально Dropbox рекомендует скачать скрипт на Python для управления демоном. Я его не использую.

Команды для управления демоном:

dropbox status
dropbox start
dropbox stop
Проверьте, создан ли скрипт автозапуска (нажмите, чтобы развернуть скрытый текст):
#cat /etc/systemd/system/dropbox.service

[Unit]
Description=Dropbox Service
After=network.target

[Service]
ExecStart=/bin/sh -c '/usr/local/bin/dropbox start'
ExecStop=/bin/sh -c '/usr/local/bin/dropbox stop'
PIDFile=/root/.dropbox/dropbox.pid
User=root
Group=root
Type=forking
Restart=on-failure
RestartSec=5
StartLimitInterval=60s
StartLimitBurst=3

[Install]
WantedBy=multi-user.target

Discourse создаёт файлы резервных копий и управляет их количеством и частотой.
Задача crontab rsync копирует новую резервную копию в локальную папку Dropbox.
После этого Dropbox загружает новый файл в облако.
Когда следующей ночью Discourse удаляет старый файл резервной копии, rsync удаляет его и из Dropbox.

Третьим шагом создайте папку Dropbox для резервных копий:

mkdir ~/Dropbox/backups

Четвёртым шагом подготовьте папку для обратной синхронизации (исключите ненужные папки из синхронизации)
Например, ваша папка Dropbox содержит подпапки и файл:

backups
books
stuff
logo.png

Вам нужно исключить всё, кроме backups. На самом деле команда добавляет элементы в список исключений:

dropbox exclude add "Dropbox/books/"
dropbox exclude add "Dropbox/stuff/"
dropbox exclude add "Dropbox/logo.png"

Если вы случайно добавили backups в список исключений, вы можете вернуть её в синхронизацию, удалив элемент из списка:

dropbox exclude remove "Dropbox/backups/"

Текущий статус определённой резервной копии можно проверить командой:

dropbox filestatus Dropbox/backups/niti-2021-01-21-033726-v20201218000001.tar.gz

Пятым шагом подготовьте скрипт для локальной синхронизации и очистки кэша /root/rsync.dropbox:

#!/bin/sh
rsync -avh --stats --progress --delete /var/discourse/shared/standalone/backups/default/ /root/Dropbox/backups/
rm -rf /root/Dropbox/.dropbox.cache/

Шестым шагом добавьте команду в crontab на 8:00 по местному времени: crontab -e

0 8 * * * /bin/bash /root/rsync.dropbox

Между 3:00 UTC и 8:00 по моему местному времени есть временной промежуток — его должно хватить для завершения резервного копирования до начала синхронизации с Dropbox.

P.S.
Я не проверял эту конфигурацию полгода или даже больше. Теперь я заметил, что команда dropbox status возвращает:

Вы используете старую версию Dropbox. Пожалуйста, обновитесь до последней версии, чтобы продолжить использование Dropbox.

Синхронизация всё ещё работает, поэтому я не буду её обновлять. В последний раз поддержка символических ссылок была утрачена.

7 лайков