Как создать сервер Raspberry Pi для разработки
Опубликовано: 2022-03-11Raspberry Pi — это небольшой компьютер, который вы можете приобрести всего за 5 долларов США и на котором вы можете запускать множество различных типов программного обеспечения и создавать множество различных проектов.
В этой статье я проведу вас через процесс его настройки в качестве домашнего сервера разработки и развертывания полнофункционального приложения JavaScript, к которому вы можете получить доступ из-за пределов вашей сети. Это отлично подходит для настройки собственного удаленного цифрового рабочего пространства или просто для контроля над оборудованием, которое вы используете для разработки.
Что вам нужно для этого домашнего сервера Raspberry Pi?
Хотя теперь это, в частности, учебник по Raspberry Pi 3, он по-прежнему должен работать с моделями, начиная с первого поколения — если у вас более старая модель или Raspberry Pi Zero, сообщите нам о своем опыте в комментариях ниже.
Помимо самой платы Raspberry Pi вам понадобятся:
- Зарядное устройство Micro USB
- Кабель Ethernet
- Карта microSD (минимум 8 ГБ, и карты до 32 ГБ работают нормально)
Они также пригодятся во время первоначальной настройки:
- USB-клавиатура
- Кабель HDMI и монитор
ОС Raspberry Pi: Raspbian
Установить операционную систему на Raspberry Pi очень просто. Сначала с помощью компьютера установите загрузочный образ на карту microSD. Затем просто вставьте карту в Raspberry Pi и загрузитесь оттуда.
Raspbian — это дистрибутив Linux, перенесенный с Debian 7.0 ( Wheezy ), и является официальной ОС для Raspberry Pi, оптимизированной для архитектуры устройства. Хотя есть и другие варианты запуска вашей любимой ОС на Pi, мы будем использовать Raspbian из-за его простоты.
Это руководство было обновлено для работы с этой (или более поздней) версией Raspbian:
Kernel version : #1 SMP Debian 4.9.110-3+deb9u4 (2018-08-21) Kernel release : 4.9.0-8-amd64
Чтобы установить Raspbian, перейдите на официальную страницу загрузки и загрузите zip-файл с последней версией Raspbian.
Затем вставьте карту microSD в слот для карты SD или адаптер вашего компьютера. В зависимости от операционной системы вашего компьютера следуйте инструкциям на веб-сайте Raspberry для Linux, Mac OS или Windows.
После завершения процесса извлеките SD-карту из компьютера и вставьте ее в Raspberry Pi. Подключите Raspberry Pi к маршрутизатору с помощью кабеля Ethernet и подключите зарядное устройство Micro USB, которое начнет загрузку Raspberry Pi.
Для начальной настройки есть два варианта:
- Если у вас есть USB-клавиатура и монитор HDMI, вы можете подключить их к Raspberry Pi для первоначальной настройки.
- Ваш Pi должен распознать эти устройства, как только они будут подключены.
- При первой загрузке Pi автоматически запустит
raspi-config
. После первой загрузки вам нужно будет самостоятельно запуститьsudo raspi-config
, чтобы настроить устройство.
- Если у вас их нет, вы можете подключиться к Raspberry Pi, пока он работает, используя SSH:
- Во-первых, вам нужно найти IP-адрес вашего Raspberry Pi в вашей локальной сети. Это можно сделать, подключившись к странице администратора вашего маршрутизатора или используя сетевой инструмент, такой как
nmap
. - Получив IP-адрес устройства, подключитесь к нему с помощью SSH со своего терминала (или через Putty, если вы используете Windows). Пользователь по умолчанию —
pi
, а пароль по умолчанию —raspberry
. Так, например, если IP-адрес 192.168.1.16, запуститеssh [email protected]
и введите пароль при появлении запроса. - Когда вы подключитесь, запустите
sudo raspi-config
.
- Во-первых, вам нужно найти IP-адрес вашего Raspberry Pi в вашей локальной сети. Это можно сделать, подключившись к странице администратора вашего маршрутизатора или используя сетевой инструмент, такой как
raspi-config
проведет вас через окончательную настройку. Вы можете настроить все параметры, но наиболее важными являются первые два: расширить файловую систему, убедившись, что все хранилище SD-карты доступно для ОС, и изменить пароль для пользователя Pi по умолчанию, чтобы ваш сервер был защищены от злоумышленников.
Установите веб-сервер (Nginx) на свой Raspberry Pi
Далее вы установите веб-сервер. Я предпочитаю Nginx, потому что он занимает мало памяти и хорошо работает с Node.js (который вы настроите позже). Другие веб-серверы, такие как Apache или lighttpd, также будут работать, но для этой демонстрации мы будем использовать Nginx.
Прежде чем начать что-либо устанавливать, вы должны убедиться, что все обновлено, выполнив следующие команды на Pi:
sudo apt-get update sudo apt-get upgrade
Затем вы можете установить Nginx с помощью apt-get
:
sudo apt-get install nginx
После завершения установки запустите сервер, выполнив:
sudo service nginx start
Если вам не нужно было выяснять локальный IP-адрес вашего Raspberry Pi на предыдущем шаге, пришло время выяснить это, запустив ifconfig
. Вывод для вашего адаптера Ethernet будет под eth0
и с его локальным IP-адресом, помеченным как inet addr
.
Как только вы узнаете IP-адрес, вы можете указать на него браузер вашего компьютера, где вы должны увидеть сообщение по умолчанию «Добро пожаловать в Nginx».
Откройте для Интернета: переадресация портов
Вы можете пропустить этот шаг, если не планируете получать доступ к Raspberry Pi из-за пределов локальной сети. Но для тех, кто хочет получить доступ к своему серверу из других мест, давайте удостоверимся, что это возможно.
В обычной домашней сети устройства, подключенные к маршрутизатору, невидимы для внешнего мира. Только ваш маршрутизатор может быть доступен извне, используя внешний IP-адрес вашей сети. Ваш маршрутизатор отвечает за определение того, какой входящий трафик разрешен в сети и на какое устройство он должен быть отправлен.
Когда устройство в локальной сети инициирует соединение (например, когда вы открываете веб-сайт в своем браузере), маршрутизатор распознает входящий ответный трафик как часть этого соединения и пропускает его. Однако, если маршрутизатор получает входящий трафик, который не является частью открытого соединения (например, когда внешнее устройство пытается инициировать соединение с внутренним устройством), он блокирует входящий трафик от перехода в сеть. Это важная функция безопасности для защиты сети!
Итак, как вы можете подключиться к вашему Pi извне? Ответ - перенаправление портов. Маршрутизатор должен быть настроен так, чтобы входящие соединения на определенных портах проходили и направлялись на нужное устройство. По умолчанию протокол HTTP использует порт 80, а SSH использует порт 22, поэтому это два порта, которые вам необходимо открыть на вашем маршрутизаторе, чтобы получить доступ к вашему веб-приложению и разрешить безопасные соединения для управления вашим сервером.
Шаги по настройке маршрутизатора для открытия и перенаправления портов могут различаться в зависимости от вашего интернет-провайдера и марки вашего маршрутизатора, но в любом случае вы сможете выполнить это с помощью расширенных параметров конфигурации на странице администратора вашего маршрутизатора. Просто найдите параметр с таким названием, как «Переадресация», «Переадресация портов» или «Преобразование сетевых адресов».
Вам нужно открыть порт для HTTP-соединений и еще один для SSH. Основная идея состоит в пересылке данных, адресованных этим двум внешним портам, на ваш Raspberry Pi, при этом веб-трафик направляется на порт 80, где прослушивается Nginx, а трафик SSH направляется на порт 22, где сервер SSH принимает соединения с внешних компьютеров. Вот пример того, как это может выглядеть на странице конфигурации вашего маршрутизатора:
192.168.1.16
. Весь входящий трафик, предназначенный для портов 80 или 22, перенаправляется на этот внутренний адрес. Вы можете определить внешний IP-адрес вашего маршрутизатора, просто набрав «какой у меня IP-адрес» в Google. Если затем вы выйдете за пределы сети вашего маршрутизатора, вы можете проверить, работает ли переадресация портов, открыв SSH-соединение с помощью ssh pi@{external IP address}
. Аналогичным образом можно проверить переадресацию портов HTTP, введя внешний IP-адрес в адресную строку браузера. Просто имейте в виду, что переадресация портов позволяет любому извне получить доступ к устройству через эти порты, если он знает внешний IP-адрес вашего маршрутизатора.
Если у вас нет статического IP, вы можете настроить динамический DNS. Это очень простой и легкий шаг. Вы можете настроить динамический DNS со своего маршрутизатора или настроить для него Raspberry Pi. Я не буду рассказывать здесь, как настроить DDNS, но на BitPi.co есть хорошее руководство по этому вопросу, если это необходимо.

Установите фреймворк: полноценный JavaScript
Вы можете запускать большинство веб-фреймворков поверх Nginx, но давайте посмотрим, как использовать полный стек с помощью JavaScript. Для этого вам нужно установить Node.js и MongoDB.
В настоящее время Node.js легко устанавливается на Raspberry Pi с помощью:
sudo apt-get install nodejs
После завершения установки вы можете проверить, работает ли он, запустив node -v
.
Теперь вы можете установить MongoDB, просто набрав:
sudo apt-get install mongodb
Просто имейте в виду, что если вам когда-нибудь понадобится отключить Raspberry Pi, вам нужно сначала отключить службу, чтобы избежать повреждения базы данных:
sudo service mongodb stop
Разверните свое приложение
Вы можете разрабатывать на своем локальном компьютере, а затем отправлять изменения в репозиторий Git на BitBucket. Поскольку Raspbian поставляется с предустановленным Git, вы можете затем загрузить свой последний код приложения на устройство и запустить его.
Оформить проект
Сначала давайте настроим некоторый код приложения и отправим его в репозиторий Git. Есть много способов запустить приложение, но один из моих любимых — генератор-угловой-полный стек, который формирует как серверный, так и клиентский код.
Установите generator-angular-fullstack
на свой компьютер:
npm install -g generator-angular-fullstack
Создайте новый каталог для вашего приложения:
mkdir my-app cd my-app
И скаффолдить приложение:
yo angular-fullstack my-app
Создайте репозиторий и нажмите код
Теперь создайте репозиторий в BitBucket, как описано здесь. Затем настройте локальный каталог:
git init git remote add origin [email protected]:USER/REPO.git
Таким образом, вы можете зафиксировать и нажать код:
git add . git commit -m 'Initial commit' git push -u origin master
Генератор поставляется с плагином grunt-build-control, который позволяет вам зафиксировать код сборки в определенной ветке в вашем репозитории. Просто добавьте конфигурацию BitBucket в Gruntfile.js
в корневой каталог вашего приложения:
buildcontrol: { options: { dir: 'dist', commit: true, push: true, connectCommits: false, message: 'Built %sourceName% from commit %sourceCommit% on branch %sourceBranch%' }, bitbucket: { options: { remote: '[email protected]:USER/REPO.git', branch: 'build' } } }, // ...
Теперь запустите:
grunt build
… для создания папки с дистрибутивом, а затем:
grunt buildcontrol:bitbucket
…чтобы зафиксировать и отправить код в ветку сборки в вашем репозитории.
Сгенерируйте SSH-ключ
Теперь ваш код размещен. Прежде чем вы сможете развернуть его на своем Raspberry Pi, вам необходимо сгенерировать ключ SSH для Raspberry Pi и добавить его в свою учетную запись BitBucket. Мы быстро пройдем этот шаг, но если у вас возникнут проблемы, следуйте руководству BitBucket. Итак, войдите в свой терминал Raspberry Pi и сгенерируйте пару открытого/закрытого ключа:
ssh-keygen
Затем запустите агент:
ssh-agent /bin/bash
И добавляем ключ к агенту:
ssh-add /home/pi/.ssh/id_rsa
Теперь вам просто нужно вывести содержимое открытого ключа:
cat /home/pi/.ssh/id_rsa.pub
…так что вы можете скопировать и вставить его в BitBucket.
В BitBucket щелкните изображение своего профиля и перейдите в раздел « Управление учетной записью ». В разделе БЕЗОПАСНОСТЬ найдите ключи SSH и нажмите кнопку Добавить ключ .
Клонировать репозиторий
Не существует соглашения о том, где размещать код ваших приложений, но вы можете создать каталог /var/www
и поместить туда все свои проекты.
cd /var sudo mkdir www
Чтобы избежать использования sudo
, когда вы хотите поместить файлы в корневой каталог, вы можете изменить владельца на своего пользователя Pi и группу на www-data
, которая используется Nginx:
sudo chown -R pi:www-data www cd www
Теперь вы можете клонировать ветку сборки вашего репозитория и установить зависимости:
git clone [email protected]:USER/REPO.git --branch build --single-branch cd REPO npm install --production
Как только это будет завершено, вы можете запустить свое приложение, настроив рабочую среду:
export NODE_ENV=production; node server/app.js &
Теперь укажите в браузере компьютера IP-адрес устройства, чтобы проверить, работает ли оно.
Настройка обратного прокси-сервера Nginx
Остался еще один шаг, чтобы сделать ваше приложение доступным извне. Хотя Nginx прослушивает порт 80, откуда он будет получать HTTP-запросы для вашего Pi, само приложение Node прослушивает другой порт (например, порт 8080). Поэтому вам нужно настроить Nginx, чтобы он действовал как обратный прокси-сервер, распознавая запросы, предназначенные для вашего приложения, и передавая их в Node.
Nginx хранит файл конфигурации для каждого приложения, которое он обслуживает, в папке sites-available
:
cd /etc/nginx/sites-available/
Здесь вы можете скопировать файл конфигурации по default
и отредактировать его по своему усмотрению:
sudo cp default my-app sudo nano my-app
Окончательный файл конфигурации должен выглядеть так, где Nginx выступает в качестве прокси-сервера для сервера Node.js:
server { listen 80; root /var/www/my-app/; # identifies the location of the application you are configuring server_name my-app.dev; # identifies the hostname used by this application's traffic location / { proxy_pass http://localhost:8080/; # configures the back-end destination for this traffic } }
Чтобы включить эту конфигурацию, вам нужно создать символическую ссылку в папке с sites-enabled
, где Nginx ищет активные конфигурации во время выполнения:
sudo ln -s /etc/nginx/sites-available/my-app /etc/nginx/sites-enabled/my-app
И перезагрузите службу, чтобы активировать эти изменения:
sudo service nginx reload
На этом этапе ваше приложение готово к приему HTTP-трафика, предназначенного для домена my-app.dev
(благодаря директиве server_name my-app.dev
, которую вы настроили выше). Последний вопрос, который вам нужно решить, — как сделать так, чтобы трафик, который вы отправляете извне, соответствовал этому доменному имени. Хотя вы можете купить доменное имя и указать его на свой IP, файл hosts
приходит на помощь и делает это ненужным.
На рабочей станции, с которой вы будете получать доступ к сайту, просто добавьте внешний IP-адрес вашего маршрутизатора и сопоставьте его с именем хоста my-app.dev
. Любой HTTP-трафик, который вы генерируете для my-app.dev
, будет отправлен непосредственно на ваш маршрутизатор с правильным именем Host
в HTTP-заголовке Host.
В Windows с правами администратора вы можете редактировать файл, расположенный в c:\windows\system32\drivers\etc\hosts
с помощью блокнота. В Linux и Mac вы можете использовать терминал с sudo nano /etc/hosts
и sudo nano /private/etc/hosts
соответственно.
## # Host Database # # localhost is used to configure the loopback interface # when the system is booting. Do not change this entry. ## 127.0.0.1 localhost 255.255.255.255 broadcasthost ::1 localhost 212.124.126.242 my-app.dev # add your host name to the list
Что дальше?
Теперь, когда все настроено, вы можете развернуть на Raspberry Pi столько приложений, сколько захотите, и установить навсегда или pm2, чтобы поддерживать работу ваших серверов Node.js.
И просто помните, что если что-то пойдет не так, вы можете просто стереть SD-карту и начать заново!