Vds на raspberry pi

5 способов сделать Python-сервер на Raspberry Pi. Часть 1

Сегодня в большом числе проектов домашней (и не только) автоматизации используется Raspberry Pi. При этом достаточно удобно иметь не только прямой доступ к устройству, но и использовать браузер — это позволяет выполнять необходимые действия и с компьютера, и с мобильного телефона, и даже удаленно из любой точки мира.

Допустим, у нас уже есть супер Python-программа, делающая что-то очень важное, от мигания светодиодом до управления «умным домом» или хотя бы кормушкой для кота. Я покажу разные способы, от простого к сложному, как сделать web-доступ к такому приложению, добавив немного кода.

Статья расчитана для начинающих, профи вряд ли найдут здесь что-то кардинально новое, ну а новичкам в Linux надеюсь, будет полезно. Для тех кому интересно, продолжение под катом.

Примечание: эта статья является своего рода «экспериментом», как-то в комментариях жаловались что на Хабре недостаточно статей для начинающих. Я попытался восполнить пробел, ну а по оценкам будет видно, имеет смысл продолжать в таком формате или нет.

Настройка Raspberry Pi

Будем надеятся, что у читателя есть Raspberry Pi, которая подключена к домашней сети через WiFi или Ethernet, и читатель знает что такое IP адрес и как зайти удаленно на Raspberry Pi через SSH при помощи putty. Мы будем рассматривать так называемую headless-конфигурацию — без клавиатуры и монитора. Но перед тем, как делать что-то с Raspberry Pi, пара небольших лайфхаков.

Совет N1. Чтобы что-то удаленно делать с Raspberry Pi, на нем нужно настроить SSH, а по умолчанию он выключен. Можно пойти традиционным способом, и запустить стандартный конфигуратор, но можно сделать проще — после записи образа диска достаточно создать пустой файл ssh (без расширения) в корне SD-карты. Дальше, после загрузки Raspberry Pi, SSH будет сразу активен.

Чтобы зайти удаленно на устройство, нужно узнать IP-адрес Raspberry Pi. Для этого достаточно открыть контрольную панель своего маршрутизатора, найти там список DHCP-клиентов, скопировать оттуда нужный IP-адрес (например, это будет 192.168.1.102), и ввести команду putty.exe pi@192.168.1.102 (для Windows) или ssh pi@192.168.1.102 для Linux или OSX.

Однако, IP-адреса могут меняться, например после перезагрузки маршрутизатора, это не всегда удобно. Из этого следует Совет N2 — настроить статический IP-адрес. Для этого на Raspberry Pi выполняем команду sudo nano /etc/dhcpcd.conf, и вводим следующие настройки:

Если нужен адрес WiFi, то интерфейс будет wlan0, если Ethernet то eth0. IP-адреса разумеется, нужно тоже подставить свои. После перезагрузки убеждаемся что IP-адрес правильный, введя команду ifconfig.

Теперь все готово, можем приступать к Python. Все примеры даны для Python 3.7, т.к 2.7 уже давно устарел, и поддерживать его бесмысленно. Но при небольших изменениях кода все заработает и там, если нужно. Кстати, язык Python является кроссплатформенным — это значит что весь приведенный ниже код можно запустить и на Windows и на OSX, ну и разумеется, на Raspberry Pi. Из этого следует Совет N3 — отлаживать программу можно и на обычном ПК, а уже готовую версию заливать на Raspberry Pi. Возможно, придется лишь сделать функции-обертки для методов GPIO, все остальное будет работать.

Итак, наша задача — обеспечить доступ к приложению через обычный браузер. Ибо это стильно-модно-молодежно, ну и «интернет вещей» это наше все.

Способ 1: командная строка

Самый простой способ, не требующий вообще никакого программирования.

Выбираем нужную папку на Raspberry Pi, и вводим команду:

Все, на Raspberry Pi работает файловый сервер! Достаточно зайти на страницу http://192.168.1.102:5000 и мы увидим наши файлы в браузере:

Это достаточно удобно, если нужно открыть удаленный доступ к каким-либо файлам с минимумом затраченных сил. Можно также ввести команду sudo python3 -m http.server 80 и запустить сервер со стандартным 80-м портом, это позволит не указывать порт в адресной строке браузера.

Кстати, если мы хотим, чтобы сервер работал и после закрытия терминала, можно использовать команду sudo nohup python3 -m http.server 80 & — это запустит процесс в фоне. Убить такую программу можно перезагрузкой, или вводом в командной строке команды sudo killall python3.

Способ 2: SimpleHTTPServer

Мы можем довольно просто интегрировать такой же сервер в нашу программу на Python, для этого достаточно запустить его отдельным потоком при старте программы. Теперь, нам не надо возиться с командной строкой, пока программа запущена, сервер будет работать.

Команда os.chdir является опциональной, если мы хотим предоставить доступ из сервера к какой-то другой папке, кроме текущей.

Способ 3: HTTPServer

Это уже полноценный web-сервер, способный обрабатывать GET и POST-запросы, возвращать разные данные и пр. Но и кода разумеется, понадобится больше.

Рассмотрим минимально работающий вариант сервера:

Запускаем браузер, и видим в нем нашу HTML-страницу:

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

Добавим в HTML тег img:

Исходный файл «raspberrypi.jpg» разумеется, должен лежать в папке с программой. Добавим в функцию do_GET возможность получения файлов:

Запускаем сервер, и видим соответствующую картинку:

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

Теперь мы можем открыть в браузере ссылку http://192.168.1.102:5000/status и увидеть текущие параметры системы:

Кстати, как можно видеть, мы отдаем данные в формате JSON, что позволит использовать их для каких-то других запросов.

Заключение

Все задуманное в одну часть не влезло. Вторая часть доступна по ссылке.

Важно: меры безопасности

Если для Raspberry Pi будет использоваться внешний IP-адрес, обязательно стоит помнить о мерах безопасности. Может показаться что ваш мини-сервер никому не нужен, однако сейчас не составляет труда пакетно просканировать все диапазоны IP-адресов (как пример, Украина, Австрия) и найти все доступные устройства. Так что обязательно стоит поменять пароль на Raspberry Pi, и не стоит хранить на устройстве какую-либо конфиденциальную информацию (папки Dropbox, имена/пароли захардкоженные в скриптах, фото и пр).

Источник

Файл-сервер на Raspberry Pi как домашний NAS

Одноплатные мини-компьютеры подходят для совершенно разных полезных применений: блокировки рекламы во всём трафике (Pi-hole), управления умным домом или печати на стареньком принтере в кладовке по Wi-Fi. Но практически идеальный вариант использования — в качестве файл-сервера с подключением внешнего SSD или HDD. Это может быть и домашний хостинг, и даже колокейшн в настоящем дата-центре.

Мы уже рассказывали про создание собственного веб-сервера на Andoid, а также про хостинг файлов в ДНК.

Теперь посмотрим, какие есть разработки под Linux:

Готовые девайсы

Любой сервер с Raspberry Pi приятнее смотрится в корпусе, который защищает электронные компоненты от пыли и влаги. Кроме того, на корпус можно прикрепить небольшой дисплей с индикаторами состояния. Именно такие устройства под названием PiBox разработала компания KubeSail.

PiBox представляет собой компактный контейнер для модуля Raspberry Pi CM4 и двух SSD формата 2,5″ (модель Box 2 mini), с маленьким экранчиком статуса 1,3″, который показывает температуру, нагрузку на CPU и свободное место на дисках.

В будущем компания обещает выпустить контейнеры для пары 3,5-дюймовых дисков (Box 2), а также на пять HDD/SSD форм-фактора 2,5″ или 3,5″: модели Box 5 и Box 5 mini, соответственно.

PiBox позиционируется как недорогой NAS для резервного копирования и раздачи файлов по локальной сети. А также как медиацентр, поскольку последние версии «малинки» поддерживают аппаратное декодирование видео 4К.

На него можно поставить любой стандартный дистрибутив Linux, с которым привыкли работать, в том числе Ubuntu или Raspberry Pi OS.

Разработчики опубликовали каталог приложений, которые можно поставить на своём хостинге в качестве альтернативы проприетарным облачным сервисам, которые Ричард Столлман называет SaaSS.

Все эти приложения запустятся и на «малинке»: торрент-клиент SimpleTorrent, домашний медиацентр Plex, фотоархив PhotoPrism, редактор кода Code-Server, сервер Factorio и многие другие.

Компания KubeSail уже собрала необходимый бюджет на Кикстартере, а теперь готовится к изготовлению и отправке первой партии серверов. Стандартный набор с платами PiBox, вентилятором, внешними антеннами WiFi, ЖК-дисплеем, блоком питания и настроенным Raspberry Pi CM4 (8 ГБ RAM, 8 ГБ eMMC) стоит дороговато: $250. Можно заказать платы только самого переходника, без корпуса и малинки, за $100.

Дешевле собрать устройство самостоятельно, распечатав корпус на 3D-принтере по готовым макетам.

Кроме Raspberry Pi, есть файл-серверы на других одноплатниках. Например, ODROID-HC4 на процессоре Amlogic S905X3 (четыре ядра Cortex-A55, 1,8 ГГц) спроектирован в корпусе, который изначально рассчитан на подключение и установку ещё двух дисков SSD или HDD размером 2,5″ или 3,5″.


ODROID-HC4

Это девайс подешевле с более слабым процессором, но на него всё равно отлично ставится Ubuntu, Debian или Arch с любым серверным софтом типа Samba, FTP, NFS, SSH, Nginx, Apache, SQL, Docker, WordPress и т. д. И стоит всего $73, то есть почти в пять раз дешевле, чем PiBox.

Есть и более гламурные варианты подороже вроде The Bitcoin Machine с сервером Umbrel на борту.

Umbrel OS — операционная система на базе Raspberry Pi OS (Raspbian), оптимизированная для запуска персонального облака, файл-хостинга, узлов Bitcoin и Lightning.


Каталог приложений Umbrel OS

Своими руками

Никто не заставляет покупать готовое устройство. Гораздо дешевле и приятнее собрать его своими руками. Если исходить из стоимости комплектующих, то аналог того же PiBox обойдётся не дороже $60, если взять самый дешёвый модуль CM4. Плата Raspberry Pi CM4 выпускается в 32 вариантах, можно подобрать на свой вкус.

Part Number Wireless RAM eMMC Price*
CM4001000 No 1GB 0GB (Lite) $25
CM4001008 8GB $30
CM4001016 16GB $35
CM4001032 32GB $40
CM4002000 2GB 0GB (Lite) $30
CM4002008 8GB $35
CM4002016 16GB $40
CM4002032 32GB $45
CM4004000 4GB 0GB (Lite) $45
CM4004008 8GB $50
CM4004016 16GB $55
CM4004032 32GB $60
CM4008000 8GB 0GB (Lite) $70
CM4008008 8GB $75
CM4008016 16GB $80
CM4008032 32GB $85
CM4101000 Yes 1GB 0GB (Lite) $30
CM4101008 8GB $35
CM4101016 16GB $40
CM4101032 32GB $45
CM4102000 2GB 0GB (Lite) $35
CM4102008 8GB $40
CM4102016 16GB $45
CM4102032 32GB $50
CM4104000 4GB 0GB (Lite) $50
CM4104008 8GB $55
CM4104016 16GB $60
CM4104032 32GB $65
CM4108000 8GB 0GB (Lite) $75
CM4108008 8GB $80
CM4108016 16GB $85
CM4108032 32GB $90

Основные характеристики CM4 не слишком отличаются от популярной модели Raspberry Pi 4 Model B, только в более компактном формате 55×40 мм:

  • 64-битный четырёхъядерный процессор Broadcom BCM2711 (Cortex-A72, ARM v8), 1,5 ГГц;
  • поддержка двух дисплеев с разрешением до 4K;
  • аппаратное декодирование видео H.265 до 4Kp60;
  • оперативная память 1, 2, 4 или 8 ГБ;
  • флэш-память eMMC 8, 16 или 32 ГБ
  • гигабитный Ethernet;
  • один USB 2.0;
  • два интерфейса для камер;
  • один PCIe Gen 2;
  • 28 GPIO;
  • опционально: WiFi 2,4/5,0 ГГц и Bluetooth 5.0.

Радиомодули специально не включали в базовую комплектацию, чтобы плата могла с лёгкостью пройти сертификацию в любой стране и использовалась в реальных изделиях. Для гарантии поддержки изначально объявлено, что Raspberry Pi CM4 не снимут с промышленного производства как минимум до января 2028 года. То есть поддержка гарантирована как минимум ещё на семь лет.

Как вариант, берём обычную Raspberry Pi 4 Model B, где сразу есть все необходимые разъёмы. Остаётся только установить вентилятор, примонтировать диск и расшарить его по сети.

Поскольку поддерживается microSD, то можно загрузиться с флэш-карты, поставить нужный дистрибутив, а затем установить тот софт, который будет выполнять роль файл-сервера. Например, в качестве опенсорсной альтернативы Dropbox на своём хостинге рекомендуется Nextcloud, вместо Google Photos — PhotoPrism и так далее. Если кого-то напрягает превращение Plex в медиакомпанию, есть легковесная альтернатива: Jellyfin.


Интерфейс Jellyfin напоминает Plex

Мини-сервер отлично подходит для резервного копирования, архива медиафайлов, стриминга. Он также может работать как файрвол и VPN-туннель, предоставляя удалённый доступ к домашней сети по SSH. Такая мини-версия Synology или Netgear NAS.

Энергоэффективность

Снижение энергопотребления даёт прямую финансовую выгоду, то есть энергоэффективное оборудование в прямом смысле приносит деньги. Например, 200-ваттный «динозавр» при круглосуточной работе пожирает электричества примерно на $10 в месяц, в зависимости от региона. Энергопотребление RPi в неактивном состоянии около 2 Вт. Если заменить стандартный NAS с x86-процессором на 15-ваттный мини-сервер Raspberry Pi, то «малинка» окупается буквально за несколько месяцев.

На рынке есть довольно энергоэффективные NAS на ARM-процессорах. Например, вот такая модель Qnap TS-932PX-4G на процессоре Alpine AL324 (четыре ядра Cortex-A57, 1,7 ГГц) стоит ненамного больше, чем вышеупомянутая «машина» с сервером Umbrel на Raspberry Pi.


Qnap TS-932PX-4G

Можно и для процессора x86 найти материнскую плату, которая в неактивном состоянии потребляет несколько ватт, а также энергоэффективный процессор. Но всё равно это не сравнится с RPi.

Коммерческий хостинг на Raspberry Pi

Популярность «малинок» настолько велика, что некоторые провайдеры несколько лет назад начали предлагать выделенные серверы на Raspberry Pi!

Сами дата-центры тоже весьма необычные. Предполагается, что это будет децентрализованная сеть ЦОДов. Шкафы с «малинками» устанавливают внутри ветряных установок (внутри опор).


Специально сконструированная стойка с серверами Raspberry Pi установлена внутри одной из ветровых установок

В блок размером 3U помещается 12 серверов Raspberry Pi с воздушным охлаждением. Вот как это выглядит:

Платы для установки в стойку принимают по почте, без корпусов, с блоком питания и кабелем. Диски только 2,5″ USB. Флэш-карту лучше установить надёжную, предназначенную для долговременного использования, рекомендуется Transcend High Endurance (Gold) или SanDisk Max Endurance. Потому что за замену вышедшего из строя оборудования провайдер возьмёт отдельную плату.

Наверное, в некоторых случаях коммерческий хостинг на Raspberry Pi лучше домашнего, хотя вряд ли у такого хостинга найдется много клиентов. Может быть, кому-то так удобнее держать узел Bitcoin, веб-сервер на внешнем IP, раздавать торренты, какие-то службы, где нужен надёжный аптайм 24/7. Хотя обычно все задачи отлично выполняет маленький домашний NAS.

P. S. По серверным кластерам на RPi см. также эксперименты Ивана Кулешова.

НЛО прилетело и оставило здесь промокоды для читателей нашего блога:

— 15% на все тарифы VDS (кроме тарифа Прогрев) — HABRFIRSTVDS .

Источник

Adblock
detector