Началось все с небольшого эксперимента по установке сервера обмена сообщениями Synapse на смартфоне с операционной системой Ubuntu Touch, а закончилось созданием маленького домашнего дата-центра на 5 ARM мини-серверах (Raspberry Pi и ODROID-XU4), основная функция которых — обеспечение работы системы обмена сообщениями / звонками по протоколу Matrix и WebRTS для 10 пользователей.
![](https://habrastorage.org/r/w1560/webt/ip/pf/58/ippf58cr2kjtyb_hoedu-ztcxla.png)
Matrix — это открытый протокол мгновенного обмена сообщениями (базирующийся на децентрализованных серверах), который позволяет пользователям осуществлять обмен текстовыми сообщениями и файлами, выполнять голосовые и видео звонки, создавать чат-каналы и т.п.
Наиболее известный клиент для сети Matrix — Riot.im, реализован в виде мобильного, web или десктопного приложения. По функциональности не уступает клиентам современных мессенджеров Slack / Telegram / WhatsApp.
Итак, после установки на смартфон (сервером сложно пользоваться, когда он находится у тебя в кармане и все время меняет свой адрес и метод подключения — WiFi / 3G / 4G), следующим этапом был перенос системы на один Raspberry Pi. Фрон-энд — реализация сервера Synapse на Python, бэк-энд — база данных PostgreSQL из стандартного дистрибутива Raspbian for Raspberry Pi.
Подключение к интернет — через port forwarding (порт 8448) на домашнем vDSL модеме со статическим внешним IP адресом.
Все работало, но иногда со «скрипом» — периодически возникали задержки — подключение клиентов занимало несколько секунд, тайм-ауты при подключении к сторонним каналам / комнатам matrix.org.
После переноса базы данных PostgreSQL на второй Raspberry Pi производительность заметно улучшилась, но все равно иногда возникала 100% загрузка одного из ядер процессора в течение нескольких минут (на стороне фронт-энда).
Для улучшения ситуации фронт-энд был перенесен на безвентиляторный ODROID-XU4 (8 ARM ядер, 2 Gb оперативной памяти, цена сервера — $59), а затем и база данных PostgreSQL была перенесена на второй ODROID-XU4.
![](https://habrastorage.org/r/w1560/webt/ik/yn/yf/ikynyfae-ugugqkhpmcx4oef3ni.png)
Добавились USB Ethernet свитч ($20) для связи серверов по витой паре, внешний USB диск на 2 Tb, а также 6-портовая USB зарядка для питания 3-х Raspberry Pi и Ethernet свитча.
Освободившиеся Raspberry Pi были сконвертированы: firewall для обеспечения DMZ, сервер Zabbix для мониторинга, сервер hot standby для базы данных PostgreSQL (находится в другой комнате). Еще один Raspberry Pi c модулем доступа к мобильному интернету был добавлен для получения второго канала связи через 4G модуль для Raspberry Pi.
Кроме этого, был добавлен источник бесперебойного питания UPS.
В процессе монтажа система выглядела вот так (размещена внутри электрокамина):
![](https://habrastorage.org/r/w1560/webt/q2/qm/oa/q2qmoavyqubvuats9e-2q6stpyk.png)
Размер базы данных бэк-энда Synapse вырос за полгода на ~ 325 Mb:
![](https://habrastorage.org/r/w1560/webt/u5/so/um/u5soumafdxnj_vjvzogrhbuhdqu.png)
Размер базы данных системы мониторинга Zabbix вырос до 1.25 Gb и скоро стабилизируется:
![](https://habrastorage.org/r/w1560/webt/dr/cp/xs/drcpxskuut9fezwurui2i-hdgbo.png)
Загрузка внешней сети (график за 7 дней):
![](https://habrastorage.org/r/w1560/webt/mg/jc/im/mgjcim8wsszcymk1ujrzrbv8h1s.png)
Загрузка внутренней сети (график за 7 дней):
![](https://habrastorage.org/r/w1560/webt/ed/ch/wi/edchwinyrugyns4j6ekgdndcg1k.png)
График нагрузки на фронт-энде за 3 дня:
![](https://habrastorage.org/r/w1560/webt/at/ry/_r/atry_rniy3efn5gm0d2akdl0c_o.png)
При включенном шифровании на клиентах в базе данных хранятся зашифрованные данные, поэтому даже физический доступ к серверу не приведет к утечке данных.
Все вышесказанное можно реализовать на недорогих VPS в любом датацентре, но если это работает стабильно дома, то почему бы не сделать это на домашнем оборудовании?
![](https://habrastorage.org/webt/ip/pf/58/ippf58cr2kjtyb_hoedu-ztcxla.png)
Matrix — это открытый протокол мгновенного обмена сообщениями (базирующийся на децентрализованных серверах), который позволяет пользователям осуществлять обмен текстовыми сообщениями и файлами, выполнять голосовые и видео звонки, создавать чат-каналы и т.п.
Наиболее известный клиент для сети Matrix — Riot.im, реализован в виде мобильного, web или десктопного приложения. По функциональности не уступает клиентам современных мессенджеров Slack / Telegram / WhatsApp.
Итак, после установки на смартфон (сервером сложно пользоваться, когда он находится у тебя в кармане и все время меняет свой адрес и метод подключения — WiFi / 3G / 4G), следующим этапом был перенос системы на один Raspberry Pi. Фрон-энд — реализация сервера Synapse на Python, бэк-энд — база данных PostgreSQL из стандартного дистрибутива Raspbian for Raspberry Pi.
Подключение к интернет — через port forwarding (порт 8448) на домашнем vDSL модеме со статическим внешним IP адресом.
Все работало, но иногда со «скрипом» — периодически возникали задержки — подключение клиентов занимало несколько секунд, тайм-ауты при подключении к сторонним каналам / комнатам matrix.org.
После переноса базы данных PostgreSQL на второй Raspberry Pi производительность заметно улучшилась, но все равно иногда возникала 100% загрузка одного из ядер процессора в течение нескольких минут (на стороне фронт-энда).
Для улучшения ситуации фронт-энд был перенесен на безвентиляторный ODROID-XU4 (8 ARM ядер, 2 Gb оперативной памяти, цена сервера — $59), а затем и база данных PostgreSQL была перенесена на второй ODROID-XU4.
![](https://habrastorage.org/webt/ik/yn/yf/ikynyfae-ugugqkhpmcx4oef3ni.png)
Добавились USB Ethernet свитч ($20) для связи серверов по витой паре, внешний USB диск на 2 Tb, а также 6-портовая USB зарядка для питания 3-х Raspberry Pi и Ethernet свитча.
Освободившиеся Raspberry Pi были сконвертированы: firewall для обеспечения DMZ, сервер Zabbix для мониторинга, сервер hot standby для базы данных PostgreSQL (находится в другой комнате). Еще один Raspberry Pi c модулем доступа к мобильному интернету был добавлен для получения второго канала связи через 4G модуль для Raspberry Pi.
Кроме этого, был добавлен источник бесперебойного питания UPS.
В процессе монтажа система выглядела вот так (размещена внутри электрокамина):
![](https://habrastorage.org/webt/q2/qm/oa/q2qmoavyqubvuats9e-2q6stpyk.png)
Размер базы данных бэк-энда Synapse вырос за полгода на ~ 325 Mb:
![](https://habrastorage.org/webt/u5/so/um/u5soumafdxnj_vjvzogrhbuhdqu.png)
Размер базы данных системы мониторинга Zabbix вырос до 1.25 Gb и скоро стабилизируется:
![](https://habrastorage.org/webt/dr/cp/xs/drcpxskuut9fezwurui2i-hdgbo.png)
Загрузка внешней сети (график за 7 дней):
![](https://habrastorage.org/webt/mg/jc/im/mgjcim8wsszcymk1ujrzrbv8h1s.png)
Загрузка внутренней сети (график за 7 дней):
![](https://habrastorage.org/webt/ed/ch/wi/edchwinyrugyns4j6ekgdndcg1k.png)
График нагрузки на фронт-энде за 3 дня:
![](https://habrastorage.org/webt/at/ry/_r/atry_rniy3efn5gm0d2akdl0c_o.png)
При включенном шифровании на клиентах в базе данных хранятся зашифрованные данные, поэтому даже физический доступ к серверу не приведет к утечке данных.
Все вышесказанное можно реализовать на недорогих VPS в любом датацентре, но если это работает стабильно дома, то почему бы не сделать это на домашнем оборудовании?