Домашняя экосистема облачных сервисов на базе Raspberry PI 4

Рассказываю о своём пути по созданию домашней экосистемы облачных сервисов. В неё входит файловое хранилище, менеджер паролей, торрент-качалка и Gitea.

· 15 минуты на чтение
Домашняя экосистема облачных сервисов на базе Raspberry PI 4

Сегодня расскажу, как создал облачную домашнюю экосистему различных сервисов, которые доступны из любой точки мира благодаря VPN соединению с домашней сетью.

Возможно, вы подумали, что я буду рассказывать о NextCloud, но у меня с ним не сложилось. После установки я столкнулся с ошибкой, которая могла бы привести к потере данных. На мой взгляд, NextCloud слишком монструозный и сложный для домашнего использования. У него множество плагинов, что приводит к необходимости постоянной поддержки, так как что-то может сломаться. Также проблема в том, что на Raspberry ставится кастомная облегчённая версия, которая может иметь свои баги. Для малого офиса возможно и пойдёт, но не для дома.

Также хочу упомянуть проект Umbrel, который позволяет сделать нечто подобное, но практически в автоматическом режиме с помощью графического интерфейса. Особенно это решение приглянется криптоинвесторам, потому что оно позволяет легко развернуть полную биткойн ноду, а также Bitcoin Lightning ноду. И всё это в пару кликов. Сам разворачивал, проблем никаких не было.

Минус Umbrel в том, что он делает что-то под капотом сам, неизвестно насколько правильно и насколько всё безопасно. Также сложнее поднимать какие-то свои сервисы, можно случайно задеть те, за которые отвечает Umbrel.

Целью этой статьи не является дать исчерпывающие знания по всем упоминаемым технологиям.

Что в итоге получим

Следуя этому гайду, вы получите в своё распоряжение:

  • Сетевое файловое хранилище. Которое будет поддерживать RAID для сохранности файлов.
  • Сетевое удобное хранилище паролей.
  • Торрент качалку, которая будет скачивать файлы в ваше сетевое хранилище.
  • Если вы разработчик, то сможете настроить себе Gitea. Gitea – self-host хостинг кода, который можно использовадь для удобного хранения ваших проектов. По сравнению с обычным git сервером это более удобное и красивое решение.

И при наличии VPN соединения до вашей локальной сети, все сервисы будут под рукой, где бы вы ни находились. А выглядеть будет как-то так:

Мой домашний сервер
Спонсор поста

Ингредиенты

Мое решение собрано из:

  1. Raspberry PI 4 (4/8 Gb RAM). Собственно мозг всей системы.
  2. Корпус Argon M2. Он позволяет использовать SSD SATA M2 вместо MicroSD флешки для запуска ОС. Также в этом корпусе, помимо пассивного охлаждения, присутствует динамическое активное охлаждение: вентилятор будет включаться по мере необходимости на определённую мощность.
  3. Одна планка SSD формата SATA M2. На ней будет установлена операционная система. Я установил WD Blue SATA на 250 ГБ, но меньший объём тоже подойдёт. Также вместо SSD можно использовать HDD, тогда и корпус можно взять попроще. Либо обойтись простой MicroSD.
  4. 3 HDD диска. Подойдут для хранения данных, чтобы не расходовать ресурс SSD. Количество накопителей опционально. Далее из них будем делать RAID массив. Важно, чтобы их physical sector size совпадал, в противном случае возможны проблемы при использовании lvm.
  5. Активный USB Hub. Рекомендую от Xiaomi. Raspberry не сможет вытянуть 2+ HDD от своего питания, поэтому нужен активный хаб.
  6. Свой сервер с Wireguard для доступа к локальной сети через VPN. В качестве хостинга рекомендую использовать vdsina.

Вариации

Все элементы могут заменяться на другие для удешевления конструкции или улучшения характеристик. Не обязательно использовать корпус Argon M2 и SSD. Но будьте готовы, что придётся раз в год менять флешку, ведь MicroSD довольно быстро выходит из строя.

На замену корпусу Argon могу посоветовать корпус Ice Tower, который обладает самым тихим и при этом мощным вентилятором для охлаждения.

Вместо планки SSD и MicroSD карты, помимо HDD, можно использовать специальный чип EMMC с переходником в MicroSD. Такой чип служит гораздо дольше обычно MicroSD карты. За три года он у меня не умер, дальше я перешёл на SSD.

Итого моё решение на текущий момент (18.04.2022) обойдётся где-то в 18 тыс. рублей, не включая HDD диски. Бюджетная сборка выйдет в 15 тыс. рублей. Скорее всего, можно что-то собрать подобное дешевле, но я всё это покупал не вместе, у меня всё это накапливалось по частям. В итоге этому всему нашлось вот такое применение.

Ниже на картинке можно наблюдать бюджетную версию, которая обведена в оранжевый прямоугольник. Здесь можно видеть корпус Ice Tower и EMMC чип, также здесь у меня только один HDD. И это прекрасное начальное решение.

Самый левый Raspberry отвечает за умный дом на HomeAssistant

Инструкция по сборке и настройке

Далее я рассказываю о своей сборке и настройке приложений. Если у вас будут предложения по улучшению, не стесняйтесь писать в комментарии.

Переключение режима запуска

Если вы используете корпус Argon и SSD, то первым делом переключим режим запуска Raspberry. Сделаем так, чтобы ОС запускалась с SSD, а не с MicroSD.

Для этого нам нужна обычная MicroSD, на неё мы запишем программу, которая настроит наш Raspberry. Скачайте Raspberry Pi Imager с официального сайта.

Запустите Pi Imager и выберете пункт Choose OS –> Misc utility images –> Bootloader –> USB Boot. Далее нажмите на кнопку Choose Storage и выберите вашу MicroSD.

После успешной записи программы на флешку вставьте её в Raspberry и подайте питание. Частое мигание красного светодиода будет сигнализировать вам об успехе, подождите минуты 3-4 и отключите питание.

Извлеките MicroSD и отложите в сторону, больше она нам не понадобится, потому что Raspberry будет запускать операционную систему с USB устройства, которым в будущем выступит SSD подключённый через специальный USB коннектор.

Запись операционной системы на SSD

Вставим SSD планку в нижнюю часть корпуса. Перед этим предварительно открутите прижимной винт.

Может показаться неочевидным, но вставлять SSD нужно под углом, вот так:

Вкрутите прижимной винт обратно, тем самым установив SSD в горизонтальное положение.

Соединим нижнюю часть корпуса с компьютером для записи ОС. Для этого можно использовать кабель USB A - USB A. Я как гордый владелец MacBook использую для этого вот такую хитрую систему 😄

По другому к макбуку не подключалось :)

Снова воспользуемся приложением Raspberry Pi Imager, чтобы установить Raspberry PI OS Lite (64-bit) на SSD.

Выберите пункт Choose OS –>  Raspberry PI OS (other) –> Raspberry PI OS Lite (64-bit). Далее выберите наш подключённый SSD в разделе Choose Storage.

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

Обратите внимание на первый пункт "Set hostname". Этот параметр позволяет задать адрес, который используется в локальной сети вместо IP. Однако, я предпочитаю использовать IP, потому что при подключении через VPN этот hostname работать не будет.

После нажимаем Write и ждем сообщения об успешной записи.

Сборка корпуса Argon

Присоединим дополнительную плату к Raspberry. Она идёт в комплекте с корпусом и позволит вынести все разъёмы на одну сторону. При этом mini HDMI превращаются в полноценные HDMI.

На крышке корпуса тоже имеются настройки. Переключите перемычку в положение 2–3, тогда при подаче питания Raspberry сразу включится. Если оставить её в положении 1–2, то для включения придётся нажать на кнопку.

Далее вставьте получившуюся конструкцию в корпус. Будьте аккуратны и не погните GPIO-пины. Они вставляются в разъём корпуса и отвечают за активное управление вентилятором, но об этом позже.

После установки платы закрутите короткие винты в 4 отверстия. В моём случае было только 3 винта, но на качество сборки это не повлияло.

Я отметил нужны отверстия оранжевыми кругами

И последние штрихи. Соедините нижнюю часть корпуса с верхней посредством длинных винтов. Также не забудьте установить перемычку в USB разъёмы.

🥁🥁🥁 Та дам
Не забудьте установить коннектор в USB разъёмы

Не рекомендую прятать GPIO-пины под магнитную крышку. Это ухудшит охлаждение и оно будет менее эффективным.

Первичная настройка

Подключаем наш Raspberry к роутеру и подаём питание. При загрузке ОС в Raspberry Imager можно было задать параметры подключения к Wifi, но Ethernet соединение более быстрое и надёжно, что важнее.

Зайдите в настройки вашего роутера, найдите список подключённых устройств. Найдите IP адрес, который был назначен для Raspberry. Если имеется такая возможность, то сделайте его статическим. Это нужно, чтобы после перезагрузки роутера он не изменился. Также можно воспользоваться установленным hostname вместо IP.

Подключаемся через ssh:

$ ssh pi@192.168.1.12

Далее сменим пароль от root пользователя:

$ sudo passwd root

Сменим пользователя на root:

$ su

Вводим только что установленный пароль. И обновим установленные пакеты до актуальных версий:

$ apt update
$ apt upgrade

Давайте перезагрузим наше устройство:

$ reboot

После включения также зайдите и смените пользователя на root, все дальнейшие действия мы будем совершать под рутом.

Настройки вентилятора

Вентилятор поддерживает температуру холостого хода где-то в районе 37 градусов, но шум от его работы раздражает.

Установим специальный скрипт, который будет включать вентилятор с разной мощностью по заданным температурным режимам. Для установки выполняем данную команду:

$ curl https://download.argon40.com/argon1.sh | bash

После чего ваш вентилятор скорее всего выключится. Не переживайте, теперь он будет запускаться при 55 °C на 10% мощности, далее при 60 °C на 50% и при 65 °C на 100%.

Для изменения настроек включения существует следующая команда:

$ argonone-config

Для удаления программы управления вызовете команду:

$ argonone-uninstall

Проверить текущую температуру CPU можно с помощью команды:

$ vcgencmd measure_temp

Установка Docker и Docker Compose

Раньше для установки Docker на Raspberry нужно было неплохо так поприседать, но эти времена в прошлом. Скачиваем скрипт установки и запускаем его:

$ curl -fsSL https://get.docker.com -o get-docker.sh
$ sh get-docker.sh
$ rm get-docker.sh

Проверяем, что установка прошла успешно:

$ docker version
$ docker compose version

Подключение HDD и настройка LVM

Подключим несколько HDD при помощи LVM. Также мы будем использовать зераклирование, которое доступно из коробки в LVM, это своего рода RAID1.

Имена дисков заменены на sdX, sdY, sdZ, чтобы не уничтожить данные на реальных носителях.

Сначала установим LVM:

$ apt install lvm2

Потом проверим подсоединённые диски:

$ lsblk

NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda      8:0    0 232.9G  0 disk 
├─sda1   8:1    0   256M  0 part /boot
└─sda2   8:2    0 232.6G  0 part /

Видим, что сейчас имеем SSD, который расположен на /dev/sda. Подключаем наши HDD через активный USB hub. Проверяем, что все накопители обнаружились.

$ lsblk

NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda      8:0    0 232.9G  0 disk 
├─sda1   8:1    0   256M  0 part /boot
└─sda2   8:2    0 232.6G  0 part /
sdb      8:16   0   1.8T  0 disk 
└─sdb1   8:17   0   1.8T  0 part 
sdc      8:32   0   1.8T  0 disk 
└─sdc1   8:33   0   1.8T  0 part 

Сперва создадим по одному разделу на каждом диске. Для этого установим утилиту gdisk:

$ apt install gdisk
Убедитесь, что вы используете верный диск в командах! Дальнейшие команды уничтожат все данные на накопителе!
gdisk /dev/sdX
# Смотрим разделы и проверяем, тот ли мы диск выбрали.
p

# Создаём пустую GUID partition table.
o # жмём `y`, чтобы удалить все разделы и создать GPT запись.

# Создаём первый и единственный раздел на весь диск.
n
1
<enter>
<enter>
8e00 # Указываем, что данный раздел относится к LVM.

# Теперь можно просмотреть то, что получилось.
p

# Если всё устраивает, то осталось записать изменения на диск.
w # жмём `y`, чтобы подтвердить запись.

Добавляем созданные разделы в LVM:

$ pvcreate /dev/sdX1 /dev/sdY1

Объединяем добавленные разделы в Volume Group с названием vgdata:

$ vgcreate vgdata /dev/sdX1 /dev/sdY1
$ lsblk

NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda      8:0    0 232.9G  0 disk 
├─sda1   8:1    0   256M  0 part /boot
└─sda2   8:2    0 232.6G  0 part /
sdb      8:16   0   1.8T  0 disk 
└─sdb1   8:17   0   1.8T  0 part 
sdc      8:32   0   1.8T  0 disk 
└─sdc1   8:33   0   1.8T  0 part 

Засыпающие HDD

Некоторые HDD имеют функцию гибернации, если в течение какого-то времени к ним не обращаются. Это может оказать негативное влияние на работу с LVM: накопитель засыпает и LVM никак не может до него достучаться. После включения такого диска приходится синхронизировать его с нуля.

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

Для попытки отключения используйте следующую команду

$ hdparm -S 0 /dev/sdX

Если реализация выполнена программно, то это поможет. Если аппаратно, то не поможет, хотя команда будет выполнена успешно.

Обходным решением этой проблемы является написание скрипта. Он будет дёргать накопители каждые 5 минут, чтобы не дать им уснуть. Скрипт очень простой, мы будем вызывать команду pvs раз в 2 минуты. Вызова pvs достаточно, чтобы не дать диску уснуть.

Для этого создаём задачу в cron:

$ crontab -e

И записываем её в открывшийся файл:

*/2 * * * * /usr/sbin/pvs >> /dev/null 2>&1

Простой, но рабочий способ. Хотя с одним из дисков он не помог. Поэтому после объединения разделов в Volume Group, подождите несколько часов и убедитесь, что диски не засыпают и не пропадают из группы. Проверить это можно командой pvs.

Создаём новый логический том с RAID-1. Таким образом, все данные на этот логическом томе будут храниться в 2 копиях на 2 разных HDD. При выходе из строя одного накопителя все данные останутся доступны на другом.

$ lvcreate -L 100G -n root -m1 vgdata

Смотрим результат при помощи команды:

$ lvs -a -o +devices,lv_health_status

  LV              VG     Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert Devices                           Health         
  root            vgdata rwi-a-r--- 100.00g                                    7.05             root_rimage_0(0),root_rimage_1(0)                
  [root_rimage_0] vgdata Iwi-aor--- 100.00g                                                     /dev/sdb1(1)                                     
  [root_rimage_1] vgdata Iwi-aor--- 100.00g                                                     /dev/sdc1(1)                                     
  [root_rmeta_0]  vgdata ewi-aor---   4.00m                                                     /dev/sdb1(0)                                     
  [root_rmeta_1]  vgdata ewi-aor---   4.00m                                                     /dev/sdc1(0)     

Параметр Cpy%Sync показывает процент данных, который был скопирован на второй диск. Также раздел Health сообщает о здоровье вашего RAID.

Создадим ещё один раздел с RAID 0, будем использовать его для более быстрого доступа к данным. Туда можно сохранять файлы, которые не страшно потерять, но при этом к ним нужен более быстрый доступ, например, фильмы и музыка.

$ lvcreate -i2 -L 100G -n fast vgdata

Создаём файловую систему для каждого нового раздела:

$ mkfs.ext4 /dev/vgdata/root
$ mkfs.ext4 /dev/vgdata/fast 

Сначала монтируем том root к папке /root/storage:

$ mkdir /root/storage
$ mount /dev/vgdata/root /root/storage

Таким образом, наши логические тома присоединяются к файловой системе. Теперь все сохраняемые файлы в папку /root/storage будут храниться на жёстких дисках в RAID 1, а не на SSD.

Проверяем, что монтирование прошло успешно:

$ df -h

Filesystem               Size  Used Avail Use% Mounted on
/dev/root                229G  1.8G  218G   1% /
devtmpfs                 3.7G     0  3.7G   0% /dev
tmpfs                    3.9G     0  3.9G   0% /dev/shm
tmpfs                    1.6G  940K  1.6G   1% /run
tmpfs                    5.0M  4.0K  5.0M   1% /run/lock
/dev/sda1                253M   32M  221M  13% /boot
tmpfs                    782M     0  782M   0% /run/user/1000
/dev/mapper/vgdata-root   98G   40K   93G   1% /root/storage

Однако если мы перезагрузим систему, то монтирование пропадёт. Поэтому нам нужно отредактировать файл /etc/fstab:

proc            /proc           proc    defaults          0       0
PARTUUID=23981079-01  /boot           vfat    defaults,flush    0       2
PARTUUID=23981079-02  /               ext4    defaults,noatime  0       1
/dev/vgdata/root /root/storage ext4 defaults,noatime 0 2
# a swapfile is not a swap partition, no line here
#   use  dphys-swapfile swap[on|off]  for that
☠️
Будьте аккуратны, если вы ошибётесь при редактировании этого файла, то ОС не запустится. Можно будет подключить SSD, как мы это делали для записи на него ОС, и отредактировать файл /etc/fstab

Настройка приложений

Запустим приложения, которые будут работать в нашей "экосистеме". Это будут: Samba, Bitwarden, Transmission, Gitea.

Samba

Samba позволяет организовать простую файловую помойку с помощью протокола SMB. Мы запустим Samba с помощью Docker и примонтируем папку с данными к LVM тому с RAID 1. Таким образом, файлы будут защищены от потери.

Переходим в нашу папку storage и создаём в ней папку samba:

$ cd /root/storage
$ mkdir samba

И запускаем контейнер с Samba:

$ docker run -it --name samba --restart always \
-p 139:139 -p 445:445 -p 137:137/udp -p 138:138/udp \
-v /root/storage/samba/:/cloud:z -d dperson/samba -n -p \
-u "username1;YOUR_PASSWORD" -u "username2;YOUR_PASSWORD" \
-s "public;/cloud/share;yes;no;yes;username1,username2" \
-s "storage1;/cloud/username1;yes;no;no;username1" \
-s "storage2;/cloud/username2;yes;no;no;username2"

Разберёмся с каждой строкой:

  1. Запускаем контейнер с именем samba и делаем автоматический перезапуск.
  2. Открываем порты, которые необходимы для работы.
  3. Монтируем нашу папку /root/storage/samba/ в папку /cloud внутри контейнера.
  4. Создаём двух пользователей. Не забудьте задать пароль.
  5. Создаём общий раздел для двух пользователей.
  6. Создаём персональный раздел для пользователя username1.
  7. Создаём персональный раздел для пользователя username2.

Давайте рассмотрим формат строки, которая передается с помощью флага -s:

-s "<name;/path>[;browse;readonly;guest;users;admins;writelist;comment]"
  • name – название раздела;
  • path – путь до раздела в контейнере;
  • browsable – no скрывает раздел из списка выбора;
  • readonly – no позволяет записывать данные на раздел;
  • guest – no отключает гостевой доступ;
  • users – список разрешённых пользователей;
  • admins – список пользователей администратора;
  • writelist – список пользователей, которые могут писать в общий ресурс;
  • comment – описание раздела;

Попробуем подключиться к нашему облачному хранилищу:

Вводим ранее заданные логин и пароль.

Видим разделы, которые доступны для подключения.

Раздел storage2 принадлежит пользователю username2, поэтому войти в него не выйдет. К остальным двум разделам мы без проблем подключимся.

Bitwarden

В какой-то момент понимаешь, что пароль qwerty для всех сайтов – это не идеальное решение. Особенно когда твоя работа связана с IT. Хочется использовать уникальные и надёжные пароли, но как их все запомнить?

Можно воспользоваться 1Password, что я раньше и делал. Однако помните, что ваши пароли хранятся у третьей стороны. Да, пока никаких сливов и компрометаций не случалось, но кто знает будущее?

Вторым популярным решением является KeePass. Который, помимо всего прочего, также позволяет хранить ssh-ключи. Но при использовании KeePass теряется удобство, которое есть у 1Password. Нет синхронизации паролей между различными устройствами. Это можно реализовать используя сторонние клиенты, но кто знает, что у них под капотом.

Компромиссом между удобством и безопасным хранением паролей является Bitwarden.

Развернём собственное хранилище паролей, к которому будем подключаться с телефона или ПК. Это self-host альтернатива 1Password. Получается, все пароли не покидают локальную сеть, и при этом вы получаете удобство, которое есть у 1Password.

Для установки переходим в папку storage и создаём в ней директорию bitwarden. В ней будут храниться все настройки и пароли.

$ cd /root/storage
$ mkdir bitwarden

Команда запуска намного проще, чем у Samba:

$ docker run -d --name bitwarden --restart always -v /root/storage/bitwarden:/data/ \
-p 9000:80 vaultwarden/server:latest

Перейдём по адресу http://raspberry.local:9000 и убедимся, что Bitwarden работает.

Через браузер мы не сможем воспользоваться входом. Это связано с тем, что у нас соединение установлено через http, а нужен https. Поэтому просто воспользуйтесь десктопным или мобильным приложением.

Чтобы войти, нажмите на кнопку настроек.

Указываем наш URL и сохраняем.

Transmisson

Transmission – это торрент-качалка с клиентом в браузере. Это позволяет качать файлы в фоне, не используя ресурсы ПК. После чего получить скаченные файлы в сетевом хранилище.

Смонтируем LVM том fast, который мы создали ранее. Напомню, что он использует RAID 0 для ускорения передачи данных. Смонтируем этот том в общий раздел Samba в папку fast:

$ mount /dev/vgdata/fast /root/storage/samba/share/fast

Запускаем Transmission:

$ docker run -d --name=torrent -e PUID=1000 -e PGID=1000 -e TZ=Europe/Moscow -p 9001:9091 -p 51413:51413 -p 51413:51413/udp -v /root/storage/samba/share/fast/torrent/config:/config -v /root/storage/samba/share/fast/torrent/downloads:/downloads -v /root/storage/samba/share/fast/torrent/watch:/watch --restart always lscr.io/linuxserver/transmission:latest

Переходим по адресу http://raspberry.local:9001 и видим, что всё работает:

Gitea

Никакие данные в облачных решениях вам по факту не принадлежат. Это также касается git-хостингов а-ля GitHub и GitLab, поэтому в какой-то момент я озаботился наличием своего локального хранилища кода.

Самый простой способ получить git хостинг – это использовать голый Git, чем я раньше и пользовался. Но куда приятнее иметь Git с WebUI. И здесь на сцену выходит Gitea.

Для запуска воспользуемся Docker Compose. Создадим папку /root/storage/gitea. И создадим в ней файл docker-compose.yml

version: "3.9"

services:

  server:
    image: gitea/gitea:1.17-dev-rootless
    container_name: gitea
    restart: always
    networks:
      gitea:
    ports:
      - "9002:3000"
      - "222:22"
    volumes:
      - ./data:/data
      - /etc/timezone:/etc/timezone:ro
      - /etc/localtime:/etc/localtime:ro
    environment:
      - USER_UID=1000
      - USER_GID=1000

networks:
  gitea:
    external: false

Композ может вам пригодиться, если вы захотите использовать отдельную базу данных, для более надёжного хранения. Но для локального использования подойдёт и встроенная SqlLite.

Давайте запускаем наш композ:

docker compose up -d

Проверяем, что всё запустилась по адресу: http://raspberry.local:9002

RoadMap для развития

Не ограничивайтесь рассмотренными сервисами. Raspberry позволяет установить много всего интересного.

Plex Media Server

Обзоры формата "Что установить на Raspberry" включают в себя Plex Media Server. Не вижу в этом большого смысла. Я использую один стриминговый сервис для просмотра фильмов и сериалов, а при необходимости подключаю телевизор через SMB к файловой помойке, и смотрю фильмы оттуда.

Хранилище фотографий

У меня большой архив фотографий и видео. И он постоянно увеличивается в размерах. Если вы также ответственно относитесь к своей галерее и хотите сохранить каждую фотографию, то попробуйте настроить PhotoPrism.

Я его не стал запускать, так как для хранения фотографий использую отдельное устройство, о котором рассказывал в этой статье 👇

Обзор Monument 2
Хотите иметь больше контроля над своим архивом фотографий? Monument 2 это устройство, которое позволяет вам удобно организовать личное и приватное хранилище фотографий

Доступ к вашим сервисам через VPN

Как я уже говорил, я использую Wireguard VPN для доступа к сервисам, когда я не нахожусь дома. Но это история для отдельной статьи, поэтому мы не рассматривали настройку этого сервиса.

Также для доступа не помешает роутер, который из коробки сможет поддерживать Wireguard соединение. Сам я пользуюсь роутерами Keenetic, которые имеют такую функцию.

О том, как сделать нормальное соединение Keenetic с Wireguard, я писал в отдельной заметке 👇

Доступ в локальную сеть и в интернет через Wireguard для Keenetic
Настройка Wireguard для Keenetic для одновременного доступа в локальную сеть и в интернет через VPN.

HomeAssistant

Также вы можете развернуть OpenSource систему управления умным домом на базе HomeAssistant.

Однако, я рекомендую использовать для этого отдельную плату Raspberry. Так как это критически важная система для дома, то лучше ей жить на отдельном устройстве. Также HomeAssistant отъедает прилично ресурсов, так что ваша Raspberry будет постоянно загружена.

Свой стриминг музыки

Здесь всё достаточно просто. Существуют программные решения, которые позволяют поднять свои локальные сервисы наподобие Spotify, но на мой взгляд, это уже перебор. Да и качество подобных решений недостаточно хорошее.

Я храню свою музыкальную коллекцию в сетевом хранилище, которое мы реализовывали с помощью Samba. А для прослушивания на iPhone использую программу EverMusic, которая позволяет подключиться к вашему хранилищу по SMB.

Nginx

Используйте Nginx, чтобы избавиться от портов и для защиты ваших соединений с помощью самоподписанного SSL сертификата.

Time Machine

Если вы счастливый обладатель Macbook, то можете сделать отдельный раздел в Samba для резервного копирования в Time Machine через SMB.

Резюмирую

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

Полезно иметь свои сервисы, которые позволят управлять данными и не зависеть от платных подписок.

Struchkov Mark
Struchkov Mark
Задавайте вопросы, если что-то осталось не понятным👇