Предыстория

Меня зовут Павел, и я пользователь Apple с 10-летним стажем. И два месяца назад я решил переехать с iCloud на домашний сервер с Open Source ПО.

Приходил я к этому постепенно. Долгое время я пользовался iPhone, iPad, MacBook, AirPods и другой яблочной техникой, и не знал забот. Вся моя жизнь была залита в iCloud, я там хранил и файлы, и документы, и номера кредиток, и фото за почти всю жизнь. Но со временем в мою голову стали закрадываться сомнения: зависимость от одной корпорации — не очень хорошая идея. Кто имеет доступ к моим данным, что они с ними делают, как это проверить? А что, если завтра Apple решит грохнуть мой аккаунт? Или обновление превратит мою технику в кирпич? Они же точно этого не сделают, они солидная компания! Ведь точно, не сделают?..

И можно было бы просто сделать бэкапы всего и успокоиться. Но я стал задаваться более глобальными вопросами: а насколько сегодня кофмортно можно жить, не завися от продуктов корпораций? Хотя бы в цифровом плане. Можно ли пользоваться исключительно Open Source софтом, контролировать свои данные, при этом не потерять привычного комфорта?

Так я решил начать свой эксперимент. Цель я поставил масштабную — переехать полностью на Open Source ПО на компе, телефоне, ноутбуке и связать все это в экосистему. И начать я решил с домашнего облака.

По специальности я бэкэнд‑разработчик на Java. Но свои домашние сервера никогда не поднимал. В общем, имея общий опыт в IT и Linux, но не имея представления о том, как делается self‑hosted система, я принялся за дело.

Мини‑ПК для домашнего сервера

В качестве домашнего сервака я выбрал мини‑пк Asus NUC 14 Essential. Причина простая — он продавался недорого с рук, а я не был уверен, что что‑то вообще выйдет:) Но, забегая вперед, скажу, что о выборе я совсем не пожалел. На борту было 8гб оперативы и 500 гб на NVMe.

Поставив на него базовую Ubuntu Server и настроив доступ по SSH, я начал с первого вопроса: доступа к серверу с улицы.

VPN для доступа извне: Tailscale

Открывать сервер всему миру мне совершенно не хотелось, платить за статические IP или стойки в серверной — тоже. Пользователей у моего сервера будет (пока) максимум два — я и жена. А во внешнем мире ходят роботы и хакеры, а мне с ними взаимодействовать хотелось поменьше. Так что моим решением стал VPN.

Я остановился на Tailscale. Оказалось, простейшая в установке штука, поднимается на линуксе, винде, айфоне, где угодно, и объединяет ваши устройства в сеть, которая управляется через веб‑интерфейс. А еще здесь есть возможность сделать HTTPS‑доступ к устройствам: это мне еще не раз пригодилось.

Сразу скажу, что живу не на территории РФ, поэтому ваш опыт с Tailscale может отличаться

Настроив VPN, я взялся поднимать сервисы.

Сервисы

Что же можно поднять на замену iCloud? Первое, что попалось на глаза — по описанию выглядело как полноценная замена облака сразу из коробки.

Файловое облако: NextCloud

По описанию он звучал как крутейший сервис. Здесь и заметки, и календарь, и файлы, и галерея, и даже офис на замену Google Docs, красотища! Будто бы подниму, и в целом больше ничего и не потребуется.

Поднимается легко. Tailscale сразу пригодился — так как сервис настаивает на работе по https, а без имени хоста это не сделать. В остальном тут docker‑compose и простая инструкция. Хотя и не без усложнений: есть «веб‑интерфейс», через который можно пасти другие контейнеры и загружать обновления.

И… меня ждало разочарование.

  • В заметках на телефоне нет нормального форматирования

  • При переименовании заметки несколько раз терял данные

  • Иногда можно забыть сохранить и случайно закрыть заметку

  • Местный офис ужасно лагает и в веб‑интерфейсе, и в приложении

  • Ну и субъективно мне не понравился интерфейс ни календаря, ни офиса

  • Написан сервис на PHP. Да простят меня здесь, мне это тоже не добавило доверия:).

Но что более‑менее зашло — это само файловое облако. Оно здесь работает хорошо, есть клиенты на линукс, винду, мак и айфон. Опыт с ним почти не отличался от iCloud Drive.

И оно дает два подарка, о которых я узнал позже. Имя им calDAV и cardDAV. Это протоколы, которые позволяют разным приложениям обмениваться контактами и календарями. И NextCloud их поддерживает. И главное — их поддерживают родные календарь и контакты на iPhone.

Привязка календаря и контактов iPhone к NextCloud
Привязка календаря и контактов iPhone к NextCloud

Вставив специальную ссылку, можно перепривязать родные эпловские приложения, чтобы они брали информацию с домашнего сервера. Для первого шага это было то, что нужно.

Потом выяснилось, что iPhone не очень хочет добавлять новые контакты в NextCloud. Он прекрасно редактирует уже существующие, но новые упорно создает в iCloud, и это никак не меняется. Но ладно, контакты я создаю редко. Можно и карточку экспортнуть. Все равно решение временное.

Также интеграция NextCloud в iOS в приложение «файлы» оставила желать лучшего. Так что залить pdf на распечатку с телефона превратилось в танцы с перекидыванием из nextcloud в локальную папку и оттуда уже в браузер. Благо, это происходит нечасто.

В итоге: из всего арсенала NextCloud я воспользовался файловым облаком, а также CalDAV и CardDAV — при помощи них перепривязал родные приложения с айфона. Остальные приложения не понравились.

Потом я занялся фотогалереей.

Фотогалерея: Immich

Вот здесь, наоборот, меня ждал полный восторг. Я всю жизнь пользовался эпловской галерей, и по мне, во всяком случае в веб‑интерфейсе, Immich уделывает ее на три головы.

Конечно, здесь нет модных анимаций, и поначалу программа подглючивала — не отображала «превьюшки», пока все «джобы» по их созданию не отработали. Но, какой же тут функционал!

  • Можно залить папку с фото, просто переместив ее в окно браузера

  • Можно вставить картинку через CTRL+V в браузер. Так легко сохранять мемы из телеги:)

  • Похожие фотографии можно сохранять в «стеки». На эпле такого нет. В Google Photos вроде было.

  • Фотки раскладываются на диске автоматически по папочкам с датами, паттерн раскладывания настраивается

  • Есть просмотр фото на карте, работает довольно шустро, подгружает фотографии быстро.

  • Есть разные модели Machine Learning на выбор для распознавания текста, лиц и объектов. Сложно сказать, хуже или лучше Apple, мне кажется и там и там они далеки от идеала. Но пользоваться можно.

  • Есть «личная папка» для приватных фото, хотя она не шифруется, защита есть только в веб‑интерфейсе пин‑кодом. Так что на свой страх и риск.

  • Делает сам дампы базы по расписанию и сохраняет их в отдельную папочку

Просто поставив приложение Immich на телефон, я запустил загрузку, вентиляторы моего Asus NUC зажужжали, и в течение 15–20 минут все мои фото (10 000 штук) были на домашнем серваке. А потом я добавил к ним все фото из старого цифрового фотоаппарата, просто перетащив папку в браузер. И так получил себе единый фотоархив.

На iPhone есть простенький виджет для экрана приложений, показывающий случайное фото. Чем‑то напоминает виджет оригинального приложения Apple.

Asus NUC отлично эту галерею потянул и тянет до сих пор.

Спрятал его за Tailscale, потому что функция «автопереключения на локальную сеть» тут работает плохо. После оставления на VPN — работает стабильно.

В прошлой версии был странный недоделанный функционал на карте: можно было выделять фотографии, но нельзя было ничего с ними сделать. С 3.0.0 это поправили.

В итоге: опыт работы с фотогалереей очень понравился. Не поленился заплатить разработчикам, потому что их программа прекрасна. Удобна в пользовании и через веб, и с телефона. Не идеальна, с косяками, но я готов их простить.

Заметки: Joplin

Их крутость в том, что они не требуют никакого подъема сервиса. Им достаточно указать папку на облаке, где лежать. И облако NextCloud — прекрасно поддерживается через протокол WebDAV. Поэтому я просто создал папку в NextCloud и указал Joplin«у ее использовать.»

Эти заметки более навороченные, чем эпловские, но и отлично: моя «база знаний» из конспектов из Google Docs тоже постепенно сюда переедет.

— поддерживается полноценный Markdown
— есть возможность зашифровать хранилище паролем
— есть клиенты под все ОС и мобилки

В итоге: пользуюсь заметками с удовольствием. Хороший опыт и на телефоне, и на ПК, и на маке.

Домашний стриминг: Jellyfin

Идея «домашнего сервиса музыки и кино» меня очень соблазнила. И поднимается сервис элементарно, на убунте его можно поставить через apt install. Потом мы указываем папку (я указал папку из Nextcloud, чтобы можно было музыку заливать с любого устройства). И оттуда он готов транслировать нам музыку или кино.

Тут главная проблема — где взять музыку. Я, в целом, противник пиратства. Поэтому я решил: пусть это будет сервис качественной музыки. Если Spotify пригождается для исследования, то любимые альбомы можно купить на BandCamp или Qobuz во FLAC. И наслаждаться качеством здесь. А за одно и поддержать любимых музыкантов.

Первое разочарование было, когда я запустил музыку с телефона. Родное приложение Jellyfin написано на Web‑платформе, и не умеет играть музыку в фоне! Блокируешь телефон — музыка прекращается. Вы издеваетесь??

Но, благо, у Jellyfin есть неофициальные клиенты. Я остановился на FinAmp. Не скажу, что это идеальное приложение. Например, здесь кривая прокрутка по длинным песням: просто время на движке не совпадает с реальным временем песни, когда двигаешь движок рукой. А еще оно не запоминает, какая песня играла последний раз. Но как‑то за название и способность работы на фоне — я его полюбил.

Отдельной проблемой было то, что оно не умеет качать музыку в m4a. Оно ее умеет играть с сервака в потоке, а скачанную играть не умеет. Какая‑то проблема с транскодерами. Но ладно, по цели‑назначению m4a — не наш формат. Мы здесь пришли за FLAC.

В итоге: оставил его как сервис качественной музыки. Приложение FinAmp местами бесит багами, но справляется.

Менеджер паролей: Bitwarden Lite

Экосистема не экосистема без сервиса паролей. Главная Open Source опция на замену эпловскому Passwords — это, разумеется, Bitwarden. И я долго читал про «большой и сложный Bitwarden» и его «легкую неофициальную альтернативу Vaultwarden», и думал, что же мне ближе. И все же решил, что я не хочу ставить неофициальную альтернативу, потому что не уверен в ее судьбе. Мало ли, АПИ, разъедется, запретят, еще что‑нибудь? И, как оказалось, для таких, как я выпустили Bitwarden Lite — простой сервис из двух контейнеров, почти не кушающий память, и при этом абсолютно официальный. Правда, без премиум‑функций, но здесь поддержать разрабов мне было не жалко.

Немножко пришлось повозиться, пока понял, что нужно прописать Deployment Number в переменные среды для запуска. И тоже спрятать его за HTTPS через Tailscale. В остальном прекрасное приложение: хранит и пароли, и кредитки, и даже SSH ключи. И есть версия на iPhone, которая прекрасно встраивается в систему и открывается по FaceID.

Бэкапы — restic

Классическая схема бэкапов, как мы знаем, 3-2-1. И здесь встает вопрос: где хранить ту самую «1» — копию в другом месте? Вроде мы хотим уехать с подписок и не платить корпорациям, но тут надо признать: бэкап в облаке — это очень хороший вариант для географически удаленной копии. Можно, конечно, поставить второй сервак к другу. Или остаться на iCloud. Но, как оказалось, есть специальные «архивные облака», которые стоят значительно дешевле популярных Google Drive и подобных. Там нет никаких приложений для десктопа и веба, синхронизаций и подобного, только sftp и место на диске. Но зато 4 евро за терабайт места, или 10 евро за 5 терабайт. По европейским меркам вполне дешево.

Для себя посчитал, что риски для моей системы не сильно высоки:

  • Последние фото все равно есть на телефоне

  • Локальные копии Bitwarden есть на каждом устройстве

  • Заметки из Joplin тоже имеют копии на устройствах

  • Купленную музыку можно скачать еще раз

  • Нагрузка на сервер — 2 пользователя, заходящие редко

Так что решил, что могу (пока) жить без RAID, и делать бэкапы просто вручную по напоминалке с телефона. Раз в месяц я подключаю внешний жесткий диск и запускаю скрипт, который копирует данные и дампы баз на диск и на облако. А потом отключаю диск, чтобы его, если что, не убило скачком напряжения. Делаю бэкапы при помощи restic.

Удобная программа restic позволяет делать бэкапы в зашифрованном виде (с мастер‑паролем), и сохранять каждый раз только изменения, не перезаписывая все с нуля. Так, нам можно не бояться, что наши данные в облаке кто‑то прочитает.

Безопасность

Первая уязвимая точка домашнего сервера — вход на VPN. Тут, разумеется, должен быть длинный пароль и 2fa.

Вторая уязвимая точка не так очевидна: домашний WiFi. На него тоже пригодится длинный сложный пароль.

На роутер сложный пароль тоже не помешает.

Отдельно проверил, что сервер не доступен из внешней сети ни по ipv4, ни по ipv6. Домашние роутеры обычно сами отсекают внешний трафик, но не стоит доверять — проверьте сами, например, с мобилы.

Ну и я отключил ssh по паролю, сделав себе ключ. Его я положил в Bitwarden и хожу на сервак через него как ssh‑агента со всех устройств. Благо, на каждом устройстве сохраняются локальные копии базы Bitwarden, и в случае его падения на самом серваке на него все равно можно зайти. Проверял.

На Bitwarden тоже советую поставить 2fa, он здесь поддерживается.

Стек, который получился:

Мини ПК — Asus NUC Essential

ОС — Ubuntu Server

Файловое облако — NextCloud

Календарь и контакты — родные приложения iPhone, перепривязаны на NextCloud.

Фотогалерея — Immich

Заметки — Joplin

Сервер музыки — JellyFin

Сервер паролей — Bitwarden Lite

Доступ с улицы — Tailscale

Итоги

Тут расскажу все по пунктам.

Сложность развертки

Почти ничего не было сложно развернуть. Каждый сервис занял в среднем около часа работы. Кое‑где немножко поковыряться или спросить ИИ, но все проблемы решались быстро. Обычно это docker‑compose скрипт, немножко возни с переменными среды, а дальше создание аккаунта и залив нужных данных.

Энергопотребление

Электричества ASUS NUC почти не ест. Я не заметил разницы в счете за электричество совсем. Вроде в спокойном состоянии он потребляет около 5W. Когда вентиляторы разгоняются, может, наверное, есть и побольше, но такое бывает редко: в основном при массовой загрузке фото.

Производительность и железо

500 гб жесткого диска оказалось мало, когда залили фотки жены тоже. Пришлось расширять отдельно — покупать новый жесткий диск, а потом все переносить.

Процессор Asus NUC 14 Essential справляется отлично, тянет все докер‑контейнеры всех сервисов без нареканий.

Экономика

По пунктам, вышло так:

Мини‑ПК для сервера: 200 евро (покупка с рук, новый стоил бы 600)

Immich: 25 евро за лицензию навсегда. Хотя он работает и бесплатно с тем же функционалом.

Bitwarden: 20 евро в год. Это 1.67 в месяц.

Архивное облако: 4 евро в месяц

Обновление жесткого диска: 300 евро + 80 за кейс для переноса данных

При этом

  • Перевел подписку iCloud на минимальный уровень (выгрузил фото, оставил только бэкапы самих устройств, сэкономил 2 евро в месяц)

  • Потенциально есть шанс перевести жену на домашней сервер и сэкономить на подписке и у нее

Смотря на цифры, точно скажу, что домашний сервер не стоит заводить ради экономии на подписках. Это примерно как покупать свою квартиру, чтобы сэкономить на аренде, и при этом на падающем рынке:) Разве что на очень больших объемах данных и на долгосроке это может быть выгодно.

Что порадовало

  • Ощущение контроля. Я знаю, куда отправляются мои файлы и фото, и в какие папочки кладутся. Я меньше беспокоюсь, если сохраняю фотку паспорта в облако или номер кредитки в менеджер паролей: я знаю, где они находятся, и что маловероятно, что их кто‑то посмотрит.

  • Мой игровой ПК на винде стал частью экосистемы тоже. Раньше был «яблочный мирок» и ПК отдельно. Теперь у всех общая галерея, заметки и пароли.

  • Ощущение большей независимости. Теперь сравнительно без разницы, захочу я айфон, телефон на андроиде, нотбук на винде или что угодно — я подключу это к своему домашнему облаку и продолжу работать как обычно.

  • Ну и пользоваться отдельными сервисами очень приятно. Тот же Immich — очень порадовал.

Что не порадовало:

  • Open Source решения далеко не такие вылизанные, как у эпла. Здесь нет крутых анимаций, и в среднем больше багов и глюков. Например, Bitwarden когда‑то подвисал при логине. Immich тупил с отображением фото и карты, пока не сделал все превью через пару дней. Jellyfin не умел играть в фоне музыку, что пришлось решать отдельным приложением.

  • Интеграция не такая гладкая. Если родные приложения Apple работают из коробки и работают хорошо, то тут приходится ставить что‑то дополнительно, стыкуется оно местами криво. Например, приложение Nextcloud на iOS не так хорошо интегрируется в Files, иногда видно не все файлы. Приходится пользоваться своим приложением. Но жить можно.

  • Ответственность. Теперь бэкапы, обновления, поддержание системы в рабочем состоянии — это еще одна забота. Мне как инженеру это делать увлекательно, но наверное не все хотят этим заниматься.

Резюме

За два месяца я не пожалел, что начал этот эксперимент. Мне очень нравится пользоваться домашним облаком. Конечно, добавилось новых забот и ответственности, но ощущение контроля над собственными данными и понимания того, как это работает — для меня перевешивают. Когда‑то поймал себя на мысли, что обратно на iCloud мне не хочется.

Всем подряд советовать переезжать на домашнее облако, все же, я не стал бы: все же экосистемы с облаками удобны, просты и отлажены, а переезд требует дополнительных затрат: и времени, и денег, и сил, и не обещает везде гладкий опыт. Но, если вы цените контроль над данными и склонны беспокоиться каждый раз, фоткая паспорт на айфон, и не боитесь работать с железками, то, наверное, вам сюда. Здесь есть жизнь, и у нее точно есть свои плюсы.

Этот переезд на домашнее облако — часть моего эксперимента по переезду на Open Source на всех устройствах. Дневник эксперимента я веду в своем телеграм‑канале.