Enable a CDN for your Discourse

То есть файлы не будут синхронизироваться с моей системой, CloudFront просто их кэширует. Я прав?

3 лайка

Да, это верно. CDN получает с вашего сайта только те ресурсы, которые запрашиваются.

Discourse также отправляет в S3 статические ресурсы (например, CSS и JavaScript), а также загруженные файлы.

4 лайка

Возможно ли использовать правила Cloudflare для кэширования статических ресурсов, таких как CSS и JavaScript?

2 лайка

Да, мы используем его именно так, и это работает отлично. Только будьте очень внимательны и отключите любые оптимизации JavaScript. Нашу настройку можно посмотреть здесь:

4 лайка

Спасибо за ответ.

Я уже добавил второе и третье правило, но не понял первое. Для чего нужен редирект 301??

2 лайка

Вам это не нужно; это есть в описании.

3 лайка

Спасибо за ответ. А как насчёт статических ресурсов, таких как CSS и JavaScript? Возможно ли создать правило для CSS и JavaScript?

2 лайка

Я это не тестировал. Не уверен, что это сработает. Как минимум, вам придется очищать кэш Cloudflare после каждой пересборки.

2 лайка

Меня устраивает очистка кэша после каждой пересборки. Что ещё может пойти не так, если я установлю правило кэшировать всё в https://myforum.com/assets/? Отразится ли это каким-либо образом на входе пользователя в систему? Если вы дадите добро, я протестирую это в течение недели и отчитаюсь. У меня ещё есть одно неиспользованное правило.

2 лайка

Только для уточнения: верно ли, что мы не используем это поле (а также URL CDN), если используем CDN Cloudflare?

Я настроил cloudflare.template в app.yml согласно документации.

Требуется ли какая-либо дополнительная конфигурация при использовании Cloudflare?

1 лайк

Я успешно использовал StackPath в качестве CDN. Всё работает как ожидалось!

2 лайка

Актуально ли это и сейчас?

Из 2019 года:

Кажется, нам нужно быть особенно осторожными, и мы теряем часть преимуществ Cloudflare.

Из 2020 года:

Из 2021 года:

Так что, надежен ли и эффективен ли Cloudflare в связке с Discourse сегодня? Уменьшает ли отключение функции “Rocket Loader” её преимущества?

Я думал о переходе с Stackpath на Bunny CDN, но владелец домена моего форума и бывший администратор имеет корпоративный аккаунт Cloudflare (кстати, он владелец tinyURL), через который он может бесплатно добавить этот домен (Looking for a decrease in the forum fees in the future - #6 by Gilby - Forum Feedback - Unicyclist.com).

Так что я задаюсь вопросом, правильно ли, безболезненно и эффективно ли использовать Cloudflare вместо Bunny CDN.

2 лайка

Если ваш сайт насыщен изображениями, то увеличение объёма напрямую подключённых SSD-дисков обойдётся значительно дороже, чем эквивалентные расходы на S3.

Для экономичного использования S3 необходим CDN, так как вы платите за входящий и исходящий трафик, но даже с этим оно всё равно значительно дешевле, чем просто добавление дополнительных высокоскоростных SSD. CloudFlare может выступать в качестве фронтенда для S3, но надёжно использовать можно только функцию кэширования ресурсов. Размещение CloudFlare между клиентом и сервером приложения также увеличит количество переходов и приведёт к росту задержек приложения. Это не панацея.

2 лайка

У нас не слишком много изображений. Цель использования CDN — обеспечить быструю загрузку ресурсов для всех пользователей, поскольку наше сообщество международное (в основном США и Европа).

Мы используем S3, но только для хранения резервных копий.

1 лайк

Быстрый вопрос. Обязательна ли пересборка (rebake) после смены CDN? Или только если URL CDN отличается? Или она вообще не нужна?


edit: или можно просто заменить старые URL в обработанных постах на новые с помощью скрипта на Ruby on Rails?

Например, если у меня есть пост, содержащий:

<img class="ytp-thumbnail-image"
src="https://f5i4i8k5.stackpathcdn.com/uploads/default/original/3X/f/3/f3bc5ab19cc0394f33fd008e90ca06e081886a0b.jpeg"
title="Riding a unicycle part 76: Sullivan Canyon - Los Angeles"
width="480"
height="360"
loading="lazy"
style="aspect-ratio: 480 / 360;">

Могу ли я выполнить поиск и замену строк с f5i4i8k5.stackpathcdn.com на newcdn.unicyclist.com, не сломав ничего? Это выглядит безопасно, но я хочу быть уверенным в своих действиях.

Я не против пересобрать все свои посты, но проблема, с которой я столкнулся в первый раз, заключалась в том, что у меня тысячи встроенных видео с YouTube, и мой IP был заблокирован YouTube во время пересборки из-за слишком большого количества запросов к YouTube.

Поэтому, если есть безопасная альтернатива пересборке всех постов, чтобы избежать той же раздражающей проблемы, я бы предпочел выбрать альтернативу…

3 лайка

Существует задача rake, которая выполнит замену. Я считаю, что её запуск безопасен и является хорошей идеей. Замена строки во всех постах — это то, что вам нужно, на мой взгляд.

2 лайка

Привет, Джей,

Я не уверен насчет использования задачи rake.

URL-адреса CDN, похоже, содержатся в полях cooked, а не в полях raw (если только сообщение не было отправлено по электронной почте).

Насколько я понимаю, post:remap ищет строку только в поле raw.

Если замена URL-адресов CDN в обоих полях raw и cooked безопасна, полагаю, мне стоит написать собственный скрипт на Rails?

2 лайка

Вы правы. Есть ещё одна . . . вещь . . ., которая заменит строку во всех полях базы данных. Это именно то, что вы ищете. Извините, но я не могу найти её прямо сейчас. Есть несколько тем о переносе с одного S3, но, похоже, там нет howto.

2 лайка

Спасибо за эту подсказку!

Думаю, это оно?

DbHelper.remap('from', 'to')

Найдено на Rebaking old posts won't pull new S3 CDN URL after S3 bucket rename - #10 by Brad_Wood

И использовано здесь:

Если это безопасная альтернатива пересборке при смене CDN-сервиса, то гайд по этому поводу (howto) был бы действительно полезен.

3 лайка

О, здорово. Спасибо, что сообщили. Я думал, что вам будет достаточно найти это самостоятельно. Рад, что вы справились.

3 лайка