Replacing the clouds in our mug “very skillful hands”

Recently, trust in the clouds has somehow plummeted, and while the annual subscription to Google One for 2T was ending, it was time to think about what to do next. As a result, the old concept was born – ‘we store data at home’. And that’s what happened to them

Google Photos

There is no trust in the clouds, but the old desire to send photos and videos from the phone has not disappeared. At the same time, I would not want to manually parse the 255G archive accumulated in google photo, but I would like some automation in the form of parsing photos by faces, places, dates and the ability to search for keywords like ‘sea’ or ‘Pyatigorsk’.

Experience was against sticking everything in a row on the Internet, so a classic DMZ scheme was conceived and filed. Well, not quite now, but it was done a long time ago. If you don’t know what a DMZ is then it’s simple. It’s just a subnet in which services live are accessible from the Internet (we have the same type of cloud) but which cannot go to services in the LAN itself.

Security classic
Security classic

Software that pretends to be Google Photos

OS – Linux Ubuntu 22.04 on both nexcloud and photoprism. Previously, Arch Linux lived on nexcloud, but recently I stumbled into a 34-bit system on which the latest releases of Nexcloud refuse to work. Well, the OS zoo is not very convenient for deployment automation

Ansible – due to the fact that there are already 2 servers at home, plus there are still VMs outside, all the settings of both servers have been transferred to ansible, and the configuration takes place only through playbooks and is stored in the git

Nexcloud (with mysql) – installed via snap, default port 80 was moved to another

Caddy2 (on a server with nexcloud). In general, nexcloud delivered from snap can let’s encrypt certificates, but I didn’t like that even when accessing IP, it tells everyone that it is nexcloud, just the domain is not correct. Therefore, caddy2 was installed as a reverse proxy, which at line 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 раз в час происходит следующее

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

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

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

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

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

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

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

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

Железо

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

  2. Photoprism / Zabbix: Мать/проц/память – ASRock J5040-ITX / интегрированный Intel Pentium J5040 / 8G, HDD – 4 ТБ WD Purple [WD42PURZ] x 2 (as md raid1), SSD – 250 GB 2.5″ SATA Samsung 870 EVO [MZ-77E250BW] (a temporary folder lives on it. with photos, mysql for photoprism, as well as its data such as previews), case – Thermaltake Suppressor F1

  3. NAS – an old but lively qnap with 1 gig of memory (soldered, can not be expanded)

  4. router – Mikrotik hAP ac (RB962UiGS-5HacT2HnT)

That’s all I wanted to tell you about replacing Google Photos 🙂 and a little more.

Mini Blog WordPress Replacement

I used to keep it for a blog where I write every 2 – 3 months any techno tops, WP with mysql on VM for some reason. It was on a very inexpensive Digital Ocean, sometimes you have to contrive with payment, switched to another provider with payment here and VMs in Germany, recently I thought – “why?”. And the answer at first kept itself waiting, and then refused to come at all. And I went to look for anything without all these php and other mysql.

And I found a system for assembling static site files. Just what I need for my primitive Wishlist. First came across https://jekyllrb.com/tinkered with installing all these ruby ​​and gem packages, figured out how to stumble autobuild on github pages, moved a couple of posts, and even seemed to like it, but a former colleague came and said that his build was already slowing down at 80 posts and advised me to look away https://gohugo.io/.

And he really liked

  1. One go binary (and not ruby ​​and gem ruby ​​like jekyll)

  2. Autobuild works fine in github on github pages

  3. If tomorrow there is no access to github / github pages, then building the site locally and putting it somewhere is not a problem at all, the requirements are minimal

  4. There is support for google analytics out of the box

  5. Tons of topics

  6. I even managed to post a video

  7. He is incredibly fast

all the best and automation

Similar Posts

Leave a Reply Cancel reply