Настраиваем Drupal для работы с Yandex S3 Object Cloud

28 мая 2022

Для хранения больших данных, а конкретно файлов и прочего мусора, лучше использовать S3 хранилища, например Amazon, Сбер, Mail, Yandex и других, но в связи со сложными погодными условиями, будем настраивать хранение на Российских серверах, например у Яндекса с их Object Storage.

Как известно Drupal это зверь для работы с большими и специфическими сайтами, например у нас есть CRM система, где пользователи, часто загружают, открывают, скачивают документы. Документы, как известно, любят кушать место на диске. Приступим:

  1. Яндекс
    1. Регистрируемся в Яндекс, открываем https://cloud.yandex.ru и нажимаем Подключиться
    2. Консоль управления, читаем и отжимаем нужные галочки -> Войти
    3. Создайте ваше первое облако -> Любое название, например site-cloud -> Создать
    4. Видим панель управления -> Слева вверху, квадратики (Далее Меню), нажимаем -> Выбираем Биллинг -> Добавляем Платежный аккаунт -> Создаем и закидываем на счет, например 500 руб.
    5. Ждем пока деньги зачисляться и аккаунт станет в Active
    6. Жмем Меню -> Консоль управления -> По центру экрана, Вкладки "Сервисные аккаунты" -> Справа вверху "Создать сервисный аккаунт"
      1. Имя - любое
      2. Остальное пропускаем
      3. Роли в каталоге -> выбираем из списка: editor и iam.serviceAccounts.user
      4. Сохраняем. Справа вверху видим и нажимаем "Создать новый ключ" -> Создать статический ключ доступа (Object Storage...) -> Создать
      5. Копируем к себе "Идентификатор" и "Secret key" -> Сохранили. Отложили  в сторонку. Здесь мы закончили.
    7. Жмем Меню -> Консоль управления -> из списка выбираем Object Storage -> Переходим в Бакеты -> Создаем бакет
      1. Имя - любое понятное имя, например название сайта
      2. Макс. размер - выбираете какой необходимо, либо просто ставим галочку "Без ограничения"
      3. Остальные поля По умолчанию
      4. Сохраняем
    8. Теперь мы создали бакет и нам нужно привязать к нему пользователя.
    9. Напротив нашего Бакета видим 3 точки, жмем -> Выбираем ACL бакета -> Выбираем нашего созданного и выбираем READ и WRITE -> Сохраняем
    10. Жмем на название бакета -> Выбираем "CORS"
      1. Описание - Любое
      2. Allowed Origins - https://*.site.com
      3. Allowed Methods - GET, PUT, HEAD, POST, DELETE
      4. Остальное не трогаем и Сохраняем
    11. На этом все, работы с Яндексом закончены
  2. Drupal
    1. Ставим модули S3 File System и S3 File System CORS Upload
    2. Открываем наш сайт по FTP/SSH
      1. Открываем файл settings.php (web/sites/default/settings.php)
      2. В самый низ, вставляем:
        # S3FS setting
        $settings['s3fs.access_key'] = 'Идентификатор';
        $settings['s3fs.secret_key'] = 'secret key';
        $settings['s3fs.use_s3_for_public'] = TRUE;
        $settings['s3fs.use_s3_for_private'] = TRUE;
        $settings['php_storage']['twig']['directory'] = '../storage/php';
      3. Сохраняем
    3. Переходим к странице настроек, по пути /admin/config/media/s3fs
      1. S3 Bucket Name -> Название нашего бакета в Яндексе
      2. Жмем Use a Custom Host и вбиваем https://storage.yandexcloud.net
      3. Ставим в S3 Object Cache-Control Header -> public, max-age=300
      4. Жмем
      5. Public Folder -> public
      6. Private Folder -> private
      7. Сохраняем
      8. Открываем вкладку "Действия" -> "Validate configuration" -> "Проверить" -> Получаем сообщение "Your configuration works properly"
      9. Готово. Дальше уже можете загрузить уже существующие в облако и произвести прочие действия описанный в документации модуля Drupal S3fs.

Если видите ошибку, можете воспользоваться нашими услугами по настройке синхронизации вашего Drupal сайта с S3 хранилищем.