Да, похоже, я использую неподдерживаемого провайдера S3 (OVH Object Storage)
С конечной точкой https://s3.de.ovh.cloud.net и настроенным s3 cdn_url как https://storage.de.ovh.cloud.net/v1/<уникальный-идентификатор-пользователя>/<имя-бакета>
При разрешении коротких ссылок Discourse использует конечную точку для построения результирующего URL (что не работает, так как он не включает правильный идентификатор пользователя OVH — часть, указанную в s3 cdn_url).
Однако принудительное добавление dl=1 к коротким ссылкам позволило бы сформировать работающую предподписанную ссылку, что меня устроило бы.
Я установил следующие (специфичные для S3) переменные окружения в файле конфигурации контейнера:
DISCOURSE_USE_S3: true
DISCOURSE_S3_REGION: DE
DISCOURSE_S3_ENDPOINT: https://s3.de.cloud.ovh.net
DISCOURSE_S3_ACCESS_KEY_ID: ...
DISCOURSE_S3_SECRET_ACCESS_KEY: ...
DISCOURSE_S3_CDN_URL: https://storage.de.ovh.cloud.net/v1/<уникальный-идентификатор-пользователя>/<имя-бакета>
DISCOURSE_S3_UPLOAD_BUCKET: <имя-бакета>
DISCOURSE_S3_INSTALL_CORS_RULE: false