четверг, 6 мая 2021 г.

Веб-сервер на базе Raspberry Pi Zero W. Часть 0: Подготовительная.

Наверное, уже практически не найдется такого человека, мало-мальски увлекающегося компьютерной тематикой, который не знает о существование таких одноплатных компьютеров как Raspberry. Своим появлением, при относительной дешевизне, эти одноплатники породили целый бум в отрасли подобных девайсов. И сейчас рынок одноплатных компьютеров на базе ARM насчитывает уже десятки аналогичных устройств. Можно упомянуть и таких фруктовых подражателей как Orange Pi и Banana Pi, а так же весьма интересный проект от Hardkernel как ODROID и десятки и десятки других. Какие-то из них дешевле, какие-то более производительные, какие-то даже собраны на базе процессора x86 (что не ARM, конечно же), в общем, выбрать есть из чего, главное четко понимать - для каких целей приобретается устройство. 

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

Так в последующей небольшой серии заметок я хотел бы поделиться своим опытом по "превращению" Raspberry Pi Zero W в полноценный web-сервер, основное назначение которого - конфигурирование и отладка скриптов.

В качестве дисклеймера
Конечно же я осознаю все технические возможности и ограничения Raspberry Pi Zero в т.ч. особенности работы с внешними накопителями и, как следствие, соответствующие скорости обмена данными. Речь пойдет о создании веб-сервера для целей предварительного тестирования и отладки создаваемых скриптов (в т.ч. CMS и т.п.). Как вариант - веб-сервер своего персонального сайта с соответствующей максимальной нагрузкой. Для создания промышленного веб-сервера необходимо присмотреться к более мощному оборудованию.

Итак, из какой аппаратной части будет состоять веб-сервер:

  • непосредственно Raspberry Pi Zero W (модификация с Wi-Fi на борту). Подробно останавливаться на технических характеристиках не буду - об этом уже написаны тысячи тысяч обзоров, а страждущих отправлю на соответствующую страницу в Википедии
  • карта памяти microSD Verbatim 512 Мб Class 4.
  • SSD накопитель AMD Radeon R5 R5SL120G 120Гб во внешнем корпусе ORICO 2588US3-OR (поддерживающим интерфейс USB 3, что в нашем случае совершенно не важно, т.к. Raspberry Pi Zero W имеет интерфейс USB 2).
  • внешний источник питания, выдающий максимальную силу тока в 2 ампера (хотя такая сила тока для модели Zero и не нужна, запас "прочности" лучше всегда иметь).

Доступ и управление устройством будет осуществляться удаленно, через SSH, поэтому не требует дополнительной периферии типа монитора и клавиатуры. Отдельно стоит проговорить наличие в конфигурации диска SSD. Как таковой, он не требуется и можно ограничиться карточкой microSD объемом не менее 8, а лучше 32 Гб. Тем не менее, наличие внешнего SSD является неплохим вариантом с точки зрения его "отклика" по сравнению с картой памяти microSD. Учитывая, что это самостоятельное устройство ПЗУ со своим контроллером и кэшем, на выходе мы получаем чуть выше отклик и скорость работы с мелкими файлами (что немаловажно для веб-сервера, где очень-очень много небольших файлов). Еще одним аргументом в сторону SSD я бы назвал относительно низкую надежность современных карт microSD. Хотя производители microSD и обещают десятки тысяч циклов перезаписи для своих карт, практика показывает, что при умеренно активном использовании они зачастую "умирают" еще задолго до достижения заявленного предела. Если Вы все же остановите свой выбор на использовании только карты памяти, то со своей стороны посоветовал бы использовать максимально надежную карту от именитого производителя (а не супер карту, купленную по супер цене со супер скидкой в подвальчике дядюшки Ляо)) ). Ну, а любители опираться на мнение "авторитетов", могут ознакомиться с обзором карт памяти знаменитого блогера Джеффа Гирлинга, где он протестировал ряд популярных microSD карт в связке с последней, на момент написания данной заметки, моделью Raspberry Pi.

Следующий шаг - выбор операционной системы. В этом плане Raspberry Pi весьма выгодно смотрится по сравнению со всеми остальными "Pi". В ее арсенале несколько стабильно работающих ОС, самой основной из которых, конечно же, является Raspberry Pi OS - официально поддерживаемая разработчиком Raspberry Pi. Подобного продукта, насколько мне известно, нет ни у одного конкурента Raspberry Pi. И в нашем случае было бы глупо отказываться от подобного варианта. К слову, именно софтверную поддержку я бы назвал самой сильной стороной Paspberry Pi. Имей более дешевые и производительные конкуренты (те же Orange Pi или Banana Pi) некий аналогичный продукт, им бы просто цены не было и их одноплатники выглядели бы более конкурентными (уж простите за тавтологию)

При этом для "установки" операционной системы Raspberry Pi OS достаточно всего лишь скачать специальную программу от разработчика - Raspberry Pi Imager - запустить ее и следовать инструкциям на экране. Программа сама скачает выбранный вами образ и запишет его на необходимый носитель (карту памяти microSD или внешний диск SSD/HDD). После чего, достаточно будет вставить карту памяти microSD (или подключить внешний носитель SSD/HDD) к Raspberry Pi и подать на нее питание. Но это, конечно же, все идеальная картина, которая всегда не лишена своих нюансов. О некоторых из них речь пойдет ниже.  


Итак, пошаговая инструкция по установке Raspberry Pi OS на внешний носитель (SSD/HDD) для запуска на Raspberry Pi Zero W.

Шаг 1. Скачиваем Raspberry Pi Imager с официального сайта разработчика (на момент написания данного поста доступен установщик для ОС Windows, macOS и Ubuntu x86). 


Шаг 2. Устанавливаем и запускаем скачанный дистрибутив (здесь и далее ведется речь о работе на ПК под управлением ОС Windows).


Шаг 3. Щелкаем по кнопке CHOOSE OS и выбираем вариант Raspberry Pi OS (other).



Шаг 4. В следующем диалоговом окне нас интересует вариант Raspberry Pi OS Lite (32-bit), выбираем его. Бесспорно, Вы можете выбрать вариант и Full, если хотите получить графическую среду со всем набором "рекомендуемых программ". И он даже будет работать. Вопрос только в том - насколько это нужно для устройства, планируемое исключительно как тестовый web-сервер? Учитывая, что любая "графика" порядком загружает систему, рекомендую отказаться от нее в пользу увеличения быстродействия всех сервисов и служб, связанных непосредственно с работой веб-сервера.



Шаг 5. Подключаем к ПК внешний SSD/HDD и кард-ридер с картой памяти microSD.

Шаг 6. В Raspberry Pi Imager щелкаем по кнопке CHOOSE STORAGE и в появившемся диалоговом окне выбираем требуем нужный носитель информации. В нашем случае нам нужно выбрать внешний SSD/HDD (конкретно в моем - это External USB 3.0 SCSI Disk Device - 120.0 GB). 



Шаг 7. В Raspberry Pi Imager щелкаем по кнопке WRITE. Программа предупредит, что при записи вся существующая информация на носителе будет уничтожена. Жмем кнопку YES и ждем пока программа скачает выбранный образ операционной системы и запишет его на выбранный носитель. При этом Raspberry Pi Imager самостоятельно создаст все требуемые разделы. 






Шаг 8. По факту успешной записи образа на внешний SSD/HDD, отключите его от ПК и заново подключите. После повторного подключения внешнего SSD/HDD к ПК в Проводнике Windows Вы должны увидеть новый раздел с меткой boot (в моем случае система присвоила ему букву L, у Вас это может быть совершенно другая буква. Ориентироваться стоит на наименование раздела). 



Шаг 9. Для того, чтобы иметь возможность удаленно подключиться к Raspberry Pi Zero W под управлением Raspberry Pi OS по протоколу SSH, нам необходимо дополнительно создать два файла в разделе boot (см. Шаг 8). 

1) Абсолютно пустой файл с наименованием ssh. Файл должен быть абсолютно пустой и наименование должно строго содержать только три буквы (ssh) без точек и расширений. 

2) Файл с настройками подключения к вашей сети Wi-Fi с наименованием: wpa_supplicant.conf. Содержимое файла должно соответствовать следующей структуре:

ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
country=RU

network={
 ssid="Your_Wi_Fi_Network"
 psk="Password_For_Wi_Fi"
}

где, вместо Your_Wi_Fi_Network - Вам необходимо указать наименование вашей сети Wi-Fi, а вместо Password_For_Wi_Fi - пароль к вашей сети Wi-Fi. Дополнительно обращаю внимание, что и наименование сети Wi-Fi и пароль к ней, должны быть указаны в двойных кавычках.

Данную манипуляцию необходимо будет проделать ровно один раз. Если Вы все сделали правильно, то при первой загрузке система автоматически создаст подключение к вашей сети Wi-Fi и откроет 22 порт для удаленного управления через протокол SSH. После этого удалит данные файлы из раздела boot 

Шаг 10. Находим в Проводнике Windows раздел с подключенной к ПК картой памяти microSD и форматируем его (в формате FAT/FAT32). После чего копируем на карту памяти microSD из раздела boot (см. Шаг 8) файл bootcode.bin. Зачем нам это нужно? Так уж получилось, что чип Broadcom BCM2835, на база которого собрана Raspberry Pi Zero W, не позволяет напрямую с внешнего накопителя загружать операционную систему. В соответствии с архитектурой, загрузчик ожидается только на карте памяти microSD. Благо разработчики "позволили" использовать вот такой "костыльный" метод загрузки с внешнего накопителя, когда файл загрузчика второго уровня (bootcode.bin) загружается непосредственно с карты памяти microSD, а уже вся остальная операционная система с внешнего накопителя. Учитывая, что размер файла bootcode.bin всего порядка несколько десятков килобайт, Вы можете смело использовать самую маленькую и простую карту памяти microSD какую найдете. Подробнее об этом можно ознакомиться на соответствующей страничке на официальном сайте (на английском языке).

Шаг 11. Подключаем внешний накопитель (SSD/HDD) к Raspberry Pi Zero W (второй разъем USB от края), вставляем в слот карту памяти microSD и подаем питание. Если до этого момента все было сделано верно, то в настройках своего Wi-Fi роутера через 2-3 минуты Вы должны обнаружить новое подключенное устройство с наименованием raspberrypi. 

Для упрощения дальнейшего подключения к "малинке" рекомендую установить для нее статический (постоянный) IP-адрес. 



Шаг 12. Проверяем наличие подключения по протоколу SSH. Для этого нам потребуется любой терминальный клиент с поддержкой протокола SSH. Тут Вы вольны выбирать любой Вам полюбившийся. Сам же я с незапамятных времен использую для этих целей всем известный PuTTY. Итак, если у Вас еще нет никакого подобного терминала, можете смело проследовать на страницу загрузки PuTTY и скачать установочный дистрибутив сразу с целым набором программ (для подключения не только по протоколу SSH). 

Установив и запустив исполняемый файл putty.exe мы увидим интерфейс программы в котором нам необходимо указать IP адрес нашей Raspberry Pi Zero W (см. Шаг 11) в поле Host Name (or IP address). Все остальные настройки оставляем по умолчанию (Port: 22, Connection type: SSH).


Для того, чтобы каждый раз не вводить IP адрес вашей "малинки", можно сохранить настройки подключения к ней. Чтобы сохранить параметры подключения необходимо указать IP адрес, внести наименование сохраняемого подключения в поле Saved Sessions и нажать кнопку Save. Указанное подключение появится в списке ниже. При последующих подключениях достаточно будет выделить его в списке и нажать кнопку Load.

Когда все параметры подключения указаны, жмем кнопку Open. Программа должна предупредить о потенциальной угрозе безопасности, т.к. мы по безопасному протоколу подключаемся к серверу, который программа "не знает" и "не может проверить". Жмем кнопку Да (в конце то концов это же наше устройство))). 


 

Если до этого все было сделано правильно, то откроется окно терминала с приглашением к вводу логина и пароля от Raspberry Pi Zero W.


Осталось только пройти авторизацию. По умолчанию пара логин/пароль следующие:

login: pi
password: raspberry


Всё! Наша "малинка" готова к дальнейшей настройке и конфигурированию в роли web-сервера. Но об этом в следующих заметках.

Шаг 13. Радуемся достигнутому "результату" :-D, пишем комментарии.              



Комментариев нет:

Отправить комментарий