Привет, команда 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_...).
Принятые шаги по отладке:
-
Попытка с 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.
-
-
Критический тест — переключение на 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, которая может вызывать это?
Спасибо за ваше время и любые идеи, которые вы можете предоставить.
