Сборки серверов

СливПлатные

Сейчас онлайн

  • itsDesterYT
  • DeN_ZeR
  • okonecc
  • vissmu
  • Lu1tWu
  • anhvuquang0512
  • traceroute
  • Ksefters
  • MystalDev
  • Phareal
  • MilfXanter
  • Rossek2
  • Deputat
  • tsevvvv
  • matvey222
  • proto123
  • admikaz
  • Deaser
  • Leonyce
  • paralich
  • Cev
  • MilkaXD
  • MonSoli
  • Matnes
  • Okami
  • Nikitos1512
  • moolbum
  • suprimes
  • dawg
  • vladvd91
  • epeepkppk
  • Define_original
  • Kostiel
  • TotalChaos09
  • Aleksandr281

Инструкция Использование DigitalOcean Spaces или Amazon S3 для хранения файлов в xenForo

bobobo

Совместимость с версиями XenForo


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

Почему это руководство?


Начиная с XenForo 2.0.0, реализована поддержка удаленного хранения файлов с использованием абстрактной файловой системы Flysystem. Это означает, что между кодом и файловой системой добавляется слой абстракции, обеспечивающий единый API для работы с файлами. Таким образом, независимо от того, используется ли локальное хранилище или распределенная удаленная система, код выполняет те же вызовы, а Flysystem обрабатывает их соответствующим образом.

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

Если вы планируете использовать функцию загрузки видео в XF 2.1 и выше и беспокоитесь об увеличенном потреблении дискового пространства, это руководство поможет вам.

Доступность необходимых файлов


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

Перед началом


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

Настройка DigitalOcean Spaces

Сначала рассмотрим настройку DigitalOcean Spaces, так как этот процесс наиболее простой. Если вы хотите использовать Amazon S3, переходите к соответствующему разделу ниже.
  1. Перейдите на DigitalOcean Cloud, зарегистрируйтесь или войдите в аккаунт.
  2. Если вы новый пользователь DigitalOcean, возможно, потребуется настроить платежные данные.
  3. Создайте новый проект.
  4. Нажмите "Start using Spaces".
  5. Выберите регион дата-центра (например, Амстердам).
  6. Оставьте включенным параметр "Restrict File Listing".
  7. Укажите уникальное имя (например, xftest).
  8. Нажмите "Create a space".
После создания хранилища у вас появится endpoint URL, например:
Сохраните его для дальнейшего использования.

Создание API-учетных данных


Чтобы создать API-ключи:
  • Нажмите "Manage" в левом боковом меню.
  • Перейдите в "API".
  • В разделе "Spaces access keys" нажмите "Generate New Key".
  • Введите имя ключа (например, xftest) и сохраните.
  • Вам будут выданы ключ и секретный ключ — сохраните их.
Настройка XF для работы с DigitalOcean Spaces
Откройте файл src/config.php.
Необходимо настроить клиент Amazon S3 (API DigitalOcean Spaces совместимо с AWS SDK).
Для этого используем closure (замыкание), чтобы код можно было переиспользовать и не дублировать:
PHP:
$s3 = function()
{
   return new \Aws\S3\S3Client([
      'credentials' => [
         'key' => 'ABC',
         'secret' => '123'
      ],
      'region' => 'ams3',
      'version' => 'latest',
      'endpoint' => 'https://ams3.digitaloceanspaces.com'
   ]);
};

Обратите внимание, что ключ и секретный ключ — это те данные, которые вы сохранили после создания "Spaces access key".

Регион можно определить из ранее сохраненного endpoint URL. Это часть после первой "." в URL, в данном случае — ams3.

Endpoint — это тот же endpoint URL, но без указанного вами уникального имени.

Теперь необходимо настроить адаптер Flysystem для работы с клиентом S3:
PHP:
$config['fsAdapters']['data'] = function() use($s3)
{
   return new \League\Flysystem\AwsS3v3\AwsS3Adapter($s3(), 'xftest', 'data');
};

Наконец, необходимо убедиться, что URL-адреса аватаров и миниатюр вложений содержат правильный префикс. Для этого потребуется ранее сохраненный endpoint URL:

PHP:
$config['externalDataUrl'] = function($externalPath, $canonical)
{
   return 'https://xftest.ams3.digitaloceanspaces.com/data/' . $externalPath;
};
На этом этапе новые загрузки должны работать корректно. Если аватары и миниатюры вложений отсутствуют, не беспокойтесь — существующие файлы нужно перенести вручную, что мы разберем позже.

Сначала необходимо проверить, работает ли конфигурация. Просто загрузите новый аватар. Теперь он будет храниться и загружаться удаленно!

Если вы откроете свой аккаунт DigitalOcean Spaces, то увидите, что были созданы новые папки с вашим аватаром:
1740870515552
Отлично! Теперь мы на полпути.

Далее нужно добавить поддержку для каталога internal_data. Обычно в нем хранятся вложения и другие файлы, которые должны оставаться "приватными".

Открываем config.php, и добавляем код, который очень похож на предыдущий:
PHP:
$config['fsAdapters']['internal-data'] = function() use($s3)
{
   return new \League\Flysystem\AwsS3v3\AwsS3Adapter($s3(), 'xftest', 'internal_data');
};
Теперь попробуйте загрузить вложение в сообщение. Так же, как и раньше, в браузере файлов Spaces должны появиться новые файлы и папки.

Настройка Amazon S3

  1. Перейдите на страницу AWS Management Console, зарегистрируйтесь или войдите в аккаунт.
  2. В разделе "AWS services" введите "S3", чтобы открыть "S3 Console".
  3. Нажмите "Create bucket".
  4. Выберите имя бакета (например, xftest).
  5. Выберите регион (например, EU London).
  6. Примите все остальные параметры по умолчанию и создайте бакет.
  7. Перейдите в консоль IAM.
  8. Нажмите "Add user".
  9. Укажите имя пользователя (например, xftest).
  10. Установите "Programmatic" в качестве типа доступа.
  11. Для настройки прав перейдите на вкладку "Attach existing policies directly", затем нажмите "Create policy".
  12. IAM и политики доступа могут показаться сложными, но процесс можно упростить. На странице создания политики откройте вкладку "JSON" и вставьте следующий код, заменив YOUR-BUCKET-NAME на название вашего бакета:
    JSON:
    {    "Version": "2012-10-17",
        "Statement": [
            {
                "Effect": "Allow",
                "Action": [
                    "s3:ListBucket",
                    "s3:GetObject",
                    "s3:GetObjectAcl",
                    "s3:putObject",
                    "s3:putObjectAcl",
                    "s3:ReplicateObject",
                    "s3:DeleteObject"
                ],
                "Resource": [
                    "arn:aws:s3:::YOUR-BUCKET-NAME",
                    "arn:aws:s3:::YOUR-BUCKET-NAME/*"
                ]
            }
        ]
    }
  13. Нажмите "Review policy", укажите имя политики и сохраните.
  14. Вернитесь на предыдущую страницу "Add user", нажмите "Refresh" и найдите созданную политику.
  15. Нажмите "Next", затем "Create user".
  16. Вам будут выданы ключ и секретный ключ — сохраните их.

Настройка XF для работы с Amazon S3


Теперь нужно настроить XenForo для использования Amazon S3 в качестве хранилища файлов. Начнем с того, что обычно хранится в data (миниатюры вложений, аватары и т. д.).

Откройте файл src/config.php.
Мы используем closure (замыкание), чтобы код можно было переиспользовать и не дублировать:
PHP:
$s3 = function()
{
   return new \Aws\S3\S3Client([
      'credentials' => [
         'key' => 'ABC',
         'secret' => '123'
      ],
      'region' => 'eu-west-2',
      'version' => 'latest',
      'endpoint' => 'https://s3.eu-west-2.amazonaws.com'
   ]);
};
Обратите внимание, что ключ и секретный ключ — это те данные, которые вы сохранили при создании пользователя IAM.

Регион можно определить из S3 endpoint URL.

Теперь необходимо настроить адаптер Flysystem для работы с клиентом S3:
PHP:
$config['fsAdapters']['data'] = function() use($s3)
{
   return new \League\Flysystem\AwsS3v3\AwsS3Adapter($s3(), 'xftest', 'data');
};
Наконец, необходимо убедиться, что URL-адреса аватаров и миниатюр вложений содержат правильный префикс:
PHP:
$config['externalDataUrl'] = function($externalPath, $canonical)
{
   return 'https://xftest.s3.eu-west-2.amazonaws.com/data/' . $externalPath;
};
На этом этапе новые загрузки должны работать корректно. Не беспокойтесь, если аватары и миниатюры вложений отсутствуют: если у вас есть существующие файлы, их нужно перенести вручную, что мы разберем позже.

Сначала необходимо проверить, работает ли конфигурация: просто загрузите новый аватар. Аватар теперь будет храниться и загружаться удаленно!

Если вы откроете браузер файлов вашего S3-бакета, то увидите: новые папки были созданы, содержащие ваш новый аватар:
1740871268238
Успех! 🌟 Но мы только на полпути!

Теперь нам нужно добавить поддержку каталога internal_data. Обычно в нем хранятся вложения и другие файлы, которые должны оставаться "приватными".

Открываем config.php, и добавляем код, который очень похож на предыдущий:
PHP:
$config['fsAdapters']['internal-data'] = function() use($s3)
{
   return new \League\Flysystem\AwsS3v3\AwsS3Adapter($s3(), 'xftest', 'internal_data');
};

Теперь попробуйте загрузить вложение в сообщение, и, как и раньше, в браузере файлов вашего бакета должны появиться новые файлы и папки. 🎉

Перенос существующих файлов в DigitalOcean Spaces или Amazon S3​

Теперь ваши файлы загружаются и хранятся удаленно. По крайней мере, все новые файлы. Но что делать с уже существующими?

К счастью, существует несколько способов взаимодействия с Spaces и S3, чтобы упростить процесс переноса существующего контента. Хотя это разовая операция, в зависимости от количества и размера файлов она может занять значительное время.

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

Если вы используете Spaces или S3, вы можете установить s3cmd на сервер и выполнить команды для копирования файлов в новое хранилище.

Вместо того чтобы повторять уже существующую инструкцию, вот официальное руководство от DigitalOcean, которое подробно объясняет, как перенести ваши файлы с помощью s3cmd.
Примечание: При копировании существующих файлов данных их необходимо сделать публичными. Это можно сделать, установив ACL в режим public во время копирования:

Источник: тык
 

Вложения

  • XFAws-2.4.1.zip
    712,4 КБ · Просмотры: 0
ВерхНиз