Иконка ресурса

Использование DigitalOcean Spaces или Amazon S3 для хранения файлов в XF 2.1 & XF 2.2 2.4.1

Нет прав для скачивания
Sadorimatsu, Вам нужен статический ключ Object Storage, конфигурации должен выглядеть примерно так


PHP:
$s3 = function()
{
   return new \Aws\S3\S3Client([
      'credentials' => [
         'key' => 'Ваш ключ',
         'secret' => 'Ваш ключ'
      ],
      'region' => 'us-east-1',
      'version' => 'latest',
      'endpoint' => 'https://storage.yandexcloud.net'
   ]);
};
$config['fsAdapters']['data'] = function() use($s3)
{
   return new \League\Flysystem\AwsS3v3\AwsS3Adapter($s3(), 'бакет', 'data');
};
$config['externalDataUrl'] = function($externalPath, $canonical)
{
   return 'https://бакет.website.yandexcloud.net/data/' . $externalPath;
};
$config['fsAdapters']['internal-data'] = function() use($s3)
{
   return new \League\Flysystem\AwsS3v3\AwsS3Adapter($s3(), 'бакет', 'internal_data');
};

В настройках бакета на yandex cloud, чтобы не пропадали иконки, прописать во вкладке веб, ваше доменное имя. Иначе не будет работать.

К бакету можно еще yandex cdn подтянуть

Посмотреть вложение 141337
Подскажите, пожалуйста, правильно ли я понимаю что в версии 2.3.+ достаточно прописать соответствующий конфиг, и всё? Плагин устанавливать и какие-то дополнительные манипуляции в админ панели уже не нужны?
 
Homer, да, для S3 на 2.3 вам не нужен этот плагин, а вот шаблон для конфига да, можно смело взять, он подойдёт для любой S3, вам тока менять нужно ключ, секретный ключ, адрес облака endpoint и прямой путь до бакета где $externalPath и подставлять его название для data и internal_data. Всё остальное общий шаблон. На Яндекс идти не советую, недавно сам с них слез. Иногда может потребоваться изменить region.
 
Последнее редактирование:
Sadorimatsu, все заработало, большое спасибо!

кто в итоге на каком s3 остановился? что можете начального уровня посоветовать, до 100 гб?
 
Sadorimatsu, все заработало, большое спасибо!

кто в итоге на каком s3 остановился? что можете начального уровня посоветовать, до 100 гб?
Очень дешево, но небольшие подгрузки будут, если для вас не критично, то смело мог рекомендовать beget.
 
Костылем через баш скрипт, который будет переодически проверять доступность S3 и в случае проблем комментить строку используя банальный . Но решение двумя строками выше более верное
там в конфиге бакета два таймаута на 5 сек прописываются (или по месту). тогда пхп не зависает при недоступности.
 
PHP:
$s3 = function()
{
   return new \Aws\S3\S3Client([
      'credentials' => [
         'key' => 'key',
         'secret' => 'secret'
      ],
      'region' => 'default',
      'version' => 'latest',
      'endpoint' => 'https://yourendpoint',
      'http' => [
      'connect_timeout' => 5,
      'timeout' => 5
   ]


   ]);
};

как-бы так.
 
Если частенько ловите со своим облаком ошибки 503, то что это значит?
  • Ошибка 503 Slow Down - это защитный механизм S3. Когда сервер XenForo пытается проверить наличие файла (HeadObject), а таких запросов приходит слишком много, S3 отвечает отказом, чтобы не перегрузиться.
Я частенько их ловил с Beget, а после переезда на FirstVDS гляжу сохранилось и даже участились, хотя изначально на S3 Яндекса когда был, таких проблем не видел, вероятно там просто была защита от подобного, а на других это устроено по-разному. Виной тут активность ботов.
В результате нашёл способ это решить. Раз это защита от частых запросов, а на это у нас способны чаще боты, то нашлось решение:
Добавить после 'endpoint' => '****',
Код:
'retries' => [
      'mode' => 'adaptive',
      'max_attempts' => 10,
      ],
  • 'retries' => [...] - это инструкция для библиотеки AWS, которая управляет запросами к S3.
  • 'mode' => 'adaptive' - включает «умный» режим. Если S3 начинает отвечать 503 Slow Down, библиотека не просто выбросит ошибку, а автоматически сделает паузу и попробует еще раз. Официальная документация AWS прямо предупреждает, что этот режим является экспериментальным. Его поведение может измениться, и он не является стандартом по умолчанию. В отличие от стандартного режима, adaptive может задерживать не только повторные, но и первоначальный запрос, если обнаруживает троттлинг. AWS рекомендует этот режим для сценариев с интенсивным троттлингом и работой с одним ресурсом.
  • 'max_attempts' => 10 - количество попыток. По умолчанию их 3, мы увеличиваем до 10. Теперь, если случится кратковременный сбой, скрипт подождет и повторит запрос, и пользователь даже не заметит ошибки.
Я буквально вчера проверил на себе, за ночь не одной ошибки и в работе никак не сказывается, пока понаблюдаю, но как видно работает.

По поводу рекомендаций в теме от hurtman, то дополню от себя:
  • connect_timeout => 5 - это сколько секунд ждать установки соединения с S3. По умолчанию 0 (бесконечно). Ставим 5: если S3 не отвечает, скрипт быстро падает с исключением, а не висит.
  • timeout => 5 - это лимит на весь HTTP-запрос целиком. По умолчанию 0 (бесконечно), и PHP на Linux не считает сетевое ожидание в PHP max_execution_time, тут спасает только nginx через «ошибку» 504. Ставим 20 или 50 (меньше вашего лимита 30/60 в max_execution_time), чтобы SDK сам бросал перехватываемое исключение.
Местами рекомендуется, но необязательно. Если проблем не испытываете, то проставлять это не нужно.
 
Последнее редактирование:
Местами рекомендуется, но необязательно. Если проблем не испытываете, то проставлять это не нужно.
Это когда S3 падает, оно утягивает за собой форум
У меня на таймвеб бывали падения на час, больше. Всё, в это время форум висит тоже
Есть проставить то что выше hurtman давал, то форум работает, просто не доступны вложения с ошибкой. Что более логично как по мне
Почему такого механизма нет что S3 хранилище становится недоступный, не понятно, не предусмотрели как-то
 
Это когда S3 падает, оно утягивает за собой форум
У меня на таймвеб бывали падения на час, больше. Всё, в это время форум висит тоже
Есть проставить то что выше hurtman давал, то форум работает, просто не доступны вложения с ошибкой. Что более логично как по мне
Почему такого механизма нет что S3 хранилище становится недоступный, не понятно, не предусмотрели как-то
Действительно такое замечал, когда бегет отвалился. В этом случае да, полезно проставлять.
 
  • Мне нравится
Реакции: Its
Современный облачный хостинг провайдер | Aéza
Назад
Сверху Снизу