Как хранить фотоархив у себя, а не в Google или «Яндексе»
Преамбула
Недавно я задумался, а как мне не потерять все мои фото, видео и другие воспоминания, ведь всё хранится в Google и в случае если у них произойдёт сбой (что маловероятно, но всё таки возможно), или что-то поменяется и я не смогу платить подписку (это все мы испытали на себе), тогда сотни гигабайт фото моего сына от рождения будет потеряно.
Когда в 2022-м гугл перестал принимать платежи в россии, у моей жены заблокировался аккаунт, где было 200 ГБ, даже письмо не приходило, было крайне неприятно. Складывать фотки начали в Яндекс.Диск. Но параноя уже началась и теперь веры нет никому. С того момента я начал вынашивать план, как бы хранить фото у себя и наткнулся на пост в вастрик клубе.
Оказалось, что не я один такой, куча людей думают также, веры нет этим облакам и надо всё хранить у себя. Но перед тем как вы задумаетесь о таком же решении, нужно осознавать несколько вещей:
- Собственный хостинг - это в любом случае дороже, чем подписка на облако.
- Скорее всего это менее надёжно и нужно делать бэкапы.
- Это требует обслуживания, нельзя забить, нужно иногда проверять бэкапы и прочее.
- Лучше не начинать, если технических знаний и умений недостаточно.
- Собственный хостинг фото архива не исключает его в облаке, а дополняет.
В общем цель - это иметь максимальное количество резервных копий в независимых местах, максимально дёшево, в итоге я храню весь фото архив:
- В Google Photo
- В Яндекс.Диск
- Локально у себя
Выбор железа
Пару лет назад я поукупал Raspberry PI 4 чтобы тестировать наш сервер для видеонаблюдения на ней, под это же дело покупал кейс и плату расширения для HDD X832 от geekworm. Вообще у них много интересного железа там. Если зазывать в Россию, то лучше из официального магазина на алиэкспресс. В общем пару месяцев я это использовал, а потом оно просто лежало и пылилось. И вот теперь кажется применение нашлось. Как вы поняли железо я выбрал 2 года назад, а сейчас осталось понять, как всё это упаковать.
Под всё это дело я купил WD Purple 8tb, собственно потому, что работать будет круглосуточно, но это не NAS, никаких RAID конфигураций. Просто 1 диск на нём будет и система и архив. Систему лучше ставить именно на диск, так как флешка даже в режиме RO через пару лет точно помрёт, проверенно.
Установка OS
Сразу же сложность, у Raspberry PI 4 micro HDMI, а меня нет переходника на micro HDMI или на SATA3, чтобы загрузить OS сразу на диск.
Решение к которому я пришёл:
- Установить Desktop Raspberry PI OS на флешку, благо современный rpi-imager позволяет сразу включить SSH.
- Подключиться по SSH с пробросом X
- На самой Raspberry PI снова запустить rpi-imager
- Установить уже Lite Raspberry PI OS уже на HDD
- Через rpi-imager выставить first boot USB
В целом тут ничего сложного, всё делается через GUI, насколько я знаю в Windows SSH клиентах типа pytty есть возможность подключаться с пробросом X, в Xshell помню точно есть.
В итоге выключаем систему, вытаскиваем флешку, включаем систему и загружаемся с HDD. Победа! Хотя подождите, диск на 8TB, а в df я вижу только 2. Ах да, rpi-imager форматирует диск в MBR, а что бы видеть больше 2TB, нам нужен уже GPT.
Часть 2.
И так теперь на живой системе нам надо проделать несколько опасных манипуляций с диском, перезагружиться и продолжить работать, на всё 1 попытка, если система не загрузится консоли нет, придётся всё начинать с нуля.
- Конвертируем gdisk MBR в GPT
- Открываем в fdisk и пересоздаём 2ю партицию. чтобы расширить диск
- Раширяем ФС при помощи resize2fs
- Уменьшаем tuna2fs количество резервируемого ext4 пространства
Диск мы расширили, но не спешите перезагружаться, так как мы смениили тип главной таблицы разделов, естественно сменились PARTUUID разделов и система просто не смонтируется.
Узнаём новые PARTUUID
Обновляем записи в /etc/fstab и в загрузчике /boot/firmware/cmdline.txt
Готово. Перезагружаемся и если всё завелось, значит всё в порядке.
Выбор софта для хранения фото
Давайте определимся с требованиями:
- Всё должно работать исключительно локально
- Софт желатьельно должен быть открытый, бесплатный, с большим сообществом, что бы не зависеть от выгораний разработчика
- Должен быть хороший клиент под Android и iOS с автоматической загрузкой новых фото в фоне
- Должен быть многопользовательский режим
- Фото и видео должны храниться в оригинале и их должно быть легко бэкапить ещё куда-то
Как и автор поста в вастрик клубе, я остановился на Immich. Это очень приятный и зрелый проект, с активным сообществом. Разработчики сделали хорошую сравнительную таблицу своего решения со всеми конкурентами. Хотя изначально я тоже попробовал photoprism, но там нет многопользовательскости, проект частично закрытый, нет официальных клиентов под мобилки так далее.
Выглядит immich приятно и ооочень напоминает гугл фото, что естественно является огромным плюсом, не нужно привыкать к новым UX. Все требования выше выполяются, можно создавать общие альбомы, локально запускается нейронка с детекцией и распознанием лиц и прочие плюшки. Плюс проект активно развивается. Короче одни плюсы куда не плюнь.
Установка по сути в 2 клика:
В системных требованиях написано, что минимум RAM 4GB, а рекомендуется 6GB или выше. Но пока у меня и на 2GB всё крутится пректасно, на всякий случай сделал swap 8GB, так или иначе торопиться некуда, пусть стоит потеет. На крайний случай есть решение с выносом можуля с ML на внешнюю тачку, можно будет купить Bаnana или Orange или какие там нынче ещё есть пироги и положить её рядом.
Открываем доступ наружу
Железку я планировал поставить дома у роутера, естественно никакого белого IP у меня нет и никто не даст ни за какие коврижки. Мне нужен доступ к SSH сервера и HTTP к приложению. Естественно я буду использовать Tuna )) Это интересный опыт, когда ты сам становишься бытовым пользователем своего же продута.
Устанавливаем клиент по инструкции и настраиваем сервис для SSH доступа. Но так как статичные порты мы ещё не сделали, а ходить каждый раз в личный кабинет, что бы узнать порт для подключения мне лень, я набросал скрипт который ходит в API tuna, получает порт и подключается по SSH:
Кладём скрипт в ~/.local/bin/rpi-ssh.sh и добавляем алиас в ~/.zshrc или ~/.bashrc
Естественно, ваши параметры могут отличаться, это просто пример, но в итоге всё выглядит так:
Получилась даже некая пассивная безопасность, так как порт при переподключениях будет меняться, это защитит нас от атак ботами на SSH.
Осталось открыть доступ к самому приложению. Тут тоже ничего сложного, добавляем в .env который мы скачали при установке immich переменную с токеном tuna
В docker-compose.yml добавляем наш сервис с tuna:
Стартуем сервис и проверяем работу
Первую синхронизацию лучше проводить в локальной сети, подключаемся в приложении по условному http://192.168.0.15:2283/api и включаем синхронизацию в фоне. За ночь 100+ гигов загрузится очень быстро. Затем нажиматее выход и входите уже по публичному домену, условно https://immich.ru.tuna.am/api. Далее всё будет работать от куда угодно, а фото за день синхронизируются максимально быстро.
Вместо заключения
Всё работает, за ночь жена выгрузила весь буфер на телефоне, около 100 Гб фото и видео, далее я планирую скопировати всё, что есть из гугла и яндеска ну и купить какой нибудь storage-box в hetzner и туда складывать бэкапы тоже.
Долго не знал куда это постить, непонятно что это, толи статья, толи гайд, толи самопиар. В общем оставлю тут!
Спасибо всем кто читал и особенно тем кто дочитал ))
Купил себе мини сервер за 10к на Авито . Поставил туда Synology за 1 час и сливаю фотки через приложение с телефона в онлайне
Вот видишь как хорошо, не надо всем вот этим заниматься) Видимо Synology тоже Гуглу не верят)
10к это сервер.. а диски?
Ну да, два диска по 2 тб еще 6000. В рейде стоят.
Просто сбрасываю на на диски папку камера с трёх телефонов раз в пол года. Потом удаляю дубли программно. Железобетонный офлайн
Но всё таки тоже не очень надёжно.
Железобетонно - распечатывать)
Просто удаляю все фото с телефона раз в год, обычно перед Новым годом
Вы только счётчики фотографируете ?)
https://ru.m.wikipedia.org/wiki/Презентизм_(философия_времени)
Чистка от мусора в галереи полезная тема, просто кто-то не любит фоткаться или фоткать что-то, поэтому много памяти под это дело и не нужно
Не уверен, что это вообще законно )))
Несколько синхронизируемых Synology помогают решить вопрос малой кровью. Например, по минимуму, можно поставить у себя дома и у родителей. Даже по однодисковой коробочке поставить, и то уже хорошо.
А по нормальному, надо гуглить 3-2-1.
Единственно правильный комментарий.
Доверять фото одному диску - это надо быть очень уверенным.
Ничего не понимаю в коде. Сколько вы возьмете за настройку(удаленно) мне такого сервачка?
Пунк 4. Лучше не начинать, если технических знаний и умений недостаточно. ))
Лучше обратиться к другу, ибо человек со стороны может и настроит всё вам, но помогать у случае проблем будет врятли )
- из таблицы видно что Nextcloud/Owncloud лучший
По галочкам может и да, но это достаточно старый проект на php, с кучей легаси и у меня просто не завелось. Потыкался пару часов, разобраться не смог и понял, что не судьба)
- это не приговор
у меня просто не завелось- готовых докер-образов хватает, не говоря уж о мануалах по установке Owncloud которыми забит весь Интернет, так что странно...
На мой взгляд статья имеет рекламный характер, но если от этого абстрагироваться, то решение создать "надежное" домашнее файлохранилище на одном диске вызывает вопросы. Вероятность гибели данных в отсутствии RAID-массива не нулевая
Конкретно у меня не мог завершиться этап инициализации, что то там ломалось на этапе активации Borg backup, что именно я так и не понял, хотя пытался.
рекламный характерНу я так и написал , "Долго не знал куда это постить, непонятно что это, толи статья, толи гайд, толи самопиар."
решение создать "надежное" домашнее файлохранилище на одном диске вызывает вопросы.Кажется вы прочитали по диагонали и допридумали смыслы. Я вообще о таком не говорил.
- да, действительно прочитал "по диагонали", так как вчитываться в команды для консоли того чего я скорее всего никогда не стану устанавливать, показалось бессмысленным. Но фотографии железок посмотрел. Диск один. Все фотки и ОС на нём. Это я правильно понял или необходимо перечитать статью чтобы понять непонятое?
Перечел начало:
задумался, а как мне не потерять все мои фото...как бы хранить фото у себя...никаких RAID конфигураций. Просто 1 диск на нём будет и система и архивВ общем цель - это иметь максимальное количество резервных копий в независимых местах, максимально дёшево, в итоге я храню весь фото архив: В Google Photo, В Яндекс.Диск, Локально у себя
- т е по факту одно из ключевых требований к Вашему файлохранилищу, это способность синхронизироваться с облачными сервисами
По числу галочек - да. В жизни - лютый трэш.
- боюсь что остальные, менее популярные конкуренты, имеют проблем в разы больше, а проверять на себе здоровья не хватит
раз 5 меня кидали фотохостинги (включая Яндекс, когда они закрыли Яндекс Фотки). Теперь храню все на hdd в рейде.
Ждете пока вас кинет рейд на hdd? Упорный.
Случаев, когда умирает сразу два диска одновременно я не знаю (кроме пожаров и других стихийных бедствий).
Любое облако - более рискованно и ненадежно.
Ну у вас просто все впереди.
Любое облако - более рискованно и ненадежно.Это не так.
Я храню информацию пожалуй с 99 года. Считай 25 лет уже.
Я пережил туеву хучу закрытий облаков, пожаров в дата центрах, ухода из России и ТД, но информация на жёстких дисках цела и невредима.
Я сам себе облако :)
Просто у вас опыта в этой области маловато. Я работаю в дисковом энтерпрайзе с 2002 года, и повидал многое.
Повышенную вероятность отказов второго диска, сразу после первого, в одной дисковой группе подтверждает также научное исследование группы Бианки Шредер, можно найти ее исследование на сайте конференции USENIX.
Сегодня общепризнанно, что эта опасность недооценивалась.
Что же касается "облака" - я готов поставить деньги, что администрируют такие системы более компетентные люди, чем вы и я.
А индивидуальный отказ или прекращение работы того или иного сервиса просто решается дублированием на два (три, четыре) разных хранилища в разных сервисах.
Британские учёные так же доказали много чего.... Я изхожу из своего опыта. Помимо рейдов, я делаю резерв на ещё один диск, который отключен.
Я не сомневаюсь в вашей компетенции и компетенции людей, кто работает в облачных сервисах, но тя просто не доверяю , как недоверяю и электрокарам.
Вот тут я бы не был так уверен )) У того же AWS пороц платные сервисы это куча костылей на BASH. Так что хз.
"Вы так это говорите, будто это что-то плохое"
Вот буквально вчера, написал в сапорт, поменять диск в сервере, 1 вылетел. Написал какой поменять. В итоге поменяли не тот, чуть все данные не потеряли.
Уж очень он сырой, этот immich.
И крупно написанное прямо в заголовке титульной страницы: "The project is under very active development. Expect bugs and changes. Do not use it as the only way to store your photos and videos!" как и версия, выглядящая v1.100.0
нисколько не добавляет желания доверить этому свою фотоколлекцию.
Сихронизации с облачным хранилищем "оттуда сюда" тоже, как я понял, нет.
Там написано "в активной разработке" с намёком на то что API может меняться и функции могут удаляться. Но я установил и пользуюсь и сырости не наблюдаю, а то что есть 100+ релизов как раз таки говорит о том что продукт не сырой.
Ну и в любом случае фотки просто в папочке на все лежат )
Ну видимо я в предлжении Do not use it as the only way to store your photos and videos! читаю несколько иной смысл, чем вы.