Привет! Я ищу способ автоматизировать резервное копирование моего нового форума Discourse (развернутого на сервере Digital Ocean) на NAS-устройство в моей домашней сети. Как это можно реализовать?
Я не программист и не знаю, с чего начать, если бы хотел создать для этого плагин.
Самый простой способ — настроить автоматическую задачу (cron-задачу). В зависимости от вашей NAS-системы, вы можете выполнять базовые команды Linux, например rsync.
Вам понадобится способ соединения между NAS и Droplet. Как только вы его найдёте, считаю, что использование плагина будет излишним. Вам достаточно чего-то вроде кода ниже, который будет запускаться на вашей NAS через cron-задачу:
Спасибо, Марио. У меня есть старый Netgear ReadyNAS Ultra 6 с ОС 6, который, как я полагаю, может поддерживать этот подход (проверю).
Думаю, часть проблемы для меня заключается в том, чтобы определить, какие файлы или папки нужно резервировать. Предположительно, только базу данных? (И я полагаю, что все опубликованные изображения, вложения и т. д. будут встроены в неё?)
Какой путь мне использовать для поиска базы данных? Хранится ли база данных вообще как файл в директории Discourse? Я заглянул в /var/discourse, но не увидел ничего, что выглядело бы как файл базы данных, на мой непрофессиональный взгляд.
Спасибо, Джей — похоже, это именно то, что нужно!
Правильно ли я понимаю, что если я включил опцию «включать загрузки в резервные копии», то мне больше ничего не нужно резервировать, если вдруг потребуется начать заново с нуля на другом сервере?
(при условии, что сторонние плагины, которые я использую, не станут вдруг недоступными для загрузки)
Также есть ли способ автоматически очищать папку ежедневных резервных копий, чтобы, например, на сервере хранились только последние 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’. Ни один из этих вариантов не работает.
Используйте PuTTY для доступа к серверу Digital Ocean и введите:
nano /root/.ssh/authorized_keys
В редакторе скопируйте и вставьте текст открытого ключа, используемого ReadyNAS, добавив его в конец файла /root/.ssh/authorized_keys (будьте осторожны, чтобы не перезаписать уже существующие ключи).
В настройках диалога резервного копирования 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).