Я пытаюсь перенести свой экземпляр Discourse на другой сервер.
Я попробовал использовать опцию восстановления в админ-панели на целевом сервере, но она постоянно завершалась с ошибкой:
[2022-04-23 21:59:00] Переназначение загрузок...
[2022-04-23 21:59:00] Восстановление загрузок, это может занять некоторое время...
[2022-04-23 21:59:00] ИСКЛЮЧЕНИЕ: Aws::S3::Errors::NoSuchBucket
В конфигурации app.yml используются абсолютно одинаковые настройки как для существующего экземпляра Discourse, так и для нового сервера, на который я пытаюсь перенести данные.
У меня ничего не получилось, поэтому я решил попробовать руководство по ссылке: Restore a backup from the command line
При использовании той же конфигурации app.yml я получил ту же ошибку.
Тогда я решил закомментировать все настройки, связанные с S3, и это, похоже, помогло:
Переподключение к базе данных...
Перезагрузка настроек сайта...
Отключение исходящей почты для не-сотрудников...
Отключение режима только для чтения...
Очистка кэша категорий...
Перезагрузка переводов...
Переназначение загрузок...
Переназначение '//bucket.nyc3.digitaloceanspaces.com/' в '/uploads/default/'
optimized_images=480
uploads=35
user_histories=13
Переназначение 'https://cdnurl.com/' в 'https://forumurl.com/uploads/default/'
post_revisions=2
posts=4
topic_links=4
Переназначение 'cdnurl.com' в 'forumurl.com'
topic_links=4
Восстановление загрузок, это может занять некоторое время...
Сообщения будут пересобраны фоновой задачей в sidekiq. Вы увидите отсутствующие изображения, пока этот процесс не завершится.
Вы можете ускорить процесс, вручную запустив команду "rake posts:rebake_uncooked_posts"
Очистка кэша эмодзи...
Очистка кэша темы...
Выполнение after_restore_hook...
Очистка временных файлов...
Удаление функций из схемы discourse_functions...
Удаление временной директории '/var/www/discourse/tmp/restores/default/2022-04-23-234852'...
Возобновление работы sidekiq...
Отметка восстановления как завершенного...
Уведомление 'system' о завершении восстановления...
Готово!
[SUCCESS]
Восстановление завершено.
После успешного восстановления я решил раскомментировать все настройки S3 и выполнить команду ./launcher rebuild app.
Затем я зашел в свой экземпляр Discourse и заметил, что все загрузки отсутствуют (логотип, аватарки и т.д.).
После этого я выполнил:
./launcher enter app
rake posts:rebake (ошибок нет, сообщено о пересборке 60 с лишним сообщений)
rake posts:rebake_uncooked_posts (сообщено о пересборке 0 сообщений)
Даже после этого все загрузки все равно не работают и возвращают ошибку 404 (или в случае с аватарками отображается аватарка по умолчанию).
Судя по логу выше, во время восстановления URL действительно были переназначены, так как система считает, что S3 больше не используется. Но есть ли способ переназначить их обратно на исходные значения после завершения восстановления?
Или, возможно, есть способ заставить всё работать с настройками S3 в app.yml? Я не понимаю, почему система утверждает, что бакет не существует.
Для справки, вот как выглядит конфигурация S3 в моем файле app.yml:
DISCOURSE_USE_S3: true
DISCOURSE_S3_REGION: nyc3
DISCOURSE_S3_ENDPOINT: https://nyc3.digitaloceanspaces.com
DISCOURSE_S3_ACCESS_KEY_ID: KEY
DISCOURSE_S3_SECRET_ACCESS_KEY: ACCESS_KEY
DISCOURSE_S3_CDN_URL: https://forumcdn.com
DISCOURSE_S3_BUCKET: upload-bucket
DISCOURSE_S3_BACKUP_BUCKET: backup-bucket
DISCOURSE_BACKUP_LOCATION: s3
Бакет, используемый для загрузок в существующем экземпляре Discourse, и бакет на новом экземпляре — один и тот же, поэтому я ожидал, что пересборка сработает и переназначит URL.
Не уверен, где я ошибся, но надеюсь, кто-то сможет указать мне правильное направление.
Спасибо
