Разработка Cloudflare R2 всё ещё не ведётся? Мне всё это показалось перспективным.
Вы прочитали примечание об этом выше? Оно несовместимо с gzip-файлами, и не было никаких указаний на то, что планируется их изменение. Возможно, оно работает со всем, кроме загрузки?
Вы пробовали это? Получилось?
Да, я читал это, но это было два года назад, и некоторые вещи могли измениться.
Я хотел попробовать это сегодня, активировал R2 и добавил сайт. Я просто не уверен, как настроить это на этапе Discourse, потому что пока не могу найти, где взять ключи или секретные коды от Cloudflare. Я экспериментирую, может быть, какая-то деталь поможет мне ![]()
То же самое
мой бакет активен, но, возможно, в Discourse пока нет поддержки, но я на это надеюсь.
На этой странице описывается, как получить ключи: Authentication · Cloudflare R2 docs
Я перепробовал всё, но всегда получаю эту ошибку:
Aws::S3::Errors::BadRequest
Интересно, чего мне не хватает?
Когда я загружаю изображение через панель R2, оно открывается по специальному CDN-URL. Проблема в том, что изображение не загружается на сайте. Я настроил CORS и разрешил все методы.
[
{
"AllowedOrigins": [
"https://SITENAME.com"
],
"AllowedMethods": [
"GET",
"POST",
"HEAD",
"DELETE",
"PUT"
]
}
]
Есть какие-то идеи?
Это возможно, но два года назад Cloudflare сообщала, что маловероятно, что это изменится, поэтому тому, кто действительно увлечён R2, придётся разобраться. Тем не менее, похоже, что это может работать для всего, кроме файлов gz, что, как я полагаю, означает только резервные копии.
Но отказ от резервных копий S3 кажется слишком большой ценой.
Звучит так, будто у вас неверный ключ или неправильная конечная точка.
Честно говоря, я сейчас использую Cloudflare на своём сайте Discourse, и в целом удобно иметь всё в одном месте. Поэтому работа с Amazon может быть немного утомительной, когда у вас есть R2. Я пробовал установить Amazon S3, но по какой-то причине файлы стилей не загружались. (ладно, попробую ещё раз), но было бы хорошо не игнорировать Cloudflare, особенно когда используешь форум поддержки Cloudflare для Discourse ![]()
Обычно это происходит, когда вы не добавляете секцию, которая отправляет ресурсы в S3 (она также необходима для работы любого сервиса, похожего на S3, если вы установили переменную use_s3).
Так вы попробовали что-то ещё и это сработало? Что именно вы сделали? Можете ли вы описать это так же, как и другие в статье Настройка совместимого с S3 провайдера объектного хранилища для загрузок?
Работает ли это для резервных копий?
Я перепробовал всё, что мог. Пробовал экспериментальным путём, меняя настройки. Но каждый раз получаю эту ошибку, и при её анализе кажется, что изображение не загрузилось.
В кодах ошибок я тоже ничего не нашёл. Было бы здорово, если бы всё заработало: иметь почти всё в одной панели (Cloudflare) было бы очень удобно и эффективно.
Я пробовал это для резервного копирования, извините. Когда у меня не вышло, я снова обратился к Amazon. Буду очень рад, если кто-то добьётся здесь большего успеха, чем я ![]()
Я загрузил изображение через панель R2 и могу к нему получить доступ. Однако загрузить изображение через Discourse не удаётся — выводится указанная выше ошибка.
Значит, возможно, это работает не так, как указано в документации.
Или, возможно, я в какой-то мере должен извиниться перед вами. Мне действительно удалось заставить это работать, хотя у меня нет времени обещать, что я смогу написать инструкции, которые позволят вам заставить это работать.
DISCOURSE_USE_S3: true
DISCOURSE_S3_REGION: 'auto'
DISCOURSE_S3_ENDPOINT: https://=ACCOUNT_ID=.r2.cloudflarestorage.com
DISCOURSE_S3_ACCESS_KEY_ID: '=ACCESS_KEY_ID='
DISCOURSE_S3_SECRET_ACCESS_KEY: '=SECRET_ACCESS_KEY'
DISCOURSE_S3_CDN_URL: '=S3_CDN_URL='
DISCOURSE_CDN_URL: '=CDN_URL='
DISCOURSE_S3_BUCKET: '=BUCKET='
DISCOURSE_S3_BACKUP_BUCKET: '=BUCKET=/backups'
DISCOURSE_BACKUP_LOCATION: 's3'
Не забудьте блок, который выполняет задачу rake для загрузки файлов в S3.
Попробуйте это и посмотрите, сработает ли это для вас. Быстрое тестирование показало, что это работает для загрузки файлов, ресурсов и резервных копий. Так что, похоже, проблема с gzip-файлами больше не актуальна.
После исправления региона (auto) и последнего URL всё заработало. Однако возникла проблема: при повторном создании файлы стилей не загружаются, и, естественно, сайт не открывается. Но если открыть его только для загрузки, можно загружать изображения с сайта, и к ним можно получить доступ через URL CDN. Единственная проблема в том, что я хочу, чтобы файлы стилей обслуживались через CDN. Как нам это сделать? Я думаю, это наша единственная проблема.
Вам необходимо следовать инструкциям для загрузки ресурсов на S3:
Какую CDN вы использовали? Если это был Cloudflare, как вы его настроили?
after_assets_precompile:
- exec:
cd: $home
cmd:
- sudo -E -u discourse bundle exec rake s3:upload_assets
- sudo -E -u discourse bundle exec rake s3:expire_missing_assets
Я добавил это. При повторной компиляции все ссылки на сайте меняются на CDN-URL. Однако эти файлы стилей не загружаются в Cloudflare. Поэтому я просто добавил настройку региона загрузки в файл app.yml и скомпилировал его таким образом. Когда я активирую S3 через панель администратора, новые загружаемые изображения отправляются в Cloudflare R2, и доступ к ним предоставляется.
Единственная проблема заключается в том, что если я добавляю настройки S3 в файл app.yml до компиляции, то новые созданные файлы стилей, похоже, не загружаются. При этом URL и CDN-URL на сайте меняются.
CORS:
[
{
"AllowedOrigins": [
"https://domain.com"
],
"AllowedMethods": [
"GET",
"POST",
"PUT",
"HEAD",
"DELETE"
]
}
]
Может ли эта проблема быть связана с Argo? Однако изображения в настоящее время загружаются без каких-либо проблем.
Для отладки вы можете зайти в контейнер и попробовать запустить там задачи rake, чтобы посмотреть, что произойдет.
Вчера я потратил на это около 4 часов, поэтому боюсь, что моя бесплатная поддержка по этому проекту подходит к концу.
Насчет CORS ничего не знаю. Я бы разрешил всё отовсюду, чтобы убедиться, что проблема не в этом. На моем тестовом сайте я ничего не настраивал в отношении CORS.
Вы запускаете это в k8s?
Извините, что отнимаю ваше время. Если бы я мог помочь финансово, я бы это сделал. Я уважаю ваше время.
Я не знаю, что такое k8s. Я работаю на своём собственном сервере и активировал Argo. R2 также активен. Сейчас всё работает очень хорошо, но после новой компиляции файлы стилей (js, css и т.д.) не загружаются в R2. Позже я проведу необходимые тесты и добавлю их сюда. Если мне удастся решить проблему, я подробно объясню, как её найти или исправить.
Что такое Argo?
Если это стандартная установка, вы можете выполнить команду rake внутри контейнера:
./launcher enter app
rake ...
Вы уверены, что включаете часть USE_S3? (Думаю, да, поскольку именно это обеспечивает наличие ожидаемых активов на CDN).
Argo: Overview · Cloudflare Argo Smart Routing docs
Я добавил настройку USE_S3 перед компиляцией, пример ниже:
DISCOURSE_USE_S3: true
DISCOURSE_S3_REGION: 'auto'
DISCOURSE_S3_ENDPOINT: 'https://xxxxxxxxxxxxxxxxx.eu.r2.cloudflarestorage.com'
DISCOURSE_S3_ACCESS_KEY_ID: 'xxxxxxxxxxxxxxxxx'
DISCOURSE_S3_SECRET_ACCESS_KEY: 'xxxxxxxxxxxxxxxxx'
DISCOURSE_S3_CDN_URL: 'https://cdn.domain.com'
DISCOURSE_CDN_URL: 'https://cdn.domain.com'
DISCOURSE_S3_BUCKET: 'cloudflaredomain'
DISCOURSE_S3_BACKUP_BUCKET: 'cloudflaredomain/backups'
DISCOURSE_BACKUP_LOCATION: 's3'
После повторной компиляции все URL изменились, как и ожидалось, включая URL CDN. Единственная проблема в том, что эти активы не загружаются в R2. Я уже добавил эту настройку:
after_code:
- exec:
cd: $home/plugins
cmd:
- git clone https://github.com/discourse/docker_manager.git
after_assets_precompile:
- exec:
cd: $home
cmd:
- sudo -E -u discourse bundle exec rake s3:upload_assets
- sudo -E -u discourse bundle exec rake s3:expire_missing_assets
Вот начало файла app.yml:
templates:
#- "templates/postgres.template.yml"
- "templates/redis.template.yml"
- "templates/web.template.yml"
## Раскомментируйте следующую строку, чтобы включить слушатель IPv6
#- "templates/web.ipv6.template.yml"
#- "templates/web.ratelimited.template.yml"
## Раскомментируйте эти две строки, если хотите добавить Lets Encrypt (https)
# - "templates/web.ssl.template.yml"
# - "templates/web.letsencrypt.ssl.template.yml"
- "templates/cloudflare.template.yml"
## Какие TCP/IP-порты должен открывать этот контейнер?
## Если вы хотите, чтобы Discourse использовал один порт с другим веб-сервером, например Apache или nginx,
## см. https://meta.discourse.org/t/17247 для деталей
expose:
- "80:80" # http
- "443:443" # https
Теперь я попробую войти в контейнер и загрузить активы в S3.