Настройка файлового хранилища
Pimcore использует мощную и гибкую библиотеку файлового хранилища Flysystem для хранения различных типов контент-файлов, таких как ассеты, миниатюры, данные версионирования и многое другое.
Чтобы настроить собственное файловое хранилище, достаточно переопределить любые из стандартных определений, указав нужный адаптер.:
flysystem:
storages:
pimcore.asset.storage:
# Хранилище исходных файлов ассетов, структура директорий соответствует структуре дерева ассетов
adapter: 'local'
visibility: private
directory_visibility: public
options:
directory: '%kernel.project_dir%/public/var/assets'
pimcore.asset_cache.storage:
# Хранилище кэшированных файлов ассетов, например PDF и изображений, сгенерированных из Office-файлов или видео,
# которые затем используются движком миниатюр в качестве исходных файлов
adapter: 'local'
visibility: private
options:
directory: '%kernel.project_dir%/public/var/tmp/asset-cache'
pimcore.thumbnail.storage:
# Хранилище миниатюр изображений и видео, структура директорий соответствует дереву исходных ассетов
adapter: 'local'
visibility: private
directory_visibility: public
options:
directory: '%kernel.project_dir%/public/var/tmp/thumbnails'
pimcore.version.storage:
# Хранилище сериализованных данных версионирования документов, ассетов и объектов данных
adapter: 'local'
visibility: private
options:
directory: '%kernel.project_dir%/var/versions'
pimcore.recycle_bin.storage:
# Хранилище сериализованных данных корзины для документов, ассетов и объектов данных
adapter: 'local'
visibility: private
options:
directory: '%kernel.project_dir%/var/recyclebin'
pimcore.admin.storage:
# Хранилище общих административных ресурсов, таких как аватары пользователей, кастомные логотипы и т.д.
adapter: 'local'
visibility: private
options:
directory: '%kernel.project_dir%/var/admin'
Вы можете ознакомиться со всеми официальными адаптерами и сторонними адаптерами для использования собственного файлового хранилища.
Обратите внимание, что при работе в кластерной среде все эти хранилища должны быть общими для всех вычислительных узлов. Использование стандартного адаптера local подходит только для односерверных окружений.
В зависимости от используемого хранилища (например, при использовании S3) может также потребоваться добавить префикс к фронтенд-пути ассетов и миниатюр. Это можно настроить с помощью следующих конфигураций:
pimcore:
assets:
frontend_prefixes:
# Префикс, используемый для исходных файлов ассетов
source: https://oreo-12345678990.cloudfront.net/asset
# Префикс, используемый для всех сгенерированных миниатюр изображений и видео
thumbnail: https://tavi-12345678990.cloudfront.net/thumbnail
# Префикс, используемый для отложенного пути плейсхолдера миниатюр.
# Миниатюры обычно генерируются по требованию (если не настроено иначе),
# и этот префикс используется для миниатюр, которые еще не были сгенерированы
# и, соответственно, пока недоступны в хранилище миниатюр.
# Как правило, изменять эту настройку не требуется, однако возможный сценарий использования — указать отдельный хост,
# который занимается генерацией миниатюр и снимает нагрузку с основного сервера (или серверов) приложения.
# thumbnail_deferred: https://thumbnail-generator-node.example.com
Это добавит настроенный префикс к путям ассетов и миниатюр во фронтенд-контексте (например, в шаблонах).
Таким образом, путь /Sample/Tavi.jpg будет преобразован в https://tavi-12345678990.cloudfront.net/asset/Sample/Tavi.jpg
а путь /Sample/362/image-thumb__362__galleryThumbnail/Tavi.jpg — в
https://tavi-12345678990.cloudfront.net/thumbnail/Sample/362/image-thumb__362__galleryThumbnail/Tavi.jpg
Это особенно полезно при использовании объектного хранилища с публичным доступом или при использовании CDN, такого как CloudFront, для раздачи ресурсов.
Пример: адаптер AWS S3 для ассетов
Сначала установите адаптер AWS S3 с помощью команды:
composer require league/flysystem-aws-s3-v3
Следующим шагом необходимо настроить сервис клиента AWS S3 для класса Aws\S3\S3Client со следующими обязательными параметрами:
| Имя | Описание |
|---|---|
endpoint | URL эндпоинта AWS S3 |
region | Регион AWS для доступа к бакету |
version | Версия API (последняя или конкретная) |
credentials | Учетные данные IAM: Access Key ID и Secret Access Key |
# config/packages/prod/flysystem.yaml
services:
assets_s3:
class: 'Aws\S3\S3Client'
arguments:
- endpoint: 'https://s3.eu-central-1.amazonaws.com'
region: 'eu-central-1'
version: 'latest'
credentials:
key: '%env(S3_STORAGE_KEY)%'
secret: '%env(S3_STORAGE_SECRET)%'
Для получения дополнительной информации о необходимых правах IAM ознакомьтесь с документацией Flysystem.
Затем переопределите базовую конфигурацию Flysystem, чтобы использовать удаленное хранилище вместо локального. Для этого измените адаптер с local на aws.
Также обновите следующие параметры:
client: вновь созданный сервис 'assets_s3'bucket: создайте новый бакет в консоли управления S3 и укажите его имяprefix: префикс, который используется как корневая папка для типа хранилища (например, ассеты, версии, миниатюры и т.д.). Все данные хранилища будут создаваться внутри этой папки
# config/packages/prod/flysystem.yaml
flysystem:
storages:
pimcore.asset.storage:
adapter: 'aws'
visibility: public
options:
client: 'assets_s3'
bucket: 'bucket-name'
prefix: assets
Миграция хранилища
При переходе на другой тип хранилища часто требуется перенести данные из старого хранилища в новое. Pimcore предоставляет команду для выполнения миграции данных между хранилищами. В процессе используется API Flysystem listContents, который рекурсивно считывает данные из исходного (source) хранилища и копирует их в целевое (target) хранилище.
Для миграции данных выполните следующие шаги:
- оздайте конфигурацию Flysystem для исходного и целевого хранилищ. Важно соблюдать следующую структуру именования: конфигурационный узел источника:
pimcore.{storagetype}.storage.sourceи конфигурационный узел назначения:pimcore.{storagetype}.storage.target
Ниже приведено несколько примеров:
| Задача миграции | Узел источника | Узел назначения |
|---|---|---|
asset | pimcore.asset.storage.source | pimcore.asset.storage.target |
thumbnail | pimcore.thumbnail.storage.source | pimcore.thumbnail.storage.target |
version | pimcore.version.storage.source | pimcore.version.storage.target |
flysystem:
storages:
pimcore.asset.storage.source:
adapter: 'local'
visibility: public
options:
directory: '%kernel.project_dir%/public/var/assets'
pimcore.asset.storage.target:
adapter: 'aws'
visibility: public
options:
client: 'assets_s3'
bucket: 'bucket-name'
prefix: asset
pimcore.thumbnail.storage.source:
adapter: 'local'
visibility: private
directory_visibility: public
options:
directory: '%kernel.project_dir%/public/var/tmp/thumbnails'
pimcore.thumbnail.storage.target:
adapter: 'aws'
visibility: public
options:
client: 'assets_s3'
bucket: 'bucket-name'
prefix: thumbnail
- Запустите команду
pimcore:migrate:storage, указав тип хранилища в качестве аргумента:bin/console pimcore:migrate:storage asset.
Также возможно передать несколько аргументов, чтобы выполнить миграцию разных хранилищ за один запуск.
Вывод:
[INFO] Migrating storage "asset"
22 [------------>-------------] Migrating asset: Brand Logos/Morris_Motors_badge.png
Вы можете предложить улучшение документации или задать вопрос в комментариях.
Если вам нужна полноценная консультация — вы можете заказать её на нашем сайте.