posts projects about

Медленная загрузка фото в Nextcloud

11 января 2024 г. linux self-hosted

Я уже несколько лет использую Nextcloud в качестве основного места хранения фотографий. Сначала я страдал от ооочень медленной загрузки фото в веб-интерфейсе и мобильном приложении. Решение этой проблемы очень простое.

Первичная генерация

В разделе Приложения своего Nextcloud-а я нашел дополнение Preview Generator. Это официальный плагин, который генерирует превью для всех фото в облаке. Потом, когда в веб-интерфейсе или в приложении на смартфоне вы будете просматривать фото, он не будет грузить многомегабайтный оригинал, а покажет это превью. Если скачать фото на диск, то скачается уже полный оригинал.

Я установил плагин из веб-интерфейса, и, перед запуском процедуры генерации, обновил Nextcloud до последней версии. По субъективным ощущениям последняя версия работает шустрее.

Сначала надо запустить генерацию превьюшек для уже существующих фото. Я зашел в докер-контнейнер с nextcloud-ом и выполнил:

$./occ preview:generate-all --path="/admin/files/Фото"

Указал, что хочу превьюшки только из папки Фото.

У меня 132 ГБ фотографий, и на одном ядре Intel Celeron J1900 весь процесс занял несколько дней, поэтому я запускал команду внутри screen-а.

Сгенерированные файлы лежат в <nextcloud_корень>/data/appdata_.... У меня получилось 60 ГБ превьюшек.

Регулярная задача

Для генерации превью новых фотографий, нужно добавить примерно такую cron-джобу:

*/20 * * * root docker exec -u www-data -t nextcloud_app_1 ./occ preview:pre-generate

Чтобы это всё работало, внутри nextcloud-а должен корректно работать крон. Для этого я тоже использую планировщик на сервере, и делаю обычный exec внутрь контейнера:

*/5 * * * * root docker exec -u www-data -t nextcloud_app_1 php -f cron.php

Итог

Теперь раздел Фото в приложении и веб-интерфейсе по скорости работы сопоставим с Google Фото или Яндекс.Диском.

Из минусов:

  • пока не смог сделать превью для видео. Вероятно, не хватает какого-то ffmpeg или еще чего-то. В интернете пишут, что должно работать.
  • пришлось заплатить шестьюдесятью гигами свободного места для превьюшек. И эта цена будет расти со временем