Pull to refresh

Замена облакам в нашем кружке «oч.умелые ручки»

Reading time6 min
Views19K

Последнее время доверие к облакам как-то резко упало, и пока кончалась годовая подписка на Google One на 2Т было время подумать, что делать дальше. В итоге родилась старая концепция - 'храним данные дома'. И вот что их этого получилось.

Google Photos

Облакам доверия нет, но старое желание синкать фото и видео с телефона не пропало. При этом не хотелось бы вручную разбирать накопленный в google photo архив размером в 255G, а хотелось некоторой автоматизации в виде разбора фоток по лицам, местам, датам и возможности поиска по ключевым словам типа ‘море’ или ‘пятигорск’.

Опыт был против высовывания всего подряд в интернет поэтому была задумана и запилена классическая схема с DMZ. Ну не совсем сейчас а она была сделана давно. Если вы не в курсе что такое DMZ то это просто. Просто подсеть в которой живут сервисы доступны с интернета (у нас же типа клауд) но которая не может ходить на сервисы в LAN сама.

Секурная классика
Секурная классика

Софт того что притворяется Google Photos

OS - Linux Ubuntu 22.04 и на nextcloud и на photoprism. Раньше на nextcloud жил  Arch Linux, но, недавно воткнулся в то когда то давно поставил туда 32 разрядную систему на которой последние релизы Nextcloud отказываются работать. Ну и зоопарк из OS не очень удобен для автоматизации развертывания.

Ansible - ввиду того что дома стало аж 2 сервера плюс еще есть VMки снаружи вся настройка обоих серверов была перенесена в ansible, и конфигурирование происходит только через плейбуки и хранится в гите.

Nextcloud (с mysql) - ставился через snap. Дефолтный, 80ый, порт был перенесен на другую чиселку.

Caddy2 (на сервере с nextcloud). Вообще nextcloud поставленный из snap умеет let’s encrypt сертификаты, но мне не понравилось, что даже при обращении по IP он всем говорит что он nextcloud, просто домен не правильный. Поэтом в качестве реверс прокси был установлен 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х TB дисках. Живет на отдельном 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 - синкает Nextcloud по webdav на временную папку на сервере Photoprism.

Bash - тупой скрипт который разбирает то что прилетело с Netxcloud по датам и копирует в папку с фотками на md raid,  а так же дергает Photoprism на тему индексации новых фоток.

Алгоритм работы всего этого чудо облака

На телефон был установлен http://www.tacit.dk/foldersync который синкает фото в Nextcloud с удалением (то есть если удалил фотки в телефоне, то они удаляются и в Nextcloud). Притом вручную, сейчас нет полной обратной синхронизации как в Google Photos, то есть удаление фотки в Photoprism не приведет к удалению ее на телефоне, а удалять в нескольких местах никакого желания. Поэтому сейчас фоткаю - снимаю видео, потом в свободное время удаляю лишнее в виде дублей и неудачного. И запускаю ручной синк через foldersync.

В это время на сервере Photoprism раз в час происходит следующее:

  1. Rclone с сервера Photoprism синкает локальную директорию с Nextcloud (с удалением удаленного в Nextcloud).

  2. Посинканное разбирается по датам и копируется в директорию с фотками в директорию содержащую дату.

  3. Photoprism пинается на предмет индексации директории с фото в процессе чего он находит новое, его индексирует и оно появляется в интерфейсе.

  4. Если удалить фото на телефоне оно удалится и в Netxcloud и во временной директории на Photoprism, но при этом останется в той папке что индексирует Photoprism.

В результате всего этого:

  1. Полная и актуальная копия фото/видео с телефона хранится в Nextcloud и одной временной директории на сервере Photoprism.

  2. Все новое, что появляется автоматом разбирается по датам и копируется в папку с датой внутри папки которую индексирует Photoprism, удаление фоток на телефоне на это никак не сказывается.

  3. Враги, взломав Nextcloud снаружи получат доступ максимум к тому что хранится на нем, установление соединений из DMZ в LAN запрещены.

Железо

  1. Nextcloud - Raspberry PI 4 Model B + внешний USB SSD.

  2. 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.

  3. NAS - старенький но живой qnap с 1 гигом памяти (распаяна, расширить нельзя).

  4. 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/.

И вот он очень понравился:

  1. Один бинарник на go (а не эта возня с ruby и gem как у jekyll).

  2. Автосборка отлично работает в github на github pages.

  3. Если завтра не будет доступа к github / github pages то собрать сайт локально и выложить куда-то вообще не проблема, требования минимальны.

  4. Есть поддержка google analytics из коробки.

  5. Куча тем.

  6. Удалось выложить даже видео в посте.

  7. Он нереально быстр.

Всем добра и автоматизации.

Tags:
Hubs:
Total votes 25: ↑25 and ↓0+25
Comments38

Articles