Привет,
Я немного застрял и растерян, надеюсь, кто-нибудь сможет помочь.
Сначала у меня была установка Bitnami, но я понял, сколько проблем это создаст в будущем, поэтому переустановил с помощью стандартной установки.
Мне удалось восстановить мою резервную копию, и всё работало отлично, даже несмотря на переход с версии 2.8 на бета-версию 2.9.
Я снова протестировал резервную копию в своём Google Bucket, и она работала как по маслу.
Обратите внимание: вся конфигурация S3 была выполнена через веб-интерфейс, а не через переменные окружения.
По причинам, связанным с GDPR, я создал новый бакет для резервных копий в Европе (назовём его discourse-backup-eu). Теперь, когда я смог изменить переменную окружения, установил DISCOURSE_S3_ENDPOINT: https://storage.googleapis.com, пересобрал приложение, изменил имя бакета для резервных копий в веб-интерфейсе, снова запустил резервное копирование и с большим удовлетворением увидел, что файлы резервных копий появились в моём новом бакете в Европе.
Теперь я хотел, чтобы загрузки файлов перешли в другой бакет, чтобы не заполнять диск моей виртуальной машины.
Поэтому я создал новый бакет (назовём его discourse-uploads), сделал его публичным и добавил роль Storage Legacy Bucket Owner для моего сервисного аккаунта в этом новом бакете.
Затем добавил правило в мой существующий балансировщик нагрузки (назовём его https://www.example.com), чтобы использовать бэкенд-бакет с включённым Cloud CDN, как указано здесь. Правило: /discourse-uploads/* указывает на бакет discourse-uploads.
Я протестировал свой CDN с файлом test.jpg в корне бакета, но не смог получить к нему доступ по адресу https://www.example.com/discourse-uploads/test.jpg. Пришлось создать подпапку с именем discourse-uploads внутри бакета, переместить туда test.jpg, и теперь я вижу свою тестовую картинку по адресу https://www.example.com/discourse-uploads/test.jpg.
В веб-интерфейсе я изменил имя тестового бакета в разделе “s3 upload bucket” (ранее я был вынужден указать его при настройке резервного копирования) на discourse-uploads, заполнил URL CDN значением https://www.example.com/discourse-uploads и включил опцию “enable s3 uploads”.
С этого момента, если я пытался загрузить изображение, в окне браузера появлялось всплывающее сообщение “Invalid Argument” (ошибка 422 с JSON-содержимым, которое в целом говорило то же самое).
Я попробовал пересобрать все сообщения, но это не помогло — ошибка осталась.
Тогда я решил попробовать использовать переменные окружения вместо веб-интерфейса.
И использовал следующую конфигурацию:
DISCOURSE_USE_S3: true
DISCOURSE_S3_REGION: whatever
DISCOURSE_S3_INSTALL_CORS_RULE: false
FORCE_S3_UPLOADS: 1
DISCOURSE_S3_ENDPOINT: https://storage.googleapis.com
DISCOURSE_S3_ACCESS_KEY_ID: MY_KEY_ID
DISCOURSE_S3_SECRET_ACCESS_KEY: MY_ACCESS_KEY
DISCOURSE_S3_CDN_URL: https://www.example.com/discourse-uploads
DISCOURSE_S3_BUCKET: discourse-uploads/discourse-uploads
DISCOURSE_S3_BACKUP_BUCKET: discourse-backup-eu
DISCOURSE_BACKUP_LOCATION: s3
Я пересобрал приложение.
Затем я больше не мог открыть Discourse, потому что ни один из ресурсов не был загружен в бакет, и получал ошибку 404:
https://www.example.com/discourse-uploads/assets/admin-31467dc73634cbfb81799737c43df0e2939307d893ef32713f1d0770bcb3532c.br.js
Я думал, что попытка загружать напрямую в подпапку бакета — это слишком рискованно, хотя автор оригинального поста утверждает, что это работает (по крайней мере, для бакета резервных копий).
Изменил переменную окружения на:
DISCOURSE_S3_BUCKET: discourse-uploads
(Думая, что позже я смогу поиграть с правилом хоста, чтобы избежать загрузки в подпапку)
И пересобрал приложение, чтобы проверить, загружается ли что-нибудь, но ничего не попало в бакет, и Discourse по-прежнему не открывается из-за ошибок 404.
Так что мои вопросы следующие:
- Конфликтуют ли веб-интерфейс и переменные окружения?
- Когда должны загружаться ресурсы в бакет?
- Как я могу отладить эту проблему? Я не вижу никаких ошибок в логах.
- Возможно ли указать подпапку бакета в конфигурации?
- Когда это заработает, будут ли перенесены ранее загруженные изображения в бакет? Если я пересоберу сообщения, как будут выглядеть URL ранее загруженных изображений?
Спасибо!