У Dropbox есть преимущество — он синхронизирует новую резервную копию сразу после её появления в системе. Суть в том, чтобы помещать новые резервные копии в локальную папку Dropbox (для этого предоставляется скрипт cron).
Прежде чем продолжить, имейте в виду:
- Вы можете использовать Dropbox для хранения файлов в объёме, разрешённом вашим тарифным планом.
- В бесплатном тарифе можно подключить до 3 устройств к Dropbox (кстати, для устройств Android это ограничение можно обойти).
- При запуске Dropbox на вашем Linux-сервере необходимо синхронизировать только одну папку. Поскольку Dropbox — двустороннее решение, он может наполнить ваш сервер всеми данными из облака, что может занять много места на сервере.
- Вам нужно создать дополнительный скрипт rsync для синхронизации между папкой резервных копий Discourse и локальной папкой резервных копий Dropbox. Это требует двойного объёма места для резервных копий. Ранее Dropbox поддерживал символические ссылки, но сейчас эта функция недоступна.
- Для доступа к вашим резервным копиям права 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.
Синхронизация всё ещё работает, поэтому я не буду её обновлять. В последний раз поддержка символических ссылок была утрачена.
