Та же проблема у нас. У нас есть JS-файлы, которые работают в нашем собственном программном обеспечении, и ничего, что могло бы когда-либо выполняться в браузере.
Нам удалось исправить проблему с загрузкой в Discourse, перенеся все загрузки в бакет S3 и установив параметр s3_use_cdn_url_for_all_uploads в значение true. Это фактически обходит контроллер коротких ссылок, который, похоже, является главным препятствием для JS-файлов.
Подробности (от моего ИИ, который провёл меня через этот процесс):
- Настройка совместимого с S3 хранилища (например, Cloudflare R2)
Discourse не может безопасно отдавать файлы .js с локального диска. Переместите их в бакет.
-
Бакет: Создайте приватный бакет (например,
my-discourse-bucket). -
Ключи API: Сгенерируйте ключ доступа и секретный ключ.
2. Настройка пользовательского домена CDN
В Cloudflare (или у вашего провайдера) подключите пользовательский домен к вашему бакету (например, cdn.example.com). Это гарантирует, что файлы будут отдаваться как статические ресурсы по прямым ссылкам, обходя «страж безопасности» Discourse.
3. Обновление настроек Discourse
В Администрирование → Настройки настройте детали вашего S3. Крайне важно включить следующие параметры, чтобы Discourse не пытался «подписывать» URL временными заголовками, которые могут нарушить работу:
-
s3_use_cdn_url_for_all_uploads: Отметьте этот флажок (это самый важный шаг). -
s3_cdn_url: Установите значениеhttps://cdn.example.com. -
s3_region: Используйтеus-east-1(для совместимости с R2).
4. Миграция существующих загрузок (опционально)
Примечание: Это НЕ сработало у нас по неизвестным причинам.
Чтобы исправить старые ссылки в существующих сообщениях, войдите в контейнер и выполните:
Bash
# Внутри /var/discourse
./launcher enter app
rake uploads:migrate_to_s3
rake posts:rebake
Надеюсь, это кому-то поможет.