Sharder: различия между версиями
Kondin (обсуждение | вклад) |
Kondin (обсуждение | вклад) |
||
Строка 1: | Строка 1: | ||
Sharder – приложение<br> | Sharder – приложение<br> | ||
+ | |||
+ | Для хранения файлов в облаке Яндекс-S3 вам необходимо зарегистрироваться по этой ссылке: [https://console.cloud.yandex.ru?referralCode=dn260nj494roht0mkce4 https://console.cloud.yandex.ru] | ||
+ | |||
Приложение призвано сохранять картинки не на локальном диске хостинга внутри папки сайта, а на удаленном сервере.<br> | Приложение призвано сохранять картинки не на локальном диске хостинга внутри папки сайта, а на удаленном сервере.<br> | ||
На некоторых сайтах сейчас скопилось до 200 Гб картинок, поэтому назрел вопрос как их разделять по разным хранилищам.<br> | На некоторых сайтах сейчас скопилось до 200 Гб картинок, поэтому назрел вопрос как их разделять по разным хранилищам.<br> |
Текущая версия на 13:17, 16 декабря 2022
Sharder – приложение
Для хранения файлов в облаке Яндекс-S3 вам необходимо зарегистрироваться по этой ссылке: https://console.cloud.yandex.ru
Приложение призвано сохранять картинки не на локальном диске хостинга внутри папки сайта, а на удаленном сервере.
На некоторых сайтах сейчас скопилось до 200 Гб картинок, поэтому назрел вопрос как их разделять по разным хранилищам.
В процессе обработки и сохранения поля uploads сначала картинки сохраняются как раньше в папку /img/data/. Это нужно чтобы они правильно ресайзились, переворачивались и накладывались водяные знаки.
Но после всех обработок, если включено приложение apps.sharding.enable тогда массив картинок передается на обработку классу
$result = $this->sharder->shard($files, $this->getServerFullUrl(true));
Эта процедура загружает файлы на удаленный сервер и в ответ получает URL адреса загруженных файлов.
Затем выполняется запаковка uploads поля, но теперь название каждого файла это URL-картинки. Также добавляется признак remote = ‘true’ чтобы в шаблонах и других приложениях было понятно что это не локальные картинки, а URL-адреса картинок.
array('preview' => $preview_url, 'normal' => $normal_url, 'type' => 'graphic', 'mime' => $ext, 'remote' => ‘true’);
Теперь при выводе в шаблонах нужно выполнять проверку признака remote, чтобы вместо формирования относительного пути, просто выдавать ее в чистом виде.
Пример вывода картинок в шаблоне
<img src="{if $photoitem.remote}{$photoitem.normal}{else}{$estate_folder}/img/data/{$photoitem.normal}{/if}" />
Для миграции картинок из локального хранилища на шарды есть скрипт
/apps/sharder/cron.php?cron_key=XXX
Он загружает по N-записей и отправляет локальные файлы на удаленный сервер, заменяет uploads массив и затем удаляет локальные файлы. После каждого запуска порция записей отмечается как обработанная data.sharded = 1
Необходимо переделать способ вывода картинок в приложениях, которые используют картинки – выгрузки, например. Анализировать признак remote=’true’