Последнее время доверие к облакам как-то резко упало, и пока кончалась годовая подписка на Google One на 2Т было время подумать, что делать дальше. В итоге родилась старая концепция — ‘храним данные дома’. И вот что их этого получилось
Google Photos
Облакам доверия нет, но старое желание синкать фото и видео с телефона не пропало. При этом не хотелось бы вручную разбирать накопленный в google photo архив размером в 255G, а хотелось некоторой автоматизации в виде разбора фоток по лицам, местам, датам и возможности поиска по ключевым словам типа ‘море’ или ‘пятигорск’.
Опыт был против высовывания всего подряд в интернет поэтому была задумана и запилена классическая схема с DMZ. Ну не совсем сейчас а она была сделана давно. Если вы не в курсе что такое DMZ то это просто. Просто подсеть в которой живут сервисы доступны с интернета (у нас же типа клауд) но которая не может ходить на сервисы в LAN сама.

Софт того что притворяется Google Photos
OS — Linux Ubuntu 22.04 и на nexcloud и на photoprism. Раньше на nexcloud жил Arch Linux, но, недавно воткнулся в то когда то давно поставил туда 34 разрядную систему на которой последние релизы Nexcloud отказываются работать. Ну и зоопарк из OS не очень удобен для автоматизации развертывания
Ansible — ввиду того что дома стало аж 2 сервера плюс еще есть VMки снаружи вся настройка обоих серверов была перенесена в ansible, и конфигурирование происходит только через плейбуки и хранится в гите
Nexcloud (с mysql) — ставился через snap, были перенесен дефолтный порт 80 был перенесен на другой
Caddy2 (на сервере с nexcloud). Вообще nexcloud поставленный из snap умеет let’s encrypt сертификаты, но мне не понравилось, что даже при обращении по IP он всем говорит что он nexcloud, просто домен не правильный. Поэтом в качестве реверс прокси был установлен caddy2, который при 12 строчка[ конфига делает все что нужно: и обратно проксирует, и let’s encrypt сертификат генерит и обновляет без всяких cron джоб. При обращении по IP или неверному DNS имени он шлет нафик с ssl error, что гораздо правильнее на мой взгляд
Photoprism — запускается через docker-compose вместе с нужным mysql, индексация 225GB в виде 26134 фоток и 1461 видео забранных через Google Takeout заняло примерно 32 часа, при этом процы были сожраны целиком, а памяти максимально скушало на старте, в районе 3,5 гигов, потом потребление памяти упало до 2х гигов и больше не росло. Нагенерил для себя данных на 38G + 547M базу mysql. База и данные живут на ssd, фотки на md raid1 на двух 4х террабайтных дисках. Живет на отдельном tcp порту, доступен только локально дома или через vpn.
Из плюсов:
-
Очень удобная штука даже при работе с телефона
-
Работает шустро.
-
Работает поиск по словам типа ‘jeep’ (выдает фотки и уазиков в том числе), ‘cat’ и прочее похожее . Правда, несмотря на наличие русскоязычного интерфейса поиск ‘кот’ ничего не вернет.
-
Работает поиск по географическим наименованиям, названия в РФ парсятся на русском, и, поэтому, например ’Пятигорск’ работает, а вот Прагу надо искать уже как Praha
-
При индексировании распознал примерно 55 лиц, притом детей распознал в диапазоне от 5 до 18 лет вполне верно. Некоторые люди, правда, распались на два лица, но это не проблема, после распознания им можно дать одно и тоже имя и они склеются в одного человека. Правда с этим надо аккуратнее, Если двух разных Максимов назвать Максим они склеются в одного человека и как расклеить я не нашел (кроме полного удаления всех данных и рескана)
-
На отдельно вкладке доступны распознанные теги и фотки по ним, у меня их распознало 150. Примеры тегов — Aircraft, Alpine, Boat, Car, Document, и прочее, даже есть Throne, Wok и Tripod. Распознание достаточно точное, но не без приколов, в тот же Tripod попала крупная фотка центра ветряка с лопастями.
-
Есть карта, достаточно примитивная, без названий, с грубыми очертаниями границ и морей, без каких либо названий кроме двухбуквенных обозначений стран. Обещают это исправить в след релизах
-
Есть так называемые Моменты по названию которых примерно понятно что там скорее всего будет, как пример — Bays, Capes & Beaches, Festivals & Entertainment, Nature & Landscape и Water, Ships & Boats
-
Есть встроенный WebDAV для добавления фоток через интерфейса
-
Можно создавать свои альбомы
-
Можно шарить альбомы и фотки через urlы без логина в систему, а можно прям из интерфейса отсылать на сторонний WebDAV сервер. Ролей нет, но, по большому счету, логин там нужен только для управления, дома можно пошарить альбомы в виде url и все показывать.
-
Можно удалять фотки (или отключить такую возможность в интерфейсе)
-
Есть раздел Папки, в нем такие же папки как на диске
-
Есть раздел Календарь, там все по датам
-
Есть раздел Приватные, туда попадают фотки которые призма распознала как взрослые, туда часто попадает что не попадя, например люди в водолазных костюмах 🙂
-
Дубликаты распознает, и в показе их нет, но, удалять сам пока не умеет, обещают это со временем запилить
Zabbix (стоит на сервере Photoprism) — мониторинг обоих серверов + nas, роутера и принтера через SNMP + мониторинг внешних VMок с алертами на почту и в телегу. Да, не модно, но с прометусом возится не хотелось
Rclone — синкает Nexcloud по webdav на временную папку на сервере Photoprism
Bash — тупой скрипт который разбирает то что прилетело с Nexcloud по датам и копирует в папку с фотками на md raid, а так же дергает Photoprism на тему индексации новых фоток
Алгоритм работы всего этого чудо облака
На телефон был установлен http://www.tacit.dk/foldersync который сникает фото в Nexcloud с удалением (то есть если удалил фотки в телефоне, то они удаляются и в Nextcloud). Притом вручную, сейчас нет полной обратной синхронизации как в Google Photos, то есть удаление фотки в Photoprism не приведет к удалению ее на телефоне, а удалять в нескольких местах никакого желания. Поэтому сейчас фоткаю — снимаю видео, потом в свободное время удаляю лишнее в виде дублей и неудачного. И запускаю ручной синк через foldersync.
В это время на сервере Photoprism раз в час происходит следующее
-
Rclone с сервера Photoprism синкает локальную директорию с Nexcloud (с удалением удаленного в Nexcloud)
-
Посинканное разбирается по датам и копируется в директорию с фотками в директорию содержащую дату
-
Photoprism пинается на предмет индексации директории с фото в процессе чего он находит новое, его индексирует и оно появляется в интерфейсе
-
Если удалить фото на телефоне оно удалится и в Nexcloud и во временной директории на Photoprism, но при этом останется в той папке что индексирует Photoprism
В результате всего этого
-
Полная и актуальная копия фото/видео с телефона хранится в Nextcloud и одной временной директории на сервере Photoprism
-
Все новое, что появляется автоматом разбирается по датам и копируется в папку с датой внутри папки которую индексирует Photoprism, удаление фоток на телефоне на это никак не сказывается.
-
Враги, взломав Nexcloud снаружи получат доступ максимум к тому что хранится на нем, установление соединений из DMZ в LAN запрещены.
Железо
-
Nexcloud — Raspberry PI 4 Model B + внешний USB SSD
-
Photoprism / Zabbix: Мать/проц/память — ASRock J5040-ITX / интегрированный Intel Pentium J5040 / 8G, HDD — 4 ТБ WD Purple [WD42PURZ] x 2 (в виде md raid1), SSD — 250 ГБ 2.5″ SATA Samsung 870 EVO [MZ-77E250BW] (на нем живет временная папка. с фотками, mysql для photoprism, а так же его данные типа превьюшек), корпус — Thermaltake Suppressor F1
-
NAS — старенький но живой qnap с 1 гигом памяти (распаяна, расширить нельзя)
-
Router — Mikrotik hAP ac (RB962UiGS-5HacT2HnT)
Это все что хотелось рассказать о замене Google Photos 🙂 и немного о другом.
Замена WordPress для мини бложека
Раньше держал для бложика в который пишу раз в 2 — 3 месяца всякую техно ботву, WP с mysql на VM зачем то. Было это на очень недорогом Digital Ocean, счас с оплатой надо исхитряться, перешел на другого провайдера с оплатой тут и VMками в Германии, недавно подумал — «а зачем ?». И ответ сначала заставил себя ждать, а потом вообще отказался приходить. И пошел искать всякое без этих всех php и прочих mysql.
И нашел систему сборки статичекских файликов сайта. То что нужно для моих примитивных хотелок. Сначала наткнулся на https://jekyllrb.com/, повозился с установкой всех этих ruby и gem пактетов, разобрался как запинать автосборку на github pages, перенес пару постов, и даже вроде понравилось, но пришел бывший коллега и сказал что у него на 80 постах сборка уже тормозит и посоветовал посмотреть в сторону https://gohugo.io/.
И вот он очень понравился
-
Один бинарник на go (а не эта возня с ruby и gem как у jekyll)
-
Автосборка отлично работает в github на github pages
-
Если завтра не будет доступа к github / github pages то собрать сайт локально и выложить куда-то вообще не проблема, требования минимальны
-
Есть поддержка google analytics из коробки
-
Куча тем
-
Удалось выложить даже видео в посте
-
Он нереально быстр

всем добра и автоматизации
ссылка на оригинал статьи https://habr.com/ru/post/699374/
Добавить комментарий