Приложение Т—Ж
В нем читать удобнее

Шоукейс разработчиков: я разработал on-premise систему хранения медиа контента

24

Этот текст написан в Сообществе, в нем сохранены авторский стиль и орфография

Исходные данные

В течении жизни обнаружил проблему сохранения медиа контента (фото/видео).

Контекст:
У всех у нас есть смартфоны, и чаще всего мы делаем фотографии с помощью смартфонов (как растут дети / утренники / праздники / да и просто фото с членами семьи / друзьями / близкими)

У смартфонов есть несколько проблем:

  • Память не бесконечная, может относительно быстро заполнится (в зависимости от использования, конечно же)
  • Устройства хранения данных могут выходить из строя (даже дорогие SD карты, бывало, переставали работать, и данные на них теряются)
  • Сами смартфоны роняют/ломают/теряют. В некоторых случаях данные вытащить уже не получится.

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

Еще одним важным требованием является простота использования. Чтобы бабушка, у которой есть мессенджеры, в т.ч. телеграм могла учавствовать в образовании общего медиа хранилища (долговременной памяти семьи) без особого обучения.

Создание

Было разработано 2 приложения:

1. API на NestJS. Является ботом для телеграм. Работает следующим образом:

  • запустили API
  • создали бота
  • создали приватная группа в телеграм
  • бот добавляется в группу

Далее, при загрузке фото или видео, бот скачивает его на жесткий диск и ставит реакцию на пост, обозначающую, что медиа контент успешно сохранен.

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


2) UI на ReactJS. Приложение для отображения медиа контента. Например, чтобы с телевизора в браузере открыть и посмотреть фотки/видео в режиме галлереи.
Есть возможность фильтрации по пользователю, который загрузил фото. Функциональность фильтра буду расширять по потребности

Таким образом решается проблема хранения — мы не зависим от внешних провайдеров (например iCloud)

Бонусы от такого подхода:

  • относительная приватность контента (из внешних сервисов — только через телеграм контент проходит)
  • неплохую отказоустойчивость: фото/видео находятся на смартфоне, жестком диске и в телеграм группе. Если поставить еще один жесткий диск, то отказоустойчивость будет еще выше. Если удалять фото со смартфона, то все равно остаются 2 источника)
  • хранение контента в телеграм бесплатно, все затраты только на жесткий диск для хранения
  • все участники будут видеть группу, и медиа контент в ней, который они могли вообще не увидеть (баф на+1 к социальному взаимодействию всем участникам)
  • можно смотреть фотки сделанные участниками группы через UI в домашней локальной сети


Моя сборка работает с Raspberry PI и внешним жестким диском



Проект является OpenSource, соответственно бесплатный для использования.

Итоги и планы

Провожу тестирование, устраняю проблемы, повышая стабильность работы.

В этом году буду всех родственников/друзей переводить на эту систему шаринга/хранения контента.

Есть один минус, который достаточно серьезно ограничивает использование — лимит на скачивание ботом в 20МБ за файл

Планирую пофиксить через использование MTProto Provider (автоматизацию реального аккаунта телеграм а не бота)

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

p.s. на прикрепленном изображении веб интерфейса тестовые картинки загружены, без личных фото

  • АйтишникДоМозгаКостейАвтор, вообще-то Google (да и Apple тоже, скорее всего) об этом давно подумал и создал Google Drive (ну и у Apple наверняка есть что-то подобное). Кроме них, облачное хранение предоставляет каждый из крупны́х ОпСоС-ов, да и Яндекс с Майл.Ру не отстают. Да, в бесплатной версии каждое из этих облак имеет ограниченный размер, но мне, например, хватает и таких объемов. А ведь есть ещё OTG - переходники, да и просто флешки с 2-мя разъёмами (один из которых - как раз USB-C для смартфона). Вы по-прежнему утверждаете, что Ваше изобретение лучше? Даже серьезно лучше?.. Тогда дайте два, конечно. Но что-то мне подсказывает, что это не совсем так.3
  • Сережа ПахомовАйтишникДоМозгаКостей, не забывайте, что в Яндексе файлы тоже могут побиться, и потом квадратики вместо реального фото будут, например. Это известная проблема для старых файлов. Облака + локальный бэкап в несколько мест решает проблему. Для 99% этого хватает и без бэкапа. А для всех остальных есть truenas, синолоджи & etc решения. Лично мне лениво следить за всем железом, храню в облаке и локально синкаю на диск + оффлайн бэкап иногда делаю.1
  • Станислав ШуклинВообще круто.0
  • DKАйтишникДоМозгаКостей, клауд хранилища типа iCloud я упоминал в посте, но они не удовлетворяют поставленным требованиям. Например, бабушка не будет никакими Google Drive пользоваться или подключать смартфон к компьютеру (которого у нее нет), и так далее, для нее это сложно. Более того, далеко не все из тех кто помоложе захотят в этом разобраться) Тот же Google Drive бесплатно 15ГБ, Яндекс360 - 5ГБ, у айклауда тоже вроде бы 5ГБ. Этого объема не хватит на хранение медиа контента (речь конкретно о нем). Платить 150 рублей/мес за нормальный объем тоже не проблема, но мне клауды не оч подходят, тут либо нужно процесс какой то выстроить, чтобы всем было просто и без заморочек, либо как сделал я - пошел другим путем: взял уже привычный всем процесс "использование мессенджера для пересылки медиа контента". Да, и не хочется зависеть от клауд провайдера. Крайне расстроюсь если что то случится с этими данными. Прикольно иногда показывать детям, какие они были, да и самим вспоминать) Ранее я так и делал - брал у всех телефоны и скачивал фото/видео. Там за один год только >10гб. И тут еще проблема сразу в том, что не весь медиа контент должен быть расшарен/скопирован, а когда через кабель копируешь, отсеивать там что то это геморой. > но мне, например, хватает и таких объемов. Этого хватает лично Вам, а у меня история про семью из 10+ человек (сестры/братья/их дети/родители/бабушки и так далее) p.s. а че ссылку то вырезали на проект, по ней дока подробная, многие вопросы подобные могут решиться там)1
  • Anton ZhitarevА можно купить Synology и не делать себе голову. Там это всё уже сделано.0
  • АйтишникДоМозгаКостейDK, я там в числе уже существующих альтернатив ещё прямое подключение флешки упоминал. То есть берём любую́ флешку, и либо через переходник USB-Type C ---- USB, либо используя соответствующий разъем самой флешки подключаем к смартфону. Да, надо чтоб смартфон поддерживал OTG. Но на дворе 2026 год, и экземпляры, которые эту технологию не поддерживают, остались, наверное, только у самых бережливый бабушек и дедушек. Не думаю, что таким людям недостаточно места в смартфоне. Так что этот явный минус можно считать крайне мало реальным. В остальном - сплошные плюсы: - переходник на Type C стоит копейки (флешка с как минимум одним таким разъемом тоже немного, но все же подороже будет), - нет зависимости от наличия интернета, - нет проблемы с битыми файлами (особенно если флешка нормальная и раньше времени ее не вытаскивать), - все переписывается максимально быстро, - все данные остаются полностью в локальном доступе, если флешку не терять, то никто и никогда до них не доберется. Да, и такие откровенно гиковские девайсы, как Raspberry Pi, естественно, не нужны. Вообще, вот интересно, как Вы себе это представляете: ПК для Вашего решения не нужен, достаточно "Малинки" (для особо продвинутых - "Апельсинки" и "Бананки"). То есть нашей бабушке нет необходимости подключать смартфон к компьютеру. ОК, пусть так. Но много Вы встречали бабушек, у которых ПК нет, а Raspberry Pi - есть?.. Такая бабушка в моих глазах будет гораздо продвинутый иного внучка!0
  • DKAnton, да, конечно же я рассматривал и NAS, и клауды, но повторюсь еще раз: 1) Кто угодно, даже бабушка, должны сразу же начать пользоваться без лишних вопросов к UX. 2) Соответственно и процесс сохранения должен быть предельно простой, без использования приложений. У меня в семье далеко не все инженерного склада ума, и им будет лень этим заниматься. А семейная группа в мессенджере, это про то, когда все члены семьи делятся фотками/видосами, а они еще и бонусом сохраняются 3) И если это делать так, чтобы синхронизировалось автоматом вообще все с телефона(чтобы было просто для конечного пользователя), то это тоже не то, т.к. может быть контент, который шарить/архивировать либо не захочется, либо просто мусорные фото, которые сохранять не нужно (чеки какие нибудь, товары из магазина и так далее) p.s. интересно, а Synology обошли как то вайтлист ресурсов, которые с мобильного интернета открываются0
  • Anton ZhitarevDK, в сайнололди фото всё это есть0
  • DKAnton, я же правильно понимаю, что загрузка файлов происходит через отдельное приложение или же через веб страницу? Если это так, то специально этим приложением из всех членов семьи буду пользоваться только я) мы обсуждаем эту тему с некой проф деформацией, когда нам, как инженерам это кажется очевидным и простым, а обычные пользователи хотят простой UX (книга на эту тему хорошая есть - Психбольница в руках пациентов, про проектирование интерфейсов взаимодействия) Антон, а про вайтлист и Synology что то знаете? > "p.s. интересно, а Synology обошли как то вайтлист ресурсов, которые с мобильного интернета открываются"0
  • Anton ZhitarevDK, ставится приложение. И потом загрузка фото через функцию поделиться. И выбрать сайнолоджи. Обход ресурсов - не знаю0
  • DK> Не думаю, что таким людям недостаточно места в смартфоне. Так что этот явный минус можно считать крайне мало реальным. Вероятность обсуждать сложно, т.к. нет статистики, но у нас именно такой кейс присутствует. Накачают игр, фоткают/снимают видео, и телефон не обновляют годами (да и я не меняю, зачем), и сторейдж кончается > Но много Вы встречали бабушек, у которых ПК нет, а Raspberry Pi - есть?.. Такая бабушка в моих глазах будет гораздо продвинутый иного внучка! Какое то недопонимание тут присутствует, в посте же речь про то, что распберри с жестким диском стоит только у меня. Все члены семьи добавляются в группу в мессенджере и просто делятся фотками, а бот, который запущен на распбери сохраняет видео и фото конкретно у меня дома, на моем распбери. Никому не нужно запускать у себя это отдельно, иначе, конечно же, это дичь) Если коротко, то лучше на это смотреть так: есть группа семейная, все переписываются, поздравления какие то скидывают, вопросы семейные решают, делятся медиа контентом - у кого то ребенок ходить или говорить начал, или прикольное что то из жизни случается, т.е. обычное общение семейное, но под капотом фото/видео еще и сохраняются. В итоге, никому сложностей не создает, все живут в обычном процессе общения, но и память общая архивируется1
  • DKAnton, понял, спасибо за ответ! Да, дополнительные действия какие то уменьшат вероятность того, что этим будут пользоваться) я уже чуть выше написал айтишнику до мозга костей, получилось так, что для всех ничего не меняется, только добавляется фишка с архивированием, скопирую кусок ответа: > Если коротко, то лучше на это смотреть так: есть группа семейная, все переписываются, поздравления какие то скидывают, вопросы семейные решают, делятся медиа контентом - у кого то ребенок ходить или говорить начал, или прикольное что то из жизни случается, т.е. обычное общение семейное, но под капотом фото/видео еще и сохраняются. В итоге, никому сложностей не создает, все живут в обычном процессе общения, но и память общая архивируется1
  • АйтишникДоМозгаКостейDK, понял. Простите, недостаточно внимательно читал Вашу исходную статью. Думаю, как раз для семейной группы (ну или просто для мини-группы единомышленников на несколько человек) Ваш вариант - самое то.1
  • DKЕрёма, а можете чуть более развернуто ответить, если не лень? В виде сильно краткого солюшн дизайна системы телеграм бот прикрученный к АПИ клауд провайдера звучит так, что бот будет сохранять данные не на жестком диске, а на стороне клауд провайдера я уже писал, что: > Да, и не хочется зависеть от клауд провайдера. Крайне расстроюсь если что то случится с этими данными. Прикольно иногда показывать детям, какие они были, да и самим вспоминать) На мой первый, сырой взгляд, Ваше решение выглядит как замена жесткому диску установленному дома.3
  • DKАйтишникДоМозгаКостей, спасибо за обсуждение!1
  • ОбезьянаШляпа. Нормальная точка входа - контент-ресолвер на телефоне, получающий фото из памяти по мере их появления (как работают все облачные функции у гугла, янедкса, айклауда, вк-клауда и других, в том числе у опен-сорс решений для on-premise). И, мало того, когда вы полагаетесь на бота в группе с телеграм-апи - вы получаете ебучих шакалов, если не постите эти фото как файлы, а постите их в группу как изображения. Потому что клиент их жмет и жмет серьезно.0
  • DKОбезьяна, выше есть обсуждения, почему подобный вариант не подходит: "получающий фото из памяти по мере их появления"0
  • Анна КоробковаИдея вроде хорошая, но исполнение через телегу убивает весь смысл. Телеграм нещадно сжимает фото и видео, если не слать их файлами, в итоге вы сохраняете не "кусок памяти", а его пережатую демо-версию. Для семейного архива качество критично.0
  • Анна КоробковаСтанислав, как пет-проект для портфолио -да, как реальный продукт для использования - пока спорно) Слишком много костылей и ограничений0
  • Анна КоробковаОбезьяна, вот шакалы - главная проблема. Смысл хранить фото, если их качество убито? Для просмотра на телефоне сойдет, а для печати или просмотра на ТВ уже нет0
  • VСсылку на гит плз)0
  • ЕрёмаDK, все практически также как у вас описано, просто часть с апишкой, хранением данных, веб мордой, оборудованием, хостингом и прочим можно было не реализовывать а использовать уже готовое решение от провайдера. я понимаю ваши аргументы "за" ваше решение, они полностью валидны. с облачными провайдерами - зависит от разных факторов - удобства и возможностей api, функционала, стоимости, доступности в регионе. но есть сомнения что адекватный провайдер с репликацией и поддержкой отказоустойчивости обеспечит менее надежное хранение чем self-hosted машина. при прекращении обслуживания как правило дают забрать данные. ваше решение хорошее и полностью имеет право на существование, просто лично я бы не стал заморачиваться с изобретением очередного колеса с нуля для личного использования ввиду отсутствия в нем для меня лично каких-то челленджей/интереса, и использовал готовое. а телега - удобная штука да, для многих вещей за интеграцию - лайк0
  • DKV, https://github.com/dkrylovdotcom/tg-media-vault0
Вот что еще мы писали по этой теме
Сообщество