Резервное копирование Discourse с DO droplet на NAS

Привет! Я ищу способ автоматизировать резервное копирование моего нового форума Discourse (развернутого на сервере Digital Ocean) на NAS-устройство в моей домашней сети. Как это можно реализовать?

Я не программист и не знаю, с чего начать, если бы хотел создать для этого плагин.

Самый простой способ — настроить автоматическую задачу (cron-задачу). В зависимости от вашей NAS-системы, вы можете выполнять базовые команды Linux, например rsync.

Вам понадобится способ соединения между NAS и Droplet. Как только вы его найдёте, считаю, что использование плагина будет излишним. Вам достаточно чего-то вроде кода ниже, который будет запускаться на вашей NAS через cron-задачу:

rsync -avz --progress -e "ssh -i ~/.ssh/id-rsa" example.com:/var/discourse/shared/standalone/backups /folder/in/the/nas

Возможность запуска чего-то подобного, как я уже говорил выше, зависит от модели вашей NAS.

Спасибо, Марио. У меня есть старый Netgear ReadyNAS Ultra 6 с ОС 6, который, как я полагаю, может поддерживать этот подход (проверю).

Думаю, часть проблемы для меня заключается в том, чтобы определить, какие файлы или папки нужно резервировать. Предположительно, только базу данных? (И я полагаю, что все опубликованные изображения, вложения и т. д. будут встроены в неё?)

Какой путь мне использовать для поиска базы данных? Хранится ли база данных вообще как файл в директории Discourse? Я заглянул в /var/discourse, но не увидел ничего, что выглядело бы как файл базы данных, на мой непрофессиональный взгляд.

Вы хотите включить ежедневное резервное копирование и получить

 /var/discourse/shared/standalone/backups/default

Спасибо, Джей — похоже, это именно то, что нужно!
Правильно ли я понимаю, что если я включил опцию «включать загрузки в резервные копии», то мне больше ничего не нужно резервировать, если вдруг потребуется начать заново с нуля на другом сервере?

(при условии, что сторонние плагины, которые я использую, не станут вдруг недоступными для загрузки)

Также есть ли способ автоматически очищать папку ежедневных резервных копий, чтобы, например, на сервере хранились только последние 7 дней ежедневных резервных копий?

Да, в панели администрирования есть настройки, но я сейчас не помню их названий. Скрипт, который я отправил вам ранее, уже использует стандартный путь, где хранятся резервные копии.

Однако с помощью rsync на NAS и этой команды вы можете настроить его так, чтобы он также удалял старые резервные копии с NAS, и всё будет готово.

Спасибо, Мариано.
На форуме ReadyNAS было предложение, что использование cron на ReadyNAS возможно, но не идеально, и что встроенные таймеры systemd лучше. Не уверен, однако, позволяют ли они выполнять такие сложные задачи, как очистка удаленных директорий.

В настоящее время я сталкиваюсь с ошибками “Permission denied (publickey)” при каждой попытке подключиться с ReadyNAS к моему серверу Discourse, хотя я уже добавил публичный ключ ReadyNAS в список пользователей SSH на Digital Ocean.

Сообщу здесь, если добьюсь какого-либо прогресса, для тех, кто тоже пытается это сделать.

Очистка выполняется напрямую в Droplet через Discourse, но у rsync есть бесчисленное множество опций, поэтому вы можете настроить процесс копирования резервных копий на свой вкус.

Убедитесь, что вы перезапустили SSH-сервер — иногда это решает проблемы с публичными ключами.

Спасибо, Мариано.
Я перезагрузил сервер, но ошибка всё ещё сохраняется:

Permission denied (publickey).
rsync: connection unexpectedly closed (0 bytes received so far) [Receiver]
rsync error: unexplained error (code 255) at io.c(235) [Receiver=3.1.3]

Без сомнения, проблема во мне: я пытаюсь войти под неправильным пользователем или что-то в этом роде. Хотя я пробовал войти с ReadyNAS, используя имя, которое я указал при добавлении этого публичного ключа в Digital Ocean, а также ‘root’. Ни один из этих вариантов не работает.

Вы уже входили на сервер с ключом? Например, при установке Discourse или пересборке приложения.

Возможно (хотя так быть не должно), что SSH на сервере отключил публичную аутентификацию, либо NAS использует неверный ключ для входа.

Не забудьте указать правильное имя и путь к ключу в этой части команды: "ssh -i ~/.ssh/id-rsa".

*** РЕДАКТИРОВАНИЕ ***
Спасибо, Мариано. В конце концов у меня всё заработало.

Кратко, для тех, кто тоже пытается это сделать:

  1. Включите SSH на ReadyNAS: ReadyNAS OS 6: SSH access support and configuration guides - NETGEAR Support

  2. Используйте PuTTY для доступа к серверу Digital Ocean и введите:

nano /root/.ssh/authorized_keys

  1. В редакторе скопируйте и вставьте текст открытого ключа, используемого ReadyNAS, добавив его в конец файла /root/.ssh/authorized_keys (будьте осторожны, чтобы не перезаписать уже существующие ключи).

  2. В настройках диалога резервного копирования ReadyNAS я использовал следующие параметры:

Имя: Резервное копирование через Rsync по удалённому SSH (выбор из выпадающего списка)
Хост: mydomain.com (или IP-адрес сервера)
Порт: 22
Путь: /var/discourse/shared/standalone/backups/default
Логин: root

(Отметим, что если вы правильно следовали инструкциям по настройке SSH-доступа на ReadyNAS, то к паре открытого/закрытого SSH-ключа не будет привязана SSH-фраза. Это очень важно, так как в диалоге резервного копирования ReadyNAS нет поля для ввода фразы).

Сначала этот процесс у меня работал не полностью: при нажатии кнопки «Тест» в диалоге резервного копирования ReadyNAS с этими настройками соединение устанавливалось успешно, но при запуске самого резервного копирования возникала ошибка «Превышена квота диска (122)».
Однако через пару часов, без каких-либо дополнительных очевидных действий с моей стороны, когда процесс резервного копирования снова запустился автоматически в назначенное время, на этот раз всё прошло как надо.

Возможно, мои предыдущие попытки установить соединение и протестировать его с другими настройками оказывали какое-то остаточное влияние, мешавшее работе, или же проблема заключалась в том, что одновременно я был залогинен на сервере как root с моего ПК через PuTTY и как root через FileZilla (оба подключения использовали ключ по умолчанию для root), а затем пытался войти как root через утилиту резервного копирования устройства ReadyNAS (используя открытый ключ ReadyNAS, который был добавлен для root).