Мне потребовалось вечность, чтобы разобраться, как сделать всё это, поэтому я решил создать это руководство, чтобы облегчить задачу другим. Такой способ обслуживания изображений должен ускорить загрузку вашего сайта. Моя настройка Discourse объединяет DigitalOcean Droplet, BackBlaze B2 S3, BunnyCDN и бесплатную версию Cloudflare.
Я выбрал эти сервисы после небольшого исследования надёжности, цен и бенчмарков. Они казались мне наилучшими вариантами. Cloudflare помогает с безопасностью, но, насколько я понимаю, немного замедляет работу сайта, поэтому вам стоит изучить этот вопрос. У Backblaze есть партнёрства как с Cloudflare, так и с Bunny, которые позволяют передавать данные бесплатно.
Хотя Cloudflare называют CDN, он работает не как обычные CDN, и, вероятно, его одного будет недостаточно для настройки S3 с Discourse. Возможно, вам понадобится другой провайдер CDN; BunnyCDN отлично работает у меня. Если кто-то успешно сделал это только с Cloudflare, дайте мне знать, как ![]()
Как настроить загрузку на S3:
Сначала зарегистрируйтесь в Backblaze, создайте бакеты и внесите данные в настройки Discourse:
Затем зарегистрируйтесь в BunnyCDN и следуйте этому руководству:
bunny.net - The Global Edge Platform that truly Hops (реферальная ссылка, я получаю 20 долларов кредита на счёт)
После создания зоны pull в BunnyCDN вам нужно получить правильный URL для вставки в настройки администратора Discourse для параметра «s3 cdn url». Перейдите в панель управления bunnycdn → pull zones → manage pull zones → нажмите на вашу зону → скопируйте URL рядом с «host name».
URL должен выглядеть примерно так: example.b-cdn.net, но обязательно добавьте впереди https://, как здесь: https://example.b-cdn.net.
Сохраните изменения в разделе настроек администратора Discourse.
Нажмите Ctrl+F5 дважды в браузере на вашем сайте Discourse.
Проведите тест, загрузив изображение в текстовый редактор Discourse. Проверьте элемент тестового изображения или просмотрите исходный код изображения, чтобы убедиться, что всё работает. URL должен отличаться от вашего обычного домена, например: example.b-cdn.net / имя_файла.
Теперь при каждой загрузке изображения оно будет сохраняться в вашем бакете Backblaze и не занимать место на вашем DigitalOcean Droplet :stuck_out_tongue
Резервное копирование загрузок на S3
Если вы хотите настроить резервное копирование Discourse в ваш бакет Backblaze, сделайте следующее:
В руководстве, которое я опубликовал выше в этой теме, обратите внимание на объяснение необходимости двух отдельных бакетов. Один бакет публичный — это бакет загрузок для пользователей, загружающих изображения на ваш форум. Второй бакет приватный — это бакет для резервных копий. Важно создавать автоматические резервные копии Discourse на случай сбоев, чтобы вы могли загрузить резервную копию и исправить проблему.
В панели управления BunnyCDN создайте вторую зону pull. Первая зона pull была для загрузок, новая зона будет для резервных копий.
Панель управления bunnycdn → pull zones → add pull zone
Следуйте тому же руководству, на которое я ссылался ранее: «Как ускорить доставку файлов Backblaze B2 с помощью BunnyCDN», но на этот час свяжите новую зону pull с бакетом резервных копий вместо бакета загрузок.
Я рекомендую использовать тариф «high volume tier 5$/TB» на странице создания зоны pull BunnyCDN; думаю, для резервных копий не нужен более дорогой и быстрый тариф «standard tier 10$/TB», который я использовал для бакета загрузок.
Настройте параметры резервного копирования в разделе настроек администратора Discourse. Параметр «backup location» должен быть установлен в S3, а «s3 endpoint» должен указывать на ваш Backblaze, например:
s3.us-west-002.backblazeb2.com
Нажмите Ctrl+F5 дважды на вашем сайте, чтобы очистить кэш.
Запустите резервное копирование и дождитесь его завершения. Затем подождите 5 минут и проверьте папку резервных копий в Backblaze — там должен появиться новый файл.
Миграция старых изображений:
Этот шаг необязателен, но рекомендуется, особенно если у вас мало свободного места на сервере. Итак, вы настроили всё для новых загрузок изображений, но старые изображения также можно перенести в ваши бакеты. Чтобы этот процесс работал, выполните следующие действия:
Настройка CDN Cloudflare
Этот шаг необязателен, поскольку у Backblaze есть партнёрство, делающее передачу данных в Bunny бесплатной. Однако для дополнительной безопасности и других функций вы можете направить данные сначала через Cloudflare, а затем настроить Bunny для извлечения данных оттуда, где Cloudflare их размещает.
https://help.backblaze.com/hc/en-us/articles/217666928-Using-Backblaze-B2-with-the-Cloudflare-CDN


