Backup discourse from the command line

:bookmark: This guide covers how to back up and restore your Discourse site using command line tools, specifically designed for self-hosted environments.

:person_raising_hand: Required user level: Administrator

:information_source: You can use the below placeholders to automatically fill out the command line prompts in this guide:

Backing up

To create a backup of your Discourse site, follow these steps:

  1. Enter the container:
./launcher enter app
  1. Run the backup:
discourse backup
exit

This will print out the final filename of your backup. Download the backup and container configuration (if needed) to your local machine:

scp =USER=@=HOST=:/var/discourse/shared/standalone/backups/default/=FILENAME= .
scp =USER=@=HOST=:/var/discourse/containers/app.yml .

Restoring

To restore a Discourse backup, follow these steps:

  1. Install a Discourse site on the server you are restoring to.

If you’re testing this procedure multiple times, you can wipe the data on your test server.

Wipe Discourse data (optional)
./launcher stop app
./launcher destroy app
rm -r /var/discourse/shared/standalone/
mkdir -p /var/discourse/shared/standalone/backups/default/

  1. Upload the backup file:
scp =FILENAME= =USER=@=HOST=:/var/discourse/shared/standalone/backups/default/
  1. Enter the container and start the restore:
./launcher enter app
discourse enable_restore
discourse restore =FILENAME=

If you happen to forget what the filename was, run the “discourse restore” command by itself to get a list of available backup files.

:information_source: For a two-container setup, use ./launcher enter web_only and replace standalone with web-only in the path to backups.

For additional information about restoring Discourse backups, see Restore a backup from the command line.

40 лайков

Где я должен выполнить эту команду? В терминале моего облачного сервера или на локальной машине?
В любом случае я получаю ошибку «Permission denied».

На вашем локальном компьютере.

Используете ли вы SSH-ключ для подключения? Ошибка связана с этим.

Тогда команда должна выглядеть так:

scp -i /path_to_your_key/your_key.pem root@147.43.15.199:/var/discourse/shared/standalone/backups/default/discourse-2024-12-25-033740-v20241211222608.tar.gz .

У меня есть сценарий, в котором я хочу перенести установку Discourse на совершенно новый сервер.
Мой план был следующим:

  1. Создать новую пустую установку Discourse
  2. Сделать резервную копию старого Discourse, передать её на новый сервер через scp и восстановить
  3. Скопировать все данные из S3 (изображения и т. д.) в новый аккаунт S3

Процесс восстановления проходит успешно, пока не начинается поиск S3, после чего возникает ошибка доступа. Я полагаю, что система пытается обратиться к тому же имени бакета S3, которое использовалось в старом Discourse, но такого бакета на новом сервере нет, и я не могу его создать.

Есть ли рекомендуемое решение?

Я думал попробовать изменить имя бакета S3 в старом Discourse (перед созданием резервной копии), тогда при восстановлении система будет ожидать новый бакет. Но я боюсь, что произойдёт со старым Discourse, если я просто переключу его на несуществующий бакет.

Существует скрытая настройка, которая загружает файлы S3 и добавляет их в резервную копию.

Вам нужно настроить S3 в файле yml, как описано в Настройка провайдера объектного хранилища, совместимого с S3, для загрузок.

Затем при восстановлении резервной копии загрузка будет отправлена в новый бакет.

1 лайк

Вы так и не решили эту проблему?

Вам необходимо настроить S3 в переменных окружения, как описано в настройке провайдера объектного хранилища, совместимого с S3, для загрузки файлов.

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

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

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

Я всегда собираю заново через командную строку, но сначала делаю резервную копию через сайт. На этот раз я забыл сделать резервную копию! Думаю, использование командной строки для обоих процессов может мне помочь :slight_smile: Удачи мне!

Скрипт резервного копирования вывел:

Завершено!
[УСПЕХ]
Резервная копия создана.
Файл вывода находится по адресу: /var/www/discourse/public/backups/default/FILENAME.tar.gz

Для начала я попытался скачать его по указанному пути, но он оказался неверным. Я нашёл файл в другом месте и только после этого заметил, что команды в этой теме указаны верно…