ms2Gallery и Selectel Cloud Storage
Предлагаю вам пошаговую инструкцию в картинках, как настроить ms2Gallery для работы с удалёнными файлами на Selectel Cloud Storage.

Если вы не знаете, что это и зачем нужно — советую прочесть заметку на хабре. В двух словах: картинки быстрее грузятся клиенту и не занимают лишнего места на сервере хостинга. Сразу скажу, инструкция простейшая, как 3 копейки — это вам не монструозный Amazon S3.
Итак, первым делом регистрируемся на сервисе и настраиваем себе корзину для файлов:

Она должна быть публичной, имя указываем любое, какое нравится. Обратите внимание, что Selectel дарит вам 10 рублей на счет, которых хватит за глаза для тестирования.
Дальше смотрим настройки загрузки файлов. Нас интересует адрес корзины в самом верху

В комментариях подсказали, что если использовать selcdn.com вместо selcdn.ru, то включается CDN, и скорость загрузки файлов клиенту должна вырости.
После этого активируем пользователя, который будет работать с сервисом со стороны сайта

Нам понадобятся его имя и пароль.
Ну и желательно указать HTTP заголовки для наших файлов, чтобы браузеры знали, как их кэшировать. Я поставил кэш до конца года:

Заказываем себе новый тестовый сайт на modhost.pro c установкой ms2Gallery и Theme.Bootstrap.

Заходим в админку, устанавливаем пакет Swift Media Source Type из нашего репозитория и мысленно благодарим Евгения Дурягина.
Затем проходим в настройки источников файлов, выбираем ms2Gallery Images и переключаем его тип на OpenStack:

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

Уже можно заходить на страницу ресурса и загружать файлы — всё работает.
Перемещаем в чанке Head вызов jQuery внутрь MinifyX и тестируем сайт на скорость:
Тест Webpagetest, адрес selcdn.ru:

Тест Webpagetest, адрес selcdn.com:
Как видно, включился CDN.
Тест от Google:

Здесь ничего не меняется независимо от адреса.
Сама работа с файлами в админке станет немного медленнее, потому что:
Это прекрасно укладывается в основную идею ms2Gallery — подготовить файлы в админки, а на frontend выводить уже всё готовое, безо всяких phpthumbof и прочих дополнительных обработок.
Для нормальной работы нужна версия ms2Gallery 1.4.2 — там исправлен мелкий баг при работе с удалёнными источниками файлов.
Недолго думая, обновил еще и Uploadify, чтобы он тоже мог нормально работать с удалёнными источниками. Настройка не отличается ничем, просто поправил пару недоработок.
Поправил кое-какие E_WARNING в старом файловом API Swift и выложил его у нас в репозитории от имени Евгения, надеюсь, он не против.

Если вы не знаете, что это и зачем нужно — советую прочесть заметку на хабре. В двух словах: картинки быстрее грузятся клиенту и не занимают лишнего места на сервере хостинга. Сразу скажу, инструкция простейшая, как 3 копейки — это вам не монструозный Amazon S3.
Настройка Storage
Итак, первым делом регистрируемся на сервисе и настраиваем себе корзину для файлов:

Она должна быть публичной, имя указываем любое, какое нравится. Обратите внимание, что Selectel дарит вам 10 рублей на счет, которых хватит за глаза для тестирования.
Дальше смотрим настройки загрузки файлов. Нас интересует адрес корзины в самом верху

В комментариях подсказали, что если использовать selcdn.com вместо selcdn.ru, то включается CDN, и скорость загрузки файлов клиенту должна вырости.
После этого активируем пользователя, который будет работать с сервисом со стороны сайта

Нам понадобятся его имя и пароль.
Ну и желательно указать HTTP заголовки для наших файлов, чтобы браузеры знали, как их кэшировать. Я поставил кэш до конца года:

Настройка MODX
Заказываем себе новый тестовый сайт на modhost.pro c установкой ms2Gallery и Theme.Bootstrap.

Заходим в админку, устанавливаем пакет Swift Media Source Type из нашего репозитория и мысленно благодарим Евгения Дурягина.
Затем проходим в настройки источников файлов, выбираем ms2Gallery Images и переключаем его тип на OpenStack:

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

Уже можно заходить на страницу ресурса и загружать файлы — всё работает.
Тестирование
Перемещаем в чанке Head вызов jQuery внутрь MinifyX и тестируем сайт на скорость:
Тест Webpagetest, адрес selcdn.ru:

Тест Webpagetest, адрес selcdn.com:
Как видно, включился CDN.Тест от Google:

Здесь ничего не меняется независимо от адреса.
Заключение
Сама работа с файлами в админке станет немного медленнее, потому что:
- Картинка грузится на сервер
- Выгружается на Selectel
- Генерируются превьюшки
- Выгружаются на Selectel
Это прекрасно укладывается в основную идею ms2Gallery — подготовить файлы в админки, а на frontend выводить уже всё готовое, безо всяких phpthumbof и прочих дополнительных обработок.
Для нормальной работы нужна версия ms2Gallery 1.4.2 — там исправлен мелкий баг при работе с удалёнными источниками файлов.
P.S.
Недолго думая, обновил еще и Uploadify, чтобы он тоже мог нормально работать с удалёнными источниками. Настройка не отличается ничем, просто поправил пару недоработок.
P.P.S.
Поправил кое-какие E_WARNING в старом файловом API Swift и выложил его у нас в репозитории от имени Евгения, надеюсь, он не против.
Комментарии: 51
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
Спасибо за новую возможность удаленного хранения файлов, это очень пригодится.
Вопрос, касательно возможного развития ms2Gallery. Иногда возникает необходимость использовать некоторые изображения в галерее произвольно, т.е. галерея используется как универсальное хранилище привязанное к ресурсу. Да, теперь есть тэги, они же группы, это удобно.
Вот бы еще используя ms2Gallery полностью отказаться от хранения заглавного фото статьи в тивишке. Т.е. если бы в галерее была возможность как то хранить одно дополнительное изображение, со своим отдельным набором превьюшек… ))) Т.е. одно решение и полный набор инструментов для иллюстрирования статей.
Есть идея отмечать основной файл и хранить на него ссылку в поле properties ресурса, но это для будущих версий, я и так в последние дни что-то увлёкся доработками.
Основной файл изображения для статьи было бы самое то, хоть с возможностью генерации отдельных превьюшек, хоть с обычным ресайзингом. Главное, что бы все изображения одной статьи лежали в управлялись в одном месте, а вызывать основной файл можно было бы где угодно. А ms2Gallery наилучшим образом подходит для этого, как мне кажется.
Но самая большая проблема, что в случае проблем с селектелом (а они, увы, иногда случаются), сайт на страницах, где используется связка selectel cdn — swift отдает 500-ю ошибку. Речь об оригинальном swift, возможно, Василий это поправил.
На фронтенде отдаются готовые URL, и даже источник файлов не инициализируется. Если Selectel вдруг не работает, то никаких ошибок 500 не будет — просто не загрузятся картинки.
Тормозов в галерее ресурса тоже нет, они могут быть только при работе непосредственно в дереве файлов.
Вот такие глупые вопросы, потому что даже не смотрел еще, но вдруг ответ получится быстрее.
Скорость работы галлереи в вашем примере впечатляет, уже чешутся руки.
Upd. Это вы из-за моего сегодняшнего вопроса, даже гайд написали? Очень большое спасибо. Долго искал подобное решение и гугл меня уводил в сторону каких больных фантазий, когда подобное надо было делать через 3-4 компонента…
iris-noir.de — вот весь сайт на ms2Gallery.
Upd. Насмотрелся там на женщин, пойду спать О_О
Христос воскрес!
Об этом говорить ссылка на файл:
145709.selcdn.ru/test/1/360x270/hand-to-hand-combat-mirrors-edge-wallpaper-1920x1080.jpg
Для того, что бы грузить с CDN, необходимо поменять в ссылках ".ru" на ".com"
Так же есть возможность привязать файловый контейнер облака к своему домену, для этого нужно добавить CNAME запись, указывающую на xxx.selcdn.com.
Еще на selcdn.com, в отличии от selcdn.ru есть GZIP сжатие
Решил, что раз хост называется selcdn.ru и его хозяева говорят о наличии у них CDN — то это оно и есть.
Ну ок, поправил ссылки и инструкцию. По тестам с CDN файлы грузятся чуть медленнее, и нет заголовков кэширования — очень странно.
Собственно в заголовках нет кэширования, потому, что кешируются они в CDN.
Более подробно (в том числе и о деталях выше), можно прочитать в другой статье на хабре
Посмотрим на результаты, когда закэшируется — пока оставил так.
Для пользователей из центральной части России и СПб будет грузится даже быстрее, потому что пул серверов находится в СПб.
У Tickets не получается работать с Selectel потому что в файле /core/components/tickets/model/tickets/ticketfile.class.php в функции save(); не отрабатывает
$this->mediaSource->moveObject(); Зависает и всё. Пробовал заменить её на $this->mediaSource->renameObject(); Результат тот же.
И из консоли эти функции не отрабатывают с источником Selectel.
Пришлось делать такую конструкцию для загрузки файлов в облако из TicketForm:
Так Tickets работает как надо с Selectel.
PS Сравниваю старый путь и новый не просто так, я не углублялся почему так происходит, но при формировании превьюшки в форме создания тикета по логам видно что $old_path и $new_path совпадают — '0/'.
Попробовал просто добавить новый источник и закинул несколько фоток. В дереве отображаются с иконкой изображения, но превью при наведении не работает.
Если посмотреть код генерируемой картинки
картинка не открывается, но если поправить адрес удалив в нем то картинка по такому урлу начинает работать
галерея тут не причем.
добавляется &source который cdn не воспринимает
правим файл
удаляем &source из шаблона:
и тут
Теперь превью начинает работать в tv картинках. А вот в диспетчере файлов не работает. Там для превью не полный путь до cdn указывается.
чтоб генерировались перевью надо еще разрешить
phpthumb_allow_src_above_docroot и разрешить домены cdn phpthumb_nooffsitelink_valid_domains
правим файл
на это
Теперь и в диспетчере файлов превью отображаются.
Видно, никому и не нужно.
Либо не парятся… не работает — ищут другой компонент.
Также напомню, про список багов:
1 — В диспетчере файлов не показываются миниатюры prnt.sc/as14c0
2 — В диспетчере файлов не удаляются изображения prnt.sc/as16mf
3 — При выборе изображения в простой ТВ не показываются миниатюры — prnt.sc/as14n9
4 — в ms2gallery, когда открываешь отдельную картинку — тоже не выводятся миниатюра — prntscr.com/aukow0
5 — очень напрягает, то что изображения ms2gallery сыпятся прямо в корень контейнера selectel… prntscr.com/aukpkg
Хотелось бы, чтобы появилась новая настройка в источниках файла — в какую папку бы грузились бы все файлы… ну или же вместо этого, чтобы он опирался на эти настройки prntscr.com/aukqbx — хотя они и стоят, он все равно грузят их в корень.
Только вот с 5 пунктом не понятно… Может просто я что-то не понял…
Параметры basePath игнорируется… Возможно как-нибудь сделать так, чтобы файлы грузились в конкретную папку контейнера selectel.
К примеру у меня есть в контейнере папка gallery — и в неё грузятся все картинки от ms2gallery… Что не делал, всегда в корень грузит…
Тоже самое и с простым источником файлов selectel для простых ТВ.
В спецификации самого протокола нет даже директорий, как таковых — они «виртуальные», все файлы хранятся в корне контейнера.
Поэтому нужно просто создать отдельный контейнер с источником чисто для галереи, и использовать себе спокойно.
Для других нужд — другой контейнер и другой источник файлов.
Контейнеров и источников можно создавать сколько угодно.
gallery.mysite.ru — контейнер для ms2gallery
files.mysite.ru — контейнер для простых ТВ
То есть не как не получиться грузить файлы на один поддомен и с ms2gallery и с простых ТВ.
Я правильно понял?, спасибо
curl_multi_exec в php.ini из disable_functions убрал. (
но есть другая проблемка. Если создать медиа данного типа то при работе с ним в логах получаю
И превьюшки не создаются. История та же что при работе с файлами через просмотр картинок что при загрузке через ms2gallery.
Не генерирует превью в cdn облаке.
Пишется ошибка — «Пожалуйста, укажите существующий файл.»
Компонент Swift работает только с msgallery или любые ресурсы можно прицеплять?
Интересует возможность подтягивания видео через tv поля.