Ого, хорошо. Это, скорее всего, ключевое доказательство, указывающее на другую проблему.
avatar_proxy в логах обычно означает, что Discourse отказывается отдавать аватар напрямую через CDN Cloudflare R2. Вместо этого Discourse агрессивно перехватывает запрос, скачивает изображение из R2 в локальную папку /tmp сервера, а затем с помощью Ruby отдаёт его браузеру. То есть, похоже, CDN полностью обходится, что и объясняет задержку в 3 секунды — я подозреваю, что сервер вручную загружает и отдаёт файл при каждом запросе ![]()
Discourse использует avatar_proxy в нескольких очень специфических сценариях, и обычно это настройка приватности или безопасности, которая заставляет сервер маскировать внешние URL.
Проверьте следующие настройки в админ-панели: Настройки сайта:
Найдите external system avatars url — если в этом поле что-то есть (например, /letter_avatar_proxy/v4/...), удалите всё, чтобы поле было пустым. Это должно остановить проксирование Discourse для аватаров по умолчанию. Также стоит проверить uploaded avatars allowed groups и убедиться, что там указано TL_0.
Возможно, стоит также перепроверить DISCOURSE_S3_CDN_URL, чтобы убедиться, что он указан верно, без лишнего слэша в конце или опечаток.
Перенастройка пользовательских аватаров:
Похоже, что в вашей базе данных всё ещё содержатся прямые URL-адреса бакета R2 вместо вашего нового CDN-URL. Поскольку они не совпадают, ваш форум, вероятно, проксирует их в целях безопасности.
Проверьте в консоли Rails, с чем именно борется Discourse:
./launcher enter app
rails c
Выберите имя пользователя с медленно загружающимся аватаром
u = User.find_by_username("the_selected_username")
u.user_avatar.custom_upload.url
Если вывод возвращает прямой URL бакета, значит предыдущая перенастройка не охватила всё (возможно, была упущена поддомен или схема).
Чтобы исправить это, подключитесь по SSH к серверу, снова зайдите в контейнер (не в rails) (./launcher enter app) и запустите инструмент перенастройки (снова, лол), чтобы заменить прямой URL на ваш CDN-URL:
discourse remap "https://<ваш-прямой-cloudflare-url>.r2.cloudflarestorage.com" "https://cdn.your-domain.com"
Затем запустите его второй раз, используя // вместо https://, на всякий случай.
Кстати, просто из любопытства: какой хостинг-провайдер вы используете? У меня такая же общая настройка, как у вас, и я ещё не сталкивался с этой проблемой. Поэтому мне также интересно узнать о вашей конфигурации, и я хочу попробовать воспроизвести это.