Если вы когда-нибудь задумывались как хранить личные медифайлы которых становится все больше, у вас телефон на Android и вы не очень доверяете облакам, то эта статья, возможно, для вас.
Моё медиа хранилище в 948,4 GiB выглядит сейчас вот так (фото начинаются с 2001 года)
А сам Pipeline нарисован на схеме. Пояснения - после картинки.
Появление файлов
В 97% случаев файлы появляются на телефоне. Или прямо при съемке камерой самого телефона (фото в HEIF, видео в HEVC) или через импорт со всяких экшен камер.
Со сделанным камерой телефона все просто, фотки просматриваются и неудачные удаляются, видео обрезается в родном редакторе Samsung или редактируются в CapCut
С импортированным из экшн камер - сложнее. Сначала они импортируются в телефон, потом редактируются, потом полученное выливаются в папку которая участвует в общем pipeline, а исходники безжалостно удаляются. C GoPro и DJI Action 2 этот процесс был не очень спешным, в силу того что файлы были не очень большие, а родные редакторы не очень удобные. C Insta360 X4 весь этот процесс гораздо динамичнее. Во-первых потому что исходники просто огромные (1 минута 8 секунд в 8K 30fps это 1.4Gb), а во-вторых приложение очень удобное, на Samsung S24 Ultra работает очень быстро, как на редактировании, так и на импорте в плоские видео и поэтому прохождение этого этапа не откладывается и идёт быстро и по фану.
Еще есть фотки которые присылают в мессенджерах. Нужные тупо перекладываются в особую папку на которую настроена синхронизация.
В итоге, в некий момент времени есть фото и видео которые хочется сохранить где-то еще.
Google Photo
Гугл фото в моем pipeline является тупиковой веткой. Он используется в основном для мгновенного сохранения медиафайлов. Пока его получается проплатить - он там и останется, если не получится в очередной раз его проплатить или его заблочат то он будет запросто заменен на syncthing как средство мгновенного бекапа. В 22 году, когда были проблемы с его продлением я его почистил, удалив все видео, и оставив по паре фоток от каждого события что бы осталась карта и напоминания о событиях. В 23 году проблема была решена, но надежды на него никакой.
Синхронизация в Nexcloud
Nexcloud - это сервер на Raspberry Pi 4 c SSD диском подключенным через USB на Ubuntu и стоящий дома. Для пущей секурности он живет в отдельной подсети DMZ в которую есть доступ с интернета. Когда на телефоне все ненужные фотки и видео удалены в программе Google Photo, а нужные из мессенджеров переложены в правильную папку, то на телефоне вручную запускается джобка в бесплатной версии foldersync. Ее вполне хватает для синка новых файлов в Nexcloud.
Nexcloud -> Immich
Сервер с Immich это машинка на ASRock J5040-ITX в корпусе Thermaltake Suppressor F1 с двумя дисками на 3Tb WD42PURZ в RIAD1 в 8G RAM. Все это работает на Ubuntu. Immich поднят через docker compose и так как проект 'The project is under very active development' то обновляется в ручную через `docker compose pull`. И web ui и нативное приложение уведомляют о том что вышла новая версия и с этим проблем нет
Раз в два часа на этом сервере запускается rsync который ходит на Nexcloud и забирает новые файлы, не удаляя локальные файлы даже если в Nexcloud они были удалены.
Так же на сервере есть Photoprism. Поднимался тоже через docker compose. Вообще я с него начинал, он хороший, но web ui на телефоне - ужасен. То искал фотки за 2005 год, и вместо закрытия фотки нажал назад и улетел в начало списка, в 2024, то при скроллинге web ui посчитал что ты не только поскролил, но и выбрал часть фоток и ты смотришь, а у тебя не одна фотка выбрана а 15, и непонятно где их искать что бы убрать из выделения, это могло незаметно произойти 10 экранов назад. У Immich есть свое приложение почти лишенное этих недостатков. Так как призма хлеба на просит, а обновляется автоматом через watchtower то я его оставил, но перевел в read only режим, что бы иногда заглядывать и сравнивать.
После того как rsync забирает файлы то Immich сам это видит, начинает их сканировать и добавляет в медиатеку, а Photoprism делает это по пинку по таймеру.
Immich работает в RW режиме с файлами, поэтому через него можно удалять файлы.
Вспоминается только один минус Immich - он не умеет raw. Но таких фоток у меня минимум.
Бекапы
Фото и видеофайлы которые затаскивает rsync на сервер с Immich раз в сутки бекапятся с помощью restic. Restic поддерживает те же протоколы что и rclone, поэтому отлично заливает бекапы как в яндекс диск так и в домашний NAS через подмонтированную samba шару. Все это легко меняется на любое нужное и используемое в это части pipeline.
Пока в pipeline отсутствуют средства бекапа разметки файлов в Immich, что не очень хорошо, потому что информация о альбомах и именах найденных лиц хранится именно там. В распознанных у меня 709 лиц, и некоторые имена приходилось прям тяжело вспоминать через соцсети и телефонную книгу, жалко будет их потерять. Но этот пункт пока в TODO.
Удаление файлов.
Весь pipeline защищён от удаления в нескольких местах, и поэтому удаление файлов имеет некоторые особенности.
Удалять фотки при первоначальной чистке лучше всего в Google Photo, тогда они попадут в корзину и их можно будет достать какое то время, ну и мест на гугловом хранилище очистится, чего не произойдёт если удалять фотки в родной галерее.
После этапа Nexcloud -> Immich уже все равно что происходит в google photo, на телефоне или nexcloud. Файлы все равно останутся на сервере с Immich.
Если удалить фотки в Immich, то они все равно останутся в бэкапах restics и для полного исчезновения файла надо проводит операцию удаления старых снапшотов.
Автоматизация разворачивания
Вся описанная история довольно просто автоматизируется в Ansible. У меня именно так это и сделано. Есть только одна ручная операция - выдача доступа restic в Яндекс диск при деплое всего этого барахлишка.
Комментарии (28)
pes_loxmaty
08.09.2024 13:50Не раскрыта тема для параноиков. Если <username> боится лить в гугл или яндекс свои сокровенные фотки в открытом виде?
sergeygals Автор
08.09.2024 13:50Тут все не просто, а очень просто, google photo из пайплайна выкидывается и меняется на Syncthing если нужен мгновенный бекап. С яндекс диском и делать ничего не надо, restic все бекапы шифрует. И кажется эта фича даже не отключается.
UksusoFF
08.09.2024 13:50https://www.photosync-app.com
Это для тех кто не хочет лить в Google
Ставиться на комп и при подключении к домашнему WiFi синкаетсяevent1
08.09.2024 13:50То же можно и клиентом nextcloud делать. Пока вне сети не синкается, а как в сеть попадает, сразу синкается.
Antra
08.09.2024 13:50Насколько я понимаю, у вас основной фокус на реальных фотках людей, поэтому нужно распознавание лиц и т.п. И при этом у вас есть опыт с разными приложениям (Immich, Photoprism и т.п.). Можете подсказать, что лучше подойдет (стоит посмотреть) для несколько других задач, а именно ручного раскидывания по папкам (ну или тегирование)?
Идея в том, что бы сфотканное на телефон легко помечать каким-то образом и сохранять либо в отдельную тематическую папку (и на смартфоне и в хранилище).
Пример:
прокладывал в огороде водопровод, перед закапыванием траншей все отфоткать и поместить в папаку "Огород".
фотки экранов BIOS и т.п. в "Комп". Желательно еще и доп теги поставить потом на компе
В коробку что-то складывается, по слоям фоткается...
Причем если со смартфона удалю, в хранилище должно остаться (незачем на смартфоне хранить водопровод). Однако же если что-то больше не нужно, желательно удалить отовсюду (и из хранилищ с компьютерным интерфейсом, и со смартфона) разом. Условно и из Immich, и из NextCloud, и со смартфона. Может с подтверждением каким (удалил из Immich, не сразу, но должна быть возможность, чтобы на NextCloud тоже исчезло со временем).
Какие-то фотки из поездок, к примеру, тоже нужны. И тоже не "сплошным потоком", а с группировкой. Причем избирательно, что кешировать на смартфоне, а что "на лету" иметь возможность подкачать.
И желательно туда же (в хранилища и на смартфон) скачиваемые картинки какие-то. К примеру, когда выбирал насос, скачивал множество графиков с их гидродинамическими характеристиками. Их тоже в кучку., которую потом можно грохнуть (а тот, что выбрал - в "Хозяйство"). Или "демотиваторы по темам". Причем скачать можно и с компа (на диск, потом смартфон это увидит), и со смартфона (и это пусть попадет в нужную папку на нем и в хранилище).
В идеале, чтобы картинки хранились в виде файлов, чтобы и обычные синхронизовалки работали.
Все сразу, наверное, маловероятноь. Но хоть более-менее похожие варианты есть (без фокуса на распознавание лиц и т.п.)?
sergeygals Автор
08.09.2024 13:50в Immich есть тэги, но создать и вешать на фотки их можно только в Web UI. PhotoPrism создаёт сам тэги, но принцип выбора не очень понятен, некоторые тэги весьма забавны, примеры под спойлером
Скрытый текст
так что я бы этой функции особо не доверял.
Опять же и там и там фотки можно сортировать добавляя в альбомы. Но все это постфактом и через Web UI
Antra
08.09.2024 13:50Спасибо!
Ну первая специально сделана по приколу, мне кажется Я бы и сам мог лажануться и принять за торт. А остальные да, забавно :)
GrakovNe
08.09.2024 13:50Недавно поднял примерно то же самое, только без второго бекапа
Apple фотолента синкается с айфона в иммич, развернутый на проксмокс-виртуалке, к которой прикручен 8TB SSD и оттуда уже не исчезает. Раз в три месяца вычищаю из iCloud данные и параллельно руками копирую фотки с домашнего облака на оффлайновую Samsung T7 которая физически лежит в шкафу без питания большую часть времени
То есть фотки живут всегда в двух местах: либо iCloud + Immich, особо холодное хранилище + Immich
Автоматически бекапить думал, но не стал: еще одно облако мне не нужно, поднимать второй сетевой диск не с руки, а бесконечно складывать в iCloud довольно уныло и дорого
buldo
08.09.2024 13:50Synology + его же приложение на телефоне как будто бы покрывает весь этот пайплайн...
sergeygals Автор
08.09.2024 13:50+1так так, очень интересно, а как Synology высунута в интернет ? или все идёт таки через сервера Synology ? а как с шифрованием бекапа на другие ресурсы ? и, главное, как с восстановлением этих бекапов без Synology ?
buldo
08.09.2024 13:50+1Для доступа к NAS доступны следующие варианты:
Синхронизация по локальной сети
Синхронизация через проксирующие сервера Synology
Выставить NAS в интернет
Само приложение синхронизации умеет в два адреса - для локальной сети и "внешний".
У меня телефон подключается к домашней сети подключается по VPN. У Synology есть пакет VPN сервера( правда у меня VPN сервер на mikrotik)
Если выставлять NAS в интернет, то есть поддержка Let's Encript и DynDNS.
Теперь про бэкап:
Отдельное приложение для работы с Glacier
HyperBackup, который умеет в dropbox, google диск, azure, S3, webDav, rsync, samba, usb устройства и тп
Есть некий Archiware P5
Можно купить второй Synology, поставить куда-нибудь подальше и сделать кластер
Про шифрование не скажу - уже не помню, давно не пользовался встроенным бэкапом. Помню только, что оно есть и выгружает ключи и просит сохранить перед бэкапом.
Лично я раз в год-полгода с помощью другого компа и Veeam сливаю всё, что есть на касету и передаю родителям. Шифрованием не пользуюсь ибо надеюсь на физическую защиту.
sergeygals Автор
08.09.2024 13:50Я бы не рискнул его выставлять в инет https://www.cvedetails.com/vulnerability-list/vendor_id-11138/Synology.html?page=1&order=1. А с прокси серверами ровно та же проблема что с гулофото, завтра могут отрубить, и основанный на них пайплайн встанет + то что они делают с трафиком никто кроме них не знает. Постоянный vpn домой мне тоже не очень нравиться. Как и завязку на бекапы которые непонятно можно ли восстановить без synelogy. Restic все таки open-source.
buldo
08.09.2024 13:50+2Вот только по вашей ссылке каких-то настоящих проблем нет. Половина относится к камерам, а для второй половины пользователь должен быть аутентифицирован.
Вам не нравится, а мне наоборот нравится постоянный vpn домой - и NAS под рукой, и Home Assistant, и rpd до компа.
Бэкапы можно восстановит без NAS. Для этого отдельная утилита для компа.
Actor
08.09.2024 13:50А зачем Nextcloud тут, внешний доступ без впн разве что?
sergeygals Автор
08.09.2024 13:50Nexcloud не только для медиа используется, он все равно есть. Ну и опять же да, с ним не надо vpn держать включённым, и он живёт в DMZ сети. Смысл такого сетевого разграничения именно в том что если взламывают сервис то дальше идти не могут, доступа в Lan подсеть с этой подсети нет.
buldo
08.09.2024 13:50Кстати, вот этого момента с DMZ я никогда не понимал. Если immich ходит в nextCloud, значит сетевая связность есть. То есть dmz - это просто отдельная подсесть между которой и LAN есть фаервол?
sergeygals Автор
08.09.2024 13:50все так, там фишка в том что из LAN в DMZ можно, а из DMZ в LAN - нельзя. Ну и на управляющие порты роутера тоже нельзя.
StraNNicK
08.09.2024 13:50Серьёзный подход.
Я себе оставил immich и как бэкапилку фото (не использую для этого syncthing), и как собственно приложение для фото. Ну уверен, что вы подразумеваете под тэгами, нонеонканейронка в нём есть и неплохо работает.sergeygals Автор
08.09.2024 13:50В призме тоже поиск по ключевым словам есть, но у него ещё есть страница в котором он собирает фотки по выбранным им ключевым словам. Алгоритм добавления туда не понятен, но вот, например есть подборка backpack. И там прям реально рюкзаки. Или wings. И там прям реально крылья самолётов. Но угадывает далеко не всегда.
StraNNicK
08.09.2024 13:50да, я сначала тоже призму поставил (ну и вообще штук пять вариантов посмотрел).
уже не помню точно, что не так, но скорее всего там нет поддержки нескольких пользователей.
Tirarex
У меня на NAS ( https://habr.com/ru/companies/ruvds/articles/837642/ ) стоит truenas, в нем Immich как контейнер (все нативно настраивается через UI), папки загрузок одновременно доступны на SMB шаре. Там же подключена библиотека (1,5тб на текущий момент) с raw фото с камеры.
Пайплайн прост, подключаем камеру в USB - Скриптик копирует все содержание камеры на NAS, где Immich Сканирует папку раз в день. Можно так же подключить туда загрузку из приложения на телефоне, благо у Immich Очень адекватный мобильный софт.
А сам NAS бэкапить куда угодно, благо методов море.
Умеет, в моем случае работает с Araw От сони.
sergeygals Автор
Ну значит проблема только с raw который делает samsung на телефоне :) ну и описанный вами простой пайплайн имеет ряд недостатков, главный из которых он даже из соседней комнаты не работает, не то что из другого города :)
Tirarex
С чего бы? вы же на смартфон делаете фото, так просто поставьте на него https://play.google.com/store/apps/details?id=app.alextran.immich&hl=ru и приложение само синхронизирует фото напрямую в Immich без посредников. Приложение можно натравить как на фото с телефона так и на спец папки куда скидываются фото с камер (я могу с камеры сони по воздуху фото получать, а приложение иммич само уже их импортирует куда надо)
Если говорить о синхронизации вне рамок одной сети с сервером, то можно поднять Tailscale до домашнего сервера (Можно только локальный траффик домой пускать https://tailscale.com/kb/1444/android-app-split-tunneling ), или wiregaurd+ddns если по старинке.
sergeygals Автор
Вот по этому :) я так понял подключать к насу надо.
Таки приложение immich у меня конечно стоит, и я в курсе что оно синхронизировать умеет, но мне не нравится такая синхронизация. Это надо постоянно включённым держать vpn домой, вычищать неудачные фото и из гугла и из immich.