I did a backup of my site before I upgraded to the latest version of the discourse however I can’t even access my site any more even though the upgrade appears to be successful as no error is displayed. Is there anyway that I can restore my site from the backup that I created earlier from terminal app as I can’t access the site?
Is it possible?
If yes, where do discourse save or store the backups that I executed from the admin panel?
Is there any guide on how to restore the site from backup?
This seems like a handy thing to be able to do since if you screw up configuring SSO you can’t get back into your site. I spent a week one day trying to get SSO configured, and now that it is configured correctly it seems that my account on the SSO (which I don’t control) is gone, so I can’t get in.
So, script/discourse restore fails because thor isn’t installed.
gem install thor fixes that, but then I’m still denied because:
URGENT: FATAL: Peer authentication failed for user "discourse"
Solving my immediate problem, I suppose I could turn off SSO from the Rails console. . .
edit: to disable SSO from the rails console:
cd /var/discourse
./launcher enter app
rails c
SiteSetting.enable_sso=false
exit
exit
The goal was to automate it without any entering container with the launcher.
Imagine your instance got lost for any reason. The only files you stored in git was your containers/app.yml and luckily you have a daily tarball backup.
Я не был уверен, что это правильный способ доступа к файлу «вне приложения изнутри приложения», но, похоже, он нашел файл резервной копии и начал восстановление. Восстановление завершилось с неоднозначными сообщениями:
Завершено!
[ОШИБКА]
Восстановление выполнено.
Я попытался снова получить доступ к своему форуму, но он по-прежнему не работает, так что, похоже, восстановление не удалось?
Это невозможно. Вам нужно скопировать файл резервной копии в правильную директорию. Пожалуйста, следуйте инструкциям по адресу Restore a backup from the command line, если вы хотите восстановить резервную копию из командной строки.
Вот рабочий скрипт, который я использую для восстановления продакшн-окружения в тестовую и dev-среду:
#!/bin/sh
set +x
set -e
# Этот скрипт восстанавливает последнюю резервную копию с продакшена в тестовую/dev-среду
CONTAINER_NAME=app-test
LATEST_BACKUP=$(mc ls s3/backup-prod/default | tail -n 1 | cut -d ' ' -f 5)
mc cp s3/backup-prod/default/${LATEST_BACKUP} /tmp
# убедитесь, что существует /var/www/discourse/public/backups/default/ с правильными правами владельца
docker exec -i ${CONTAINER_NAME} sh -c "mkdir -p /var/www/discourse/public/backups/default/ && chown -R discourse:www-data /var/www/discourse/public/backups/default/"
cat /tmp/${LATEST_BACKUP} | docker exec -i ${CONTAINER_NAME} sh -c "cat - > /var/www/discourse/public/backups/default/${LATEST_BACKUP}"
docker exec -i ${CONTAINER_NAME} sh -x << EOF
discourse enable_restore
rails runner "SiteSetting.set('backup_location', 'local')"
discourse restore ${LATEST_BACKUP}
discourse disable_restore
rm -f /var/www/discourse/public/backups/default/${LATEST_BACKUP}
EOF
# пересборка контейнера
cd /var/lib/discourse/discourse_docker
stdbuf -oL -eL ./launcher rebuild ${CONTAINER_NAME} 2>&1 | sed 's/DISCOURSE_google_oauth2_client_secret=[^ ]*/DISCOURSE_google_oauth2_client_secret=***REDACTED***/g'
cd -
rm -f /tmp/${LATEST_BACKUP}
Строка rails runner "SiteSetting.set('backup_location', 'local')" отсутствовала, что мешало восстановлению из архива резервной копии.
Обратите внимание, что вывод скрипта launcher пришлось засекретить, так как он мог бы раскрыть секреты, особенно при выполнении в рамках видимой задачи CI/CD.
Рад, что у вас есть решение. Вот несколько советов, которые облегчат задачу другим.
Если вы используете DISCOURSE_ALLOW_RESTORE: 'true' в вашем файле app.yml, вы можете пропустить включение функции восстановления. (Аналогично, вы можете разместить данные для аутентификации Google в переменных окружения (ENV) и вообще не хранить их в базе данных.)
Если у вас есть среды staging и production, использующие один и тот же бакет S3, вы можете восстановить последнюю резервную копию с помощью команды:
Если вам нужно прочитать её локально, вы также можете переопределить настройку сайта через переменную окружения (ENV), и система прочитает последнюю резервную копию из локального хранилища.