Создание, загрузка и восстановление резервной копии базы данных Discourse

:bookmark: Это руководство содержит пошаговые инструкции по созданию, загрузке и восстановлению резервной копии базы данных вашего сайта Discourse.

:person_raising_hand: Требуемый уровень пользователя: Администратор

Discourse позволяет администраторам сайта создавать и загружать копию базы данных сайта. Затем эту резервную копию можно загрузить и восстановить на любом форуме Discourse.

Резервные копии Discourse включают полную базу данных сайта, содержащую всё, что есть на сайте: темы, сообщения, пользователей, группы, настройки, темы оформления и т. д. В зависимости от способа создания файла резервной копии, он может включать или не включать загруженные файлы. Резервные копии с загруженными файлами сохраняются в формате .tar.gz, а без них — в формате .sql.gz. Подробную информацию см. в следующем разделе.

Хотя данные, созданные плагинами, хранятся в базе данных, сами плагины устанавливаются в файле app.yml. Чтобы восстановить ваш сайт на новом сервере, убедитесь, что ваша установка включает необходимые плагины.

Режим только для чтения

Вы можете включить режим только для чтения на странице «Резервные копии», чтобы предотвратить изменения на сайте при выполнении задач администратора. Узнать больше о режиме только для чтения здесь.

Создание резервной копии

Чтобы создать резервную копию вашего сайта Discourse, выполните следующие действия:

  1. Перейдите в раздел Администрирование / Резервные копии вашего сайта.
  2. Нажмите кнопку Создать резервную копию.

  1. Откроется модальное окно с флажком для включения загруженных файлов сайта в резервную копию. Установите или снимите этот флажок в зависимости от ваших предпочтений.

:warning: Если ваш сайт размещён нами и вы хотите создать резервную копию, включающую загруженные файлы, свяжитесь с командой Discourse перед созданием резервной копии.

  1. Нажмите кнопку подтверждения для запуска создания резервной копии.

Загрузка резервной копии

После завершения создания резервной копии Discourse отправит вам уведомление.

  • Нажмите ссылку в уведомлении, чтобы вернуться на страницу «Резервные копии». Затем нажмите кнопку «Скачать».

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

Загрузка резервной копии

  • Чтобы загрузить резервную копию, перейдите в раздел Администрирование / Резервные копии вашего сайта, откройте вкладку Файлы резервных копий и нажмите кнопку Загрузить.

  • Откроется файловый менеджер вашего браузера. Выберите резервную копию в файловой системе и нажмите кнопку «Открыть» в файловом менеджере. Новый файл резервной копии отобразится в списке файлов.

Восстановление резервной копии

Прежде чем вы сможете восстановить файл резервной копии, необходимо включить настройку сайта allow restore. Затем на странице Резервные копии найдите нужную резервную копию, откройте меню дополнительных параметров (⋮) и выберите Восстановить.

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

:warning: Убедитесь, что сайт, на который вы восстанавливаете резервную копию, работает на той же версии Discourse, что и старый сайт. Рекомендуется обновить оба сайта до последней версии перед запуском процесса резервного копирования/восстановления.

Процесс восстановления автоматически устанавливает настройку disable emails в значение «non-staff», чтобы письма не отправлялись пользователям вашего сайта, пока вы не будете готовы.

:discourse: Если ваш сайт размещён компанией Discourse, опция «Восстановить» будет отключена. После загрузки файла резервной копии свяжитесь с командой Discourse и сообщите имя файла резервной копии, который вы хотите восстановить. Мы выполним восстановление за вас.

Резервное копирование и восстановление через командную строку

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

  • Резервные копии хранятся в /var/discourse/shared/standalone/backups.
  • Запуск резервного копирования:
./launcher run app discourse backup

или

docker exec app bash -c "discourse backup"

Для получения дополнительной информации о резервном копировании через командную строку см.: Резервное копирование Discourse через командную строку.

32 лайка

Есть ли способ программно создать и загрузить этот файл резервной копии? Я имею в виду, что у меня на сервере есть несколько cron-скриптов, которые делают резервные копии множества других сервисов. Могу ли я выполнить несколько команд CLI напрямую на сервере, чтобы получить резервную копию там? Возможно, что-то вроде ./launcher app backup new-backup.backup?

Резервные копии находятся в /var/discourse/shared/standalone/backups

Вы можете создать резервную копию с помощью

./launcher run app discourse backup

Или

docker exec app bash -c "discourse backup" 

Кажется, так.

2 лайка

Возможно ли это также в среде разработки Docker, настроенной согласно инструкции по адресу Install Discourse for development using Docker?

Когда я пытаюсь выполнить это, как описано в разделе Создание резервной копии выше, я получаю ошибку pg_dump: error: connection to database "discourse_development" failed: connection to server on socket "/var/run/postgresql/.s.PGSQL.5432" failed: FATAL: Peer authentication failed for user "postgres".

Полный журнал неудачной резервной копии
[2024-09-04 15:03:39] [ЗАПУЩЕНО]
[2024-09-04 15:03:39] 'raphael.dasgupta' начал создание резервной копии!
[2024-09-04 15:03:39] Помечаем резервную копию как выполняющуюся...
[2024-09-04 15:03:39] Проверяем существование '/src/tmp/backups/default/2024-09-04-150339'...
[2024-09-04 15:03:39] Проверяем существование '/src/public/backups/default'...
[2024-09-04 15:03:39] Обновляем метаданные...
[2024-09-04 15:03:39] Дамп публичной схемы базы данных...
[2024-09-04 15:03:40] pg_dump: ошибка: подключение к базе данных "discourse_development" не удалось: подключение к серверу через сокет "/var/run/postgresql/.s.PGSQL.5432" не удалось: FATAL: Ошибка аутентификации по пирингу для пользователя "postgres"
[2024-09-04 15:03:40] ИСКЛЮЧЕНИЕ: pg_dump не удался
[2024-09-04 15:03:40] /src/lib/backup_restore/backuper.rb:173:in `dump_public_schema'
/src/lib/backup_restore/backuper.rb:36:in `run'
/src/script/spawn_backup_restore.rb:9:in `backup'
/src/script/spawn_backup_restore.rb:31:in `block in <main>'
/src/script/spawn_backup_restore.rb:4:in `fork'
/src/script/spawn_backup_restore.rb:4:in `<main>'
[2024-09-04 15:03:40] Очистка временных файлов...
[2024-09-04 15:03:40] Удаление остатков '.tar'...
[2024-09-04 15:03:40] Помечаем резервную копию как завершенную...
[2024-09-04 15:03:40] Уведомляем 'raphael.dasgupta' об окончании резервного копирования...
1 лайк

У меня возникли проблемы с загрузкой резервной копии. Когда я нажал кнопку загрузки, появилось сообщение о том, что ссылка для загрузки отправлена на мой адрес электронной почты. Однако прошло уже более двух дней, и я до сих пор не получил письмо.

Прошу оказать помощь.

Вы пробовали ./discourse-doctor?

Спасибо за ваш ответ. Основная проблема в том, что я настроил другую электронную почту через панель администратора. Подключение к порту 587 постоянно не удаётся, и письма не отправляются. Есть ли какое-то обходное решение или можно использовать другой порт?

1 лайк

Это альтернативный ответ по адресу электронной почты, который вы настроили?

Порт 587 — это тот, который я использую для подключения к smtp.eu.mailgun.org

после создания тикета в службу поддержки Mailgun для получения разрешения

Вот что у меня в настройках сервера.

Понял, значит, вы хотите использовать Office 365 для вашего корневого домена, а транзакционную почту Discourse настроить через CNAME и TXT-записи, а почтовый приёмник — через MX-запись на поддомене?

Да, потому что моя почта настроена на 365

Я думаю, что причина проблемы в том, что вы используете Office 365 для транзакционных писем. Возможно, вам стоит воспользоваться сервисом транзакционной почты, например Mailgun или Brevo — оба хорошо работают с Discourse без особых проблем.

1 лайк

Я могу помочь вам с описанными настройками. На данный момент вы не сможете отправлять или получать письма от Discourse, используя свои подписки Office 365.

Какого масштаба форум вы планируете? Возможно, вам хватит бесплатного плана (Discourse/транзакционная рассылка).

Я настроил параметры SMTP с использованием Brevo и использовал порт 587, но получаю ту же ошибку. Пожалуйста, помогите, я не уверен, где я ошибаюсь.

Хм… а что насчёт смены порта на 2525?

1 лайк

Вам удалось заставить это работать?

При загрузке файла резервной копии невозможно выбрать скачанный файл резервной копии — он отображается серым цветом и не может быть выбран. Файл имеет расширение .tar.gz.

Является ли загруженный файл, из которого вы пытаетесь восстановить данные, недавней версией примечания Discourse?

Меняли ли вы имя файла? Если имя не совпадает с тем, которое было присвоено при создании резервной копии, это не сработает.

1 лайк