Устранение проблем с загрузкой в S3: сайт зависает после пересборки, JS-активы не загружаются с ошибкой net::ERR... и в R2, и в GCS

Привет, команда Discourse и сообщество,

Я пытаюсь настроить свой собственный экземпляр Discourse для использования внешнего хранилища объектов, совместимого с S3, но столкнулся с очень стойкой и необычной проблемой. Буду очень признателен за любую помощь.

Моя среда:

  • Версия Discourse: Стандартная установка Docker, последняя tests-passed.

  • Хост: [ВАШ ПРОВАЙДЕР VPS И ОС] (Пожалуйста, укажите здесь вашего провайдера и систему)

  • Обратный прокси: Caddy

Цель: Моя цель — перенести все загрузки (загрузки пользователей и ресурсы сайта) с локального хранилища на внешнего провайдера.

Краткое описание проблемы: После настройки app.yml для S3 (либо Cloudflare R2, либо Google Cloud Storage) и запуска ./launcher rebuild app сайт зависает на начальном экране загрузки (синий спиннер). Инструменты разработчика браузера показывают, что большинство основных JavaScript-ресурсов не загружаются с внешнего URL CDN с общей сетевой ошибкой (net::ERR_...).

Принятые шаги по отладке:

  1. Попытка с Cloudflare R2:

    • Я настроил бакет Cloudflare R2, создал токен API (чтение и запись объектов) и подключил пользовательский домен (s3.ryzelan.sbs) через Cloudflare DNS.

    • Я настроил app.yml с учетными данными R2, пользовательским доменом в качестве конечной точки/URL CDN, а также установил DISCOURSE_FORCE_HTTPS: true и DISCOURSE_S3_FORCE_PATH_STYLE: true.

  2. Критический тест — переключение на Google Cloud Storage:

    • Чтобы исключить проблему, специфичную для Cloudflare, я откатил все изменения и выполнил чистую настройку с использованием Google Cloud Storage с ключами совместимости S3.

    • После пересборки с конфигурацией GCS я столкнулся с точно таким же паттерном сбоя загрузки JavaScript, как и с R2.

Текущий статус:

  • Процесс ./launcher rebuild app завершается без каких-либо ошибок, отображаемых в терминале.

  • Контейнер app работает корректно после пересборки (проверено через docker ps).

  • Команда ./launcher logs app не показывает ошибок; все внутренние сервисы (unicorn, redis, postgres) работают нормально.

  • Проблема, по-видимому, заключается в сетевом сбое при попытке браузера загрузить JS-ресурсы с настроенного внешнего URL CDN, и это происходит независимо от используемого провайдера (R2 или GCS).

Вот финальный блок конфигурации app.yml, который мы использовали для R2 (для GCS он был аналогичен):

— Начало конфигурации Cloudflare R2 S3 (Финальная версия) —

DISCOURSE_FORCE_HTTPS: true
DISCOURSE_USE_S3: true
DISCOURSE_S3_REGION: “us-east-1”
DISCOURSE_S3_ENDPOINT: “https://s3.ryzelan.sbs
DISCOURSE_S3_CDN_URL: “https://s3.ryzelan.sbs
DISCOURSE_S3_ACCESS_KEY_ID: “REDACTED”
DISCOURSE_S3_SECRET_ACCESS_KEY: “REDACTED”
DISCOURSE_S3_BUCKET: “ryzelan-discourse”
DISCOURSE_S3_FORCE_PATH_STYLE: true

— Конец конфигурации Cloudflare R2 S3 —

Мой вопрос: Что может стать причиной того, что свежая пересборка Discourse последовательно не может загрузить свои собственные ресурсы с двух разных крупных облачных провайдеров из-за сетевой ошибки? Существует ли известная проблема с определенными сетевыми средами VPS, сетью Docker или Caddy, которая может вызывать это?

Спасибо за ваше время и любые идеи, которые вы можете предоставить.

Вы добавили шаг для загрузки этих ассетов в S3?

Если этого не сделать, ни один из ассетов не будет загружен в S3, и сайт не загрузится.

@Ryze_Chen, удалось ли вам решить вашу проблему?