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

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

Эти настройки должны быть в файле конфигурации 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, включая резервные копии. Кстати, наверное, самое время сделать резервную копию!

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

Удачи!