Digital Ocean Spaces (S3) «невозможно подписать запрос без установленных учетных данных»

Пытаюсь настроить Digital Ocean Spaces для хранения S3.

При попытке выполнить резервное копирование получаю следующее:

То же самое происходит при загрузке фотографий…

У меня настроено следующее…

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

Изначально у меня был активным следующий блок, но мне пришлось закомментировать его в файле app.yml, так как сборка не проходила с этими строками в активном состоянии. Не уверен, актуально ли это сейчас или нет…

Я вручную загрузил файл из панели администратора Digital Ocean Spaces, установил для него публичный доступ и смог открыть его через браузер.

Также я вручную создал папку “*****-backups” в Digital Ocean Spaces.

Вот пример того, как мало я знаю. Я застрял здесь и не понимаю почему. Как-то я сам себя загнал в тупик и не знаю, как выбраться.

image
По какой-то причине то, что обычно находится в /var/discourse, теперь кажется, находится в /var/www/discourse

Но сейчас я просто застрял. Я поискал на форуме, но не нашёл ничего, что помогло бы решить проблему. Я уже целый день кружусь в этом же кругу. Это похоже на следующую тему, но там речь идёт об AWS S3, а не о Digital Ocean Spaces (S3)…

Буду благодарен за любую помощь. Спасибо.

У вас отсутствует настройка use_s3, которая рекомендуется в теме, на которую вы дали ссылку.

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

Если вы видите содержимое в /var/www/discourse, значит вы находитесь внутри контейнера. Вам нужно выйти, чтобы вернуться в операционную систему.

Спасибо за обратную связь.

Она у меня есть. Похоже, она просто не отображается с помощью той другой команды. Я закомментировал CDN, потому что были сообщения о проблемах с ним, поэтому я пытался изолировать эту проблему. Особенно потому, что я не на 100% уверен, что URL-адрес правильный, так как в примере был указан пользовательский домен, а не стандартный для Spaces. Возможно, это была плохая идея — пытаться изолировать это. Я пробовал много разных вариантов.
Вот полный список настроек…

Не на 100% уверен, но я почти уверен, что я именно так и сделал — скопировал и вставил. Обычно я так и делаю.

У меня была ошибка при попытке пересборки, поэтому я вернулся и закомментировал их обратно…


Сейчас я попробую снова включить их и запустить.

А, «exit».

Это именно то, что я искал. Спасибо.

Чего мне не хватает в этой части про S3?

Я убрал комментарии, чтобы запустить это в работу…

РЕДАКТИРОВАНИЕ: Я только что заметил, что в последней строке есть опечатка. Не знаю, как я мог так ошибиться.

Я сохранил и попытался пересобрать, но получил следующее…

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

chmod o-rwx containers/app.yml

Проверил версию Docker…

docker --version

Изучаю, как её обновить. Думал, что пересборка обновит версию, но, возможно, это не так.

Это не помогло. Даже с закомментированным старым вариантом и вставленным новым…

При пересборке всё равно возникает ошибка…

«не удалось найти ожидаемый ключ при разборе блочного отображения на строке 109, столбце 3»

Непонятно, к какому именно ключу это относится.

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

Кажется, я почти добрался до решения, но…

После пересборки процесс просто завис на этапе «обдумывания»…

Оставил его в таком состоянии на несколько часов. Никаких изменений.

Закомментировал CDN, и снова появилась ошибка «строка 109». Закомментировал также нижнюю область и выполнил пересборку. Войти на форум удалось, но загрузка вложений по-прежнему не работает.

При пересборке процесс, похоже, надолго застревает здесь:

Не уверен, что это важно, поскольку в итоге он проходит этот этап без каких-либо действий.

С закомментированными CDN и нижней областью форум работает, но исходная проблема остаётся…

Не понимаю, что я упускаю.

После пересборки процесс просто завис в состоянии «думает». Сначала я подумал, что, возможно, происходит передача всех данных или работа в фоновом режиме, поэтому оставил его…

Оставил его в таком состоянии на несколько часов. Никаких изменений.

Я проверил раздел «Пространства» (Spaces), и файлы не были загружены, так что, похоже, процесс просто завис на чём-то.

Я закомментировал CDN, и снова появилась ошибка «строка 109».

Также закомментировал нижнюю область и выполнил пересборку. В форум попасть удалось, но всё ещё невозможно загрузить какие-либо вложения.

При пересборке процесс, кажется, на некоторое время зависает здесь, но в итоге проходит этот этап без каких-либо действий, так что, возможно, это вообще не имеет значения..

При закомментированном CDN и нижней области форум работает, но у меня всё ещё сохраняется исходная проблема…

Не понимаю, что я упускаю. Я сдался и пока закомментировал все настройки S3.

ДОПОЛНИТЕЛЬНО: Есть ли команда для обновления Docker? Думаю, я обычно делаю это через панель администратора, но система не предлагает обновиться с версии 24.0.2. Не уверен, насколько это критично. На мой взгляд, текущая версия — 24.0.7.

Не уверен, переопределяют ли настройки админ-панели настройки из app.yml или наоборот, но вот эти настройки на всякий случай…

Не совсем понятно, должны ли URL-адреса S3 и CDN включать имя бакета или нет. Также не уверен, что они должны быть идентичными ссылками.

Надеюсь, кто-то заметит что-то очевидное. Если вы дочитали до этого места, ещё раз спасибо!

Вы используете CDN от Social Ocean?

Если оно не загрузилось за 30 секунд, скорее всего, не загрузится вообще. Но ждать так долго не нужно. Вы можете открыть вкладку «Сеть» в инструментах разработчика браузера и посмотреть, что именно не загружается.

Не уверен, что такое социальный океан CDN, но я просто пытаюсь использовать CDN, встроенный в Spaces.

Извините, это было «Digital Ocean».

Сообщение, на которое я сослался, говорит, что так делать не стоит, потому что это не работает.

Если вам нужна моя помощь, мой адрес электронной почты указан в моём профиле.

ОК. Это так странно.

ЧТО-ТО теперь работает. Я думал, что всё закомментировал (отключил) и вчера загрузил фото, чтобы убедиться, что всё снова работает. Утром я проверил путь к нему, и оно использует… CDN, полагаю?

https://XXXXXXX-storage.sfo3.digitaloceanspaces.com/optimized/2X/9/9b9fdb3eb27831650752b848363ea2a1a66ce137_2_375x500.jpeg

Я проверил в Spaces, и там есть некоторые изображения…


Кажется, изображения теперь работают правильно. Единственное, что приходит в голову, — я снял галочку с пункта «S3 use IAM profile» в настройках. Думаю, именно этот ключ он искал, но перестал его искать. Не уверен, почему я вообще поставил эту галочку. Вероятно, потому что я совершенно не разбираюсь в этом. :slight_smile:

Всё ещё есть проблема с выполнением резервных копий, но, возможно, это вопрос места на Droplet. Похоже, что там недостаточно места для локальной подготовки перед загрузкой. Я разберусь с этим отдельно, теперь когда, по крайней мере, видно, что соединение с Space установлено.

Спасибо, Джей. Я свяжусь с тобой позже на этой неделе, когда смогу снова поработать над форумом друзей. Сейчас пойду оплачу несколько счетов.

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

df -h

О да, действительно занято полностью. Запустил(а)…

docker system prune -a

Запустил(а)…

./launcher cleanup

Спасибо ещё раз, Джей.

Действительно, освободилось более 20 ГБ.

Запустил(а) резервное копирование вручную, и оно сработало!!!

Теперь я пытаюсь перенести все файлы с локального хранилища в S3…

rake uploads:migrate_to_s3

Пожелайте мне удачи! :slight_smile:

Утром, пока ждал начала встречи, проверил несколько вещей.

Похоже, Rake не сработал или процесс ещё идёт. Пока не могу сказать точно. Использование места уменьшилось, но при ручной проверке старых фотографий оказалось, что в них всё ещё указаны старые локальные URL. Придётся разобраться с этим подробнее.

Не уверен, в чём разница между rake и reback. Предполагаю, что один переносит файлы, а другой обновляет пути в постах. Есть ещё чему поучиться.

Система всё ещё занимает много места в /import (1,4 ГБ) и /uploads (9,2 ГБ). Для нашего небольшого тарифа это слишком много. Пытаюсь перенести эти данные на более дешёвое хранилище, и эти папки занимают наибольшую часть.

К сведению тем, кто настраивает то же самое: вот какие URL используются для конечных точек…

CDN
https://XXXXXX-storage.sfo3.cdn.digitaloceanspaces.com/original/2X/0/15740f130209eb1a6a4f147076eaa20e70a9772d.zip

ORIGIN
https://XXXXXX-storage.sfo3.digitaloceanspaces.com/original/2X/0/15740f130209eb1a6a4f147076eaa20e70a9772d.zip

Единственное отличие — наличие .cdn в URL. Мне нужно обновить свои настройки.

От Copilot…
__________

Чтобы пересобрать посты после изменения ссылки на CDN в Discourse, необходимо запустить задачу rebake rake, чтобы весь HTML-контент постов обновился с новыми URL активов.

Вот процесс:


1. Войдите в контейнер

cd /var/discourse

./launcher enter app

2. Запустите задачу rebake

rake posts:rebake

Это выполнит:

  • Перерисовку всех постов с учётом текущих настроек (включая ваш новый s3_cdn_url).

  • Обновление обработанного HTML, чтобы изображения и загрузки указывали на CDN.


Опционально: Ускорение

Если у вас большой сайт, можно запускать задачу партиями:

rake posts:rebake[1000]

Это пересоберёт 1000 постов за раз.


3. Проверка

Проверьте несколько постов с изображениями или загрузками, чтобы убедиться, что они теперь используют URL CDN.

__________

Похоже, процесс запущен. Вернусь позже.

image

Пойду сделаю пончики.

Это запускает пересборку, но не по 1000 за раз. Оно запускает всё сразу и игнорирует часть [1000]. Возможно, мой синтаксис там не совсем верный.

Ещё одно напоминание себе, как и всем остальным. Я искал этот URL в меню, потому что записал его наоборот (.cdn.sfo3. вместо наоборот — что, очевидно, сломало SSL). Я не мог найти настройку при поиске. Затем я обнаружил окно, которое уже было открыто. Я обновил его, попытался сохранить и получил это…


Я забыл, что после добавления настроек в app.yml они исчезают из меню настроек администратора. Теперь я помню.

Пересборка, похоже, прошла успешно, у меня был просто неверный URL. Сейчас идёт обновление.

Однако у меня всё ещё менее 50 файлов в хранилище Space, поэтому rake для файлов не работает. :thinking:

Хорошо. Я думал, что это был небольшой прорыв. Наконец-то я понял, в чём была проблема…

«не удалось найти ожидаемый ключ при парсинге блочного сопоставления в строке 106, столбце 3»

Просматривая несколько тем, я наткнулся на следующее…

Я открыл свой файл и, о чудо, там были пробелы.

Я уверен, что добавил их, даже не задумываясь. Я удалил их. Думаю, проблема была в основном в пробеле перед «hooks:», на который указывала ошибка.

Сборка прошла успешно. Спасибо, @RGJ.

Однако что-то всё ещё не работает.

Я по-прежнему не вижу увеличения количества элементов в Spaces, значит, файлы из /uploads пока не загружаются на S3. Это меня сильно беспокоило, и я рад, что эта проблема решена. Но я снова застрял на экране загрузки.

Кроме того, при включённой настройке у меня просто отображается экран загрузки.

Я закомментировал это обратно…

Собрал снова. То же самое.

Закомментировал настройки Spaces S3.

Собрал снова.

Работает

  • Форум загружается
  • Изображения загружаются
    • Новые через Spaces — не CDN
    • Старые через локальное хранилище

Не работает

  • Файлы не загружаются в Spaces
  • Ссылки CDN не используются для загрузки изображений
  • Если DISCOURSE_S3 и after_assets_precompile не закомментированы, форум просто зависает на экране загрузки в браузере

Идей больше нет. Хожу по кругу.

Мне придётся оставить это на время. По крайней мере, проблема с местом больше не будет актуальна, так как новые загрузки и резервные копии теперь сохраняются в Spaces.

Похоже, проблема решена!

Обновлен URL S3 CDN на… https://XXXXX.sfo3.cdn.digitaloceanspaces.com

Это настройка обеспечивает правильный путь, но я немного запутался, потому что имя бакета должно быть в URL S3 CDN, но не в URL S3, поэтому они кажутся несогласованными в этом отношении.

Затем я выполнил…

rake uploads:migrate_to_s3 --trace

Ранее в панели управления Spaces отображалось несколько сотен элементов, но затем я заметил…

4361 элемент, 49,3 ГиБ…

…после обновления…

4640 элементов, 49,4 ГиБ…

…оно живо!!! Думаю, на этот раз всё сработало, потому что, возможно, я раньше не был в приложении, поэтому выполнил это, чтобы войти (если не ошибаюсь)…

./launcher enter app

Я также выполнил…

rake posts:rebake

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

Мне нужно дать этому процессу поработать некоторое время. Я так и сделаю и сообщу, если потребуется какая-либо дополнительная очистка.

Хотя прирост количества предметов замедлился, загрузка и рост продолжаются. За ночь добавилось ещё 125 предметов, и впервые появилась папка «Tombstone».

Записываю это для любых других новичков, проходящих через это.

Вот что в итоге сработало:

Эти настройки должны быть в файле конфигурации app.yml, чтобы rake-задачи выполнялись корректно. Когда они находились только в разделе /admin/site_settings/, rake-задачи не работали правильно. Я получал ошибку:

ERROR: Ensure S3 is configured in config/discourse.conf or environment vars

Настройки взяты отсюда… Configure an S3 compatible object storage provider for uploads

Конкретно я использовал стандартные настройки Spaces с двумя пробелами перед каждой строкой. …

DISCOURSE_USE_S3: true
DISCOURSE_S3_REGION: whatever
DISCOURSE_S3_ENDPOINT: https://nyc3.digitaloceanspaces.com
DISCOURSE_S3_ACCESS_KEY_ID: myaccesskey
DISCOURSE_S3_SECRET_ACCESS_KEY: mysecretkey
DISCOURSE_S3_CDN_URL: https://nyc3.cdn.digitaloceanspaces.com
DISCOURSE_S3_BUCKET: my-files
DISCOURSE_S3_BACKUP_BUCKET: my-files/my-backups
DISCOURSE_BACKUP_LOCATION: s3
DISCOURSE_S3_INSTALL_CORS_RULE: false

ПРИМЕЧАНИЕ: Значение DISCOURSE_S3_REGION должно быть буквально «whatever» и не должно выглядеть как реальный регион S3 (например, us-west-1).

Также эти настройки в секции hooks раздела ## Plugins go here

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

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

Это происходило только потому, что система искала ассеты, которые ещё не были обновлены. Пришло время запустить rake-задачи изнутри приложения…

./launcher enter app

rake s3:upload_assets

После выполнения этой задачи количество элементов увеличилось, и в нашем бакете появилась папка «assets»…

Затем форум начал загружаться корректно. Вот единственные настройки, связанные с S3, которые отображаются в моём разделе /admin/site-settings…

Я выполнил следующую команду для загрузки всех файлов, и она обновила URL с старого пути на новый (без CDN).

rake uploads:migrate_to_s3 --trace

После завершения количество элементов более чем утроилось.

Единственное, что я заметил: пути к изображениям в старых постах использовали URL S3 ENDPOINT, тогда как в новых постах — URL S3 CDN.

https:/my-storage.sfo3.digitaloceanspaces.com/
против
https:/my-storage.sfo3.cdn.digitaloceanspaces.com/

Меня это не особо беспокоило, поскольку всё уже использовало S3.

Но я попытался запустить…

rake posts:rebake

image

Процесс остановился из-за нехватки памяти. Я попробовал запустить вместо этого…

rake posts:rebake_uncooked_posts

Он несколько раз исчерпывал память и перезапускался, затем снова не хватало памяти. Я запустил его снова. В конце концов он обработал все посты.

После полного выполнения до 100% все ссылки наконец использовали путь S3 CDN, как в старых, так и в новых постах. Более 34062 элементов при объёме хранилища 65,9 ГБ (резервная копия <9 ГБ).

Очень рад, что теперь всё работает через S3, включая резервные копии. Кстати, наверное, самое время сделать резервную копию!

Надеюсь, это кому-то поможет.

Удачи!