Хотелось бы увидеть туториал по интеграции AWS S3 с Discourse

После трёх часов, проведённых в отчаянных попытках заставить конфигурацию AWS S3 работать с Discourse на экземпляре AWS Lightsail, я твёрдо убеждён, что простой и понятный учебник по этой теме был бы очень кстати. Здесь существует бесконечное количество тупиковых путей. Я, конечно, без проблем создал бакет, который может удалённо загружать файлы по предоставленному URL AWS S3, но как только подключается CDN, появляется конечная точка S3 Endpoint (хотя в интерфейсе настроек явно указано, что её можно оставить пустой, при попытке загрузки появляется внутреннее сообщение: «Конечная точка не может быть пустой»), и возникают такие базовые вопросы, как: какой именно уровень разрешений действительно необходим при использовании CDN через Amazon CloudFront?

Это просто слишком много. Я перерыл весь интернет, но не нашёл ничего даже отдалённо похожего, и уж тем более ничего актуального для текущей версии Discourse.

Спасибо за любые подсказки.

Сейчас моя главная проблема — это, по крайней мере с точки зрения Discourse, запрашивающего ID ключа и секретный ключ. У меня в IAM создан пользователь для этих целей, но в информации о бакетах S3 нет ничего, что связывало бы этого пользователя с конкретным бакетом, поэтому я понятия не имею, является ли это причиной сбоя. Честно говоря, я использую LightSail и AWS уже более 8 лет, но эта область S3 оформлена в каком-то стиле UX для разработчиков, намеренно запутывающем, с 50 различными способами выполнения одних и тех же действий. Это совсем не интуитивно.

Вы смотрели настройка провайдера объектного хранилища, совместимого с S3, для загрузки файлов?

Привет, Джей. Да, я уже много раз смотрел на это. Поскольку это версия 2020 года, там есть такие настройки, как DISCOURSE_S3_REGION, но в панели администратора подобной настройки нет.

Кроме того… разве я не должен импортировать старые данные после правильной настройки S3 и проверки её работоспособности?

Вот именно о таких вещах я и говорю. Настройки в Discourse предполагают, что пользователь знает AWS, командную строку и Discourse так же хорошо, как разработчик.

Вот где я сейчас нахожусь.

У меня работает CDN, и я вручную загрузил файл, который работает:

https://s3.kitmaker.net/IMG_7184.JPG

Когда я загружаю через Discourse, получаю:

Не удалось установить TCP-соединение с discourse-kitmaker.s3.kitmaker.net:443 (getaddrinfo: имя или служба не найдены)

Вот мои текущие настройки:

Кстати, есть ещё настройка Region, которую я игнорировал. Да, но даже после правильной настройки это не помогло. :smiley:

Но вы показываете, что не следуете этим инструкциям.

Именно поэтому вам нужно следовать этим инструкциям и не делать это через интерфейс пользователя.

Вот инструкции, которым нужно следовать.

И не упустите момент, когда вы добавляете настройки в YAML-файл для загрузки ресурсов в S3.

Я бы сделал это на тестовом сайте, чтобы не сломать ваш рабочий.

Да. Добавьте настройки S3 в переменные окружения в YAML-файле, пересоберите проект, затем проверьте, что они работают, и только после этого запустите rake-задачу. Они должны быть настроены там, а не в базе данных. Не совсем понятно, почему их не скрыли из интерфейса пользователя.

Но также есть вот это: How are you authenticating Discourse to AWS? Help us improve the settings!

Спасибо за эти ссылки. В первом опубликованном вами разделе AWS есть ещё одна ссылка (Set up file and image uploads to S3) от 2013 года, поэтому я сразу же натыкаюсь на рекомендацию добавить политику X для бакета (что, похоже, устарело), тогда как AWS CDN через CloudFront уже заменил эту политику собственной. Менять или оставить? Вот о чём я говорю. Ужас!

Дело не столько в настройках «Заполните пропуски» в app.yml или в настройках администратора. Проблема скорее в том, как эти настройки взаимодействуют с созданным bucket или CDN и т. д. Поэтому нужно внести ясность именно в сторону Amazon. Я понимаю, что это не часть Discourse, но это точно помогло бы пользователям Discourse, которые пытаются настроить корректную работу через S3. Надеюсь, я понятно выразился.

Понятно. Я уже давно не настраивал бакет AWS. Этот этап может быть более сложным, но вы не описали, как именно вы это сделали.

Тем не менее, это тоже довольно просто: вы вставляете необходимые данные, а если возникают ошибки, то можете их устранить.

Это единственная проблема, которую вы описали.

Как вы настроили бакет? Какие права доступа вы предоставили пользователю? Сгенерировали ли вы ключи? Какие ошибки вы получили (хотя, казалось бы, вы говорили, что добавили изображение в пост, и это сработало?)

Извините, я ошибся, сказав, что вручную загрузил этот тестовый файл.

Вот страница настройки для бакета.

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