Настройка Amazon S3 от AWS для хранения и Cloudfront для CDN

,

Начало работы

Вам потребуется:

  1. Экземпляр Discourse с доступом к app.yml
  2. Аккаунт AWS

Стратегия именования

Множество мест, где можно допустить ошибки. Использование стратегии именования, которая имеет смысл для вас и, возможно, для других, поможет вам в устранении неполадок, особенно если вы настраиваете несколько экземпляров Discourse.

  • Пользователь IAM: ваш-пользователь-iam
  • Политика: s3-discourse-policy-ваш-пользователь-iam
  • Ведро для резервных копий: вашдомен-поддомен-backups
  • Ведро для загрузок: вашдомен-поддомен-uploads
  • CDN-распределения: cdn-вашдомен-поддомен и s3-вашдомен-поддомен-uploads

Опционально: Ведро процесса конфигурации: a-origin-config-bucket

Конфигурация AWS

Используйте настройки по умолчанию на страницах конфигурации AWS, если не указано иное.

Имена S3, имена, имена

  • Домен экземпляра Discourse: поддомен.вашдомен.тлд (поддомен.вашдомен.тлд, включая www.вашдомен.тлд)
  • Пользователь IAM: вашдомен-поддомен (вашдомен-discourse, вашдомен-forum или Discourse в корне/апексе: вашдомен-тлд-www)
  • Политика для пользователя IAM: s3-discourse-policy-вашдомен-поддомен
  • Ведро для загрузок: вашдомен-поддомен-uploads Примечание: Не забудьте установить «Все (публичный доступ)» на «Чтение» в Ведро > Разрешения: Список контроля доступа (ACL) - Список контроля доступа (ACL) - Получатель.
  • Ведро для резервных копий: вашдомен-поддомен-backups
  • CDN-распределения: cdn-вашдомен-поддомен и s3-вашдомен-поддомен-uploads
  • Ведро процесса конфигурации: a-origin-config-bucket

Пользователи IAM

  1. Перейдите в IAM > Пользователи > Выберите «Создать пользователя»
  2. IAM > Пользователи > Создать пользователя > Указать детали пользователя > Детали пользователя > Имя пользователя > Введите имя, например ваш-пользователь-iam > Выберите «Далее»
  3. IAM > Пользователи > Создать пользователя > Установить разрешения > Варианты разрешений > Выберите «Прикрепить политики напрямую» > Выберите «Создать политику» > Откроется страница «Создать политику» (Альтернативно, политику можно создать сначала в Политики, а затем выбрать при создании пользователя в «Политики разрешений».)
  4. IAM > Пользователи > Создать пользователя > Установить разрешения > Политики разрешений > Отфильтровать по выпадающему списку «Тип» > Выберите «Управляемая клиентом» > Выберите недавно созданную политику > Выберите «Далее» > Выберите «Создать пользователя»
  5. IAM > Пользователи > ваш-пользователь-iam > Учетные данные безопасности > Ключи доступа > Выберите «Создать ключ доступа»
  6. IAM > Пользователи > ваш-пользователь-iam > Создать ключ доступа > Лучшие практики и альтернативы ключей доступа > Выберите «Другое» > Выберите «Далее»
  7. IAM > Пользователи > ваш-пользователь-iam > Создать ключ доступа > Установить тег описания > Выберите «Создать ключ доступа»
  8. IAM > Пользователи > ваш-пользователь-iam > Создать ключ доступа > Получить ключи доступа > Безопасно сохраните ключ доступа и секретный ключ доступа для использования в app.yml приложения Discourse > Выберите «Готово»

Политики

  1. Измените s3-discourse-policy-ваш-пользователь-iam.txt, добавив имя вашего пользователя IAM и имена ведер.
  2. Перейдите в IAM > Политики > Создать политику
  3. IAM > Политики > Создать политику > Указать разрешения > Редактор политик > Выберите «JSON» в редакторе политик > Скопируйте политику из s3-discourse-policy-ваш-пользователь-iam.txt и вставьте в JSON-редактор, заменив существующий JSON > Выберите «Далее»
  4. IAM > Политики > Создать политику > Проверить и создать > Детали политики > Имя политики > Введите имя политики, например s3-discourse-policy-ваш-пользователь-iam > Выберите «Далее»
  5. Перейдите к Пользователи IAM: 4. IAM > Пользователи > Создать пользователя, чтобы продолжить процесс создания пользователя

Ведро Amazon S3

Создайте и настройте ведро для резервных копий, ведро для загрузок и опциональное, но полезное ведро процесса конфигурации.

Создать ведро для резервных копий вашдомен-поддомен-backups

  1. Перейдите в Amazon S3 Ведро > Выберите «Создать ведро»
  2. Amazon S3 > Ведро > Создать ведро > Общая конфигурация > Подтвердите выбор «Общего назначения»
  3. Amazon S3 > Ведро > Создать ведро > Общая конфигурация > Имя ведра > Введите имя ведра для резервных копий, например вашдомен-поддомен-backups
  4. Amazon S3 > Ведро > Создать ведро > Общая конфигурация > Подтвердите выбор «ACL отключены (рекомендуется)»
  5. Amazon S3 > Ведро > Создать ведро > Настройки блокировки публичного доступа для этого ведра > Снимите галочку с «Блокировать весь публичный доступ», затем выберите «Блокировать публичный доступ к ведрам и объектам, предоставленным через новые политики публичного ведра или точки доступа» и «Блокировать публичный и межучетный доступ к ведрам и объектам через любые политики публичного ведра или точки доступа»
  6. Amazon S3 > Ведро > Создать ведро > Настройки блокировки публичного доступа для этого ведра > Отключение блокировки всего публичного доступа может привести к тому, что это ведро и объекты внутри него станут публичными > Выберите «Я подтверждаю, что текущие настройки могут привести к тому, что это ведро и объекты внутри него станут публичными.»
  7. Amazon S3 > Ведро > Создать ведро > Версионирование ведра > Версионирование ведра > Выберите «Включить» Инфо: Версионирование ведра требуется для «Правил жизненного цикла»
  8. Amazon S3 > Ведро > Создать ведро > Выберите «Создать ведро»

Конфигурация правил жизненного цикла

Правило хранения резервных копий

  1. Amazon S3 > Ведро > Выберите недавно созданное ведро, например вашдомен-поддомен-backups
  2. Amazon S3 > Ведро > вашдомен-поддомен-backups > Управление > Конфигурация жизненного цикла > Выберите «Создать правило жизненного цикла»
  3. Amazon S3 > Ведро > вашдомен-поддомен-backups > Управление > Конфигурация жизненного цикла > Имя правила жизненного цикла > Введите имя правила, например backup retention
  4. Amazon S3 > Ведро > вашдомен-поддомен-backups > Управление > Конфигурация жизненного цикла > Выбрать область действия правила > Выберите «Применить ко всем объектам в ведре»
  5. Amazon S3 > Ведро > вашдомен-поддомен-backups > Управление > Конфигурация жизненного цикла > Выбрать область действия правила > Применить ко всем объектам в ведре > Выберите «Я подтверждаю, что это правило будет применяться ко всем объектам в ведре.»
  6. Amazon S3 > Ведро > вашдомен-поддомен-backups > Управление > Конфигурация жизненного цикла > Действия правила жизненного цикла > Выберите «Переход неактуальных версий объектов между классами хранения», «Истечение срока действия текущих версий объектов» и «Полное удаление неактуальных версий объектов»
  7. Amazon S3 > Ведро > вашдомен-поддомен-backups > Управление > Конфигурация жизненного цикла > Действия правила жизненного цикла > Переходы оплачиваются за запрос > Выберите «Я подтверждаю, что это правило жизненного цикла повлечет за собой стоимость перехода за запрос.»
  8. Amazon S3 > Ведро > вашдомен-поддомен-backups > Управление > Конфигурация жизненного цикла > Переход неактуальных версий объектов между классами хранения > Выбрать переходы классов хранения > Выберите «Glacier Instant Retrieval»
  9. Amazon S3 > Ведро > вашдомен-поддомен-backups > Управление > Конфигурация жизненного цикла > Переход неактуальных версий объектов между классами хранения > Дней после того, как объекты станут неактуальными > Введите «1»
  10. Amazon S3 > Ведро > вашдомен-поддомен-backups > Управление > Конфигурация жизненного цикла > Истечение срока действия текущих версий объектов > Дней после создания объекта > Введите «7» или 15 или 30 или ???
  11. Amazon S3 > Ведро > вашдомен-поддомен-backups > Управление > Конфигурация жизненного цикла > Полное удаление неактуальных версий объектов > Дней после того, как объекты станут неактуальными > Введите «91»
  12. Amazon S3 > Ведро > вашдомен-поддомен-backups > Управление > Конфигурация жизненного цикла > Подтвердите, что «Проверка действий перехода и истечения срока действия» верна > Выберите «Создать правило»

Правило очистки

  1. Amazon S3 > Ведро > вашдомен-поддомен-backups > Управление > Конфигурация жизненного цикла > Выберите «Создать правило жизненного цикла»
  2. Amazon S3 > Ведро > вашдомен-поддомен-backups > Управление > Конфигурация жизненного цикла > Имя правила жизненного цикла > Введите имя правила cleanup
  3. Amazon S3 > Ведро > вашдомен-поддомен-backups > Управление > Конфигурация жизненного цикла > Выбрать область действия правила > Выберите «Применить ко всем объектам в ведре»
  4. Amazon S3 > Ведро > вашдомен-поддомен-backups > Управление > Конфигурация жизненного цикла > Выбрать область действия правила > Применить ко всем объектам в ведре > Выберите «Я подтверждаю, что это правило будет применяться ко всем объектам в ведре.»
  5. Amazon S3 > Ведро > вашдомен-поддомен-backups > Управление > Конфигурация жизненного цикла > Действия правила жизненного цикла > Выберите «Полное удаление неактуальных версий объектов» и «Удалить истекшие маркеры удаления объектов или незавершенные многокомпонентные загрузки»
  6. Amazon S3 > Ведро > вашдомен-поддомен-backups > Управление > Конфигурация жизненного цикла > Полное удаление неактуальных версий объектов > Дней после того, как объекты станут неактуальными > Введите «92»
  7. Amazon S3 > Ведро > вашдомен-поддомен-backups > Управление > Конфигурация жизненного цикла > Полное удаление неактуальных версий объектов > Удалить истекшие маркеры удаления объектов или незавершенные многокомпонентные загрузки > Истекшие маркеры удаления объектов > Выберите «Удалить истекшие маркеры удаления объектов»
  8. Amazon S3 > Ведро > вашдомен-поддомен-backups > Управление > Конфигурация жизненного цикла > Полное удаление неактуальных версий объектов > Удалить истекшие маркеры удаления объектов или незавершенные многокомпонентные загрузки > Незавершенные многокомпонентные загрузки > Выберите «Удалить незавершенные многокомпонентные загрузки»
  9. Amazon S3 > Ведро > вашдомен-поддомен-backups > Управление > Конфигурация жизненного цикла > Полное удаление неактуальных версий объектов > Удалить истекшие маркеры удаления объектов или незавершенные многокомпонентные загрузки > Незавершенные многокомпонентные загрузки > Удалить незавершенные многокомпонентные загрузки > Количество дней > Введите «3» или ???
  10. Amazon S3 > Ведро > вашдомен-поддомен-backups > Управление > Конфигурация жизненного цикла > Подтвердите, что «Проверка действий перехода и истечения срока действия» верна > Выберите «Создать правило»

Создать ведро для загрузок вашдомен-поддомен-uploads

  1. Перейдите в Amazon S3 > Ведро > Выберите «Создать ведро»
  2. Amazon S3 > Ведро > Создать ведро > Общая конфигурация > Подтвердите выбор «Общего назначения»
  3. Amazon S3 > Ведро > Создать ведро > Общая конфигурация > Имя ведра > Введите имя ведра для загрузок, например вашдомен-поддомен-uploads
  4. Amazon S3 > Ведро > Создать ведро > Общая конфигурация Выберите «ACL включены»
  5. Amazon S3 > Ведро > Создать ведро > Настройки блокировки публичного доступа для этого ведра > Снимите галочку с «Блокировать весь публичный доступ», затем выберите «Блокировать публичный доступ к ведрам и объектам, предоставленным через новые политики публичного ведра или точки доступа» и «Блокировать публичный и межучетный доступ к ведрам и объектам через любые политики публичного ведра или точки доступа»
  6. Amazon S3 > Ведро > Создать ведро > Настройки блокировки публичного доступа для этого ведра > Отключение блокировки всего публичного доступа может привести к тому, что это ведро и объекты внутри него станут публичными > Выберите «Я подтверждаю, что текущие настройки могут привести к тому, что это ведро и объекты внутри него станут публичными.»
  7. Amazon S3 > Ведро > Создать ведро > Выберите «Создать ведро»
  8. Amazon S3 > Ведро > Экран ведер > Выберите недавно созданное ведро, например вашдомен-поддомен-uploads
    Вернитесь к выполнению шага 9 после создания Распределения #2
  9. Amazon S3 > Ведро > вашдомен-поддомен-uploads > Разрешения > Политика ведра > Выберите Изменить > Вставьте JSON из Создать распределение #2 11. CloudFront > Распределения > ID распределения > Изменить источник > Контроль доступа к источнику > Выберите «Сохранить изменения»
  10. Amazon S3 > Ведро > вашдомен-поддомен-uploads > Разрешения > Список контроля доступа (ACL) > Выберите Изменить > Все (публичный доступ) > Выберите «Чтение» > Когда вы предоставляете доступ группе получателей «Все» или «Прошедшие аутентификацию пользователи», любой человек в мире может получить доступ к объектам в этом ведре. Выберите «Я понимаю последствия этих изменений для моих объектов и ведер.» > Выберите «Сохранить изменения»

Создать ведро процесса конфигурации a-origin-config-bucket
Создайте ведро, которое будет использоваться в процессе конфигурации Распределения #1. Имя и конфигурация не важны, так как ведро используется временно в качестве начального источника, который будет удален в процессе конфигурации.
1. Перейдите в Amazon S3 > Ведро > Выберите «Создать ведро»
2. Amazon S3 > Ведро > Создать ведро > Общая конфигурация > Подтвердите выбор «Общего назначения»
3. Amazon S3 > Ведро > Создать ведро > Общая конфигурация > Имя ведра > Введите имя ведра для загрузок, например a-origin-config-bucket
4. Переключитесь по страницам конфигурации и нажмите «Создать ведро»

Распределения CloudFront

Создайте два распределения AWS S3 CloudFront. Одно для обслуживания ресурсов веб-сайта, а второе — для обслуживания ресурсов ведра загрузок.

Создать распределение #1

  Распределение #1
    DISCOURSE_CDN_URL
      Имя распределения: cdn-вашдомен-поддомен
      Источник: поддомен.вашдомен.тлд
      Доменное имя распределения (URL Cloudfront): AWS-assigned.cloudfront.net
      Альтернативные доменные имена: discourse-cdn.вашдомен.тлд
  1. Перейдите в CloudFront > Распределения > Выберите «Создать»
  2. CloudFront > Распределения > Создать распределение > Выбрать план > Выберите «Платить по факту использования» > Выберите «Далее»
  3. CloudFront > Распределения > Создать распределение > Начать работу > Варианты распределения > Имя распределения > Введите имя распределения, например cdn-вашдомен-поддомен
  4. CloudFront > Распределения > Создать распределение > Начать работу > Варианты распределения > Описание - необязательно > Введите «cdn-вашдомен-поддомен» (Необязательно, но помогает с видимостью)
  5. CloudFront > Распределения > Создать распределение > Начать работу > Варианты распределения > Тип распределения > Подтвердите выбор «Один веб-сайт или приложение» > Выберите «Далее»
  6. CloudFront > Распределения > Создать распределение > Указать источник > Тип источника > Выберите «Другое» Обратитесь к любому источнику AWS или не AWS через его общедоступно разрешимый URL.
  7. CloudFront > Распределения > Создать распределение > Указать источник > Источник > Пользовательский источник > Введите домен, например поддомен.вашдомен.тлд
  8. CloudFront > Распределения > Создать распределение > Указать источник > Настройки > Настройки кэширования > Выберите «Настроить настройки кэширования»
  9. CloudFront > Распределения > Создать распределение > Указать источник > Настройки > Настройки кэширования > Политика кэширования > Из выпадающего списка выберите «CachingOptimized» > Выберите «Далее»
  10. CloudFront > Распределения > Создать распределение > Включить безопасность > сделайте свой выбор - для этого руководства > Выберите «Не включать меры безопасности» > Выберите «Далее»
  11. CloudFront > Распределения > Создать распределение > Проверить и создать > Выберите «Создать распределение»
    Если используется брендированный URL CDN → Шаг 12
  12. CloudFront > Распределения > ID распределения > Альтернативные доменные имена > Выберите «Добавить домен»
  13. CloudFront > Распределения > ID распределения > Альтернативные доменные имена > Добавить домен > Настроить домены > Домены > Домены для обслуживания > Введите DISCOURSE_CDN_URL, например discourse-cdn.вашдомен.тлд > Выберите «Далее»

Неполно: Альтернативные доменные имена: discourse-cdn.вашдомен.тлд

Создать распределение #2

  Распределение #2
    DISCOURSE_S3_CDN_URL
      Имя распределения: s3-вашдомен-поддомен-uploads
      Источник: вашдомен-поддомен-uploads
      Доменное имя распределения (URL Cloudfront): AWS-assigned.cloudfront.net
      Альтернативные доменные имена: s3-cdn.вашдомен.тлд
  1. CloudFront > Распределения > Создать распределение
  2. CloudFront > Распределения > Создать распределение > Выбрать план > Выберите «Платить по факту использования» > Выберите «Далее»
  3. CloudFront > Распределения > Создать распределение > Начать работу > Варианты распределения > Имя распределения > Введите имя распределения, например s3-вашдомен-поддомен-uploads
  4. CloudFront > Распределения > Создать распределение > Начать работу > Варианты распределения > Описание - необязательно > Введите «s3-вашдомен-поддомен-uploads» (Необязательно, но помогает с видимостью)
  5. CloudFront > Распределения > Создать распределение > Начать работу > Варианты распределения > Тип распределения > Подтвердите выбор «Один веб-сайт или приложение» > Выберите «Далее»
  6. CloudFront > Распределения > Создать распределение > Указать источник > Тип источника > Подтвердите выбор «Amazon S3»
  7. CloudFront > Распределения > Создать распределение > Указать источник > Источник > Источник S3 > Выберите «Обзор S3» > Выберите ведро загрузок «вашдомен-поддомен-uploads» > Выберите «Выбрать» > Выберите «Далее»
  8. CloudFront > Распределения > Создать распределение > Включить безопасность > сделайте свой выбор - для этого руководства > Выберите «Не включать меры безопасности» > Выберите «Далее»
  9. CloudFront > Распределения > Создать распределение > Проверить и создать > Подтвердите, что «Проверка и создание: верна» > Выберите «Создать распределение» → Страница информации о недавно созданном распределении должна открыться в CloudFront > Распределения > ID распределения
  10. CloudFront > Распределения > ID распределения > Источники > Выберите источник > Выберите «Изменить»
  11. CloudFront > Распределения > ID распределения > Изменить источник > Контроль доступа к источнику > ! Вы должны разрешить доступ CloudFront с помощью этой политики… > Выберите «Копировать политику» > Перейдите к Создать ведро для загрузок 9. Amazon S3 > Ведро > вашдомен-поддомен-uploads > Разрешения > Политика ведра

Неполно: Альтернативные доменные имена: s3-cdn.вашдомен.тлд

Администратор Discourse

Актуально на версию Discourse: 2025.12.0-latest

Внесите эти изменения в Административный интерфейс Discourse

Настройки резервных копий /admin/backups/settings

  1. Максимальное количество резервных копий > Введите количество резервных копий, которые нужно хранить локально
  2. Резервное копирование с загрузками > Выберите «Включать загрузки в запланированные резервные копии. Отключение этого параметра приведет к резервному копированию только базы данных.»

Настройки S3 /admin/site_settings/category/all_results?filter=S3

  1. S3 использовать URL CDN для всех загрузок > Выберите «Использовать URL CDN для всех файлов, загруженных в S3, а не только для изображений.» (В Discourse по умолчанию не выбрано)

Редактирование конфигурации (app.yml) Небрендированные URL

Отредактируйте app.yml, внеся изменения ниже для брендированных URL или небрендированных URL Cloudfront.

Небрендированные URL Discourse

Используйте это для небрендированных распределений Cloudfront. Ваш DISCOURSE_S3_REGION может отличаться.
DISCOURSE_CDN_URL: https://amazonassigned.cloudfront.net

Конфигурация хранения S3 (небрендированная)

  ## Конфигурация хранения S3
  DISCOURSE_USE_S3: true
  DISCOURSE_S3_REGION:  us-east-1
  DISCOURSE_S3_ACCESS_KEY_ID: ключ скрыт
  DISCOURSE_S3_SECRET_ACCESS_KEY: ключ скрыт
  DISCOURSE_S3_CDN_URL: https://amazonassigned.cloudfront.net
  DISCOURSE_S3_BUCKET: имя-вашего-ведра-uploads
  DISCOURSE_S3_BACKUP_BUCKET: имя-вашего-ведра-backups
  DISCOURSE_BACKUP_LOCATION: s3

Брендированные URL Discourse

Конфигурация DNS

Если вы предпочитаете использовать URL на основе вашегодомен.ком для CDN, вам необходимо внести некоторые изменения в DNS и настроить ваши URL CDN.

Совет: Не забудьте добавить discourse-cdn.вашдомен.ком и s3-cdn.вашдомен.ком в качестве доменного имени в «Альтернативные доменные имена» для соответствующих распределений Cloudfront.

Конфигурация DNS, если вы хотите использовать брендированные распределения Cloudfront.

DISCOURSE_CDN_URL

Существующая запись:	A   discourseinstance.вашдомен.ком   ip-адрес экземпляра  Примечание: Это текущий IP-адрес установленной версии Discourse.
Новая запись:		A   discourse-cdn-cloudfront.вашдомен.ком   ip-адрес экземпляра
Новая запись: 		CNAME discourse-cdn.вашдомен.ком  ->   amazonassigned.cloudfront.net

DISCOURSE_S3_CDN_URL

Новая запись:		CNAME s3-cdn-cloudfront.вашдомен.ком  ->   amazonassigned.cloudfront.net
Новая запись: 	CNAME  s3-cdn.вашдомен.ком  ->   s3-cdn-cloudfront.вашдомен.ком

Редактирование конфигурации (app.yml) Брендированные URL

После завершения изменений DNS вы можете отредактировать ваш app.yml, внеся изменения ниже.

Измените DISCOURSE_CDN_URL и/или DISCOURSE_S3_CDN_URL, если вы используете доменные CNAME для распределения Cloudfront (amazonassigned.cloudfront.net).

DISCOURSE_CDN_URL: https://discourse-cdn.вашдомен.ком

Конфигурация хранения S3 (брендированная)

## Конфигурация хранения S3
DISCOURSE_USE_S3: true
DISCOURSE_S3_REGION:  us-east-1
DISCOURSE_S3_ACCESS_KEY_ID: ключ скрыт
DISCOURSE_S3_SECRET_ACCESS_KEY: ключ скрыт
DISCOURSE_S3_CDN_URL: https://s3-cdn.вашдомен.ком
DISCOURSE_S3_BUCKET: имя-вашего-ведра-uploads
DISCOURSE_S3_BACKUP_BUCKET: имя-вашего-ведра-backups
DISCOURSE_BACKUP_LOCATION: s3

Дополнительные правки конфигурации (app.yml)

Независимо от того, какой подход вы используете, брендированные или URL Cloudfront, вам понадобится раздел after_assets_precompile ниже, чтобы убедиться, что все остается актуальным при последующих пересборках.

  hooks:
    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

Пересоберите ваш экземпляр с помощью ./launcher rebuild app

После успешного завершения ./launcher rebuild app выполните следующие rake-задачи.

./launcher enter app

rake posts:rebake
rake uploads:migrate_to_s3
rake posts:rebake_uncooked_posts

rake s3:upload_assets
rake s3:expire_missing_assets

Если rake-задачи выполняются без ошибок, значит, все готово.

На некоторых сайтах начальная пересборка завершится ошибкой, связанной с s3:upload_assets. Если это произойдет,

проверьте настройку «чтение» в ведре загрузок. Если она установлена правильно, то,

закомментируйте или удалите раздел after_assets_precompile:

  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

и снова выполните ./launcher rebuild app. Затем выполните «rake s3:upload_assets» и «rake s3:expire_missing_assets».

Если обе rake-задачи выполняются без ошибок, снова добавьте или раскомментируйте раздел after_assets_precompile, снова выполните пересборку и выполните все rake-задачи, перечисленные выше.

Если любая из rake-задач выдаст ошибку или пересборка снова завершится неудачей, значит, в вашем app.yml и/или конфигурациях AWS S3 и/или записях DNS что-то не так. Удачи в поиске! :slight_smile:

s3-discourse-policy-ваш-пользователь-iam.txt|вложение (697 Байт)

1 лайк

Ответ от службы поддержки AWS по теме: Подтверждение подхода в правиле очистки

Я изучил предложенную вами конфигурацию правила жизненного цикла и с удовольствием подтверждаю, что ваша настройка хорошо продумана и соответствует лучшим практикам AWS для управления резервными ведрами.

========== Оценка правила жизненного цикла ==========

Ваша конфигурация отличная и охватывает ключевые аспекты очистки резервных копий:

• Очистка неактуальных версий (92 дня): Это разумный период хранения, который балансирует затраты на хранение с потребностями в восстановлении. 92-дневный срок хранения предоставляет достаточно времени для проверки резервных копий, предотвращая при этом бесконечное накопление данных.

• Удаление устаревших маркеров удаления: Настроено корректно для автоматической очистки «сиротских» маркеров удаления, что помогает оптимизировать затраты на хранение и производительность ведра.

• Очистка незавершенных многокомпонентных загрузок (3 дня): Настройка в 3 дня является оптимальной — достаточно короткой, чтобы предотвратить потери хранилища из-за неудачных загрузок, но достаточно длительной для выполнения легитимных операций по резервному копированию больших объемов данных.

• Область применения: Применение ко «всем объектам в ведре» уместно для выделенных резервных ведер, где все содержимое следует единому шаблону жизненного цикла.

Ответ от службы поддержки AWS по теме: Конфигурация жизненного цикла резервных ведер

Обзор конфигурации жизненного цикла S3 для резервных ведер

Я проанализировал вашу полную настройку конфигурации жизненного цикла и могу подтвердить, что ваше правило «резервное хранение» хорошо структурировано и соответствует лучшим практикам AWS для управления резервными копиями.

Ключевые выводы моего исследования:

  • Ваше ведро содержит два дополнительных правила жизненного цикла, которые эффективно работают вместе.
  • Правило «резервное хранение» корректно обрабатывает текущие и неактуальные версии с соответствующими временными рамками.
  • Конфигурация включает экономически эффективные переходы хранилища для неактуальных версий.
  • Все компоненты правил правильно настроены с соответствующими параметрами времени.
  • Ведро правильно настроено в регионе us-east-1 с соответствующими разрешениями.

Оценка конфигурации:

Ваше правило «резервное хранение» эффективно управляет объектами резервных копий на протяжении их жизненного цикла:

  • Переводит неактуальные версии в Glacier Instant Retrieval через 1 день (оптимизация затрат).
  • Удаляет текущие версии через 7 дней (подходит для регулярных резервных копий).
  • Безвозвратно удаляет неактуальные версии через 91 день (хороший период хранения).

Это правило дополняет ваше правило «очистка», которое обрабатывает:

  • Удаление устаревших маркеров удаления (предотвращает появление «сиротских» маркеров).
  • Очистку незавершенных многокомпонентных загрузок через 3 дня (предотвращает потери хранилища).
  • Удаление неактуальных версий через 92 дня (обеспечивает полную очистку).

Оба правила применяются ко всем объектам в ведре, что уместно для выделенного резервного хранилища, где все содержимое следует единому шаблону жизненного цикла.

Срок действия текущих версий в 7 дней кажется подходящим для регулярных сценариев резервного копирования, но вы можете изменить его в зависимости от ваших конкретных требований к хранению (15 или 30 дней, если требуется более длительное хранение).

Ваша реализация завершена и соответствует лучшим практикам AWS для управления жизненным циклом S3.


Оказывается, существует более эффективный способ.

CloudFront > Дистрибуции > Создать дистрибуцию > Указать источник > Тип источника > Выбрать “Другой”. Ссылка на любой источник AWS или не-AWS через его общедоступный URL, разрешаемый DNS.

CloudFront > Дистрибуции > Создать дистрибуцию > Указать источник > Источник > Пользовательский источник > Введите домен, например subdomain.yourdomain.tld

CloudFront > Дистрибуции > Создать дистрибуцию > Указать источник > Настройки > Настройки кэширования > Выбрать “Настроить параметры кэширования”

CloudFront > Дистрибуции > Создать дистрибуцию > Указать источник > Настройки > Настройки кэширования > Политика кэширования > В выпадающем списке выбрать “CachingOptimized” > Выбрать “Далее”

Продолжите с настройками безопасности, проигнорируйте оригинальные шаги 10–14.

CloudFront > Дистрибуции > Создать дистрибуцию > Проверить и создать > Выбрать “Создать дистрибуцию”