Веб сервер на raspberry pi 3: 5 способов сделать Python-сервер на Raspberry Pi. Часть 1 / Хабр

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.Веб сервер на raspberry pi 3: 5 способов сделать Python-сервер на Raspberry Pi. Часть 1 / Хабр Для этого достаточно открыть контрольную панель своего маршрутизатора, найти там список DHCP-клиентов, скопировать оттуда нужный IP-адрес (например, это будет 192.168.1.102), и ввести команду putty.exe [email protected] (для Windows) или ssh [email protected] для Linux или OSX.

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

interface eth0
static ip_address=192.168.1.152/24
static routers=192.168.1.1
static domain_name_servers=192.168.1.1 8.8.8.8

Если нужен адрес 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, и вводим команду:

python3 -m http.server 5000 

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

Это достаточно удобно, если нужно открыть удаленный доступ к каким-либо файлам с минимумом затраченных сил.Веб сервер на raspberry pi 3: 5 способов сделать Python-сервер на Raspberry Pi. Часть 1 / Хабр Можно также ввести команду sudo python3 -m http.server 80 и запустить сервер со стандартным 80-м портом, это позволит не указывать порт в адресной строке браузера.

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

Способ 2: SimpleHTTPServer

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

import http.server
import socketserver
from threading import Thread
import os

def server_thread(port):
    handler = http.server.SimpleHTTPRequestHandler
    with socketserver.TCPServer(("", port), handler) as httpd:
        httpd.serve_forever()

if __name__ == '__main__':

    port = 8000
    print("Starting server at port %d" % port)
    os.chdir("/home/pi/Documents")
    Thread(target=server_thread, args=(port,)).start()

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

Способ 3: HTTPServer

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

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

from http.server import BaseHTTPRequestHandler, HTTPServer

html = "<html><body>Hello from the Raspberry Pi</body></html>"

class ServerHandler(BaseHTTPRequestHandler):
    def do_GET(self):
        if self.path == "/":
            self.send_response(200)
            self.send_header('Content-type', 'text/html')
            self.end_headers()
            self.wfile.write(html.encode('utf-8'))
        else:
            self.Веб сервер на raspberry pi 3: 5 способов сделать Python-сервер на Raspberry Pi. Часть 1 / Хабр send_error(404, "Page Not Found {}".format(self.path))

def server_thread(port):
    server_address = ('', port)
    httpd = HTTPServer(server_address, ServerHandler)
    try:
        httpd.serve_forever()
    except KeyboardInterrupt:
        pass
    httpd.server_close()

if __name__ == '__main__':
    port = 8000
    print("Starting server at port %d" % port)
    server_thread(port)

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

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

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

html = '<html><body><h4>Hello from the Raspberry Pi</h4><img src="raspberrypi.jpg"/></body></html>'

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

    def do_GET(self):
        print("GET request, Path:", self.path)
        if self.path == "/":
            self.send_response(200)
            self.send_header('Content-type', 'text/html')
            self.end_headers()
            self.wfile.write(html.encode('utf-8'))
        elif self.path.endswith(".jpg"):
            self.send_response(200)
            self.send_header('Content-type', 'image/jpg')
            self.end_headers()
            with open(os.curdir + os.sep + self.path, 'rb') as file:
                self.wfile.write(file.read())
        else:
            self.send_error(404, "Page Not Found {}".format(self.path))

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

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

import psutil
import json

def cpu_temperature():
    return psutil.sensors_temperatures()['cpu-thermal'][0].current

def disk_space():
    st = psutil.Веб сервер на raspberry pi 3: 5 способов сделать Python-сервер на Raspberry Pi. Часть 1 / Хабр disk_usage(".")
    return st.free, st.total

def cpu_load() -> int:
    return int(psutil.cpu_percent())

def ram_usage() -> int:
    return int(psutil.virtual_memory().percent)

def do_GET(self):
        ...
        elif self.path == "/status":
            self.send_response(200)
            self.send_header('Content-Type', 'application/json')
            self.end_headers()
            health = {'CPUTemp': cpu_temperature(), 'CPULoad': cpu_load(), "DiskFree": disk_space()[0], "DiskTotal": disk_space()[1], "RAMUse": ram_usage()}
            self.wfile.write(json.dumps(health).encode('utf-8'))

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

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

Заключение

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

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

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

PS: Для понимания картины добавил опрос

Веб- и FTP-сервер на Raspberry Pi

Установка сервера на Raspberry Pi — вопрос времени. Да, мне тоже поначалу это казалось неразумным, но позднее я понял, какие большие возможности это даёт. По сути, это веб-интерфейс, доступный откуда угодно через браузер, с помощью которого можно получать изображение с камеры или рулить сервами. Короче говоря, я до сервера дозрел очень быстро.

Веб-сервер

Идеальным веб-сервером для Raspberry Pi является lighttpd в силу его легковесности и высокой производительности.Веб сервер на raspberry pi 3: 5 способов сделать Python-сервер на Raspberry Pi. Часть 1 / Хабр Кому интересно, можно почитать немного тут, а мы же перейдём непосредственно к установке. Кстати, если у вас используются настройки доступа по умолчанию (пользователь «pi» и пароль «raspberry»), то настоятельно рекомендуется их сменить. Теперь можно устанавливать lighttpd и PHP5:

sudo apt-get install lighttpd -y
sudo apt-get install php5-common php5-cgi php5 -y

Так же необходимо включить протокол Fastcgi и перезапустить сервер, чтобы изменения вступили в силу:

sudo lighty-enable-mod fastcgi-php
sudo /etc/init.d/lighttpd restart
sudo service lighttpd force-reload

Установка закончена и если набрать в строке браузера IP-адрес своего Raspberry Pi (как его узнать написано тут), откроется страница-заглушка lighttpd.

Для повышения комфорта, можно изменить права доступа к папкам сервера, чтобы не только root мог там что-то менять, но простой «рабочий класс» в лице юзера pi:


sudo chown www-data:www-data /var/www


sudo chmod 775 /var/www


sudo chown -R pi /var/www


sudo usermod -a -G www-data pi

Для вступления изменений в силу нужно перезагрузить устройство. Корневая папка сервера — /var/www , порт сервера — 80. Если есть необходимость изменить порт, сделать это можно отредактировав конфигурационный файл сервера (после изменения опять же необходима перезагрузка):

sudo nano /etc/lighttpd/lighttpd.conf

И последний нюанс. Если Raspberry Pi подключен к локальной сети, возможно, что для доступа «извне» придётся сделать перенаправление портов (Port Forwarding) в рутере. В этом случае надо установить перенаправление для внешних клиентов с порта 80 (Public Port) на IP-адрес Raspberry Pi и опять же на порт 80 (Private port).

FTP-сервер

Веб-сервер установлен, но надо же ещё туда как-то файлы закачивать. Наиболее простой способ — настроить FTP-сервер. Установим vsftpd и сразу же откроем файл конфигурации для редактирования

sudo apt-get install vsftpd -y
sudo nano /etc/vsftpd.Веб сервер на raspberry pi 3: 5 способов сделать Python-сервер на Raspberry Pi. Часть 1 / Хабр conf

В файле необходимо сделать следующее:

  • изменить anonymous_enable=YES на anonymous_enable=NO
  • разкомментировать (убрать символ # в начале) строки local_enable=YES и write_enable=YES
  • добавить в конце файла строку force_dot_files=YES

После сохранения изменений надо перезапустить сервер:

sudo service vsftpd restart

Для повышения комфорта, можно добавить быструю ссылку на корневую папку сервера:

ln -s /var/www/ ~/www

Опять же, если нужно перенаправление портов, оно делается так же, как и для веб-сервера, но с портами 20 и 21.

Разместите свой собственный веб-сайт на Raspberry Pi

Вам нужен веб-сайт, но вы не можете позволить себе расходы на хостинг? Одним из способов решения этой проблемы является использование Raspberry Pi, который более чем способен запускать базовое программное обеспечение веб-сервера. Лучше всего, его настройка проста.

Зачем использовать Raspberry Pi?

Ранее мы рассматривали множество удивительных применений Raspberry Pi

— но кто знал, что он может работать как веб-сервер? Ищете ли вы сайт с выходом в Интернет (возможно, в качестве базовой домашней страницы), небольшую корпоративную интрасеть или тестовый компьютер, на котором работает система разработки WordPress (или даже новую платформу блогов Ghost

), это легко настроить.

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

Существуют и другие причины.Веб сервер на raspberry pi 3: 5 способов сделать Python-сервер на Raspberry Pi. Часть 1 / Хабр Размер компьютера делает его полезным в качестве портативного устройства, что может оказаться полезным, если вы пытаетесь запустить веб-сервер на территории, где это обычно не разрешено, или если хостинг для вас дорог.

Начало работы: настройка оборудования вашего сервера!

Прежде чем начать, убедитесь, что у вас есть все необходимое оборудование. Наш путеводитель по базовой настройке Raspberry Pi

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

,

Вы также должны иметь подходящий дистрибутив на вашей SD-карте. Несколько доступно

; шаги в этом руководстве были выполнены с использованием Raspbian.

Стоит потратить время на настройку SSH на Raspberry Pi

тоже как и TightVNC

,

Настройка Raspberry Pi в качестве веб-сервера

Прежде чем загружать HTML-страницы в Raspberry Pi, вам необходимо настроить сервер и его программное обеспечение.

Начните с запуска обновления, используя sudo apt-get update. Затем вам нужно установить Apache и связанные библиотеки, что можно сделать, введя:

sudo apt-get install apache2 php5 libapache2-mod-php5

Наконец, введите:

sudo service apache2 restart

Затем откройте браузер на своем компьютере и введите IP-адрес в адресную строку. Вы увидите подтверждение, что Apache установлен.

Ваш Raspberry Pi теперь настроен как базовый веб-сервер. Все, что вам нужно сделать, это добавить страницы!

Настройка FTP на Raspberry Pi

Хотя вы можете проверить в браузере, что ваш Pi работает как веб-сервер, предлагаемая страница будет очень простой. Это типичный файл-заполнитель index.php, который вам придется заменить собственным документом PHP или HTML.

Это будет намного проще с установленным FTP, и вы можете сделать это, сначала создав подходящий каталог www, а затем установив программное обеспечение FTP:

sudo chown -R pi /var/www
sudo apt-get install vsftpd

После установки приложения FTP vsftpd («Очень безопасный FTP-демон») вам нужно будет внести некоторые изменения в конфигурацию.Веб сервер на raspberry pi 3: 5 способов сделать Python-сервер на Raspberry Pi. Часть 1 / Хабр Сначала откройте файл конфигурации в nano…

sudo nano /etc/vsftpd.conf

… И внесите следующие изменения в разрешения и безопасность:

Обновить

anonymous_enable=YES

в

anonymous_enable=NO

Раскомментируйте следующие строки (удалите символ #)

#local_enable=YES
#write_enable=YES

Наконец добавьте эту строку в конец файла:

force_dot_files=YES

Это приведет к отображению файлов сервера, начинающихся с «.», Например .htaccess.

Нажмите CTRL + X, чтобы сохранить и выйти, подтвердив с помощью Y и Enter.

Затем вы должны перезагрузить FTP с

sudo service vsftpd restart

Используя стандартный настольный FTP, вы сможете подключиться к вашему Raspberry Pi. Файлы должны быть загружены в / Вар / WWW.

Хотите больше, чем HTML? Raspberry Pi также поддерживает лампу!

Raspberry Pi не только способен обслуживать основные HTML-страницы. Конфигурацию сервера LAMP можно установить, если вы хотите использовать полную поддержку MySQL с PHP, используя

sudo apt-get install mysql-server mysql-client php5-mysql

Как и в случае любого веб-серверного проекта, вам необходимо сначала определить, подходит ли метод, который вы планируете использовать, для ваших нужд. Хотя WordPress можно настроить для работы на Raspberry Pi, добавление множества плагинов и ежедневных обновлений сделает его крайне медленным. Веб-сайт, который вы планируете запустить — по крайней мере, с одним Raspberry Pi — должен быть легким в отношении ресурсов и требований к программному обеспечению. При необходимости обязательно используйте решение на основе базы данных, но ограничьте количество страниц / объем контента, который можно просматривать.

Безопасность Технические соображения

При использовании Raspberry Pi в качестве веб-сервера для всего, что напоминает популярный веб-сайт, вы вряд ли получите что-либо, приближающееся к скорости производства.Веб сервер на raspberry pi 3: 5 способов сделать Python-сервер на Raspberry Pi. Часть 1 / Хабр

Однако есть способы повысить производительность, например, настроить серверное программное обеспечение на жестком диске USB, а не на SD-карте, чтобы уменьшить ухудшение в результате регулярных процессов чтения / записи. Кроме того, используя ОЗУ вашего устройства для временное хранилище файлов для чтения / записи тоже опция. Это то, что вы, возможно, захотите изменить, решив, как вы собираетесь использовать свой очень маленький веб-сервер.

Несмотря на то, что он подходит для настройки тестовой версии PHP-сайта, управляемого базой данных, он-лайн обязанности Raspberry Pi, вероятно, лучше всего подходят для небольшой коллекции статических страниц.

Обратите внимание, что если вы планируете открыть доступ к вашему Raspberry Pi в качестве веб-сервера, подключенного к Интернету, вам необходимо настроить маршрутизатор со статическим IP-адресом.

,

Наконец, найдите время, чтобы изменить пароль по умолчанию для вашего Raspberry Pi. Это можно сделать в командной строке через SSH, используя


passwd

Затем вам будет предложено ввести и подтвердить новый пароль. В результате любой, кто знаком с Raspbian, не сможет получить доступ к серверной части вашей веб-страницы.

Вывод: Портативный сайт!

Потенциал использования Raspberry Pi в качестве веб-сервера значителен. Хотя маловероятно, что вы сможете размещать игры или веб-сайты, такие как MakeUseOf, используя некоторые портативные инструменты (например, аккумуляторную батарею и мобильный интернет-ключ), вы можете использовать мини-компьютер для размещения веб-сайта в любой точке мира, в которой вы находитесь. может найти себя.

Кроме того, вы можете разместить домашнюю интранет

!

Попробуйте, и дайте нам знать, как вы использовали свой веб-сервер Raspberry Pi.

Кредиты изображений: Йохан Ларссон Via Flickr

Хостинг на основе Raspberry Pi 4 стал доступен всем

Мини-компьютер Raspberry Pi был создан для обучения и экспериментов.Веб сервер на raspberry pi 3: 5 способов сделать Python-сервер на Raspberry Pi. Часть 1 / Хабр Но с 2012 года «малинка» стала гораздо более мощной и функциональной.

Плату используют не только для обучения, но и для создания настольных ПК, медиацентров, умных телевизоров, плееров, ретроконсолей, частных облаков и других целей.

Сейчас появились и новые кейсы, причем не от сторонних разработчиков, а от самих создателей мини-ПК — Raspberry Pi Foundation — и их хостинга, компании Mythic Beasts. Этот провайдер обслуживает сайт и блог «малинки».

Летом прошлого года разработчики из Raspberry Pi Foundation решили создать собственный сервер для своего сайта и успешно выполнили план. Для этого они собрали кластер из 18 «малинок» четвертого поколения с четырехъядерным процессором 1,5 ГГц и 4 ГБ RAM.

14 плат использовались в качестве динамических LAMP-серверов (Linux, Apache, MySQL, PHP). Две платы играли роль статических Apache-серверов, и еще две служили хранилищем памяти на базе memcache. Новоявленный сервер был сконфигурирован для работы с сайтом компании и перемещен в дата-центр Mythic Beasts.

Компания постепенно переводила трафик с «нормального» хостинга на новый хостинг из Raspberry Pi. Все прошло хорошо, оборудование выдержало. Единственная неприятность — сбой в работе Cloudflare, блэкаут длился два часа. Больше сбоев не было. Хостинг работал без особых проблем в течение месяца, после чего сайт компании вернули в обычное виртуальное окружение. Главная цель — доказать, что сервер работоспособен и выдерживает высокую нагрузку (свыше десяти млн уникальных посетителей в день).

Открытие хостинга на Raspberry Pi всем желающим

В июне 2020 года партнер Raspberry Pi Foundation, хостинг-провайдер Mythic Beasts, заявил о запуске новой услуги. А именно — хостинга на базе «малинок» четвертого поколения для всех желающих. И это не просто эксперимент, а коммерческое предложение, притом, если верить хостинг-провайдеру, довольно выгодное. Компания заявила, что сервер на основе Raspberry Pi 4 не только производительнее, но и гораздо дешевле инстансов a1.Веб сервер на raspberry pi 3: 5 способов сделать Python-сервер на Raspberry Pi. Часть 1 / Хабр large и m6g.medium от AWS.

Источник: raspberrypi.org

У предложения есть один существенный недостаток — вместо HDD или SSD здесь используются карты памяти формата SD. Это не самый надежный носитель, а когда карта выходит из строя, на ее замену и настройку нужно время.

Raspberry Pi Foundation предлагает решить эту проблему включением в кластер запасных мини-ПК. Когда карта одной из «малинок» выходит из строя, активируется резервное устройство с рабочей картой. Еще один вариант — покупка накопителей высокой надежности «hi endurance SD-card». Стоимость такого накопителя составляет около $25 за 128 ГБ.

Установка веб сервера на raspberry pi 2

Данное руководство поможет Вам создать свой собственный веб-сервер на базе мини компьютера raspberry pi. Также в нем детально описано: как настроить панель управления ajenti подключить домен и организовать систему резервного копирования файлов хостинга.

Внимание: Живая статья!

Если после прочтения у вас останутся вопросы, задавайте их в комментариях снизу и статья будет усовершенствована!

Предисловие

Фото сервера с этой статьей.

Всем привет, с вами Джон Панч. Я уже давно использую «малиновый хостинг» для своих проектов, он проверен не одним месяцем безотказной работы и было решено собрать все заметки сисадмина и поместить ее в эту подробную статью. Статья ориентирована на всех, включая новичков, которые никогда не имели дело с Raspberry pi и даже для тех, кто никогда не устанавливал свой веб сервер. Я постараюсь описать весь процесс от А до Я, и если у вас останутся вопросы, не стесняйтесь задавать их в комментариях.

Ранее я использовал VPS сервер и стоил он вместе с isp панелью мне порядка 12$ в месяц, сервер меня в принципе полностью устраивал, кроме цены. Увы но хостинг за 3 доллара не может мне дать всех тех возможностей, которые дает VPS. А собирать отдельный шумящий и гудящий пылесборник, который нещадно будет кушать мою электроэнергию дома у меня не было желания.Веб сервер на raspberry pi 3: 5 способов сделать Python-сервер на Raspberry Pi. Часть 1 / Хабр

К счастью прогресс не стоит на месте и листая свой любимый Pikabu я увидел пост про замечательный маленький компьютер, на котором можно работать в Linux и даже играть в игры. И тут я понял, что пришло время портативных серверов и решил что нужно действовать.

Покупка raspberry pi и комплектующих

Свой raspberry pi 2 я купил вместе с корпусом и блоком питания на aliexpress и обошлось мне все примерно в 45$. Плюс если добавить покупку Micro SD карты, то все 50$. На момент написания статьи в продаже уже имеется третья версия мини компьютера raspberry pi 3. В среднем его цена не изменилась, все те же 40$

Приобрести raspberry pi 3 с бесплатной доставкой можно по ссылке

Кроме того кроме самого устройства вам потребуются блок питания на 5V и 2A, и возможно корпус, если вы эстет.

Посылки из Китая, дело долгое, поэтому пока вы ее будете ждать стоит поискать хорошую SD карту для сервера.

Какую SD карту лучше использовать для Raspberry Pi

Покупать SD карту на Али я не советую, так как они и без того у нас не дорогие, да и пойди пойми что там за скорости у этих китайских карт. Raspberry очень привередлив к классу карты, чем выше — тем лучше. Я использую Transcend 16 GB microSDHC class 10. Для хостинга может вполне хватить и карты на 8GB. Мой хостинг с 7 небольшими проектами занимает всего 4.7GB. Поэтому какой объем карты вам нужен решайте сами но не более 32GB.

Установка Raspbian на Raspberry pi

Прежде всего у вас должен быть карт ридер, чтобы загрузить на SD карту операционную систему Raspbian. По сути это тот же Debian но с адаптацией под Raspberry pi.

Я бы советовал использовать решение из коробки, с автоматическим установщиком нужной OC на карту памяти. В специальном руководстве для новичков, вы можете узнать как ее установить.

Если коротко, то вам необходимо отформатировать вашу карту в формате FAT программой SD Formatter, скачать автоматический установщик, выбрать OC и дождаться ее загрузки на карту.Веб сервер на raspberry pi 3: 5 способов сделать Python-сервер на Raspberry Pi. Часть 1 / Хабр В нашем случаи это будет Raspbian.

Первый запуск Raspberry pi

При первом запуске Вам понадобиться монитор с выходом на hdmi (либо переходником) и клавиатура. Подключить вы их сможете через USB порты вашего raspberry. Далее вставьте карту памяти в Raspberry pi и подключите блок питания к устройству. Чуть не забыл про LAN кабель, его тоже следует подключить, а иначе у устройства не будет доступа к интернету. Если все сделано правильно, то после включения Вы увидите много бегущего текста в конце которого предстанет меню конфигурации.

Интерфейс Raspi-config

Расширяем память SD карты

Первым делом управляя клавиатурой, переходим к пункту Expand Filesystem и тем самым расширяем свободное место хранения файлов на SD карте. Но если вы использовали автоматический загрузчик, а не монтировали образ в ручную, то этот пункт можно проигнорировать.

Меняем пароль пользователя

Далее рекомендуется поменять пароль пользователя Change User Password, вам будет предложено ввести новый пароль 2 раза. Не ошибитесь с раскладкой.

Логин и пароль по умолчанию: pi/raspbian

Добавляем русский язык

Переходим в пункт Internationalisation Options и в нем выбираем Change Locale в открывшемся списке опуститесь до пункта ru_RU.UTF-8 UTF-8 и нажмите пробел, тем самым выбрав Русский язык. Далее кнопкой Tab переключитесь на пункт Ok чтобы сохранить изменения.

Дополнительные настройки

Перейдите к пункту Advanced Options он раскроет перед вами список дополнительных настроек где необходимо внести еще 2 изменения.

Hostname (не обязательно)

Чтобы сменить имя хоста, нажмите на Hostname и впишите свое название сервера. Например: pedanto.com

Включение SSH

Также вам необходимо включить SSH для работы с командной строкой через putty делается это там же в дополнительных настройках.

Сохранение изменений

После того как вы внесли все изменения, выберите пункт , ваш raspberry будет перезагружен и все изменения вступят в силу.Веб сервер на raspberry pi 3: 5 способов сделать Python-сервер на Raspberry Pi. Часть 1 / Хабр

Снова открыть консоль настроек можно используя команду: sudo raspi-config

Настройка роутера и сети

Чтобы наше устройство было видно извне мы должны получить свой статический внешний IP адрес. Купить его можно у провайдера и как правило он не стоит больше доллара в месяц. В противном случаи на Ваши сайты заходить сможете только Вы.

Узнаем IP адрес на котором висит Raspberry

Далее нужно узнать какой сетевой IP был назначен роутером для Raspberry. В консоли нужно прописать соответствующую команду

hostname -I

Позволяет узнать на каком IP у роутера висит Raspberry

Узнаем IP роутера

Обычно IP адрес роутера такой: http://192.168.1.1, но в моем случаи он выглядит так miwifi.com

Чтобы узнать адрес наверняка, переверните Ваш роутер и посмотрите на наклейку снизу. Там как правило есть вся необходимая информация.

Логин и пароль всех роутеров по умолчанию: admin/admin

Открытие 80 порта

В настройках роутера, вам необходимо задать правило проброса портов. Дело в том что у вас есть 2 IP адреса, внешний (который выделил провайдер) и внутренний (который выделил роутер вашему raspberry) и ваша задача сделать так, чтобы при обращении кого-либо в интернете на ваш внешний IP адрес, роутер понимал информацию с какого внутреннего IP необходимо отображать.

В http протоколе используется 80 TCP порт, поэтому необходимо сделать port forwarding в Вашем роутере.

Я понимаю что роутеры у всех разные, поэтому изучите настройки своего и найдите аналогичное меню.

У меня это выглядит так:

После этого при обращении на ваш внешний IP посетитель будет получать данные генерируемые вашим Raspberry pi. Но пока он у нас нечего не генерирует, и сейчас мы это будем исправлять.

Подключаемся по SSH

Вы конечно можете продолжать использовать монитор и клавиатуру для работы с Вашим raspberry pi, но я предпочитаю вводить все команды удаленно через putty, так как клавиатура и монитор у меня всего одни, и без них мой основной компьютер не работает как следует 🙂

Для подключения к Putty используйте внутренний IP вашего Raspberry, и в целях безопасности не советую открывать доступ к консоли извне.Веб сервер на raspberry pi 3: 5 способов сделать Python-сервер на Raspberry Pi. Часть 1 / Хабр

После того как откроется консоль вас попросит ввести логин и пароль от Raspberry, по умолчанию это: pi/raspbian, но вы наверняка уже поменяли пароль при настройке, которую мы делали выше вот и используйте его.

Интерфейс консоли выглядит так, привыкайте:

Теперь наш Raspberry будет получать все необходимые задания удаленно через консоль. И первым таким заданием станет установка WEB сервера ajenti на raspberry pi.

Установка Ajenti через Putty

Используя Putty пишем следующую команду

sudo -s

Это переключит нас в режим root и избавит от лишних подтверждений во время установки.

Далее нам следует установить базовую панель Ajenti

wget -O- https://raw.github.com/ajenti/ajenti/1.x/scripts/install-debian.sh | sh

Дождитесь завершения установки и после выполнения перезагрузите ajenti

service ajenti restart

После этого устанавливаем Web модуль Ajenti, без него мы не сможем управлять сайтами в панели

apt-get install ajenti-v ajenti-v-nginx ajenti-v-mysql ajenti-v-ftp-pureftpd ajenti-v-php-fpm php5-curl

По окончанию, снова перезагружаем Ajenti

service ajenti restart

Не забываем про необходимые компоненты работы с изображениями и БД

apt-get install php5-mysql imagemagick php5-imagick php5-gd

И опять перезагрузка (на всякий случай)

service ajenti restart

Полное удаление Apache (если он установлен)

Так как Ajenti яростно не дружит с Apache его следует не просто отключить, а полностью удалить с сервера, ибо он может вызывать конфликты из за которых сайты не будут работать должным образом. Даже если вам кажется что он у вас не установлен, лучше проделайте эту процедуру.

Первым делом останавливаем Apache

sudo service apache2 stop

После подчищаем все его компоненты

sudo apt-get purge apache2 apache2-utils apache2.Веб сервер на raspberry pi 3: 5 способов сделать Python-сервер на Raspberry Pi. Часть 1 / Хабр 2-bin apache2-common

sudo apt-get autoremove --purge

sudo rm -Rf /etc/apache2 /usr/lib/apache2 /usr/include/apache2

Перезагружаем сервер

sudo reboot

Вот и все! Сервер полностью готов к эксплуатации, и теперь можно приступить к добавлению сайта в панель управления.

Интерфейс панели управления Ajenti

Попасть в панель Ajenti вы можете по адресу, который роутер назначил вашему Raspberry Pi.

В моем случаи адрес https://192.168.31.139:8000/

Обратите внимание на протокол https в начале, и порт 8000 в конце, это важно!

Браузер Chrome будет ругаться что Ваше подключение не защищено, проигнорируйте это сообщение.

При входе Ajenti потребует ввод пароля.

Пароль к Ajenti умолчанию: root/admin

В дальнейшем вы можете поменять пароль в настройках Ajenti.

Продолжение статьи: Как настроить ajenti

Как разместить свой собственный сайт на Raspberry Pi

Вам нужен веб-сайт, но вы не можете позволить себе расходы на хостинг?

Вы можете использовать эту ссылку, чтобы получить специальную скидку на хостинге InMotion.

Или вы можете попробовать превратить Raspberry Pi в веб-сервер, который более чем способен запускать базовое программное обеспечение веб-сервера. Лучше всего, его настройка проста.

Зачем размещать сайт на Raspberry Pi?

Есть несколько веских причин для настройки Raspberry Pi в качестве веб-сервера.

  • Хостинг стоит дорого
  • Ваш настольный компьютер слишком дорог, чтобы работать весь день
  • Raspberry Pi имеет очень низкий энергетический след
  • Pi может быть настроен как портативное устройство
  • Потенциал для избиения цензуры

Независимо от вашей мотивации выбора размещения вашего сайта на Raspberry Pi, его можно настроить за считанные минуты. Более того, вы можете использовать любую версию Pi, даже Pi Zero. Если устройство может быть подключено к Интернету, вы можете разместить на нем веб-сайт.Веб сервер на raspberry pi 3: 5 способов сделать Python-сервер на Raspberry Pi. Часть 1 / Хабр

Настройка оборудования веб-сервера Raspberry Pi

Начните с надежного блока питания для вашего Raspberry Pi. На высококачественной SD-карте должна быть установлена ​​последняя версия предпочитаемого вами дистрибутива Raspberry Pi.

Шаги и снимки экрана в этом руководстве предназначены для настройки вашего веб-сервера Raspberry Pi с помощью Raspbian Stretch.

Как и на большинстве серверов, вам потребуется доступ к веб-серверу Raspberry Pi с использованием SSH. В Linux и macOS вы можете сделать это через терминал. В Windows используйте PowerShell для подключения по SSH

Windows 10 SSH vs. PuTTY: время для переключения клиента удаленного доступа?

Windows 10 SSH vs. PuTTY: время для переключения клиента удаленного доступа?
Давайте посмотрим, как настроить SSH-доступ в Windows 10 и могут ли новые инструменты вытеснить PuTTY.
Прочитайте больше
или установите сторонний инструмент.

Настройка беспроводной сети и SSH

Хотя вы можете использовать Raspberry Pi в качестве веб-сервера, используя только клавиатуру и монитор, удаленный доступ проще.

Лучший способ сделать это – включить SSH на Pi и заранее настроить беспроводную сеть. Если вы используете существующую установку Raspberry Pi, вы, вероятно, уже сделали и то, и другое. Начинаете заново? Вы можете настроить SSH и беспроводную сеть, пока ваша SD-карта еще в вашем ПК.

Убедитесь, что ваша SD-карта видна в файловом менеджере вашего компьютера, и / Загрузки / каталог выбран. (В Windows это единственная часть SD-карты, которая доступна для чтения.)

Затем в окне каталога / boot / щелкните правой кнопкой мыши в пустом месте и выберите Новый> Текстовый документ, Назовите документ SSH заботиться, чтобы удалить расширение файла .TXT. Когда Pi загрузится, он обнаружит файл ssh и включит эту функцию.

Чтобы подключиться через SSH, сначала необходимо включить беспроводную сеть.Веб сервер на raspberry pi 3: 5 способов сделать Python-сервер на Raspberry Pi. Часть 1 / Хабр Для этого создайте другой файл, на этот раз вызывая его wpa_supplicant.conf, Снова удалите расширение TXT. Откройте файл, скопируйте и вставьте следующее:

ctrl_interface = DIR = / var / run / wpa_supplicant GROUP = netdev
Сеть = {
= SSID "YOUR_NETWORK_NAME"
PSK = "YOUR_PASSKEY"
key_mgmt = WPA-PSK
}

После вставки отредактируйте значения, чтобы показать имя вашей сети (SSID) и пароль (PSK). Сохраните файл, затем безопасно извлеките SD-карту. После замены в Raspberry Pi загрузитесь. Вы должны иметь возможность подключиться к Raspberry Pi по SSH, используя IP-адрес Pi. Чтобы узнать это, проверьте экран администрирования вашего маршрутизатора (см. Документацию по устройству) или кратко подключите клавиатуру и дисплей.

Установив SSH, вы можете в любое время удаленно подключиться к веб-серверу Raspberry Pi.

Настройка Raspberry Pi в качестве веб-сервера

Прежде чем загружать HTML-страницы в Raspberry Pi, вам необходимо настроить сервер и его программное обеспечение. Для этого установите Apache и PHP. Это позволит обслуживать страницы, написанные на HTML и PHP.

Начните с обновления Raspbian:

Обновление sudo
Обновление sudo

Затем установите Apache и связанные библиотеки, введя:

sudo apt установить apache2 -y

Затем проверьте, что Apache работает:

sudo service apache2 status

Если сервер отображает «активный (работающий)» зеленым текстом, все в порядке.

Если сервер не работает, запустите его с:

sudo service apache2 start

На этом этапе вы можете перейти на веб-сервер вашего Raspberry Pi из браузера.

Если браузер установлен на вашем Raspberry Pi, перейдите по этому URL в адресной строке:

HTTP: // локальный

Однако, если вы используете SSH, используйте IP-адрес вашего Raspberry Pi из браузера вашего компьютера (например, http://123.Веб сервер на raspberry pi 3: 5 способов сделать Python-сервер на Raspberry Pi. Часть 1 / Хабр 456.789.0). Вы должны увидеть подтверждение, что Apache установлен.

Ваш Raspberry Pi теперь настроен как базовый веб-сервер. Все, что вам нужно сделать сейчас, это добавить страницы!

Настройка FTP на Raspberry Pi

Хотя вы можете проверить в браузере, что ваш Pi работает как веб-сервер, предлагаемая страница будет очень простой. Это типичный файл-заполнитель index.php, который вам придется заменить собственным документом PHP или HTML.

Начните с создания каталога www и установки программного обеспечения FTP:

судо чоун -R пи / вар / www
sudo apt установить vsftpd

После установки приложения FTP vsftpd («Очень безопасный FTP-демон») вам нужно будет внести некоторые изменения в конфигурацию. Сначала откройте файл конфигурации в nano…

sudo nano /etc/vsftpd.conf

… И внесите следующие изменения в разрешения и безопасность:

Во-первых, измените anonymous_enable = YES на anonymous_enable = NO

Затем раскомментируйте следующие строки (удалив символ #)

# Local_enable = ДА
# Write_enable = ДА

Это включает настройки, к которым относятся строки. Наконец добавьте эту строку в конец файла:

force_dot_files = ДА

Это приведет к отображению файлов сервера, начинающихся с «.», Например, важного файла .htaccess.

Нажмите Ctrl + X сохранить и выйти, подтвердив с Y а также Войти,

Наконец, перезапустите FTP с помощью:

sudo service vsftpd перезапустить

Используя стандартный настольный FTP, вы сможете подключиться к вашему Raspberry Pi. Загрузить файлы на / Var / WWW / HTML,

HTML не достаточно? Raspberry Pi также поддерживает лампу!

Raspberry Pi не только способен обслуживать основные HTML-страницы. Конфигурация сервера LAMP может быть установлена, если вы хотите MySQL с поддержкой PHP. Просто следуйте инструкциям выше, чтобы установить и настроить Apache, затем добавьте установку MySQL, а затем PHP.Веб сервер на raspberry pi 3: 5 способов сделать Python-сервер на Raspberry Pi. Часть 1 / Хабр

Следующие пакеты устанавливают MySQL и необходимый компонент PHP:

sudo apt установить mysql-сервер php-mysql -y

После того, как это будет установлено, вам нужно перезапустить Apache:

перезапуск службы sudo apache2

Затем установите сам PHP с помощью:

sudo apt установить php -y

Снова перезапустите Apache, используя команду выше. Ваш сервер LAMP установлен и готов к настройке веб-приложений и веб-сайтов на основе базы данных PHP.

Как и для любого проекта веб-сервера, вы должны определить, будет ли Pi соответствовать вашим потребностям. Хотя WordPress можно настроить для работы на Raspberry Pi, добавление множества плагинов и ежедневных обновлений сделает его крайне медленным.

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

Хотите пойти дальше? Посмотрите наше руководство по размещению сайта WordPress на Raspberry Pi

Как разместить сайт WordPress на Raspberry Pi

Как разместить сайт WordPress на Raspberry Pi
Хотите разместить свой собственный сайт WordPress на Raspberry Pi? Вот как начать установку LAMP и WordPress.
Прочитайте больше
,

Безопасность и технические соображения

При использовании Raspberry Pi в качестве веб-сервера для всего, что напоминает популярный веб-сайт, вы вряд ли получите что-либо, приближающееся к скорости производства.

Однако есть способы повысить производительность, например, настроить серверное программное обеспечение на жестком диске USB, а не на SD-карте, чтобы уменьшить ухудшение в результате регулярных процессов чтения / записи. Кроме того, вариант использования оперативной памяти устройства для временного чтения / записи файлов также является опцией.Веб сервер на raspberry pi 3: 5 способов сделать Python-сервер на Raspberry Pi. Часть 1 / Хабр Это то, что вы, возможно, захотите изменить, решив, как вы собираетесь использовать свой очень маленький веб-сервер.

Несмотря на то, что он подходит для настройки тестовой версии PHP-сайта, управляемого базой данных, он-лайн обязанности Raspberry Pi, вероятно, лучше всего подходят для небольшой коллекции статических страниц.

Обратите внимание, что если вы планируете открыть доступ к вашему Raspberry Pi в качестве веб-сервера, подключенного к Интернету, вам необходимо настроить маршрутизатор со статическим IP-адресом.

Наконец, найдите время, чтобы изменить пароль по умолчанию для вашего Raspberry Pi. Это можно сделать в командной строке через SSH, используя:

ПАРОЛЬ

Затем вам будет предложено ввести и подтвердить новый пароль. В результате любой, кто знаком с Raspbian, не сможет получить доступ к серверной части вашей веб-страницы.

Разместите свой собственный сайт Raspberry Pi!

Потенциал использования Raspberry Pi в качестве веб-сервера значителен. На самом деле вы не сможете разместить такой большой веб-сайт, как MakeUseOf. Однако с аккумулятором и мобильным интернет-ключом вы можете разместить компактный веб-сайт из любой точки мира.

Помните, все, что вам нужно сделать, это:

  • Настройте SSH и беспроводную сеть
  • Установите Apache (MySQL и PHP необязательно)
  • Установить FTP
  • Установите безопасный пароль

После установки статического IP-адреса или службы динамического DNS ваш веб-сайт готов. И если вы не хотите, чтобы к нему обращались из Интернета, просто разместите домашнюю интрасеть вместо

Быстро настройте собственный домашний интранет с помощью ocPortal

Быстро настройте собственный домашний интранет с помощью ocPortal
Задумывались ли вы о том, что может быть, если у вас есть «страница портала» для вашей семьи, как многие компании предлагают своим сотрудникам? Разве не было бы удобно иметь центральный веб-репозиторий …
Прочитайте больше
!

Узнайте больше о: сервере Apache, руководствах по проектам DIY, Raspberry Pi, веб-хостинге.Веб сервер на raspberry pi 3: 5 способов сделать Python-сервер на Raspberry Pi. Часть 1 / Хабр

Использование Raspberry Pi в качестве настольного ПК: 7 вещей, которые я выучил через неделю

Python WebServer с флягой и малиновым пи

Дата публикации Mar 17, 2018

Давайте создадим простой веб-сервер для управления вещами в вашем доме. Есть много способов сделать это. Например, в моем уроке:IoT — управление роботом Raspberry Pi через Интернет только с помощью сценариев HTML и Shellмы изучили, как управлять роботом через локальную сеть, используяLIGHTTPD WebServer.Для этого проекта здесь мы будем использоватьФЛЯГА, очень простая и бесплатная микрорамка для Python. С Flask будет очень просто контролировать GPO Raspberry через Интернет.

После прочтения этого урока, пожалуйста, посетите его продолжение:От данных к графику: веб-путешествие с Flask и SQLite

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

В этом уроке мы будем использовать Raspberry Pi в качестве локального веб-сервера, где мы будем управлять с помощью простой веб-страницы, 3 из ее GPIO запрограммированы как выходы (действуя какприводы) и контролировать 2 его GPIO, запрограммированных как входы (датчиков).

Приведенная блок-схема показывает, чего мы хотим достичь

и видео ниже может дать подсказку об этом:

Обратите внимание, что то, что вы узнаете здесь в терминах Python WebServer с использованием Flask, может быть применено непосредственно к любой машине с Linux / OS и с некоторыми адаптациями для ПК с Windows (к сожалению, не моя область знаний).Веб сервер на raspberry pi 3: 5 способов сделать Python-сервер на Raspberry Pi. Часть 1 / Хабр

Установка колбы

Первое, что нужно сделать, это установить Flask на Raspberry Pi. Перейдите в терминал и введите:

sudo apt-get install python3-flask

Лучше всего, когда вы начинаете новый проект, это создать папку, где ваши файлы будут организованы. Например:

mkdir rpiWebServer

Приведенная выше команда создаст папку с именем «Сервер». Там мы сохраним наши файлы Python (приложение):

/home/pi/Documents/Server

В этой папке давайте создадим 2 другие подпапки:статическийдля CSS и в конечном итоге файлы JavaScript ишаблоныдля файлов HTML (или, точнее, шаблонов Jinja2. Но не беспокойтесь об этом),Перейдите в созданную вами новую папку:

cd rpiWebServer

И создайте 2 новые подпапки:

mkdir static

а также

mkdir templates

Конечная папка «Дерево», будет выглядеть так:

/rpiWebServer
/static
/templates

Приложение Python WebServer

Теперь давайте создадим наш первый Python WebServer с Flask:

  • Откройте вашу Python3 IDE, Thonny или Geany.
  • Скопируйте приведенный ниже код «Hello Word» в свою среду IDE и сохраните его, например, как helloWorld.py
from flask import Flask
app = Flask(__name__)
@app.route('/')
def index():
return 'Hello world'
if __name__ == '__main__':
app.run(debug=True, port=80, host='0.0.0.0')

Что делает приведенный выше код:

1. Загрузите модуль Flask в ваш скрипт на Python:

from flask import Flask

2. Создайте объект Flask с именем app:

app = Flask(__name__)

3. Запустите функцию index (), когда кто-то обращается к корневому URL-адресу ((/ ’) сервера. В этом случае отправляйте только текст «Hello World!» В веб-браузер клиента через «return»

def index():
return "Hello Word"

4. После запуска этого сценария из командной строки на терминале сервер начинает «прослушивать» порт 80, сообщая о любых ошибках:

if __name__ == '__main__':
app.Веб сервер на raspberry pi 3: 5 способов сделать Python-сервер на Raspberry Pi. Часть 1 / Хабр run(debug=True, port=80, host='0.0.0.0')

Raspberry PI IP-адрес:

Если вы не уверены в своем IP-адресе RPi, запустите на своем терминале:

ifconfig

В разделе wlan0: вы найдете его. В моем случае:

10.0.1.27

Запуск приложения

Теперь запустите вышеуказанную прикладную программу:

sudo python3 helloWorld.py

На первом изображении выше вы можете увидеть, что появится на вашем терминале. Приложение будет работать, если вы не введете [CTRL] + [C].

Теперь вы должны открыть любой веб-браузер, подключенный к той же сети Wi-Fi, что и Raspberry, и ввести его IP-адрес, как показано на втором рисунке выше. «Hello World» должен появиться в вашем браузере, как показано на рисунке выше.

Обратите внимание, что в нижней части рисунка есть две строки. Строки показывают, что два разных веб-браузера запросили корневой URL, а наш сервер вернул код состояния HTTP 200 для «ОК». Я ввел адрес нашего RPi-сервера как на самом RPI (10.1.0.27), так и на моем Mac (10.1.0.10). Для каждого нового запроса на терминале будет отображаться новая строка, пока приложение работает.

Давайте разработаем наше приложение «Hello World», создав шаблон HTML и файл CSS для стилизации нашей страницы. Это, на самом деле, важно, иначе вы бы усложнили Python Script.

Шаблоны

Создав HTML-файл, который будет находиться в подпапке «template», мы можем использовать отдельные файлы с заполнителями для мест, в которые вы хотите вставить динамические данные.

Итак, мы создадим файл с именемindex.html, который будет сохранен на/ шаблоны, Вы можете использовать любой текстовый редактор для создания вашего HTML-файла. Это может быть Geany, «nano» в терминале или текстовый редактор RPi (LeafPad), который находится в главном меню «Accessories».

GEANY можно использовать для работы со всеми файлами проекта одновременно (.py; .html и css) это хороший вариант для более крупных и сложных проектов

Хорошо, давайте создадим/templates/index.Веб сервер на raspberry pi 3: 5 способов сделать Python-сервер на Raspberry Pi. Часть 1 / Хабр html:

<!DOCTYPE html>
<head>
<title>{{ title }}</title>
</head>
<body>
<h2>Hello, World!</h2>
<h3>The date and time on the server is: {{ time }}</h3>
</body>
</html>

Заметьте, что-нибудь вдвойные фигурные скобкивнутри шаблона HTML интерпретируется как переменная, которая будет передана ему из скрипта Python через функцию render_template.

Теперь давайте создадим новый скрипт Python. Мы назовем этоhelloWorldTemplate.py:

'''
Code created by Matt Richardson
for details, visit: http://mattrichardson.com/Raspberry-Pi-Flask/inde...
'''
from flask import Flask, render_template
import datetime
app = Flask(__name__)
@app.route("/")
def hello():
now = datetime.datetime.now()
timeString = now.strftime("%Y-%m-%d %H:%M")
templateData = {
'title' : 'HELLO!',
'time': timeString
}
return render_template('index.html', **templateData)
if __name__ == "__main__":
app.run(host='0.0.0.0', port=80, debug=True)

Обратите внимание, что мы создаем отформатированныйstring("timeString")используя дату и время из объекта «сейчас», в котором хранится текущее время.

Следующая важная вещь в приведенном выше коде заключается в том, что мы создали словарь переменных (набор ключей, например заголовок, связанный со значениями, например, HELLO!) Для передачи в шаблон. По возвращении мы вернемindex.htmlшаблон в веб-браузере, используя переменные вtemplateDataтолковый словарь.

Выполните скрипт Python:

sudo python3 helloWorldTemplate.py

Откройте любой веб-браузер и введите IP-адрес RPi. На картинке выше показан результат.

Обратите внимание, что содержимое страницы динамически изменяется каждый раз, когда вы обновляете ее фактическими переменными данными, передаваемыми скриптом Python. В нашем случае «title» является фиксированным значением, но «time» меняет его каждую секунду.Веб сервер на raspberry pi 3: 5 способов сделать Python-сервер на Raspberry Pi. Часть 1 / Хабр

Теперь давайте добавим некоторые стили на нашу страницу, создадим файл CSS и сохраним его в /static/style.css:

body {
background: blue;
color: yellow;
}

Вы также должны изменить файл index.html, чтобы сообщить ему о поиске файла style.css. Вы делаете это, вставляя «ссылку» в «голову»:

<!DOCTYPE html>
<head>
<title>{{ title }}</title>
<link rel="stylesheet" href="../static/style.css/">
</head>
<body>
<h2>Hello, World!</h2>
<h3>The date and time on the server is: {{ time }}</h3>
</body>
</html>

Помните, что index.html «under» / template, а style.css «under» / static, поэтому обратите внимание, что вы должны указать HTML «идти вверх» и «вниз» снова, чтобы найти статическую подпапку: .. /static/style.css.

На картинке ниже показана веб-страница с новым стилем!

Для более подробного обзора Flask с Raspberry Pi посетите проект Raspberry Pi Organization:питон-веб-сервер с Колбой,

Аппаратное обеспечение очень простое. Выполняйте только указанные выше электрические подключения.

Давайте теперь прочитаем состояние наших «датчиков», отслеживая их GPIO.

Скрипт Python

Давайте создадим новый скрипт Python и назовем его app.py:

'''
Raspberry Pi GPIO Status and Control
'''
import RPi.GPIO as GPIO
from flask import Flask, render_template
app = Flask(__name__)
GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)
button = 20
senPIR = 16
buttonSts = GPIO.LOW
senPIRSts = GPIO.LOW

# Set button and PIR sensor pins as an input
GPIO.setup(button, GPIO.IN)
GPIO.setup(senPIR, GPIO.IN)

@app.route("/")
def index():
# Read Sensors Status
buttonSts = GPIO.input(button)
senPIRSts = GPIO.input(senPIR)
templateData = {
'title' : 'GPIO input Status!',
'button' : buttonSts,
'senPIR' : senPIRSts
}
return render_template('index.Веб сервер на raspberry pi 3: 5 способов сделать Python-сервер на Raspberry Pi. Часть 1 / Хабр html', **templateData)
if __name__ == "__main__":
app.run(host='0.0.0.0', port=80, debug=True)

Посмотрите, что мы делаем, только определяем GIPO 20 и 16 как входные данные, читаем его значения и сохраняем их в 2 переменных: buttonSts иsenPIRSts.внутри функции index () мы передадим эти значения нашей веб-странице через переменные «кнопки» и «senPIR», которые являются частью нашего словаря переменных:templateData.

Как только вы создадите app.py, запустите его на своем терминале:

python3 app.py

Шаблон

Давайте также создадим новый index.html для отображения состояния GPIO обоих датчиков:

<!DOCTYPE html>
<head>
<title>{{ title }}</title>
<link rel="stylesheet" href='../static/style.css'/>
</head>
<body>
<h2>{{ title }}</h2>
<h3>Button pressed: {{ button }}</h2>
<h3>Motion detected: {{ senPIR }}</h3>
</body>
</html>

Не забудьте обновить страницу, чтобы увидеть результаты.

Нажмите кнопку или сделайте движение перед ИК-датчиком и обновите страницу.

На рисунке показана веб-страница.

Теперь, когда мы знаем, как «читать» статус GPIO, давайте изменим их. То, что мы будем делать, будет «командовать» через веб-страницу «исполнительными механизмами». У нас есть 3 светодиода, подключенных к Raspberry GPIO. Командуя им дистанционно, мы изменим их статус с НИЗКОГО на ВЫСОКИЙ и наоборот. Вместо светодиодов мы могли бы иметь реле, управляющие вашей комнатной лампой и / или вентилятором, например.

Скрипт Python

Давайте создадим новый скрипт Python и назовем его app.py:

'''
Raspberry Pi GPIO Status and Control
'''
import RPi.GPIO as GPIO
from flask import Flask, render_template, request
app = Flask(__name__)
GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)
#define actuators GPIOs
ledRed = 13
ledYlw = 19
ledGrn = 26
#initialize GPIO status variables
ledRedSts = 0
ledYlwSts = 0
ledGrnSts = 0
# Define led pins as output
GPIO.Веб сервер на raspberry pi 3: 5 способов сделать Python-сервер на Raspberry Pi. Часть 1 / Хабр setup(ledRed, GPIO.OUT)
GPIO.setup(ledYlw, GPIO.OUT)
GPIO.setup(ledGrn, GPIO.OUT)
# turn leds OFF
GPIO.output(ledRed, GPIO.LOW)
GPIO.output(ledYlw, GPIO.LOW)
GPIO.output(ledGrn, GPIO.LOW)

@app.route("/")
def index():
# Read Sensors Status
ledRedSts = GPIO.input(ledRed)
ledYlwSts = GPIO.input(ledYlw)
ledGrnSts = GPIO.input(ledGrn)
templateData = {
'title' : 'GPIO output Status!',
'ledRed' : ledRedSts,
'ledYlw' : ledYlwSts,
'ledGrn' : ledGrnSts,
}
return render_template('index.html', **templateData)

@app.route("/<deviceName>/<action>")
def action(deviceName, action):
if deviceName == 'ledRed':
actuator = ledRed
if deviceName == 'ledYlw':
actuator = ledYlw
if deviceName == 'ledGrn':
actuator = ledGrn

if action == "on":
GPIO.output(actuator, GPIO.HIGH)
if action == "off":
GPIO.output(actuator, GPIO.LOW)

ledRedSts = GPIO.input(ledRed)
ledYlwSts = GPIO.input(ledYlw)
ledGrnSts = GPIO.input(ledGrn)

templateData = {
'ledRed' : ledRedSts,
'ledYlw' : ledYlwSts,
'ledGrn' : ledGrnSts,
}
return render_template('index.html', **templateData)
if __name__ == "__main__":
app.run(host='0.0.0.0', port=80, debug=True)

То, что у нас есть в приведенном выше коде, это новый «маршрут»:

@app.route("/<deviceName>/<action>")

С веб-страницы будут генерироваться звонки в формате:

http://10.0.1.27/ledRed/on

или

http://10.0.1.27/ledRed/off

Для приведенного выше примераledRedэто «имя_устройства» инаилиотпримеры возможного «действия».

Эти маршруты будут определены и правильно «проработаны». Основные шаги:

  • Преобразуйте строку «ledRED», например, в ее эквивалентный вывод GPIO. Целочисленная переменная ledRed эквивалентна GPIO13. Мы будем хранить это значение в переменной «привод»
  • Для каждого привода мы проанализируем «действие» или «команду» и будем действовать правильно.Веб сервер на raspberry pi 3: 5 способов сделать Python-сервер на Raspberry Pi. Часть 1 / Хабр Например, если «действие = включено», мы должны использовать команду: GPIO.output (actator, GPIO.HIGH)
  • Обновите статус каждого привода
  • Обновите библиотеку переменных
  • Вернуть данные в index.html

Шаблон

Давайте теперь создадим index.html, чтобы показать состояние GPIO каждого привода и, что более важно, создадим «кнопки» для отправки команд:

<!DOCTYPE html>
<head>
<title>GPIO Control</title>
<link rel="stylesheet" href='../static/style.css'/>
</head>
<body>
<h2>Actuators</h2>
<h3> Status </h3>
<h4> RED LED ==> {{ ledRed }}</h4>
<h4> YLW LED ==> {{ ledYlw }}</h4>
<h4> GRN LED ==> {{ ledGrn }}</h4>
<br>
<h3> Commands </h3>
<h4>
RED LED Ctrl ==>
<a href="/ledRed/on">TURN ON</a>
<a href="/ledRed/off"class="button">TURN OFF</a>
</h4>
<h4>
YLW LED Ctrl ==>
<a href="/ledYlw/on">TURN ON</a>
<a href="/ledYlw/off"class="button">TURN OFF</a>
</h4>
<h4>
GRN LED Ctrl ==>
<a href="/ledGrn/on">TURN ON</a>
<a href="/ledGrn/off"class="button">TURN OFF</a>
</h4>

</body>
</html>

Только чтобы лучше «упал», я создаю класс «кнопка». Вы можете сохранить нормальную ссылку, только если хотите.

Ниже файла style.css:

body {
background: blue;
color: yellow;
}
.button {
font: bold 15px Arial;
text-decoration: none;
background-color: #EEEEEE;
color: #333333;
padding: 2px 6px 2px 6px;
border-top: 1px solid #CCCCCC;
border-right: 1px solid #333333;
border-bottom: 1px solid #333333;
border-left: 1px solid #CCCCCC;
}

На рисунке показан веб-сайт для управления нашими приводами.

Теперь мы должны собрать две части, которые мы разработали ранее.Веб сервер на raspberry pi 3: 5 способов сделать Python-сервер на Raspberry Pi. Часть 1 / Хабр Окончательный скрипт Python показан ниже:

'''
Raspberry Pi GPIO Status and Control
'''
import RPi.GPIO as GPIO
from flask import Flask, render_template, request
app = Flask(__name__)
GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)
#define sensors GPIOs
button = 20
senPIR = 16
#define actuators GPIOs
ledRed = 13
ledYlw = 19
ledGrn = 26
#initialize GPIO status variables
buttonSts = 0
senPIRSts = 0
ledRedSts = 0
ledYlwSts = 0
ledGrnSts = 0
# Define button and PIR sensor pins as an input
GPIO.setup(button, GPIO.IN)
GPIO.setup(senPIR, GPIO.IN)
# Define led pins as output
GPIO.setup(ledRed, GPIO.OUT)
GPIO.setup(ledYlw, GPIO.OUT)
GPIO.setup(ledGrn, GPIO.OUT)
# turn leds OFF
GPIO.output(ledRed, GPIO.LOW)
GPIO.output(ledYlw, GPIO.LOW)
GPIO.output(ledGrn, GPIO.LOW)

@app.route("/")
def index():
# Read GPIO Status
buttonSts = GPIO.input(button)
senPIRSts = GPIO.input(senPIR)
ledRedSts = GPIO.input(ledRed)
ledYlwSts = GPIO.input(ledYlw)
ledGrnSts = GPIO.input(ledGrn)
templateData = {
'button' : buttonSts,
'senPIR' : senPIRSts,
'ledRed' : ledRedSts,
'ledYlw' : ledYlwSts,
'ledGrn' : ledGrnSts,
}
return render_template('index.html', **templateData)

@app.route("/<deviceName>/<action>")
def action(deviceName, action):
if deviceName == 'ledRed':
actuator = ledRed
if deviceName == 'ledYlw':
actuator = ledYlw
if deviceName == 'ledGrn':
actuator = ledGrn

if action == "on":
GPIO.output(actuator, GPIO.HIGH)
if action == "off":
GPIO.output(actuator, GPIO.LOW)

buttonSts = GPIO.input(button)
senPIRSts = GPIO.input(senPIR)
ledRedSts = GPIO.input(ledRed)
ledYlwSts = GPIO.input(ledYlw)
ledGrnSts = GPIO.input(ledGrn)

templateData = {
'button' : buttonSts,
'senPIR' : senPIRSts,
'ledRed' : ledRedSts,
'ledYlw' : ledYlwSts,
'ledGrn' : ledGrnSts,
}
return render_template('index.Веб сервер на raspberry pi 3: 5 способов сделать Python-сервер на Raspberry Pi. Часть 1 / Хабр html', **templateData)
if __name__ == "__main__":
app.run(host='0.0.0.0', port=80, debug=True)

И последний index.html:

<!DOCTYPE html>
<head>
<title>GPIO Control</title>
<link rel="stylesheet" href='../static/master.css'/>
</head>
<body>
<h2>RPi GPIO Control</h2>
<h3> Sensor Status </h3>
<h4> BUTTON ==> {{ button }}</h4>
<h4> MOTION ==> {{ senPIR }}</h4>
<br>

<h3> Actuator Status </h3>
<h4> RED LED ==> {{ ledRed }}</h4>
<h4> YLW LED ==> {{ ledYlw }}</h4>
<h4> GRN LED ==> {{ ledGrn }}</h4>
<br>
<h3> Commands </h3>
<h4>
RED LED Ctrl ==>
<a href="/ledRed/on">TURN ON</a>
<a href="/ledRed/off"class="button">TURN OFF</a>
</h4>
<h4>
YLW LED Ctrl ==>
<a href="/ledYlw/on">TURN ON</a>
<a href="/ledYlw/off"class="button">TURN OFF</a>
</h4>
<h4>
GRN LED Ctrl ==>
<a href="/ledGrn/on">TURN ON</a>
<a href="/ledGrn/off"class="button">TURN OFF</a>
</h4>

</body>
</html>

На рисунке показана окончательная веб-страница.

Как мы кратко обсуждали ранее,функция render_template ()вызываетJinja2 шаблондвигатель, который поставляется в комплекте с фреймворком. Jinja2 заменяет блоки {{…}} соответствующими значениями, заданными аргументами в вызове render_template ()

Но это замена не только то, что может делать Джинджа2. Например, шаблоны также поддерживают операторы управления, заданные внутри блоков {%…%}. Мы можем изменить наш шаблон index.html, чтобы добавить условные операторы для развертывания определенной кнопки в зависимости от реального значения привода. Другими словами, «переключать» состояние привода.Веб сервер на raspberry pi 3: 5 способов сделать Python-сервер на Raspberry Pi. Часть 1 / Хабр Давайте перепишем статус и командную часть index.html, используя условный оператор:

<!DOCTYPE html> 
<head>
<title>GPIO Control</title>
<link rel="stylesheet" href='../static/master.css'/>
</head>
<body>
<h2>RPi GPIO Control</h2>
<h3> Sensor Status </h3>
<h4> BUTTON ==> {{ button }}</h4>
<h4> MOTION ==> {{ senPIR }}</h4>
<br>
<h3> Actuator Status & Control </h3>
<h4> RED LED ==> {{ ledRed }} ==>
{% if ledRed == 1 %}
<a href="/ledRed/off"class="button">TURN OFF</a>
{% else %}
<a href="/ledRed/on">TURN ON</a>
{% endif %}
</h4>
<h4> YLW LED ==> {{ ledYlw }} ==>
{% if ledYlw == 1 %}
<a href="/ledYlw/off"class="button">TURN OFF</a>
{% else %}
<a href="/ledYlw/on">TURN ON</a>
{% endif %}
</h4>
<h4> GRN LED ==> {{ ledGrn }} ==>
{% if ledGrn == 1 %}
<a href="/ledGrn/off"class="button">TURN OFF</a>
{% else %}
<a href="/ledGrn/on">TURN ON</a>
{% endif %}
</h4>
</body>
</html>

На рисунке ниже показан результат:

Это всего лишь небольшой вкус того, что можно сделать с помощью Python и Flask. Если вы действительно хотите углубиться в Flask, вы можете следовать замечательному руководству от Мигеля Гримберга:Flask Mega Tutorial,

Как всегда, я надеюсь, что этот проект поможет другим найти свой путь в захватывающий мир электроники!

Для получения подробной информации и окончательного кода, пожалуйста, посетите мой депозитарий GitHub:RPi-Колба-WebServer

А чтобы узнать, как работать с данными, графикой и базами данных, вы также можете посмотреть мое руководство:От данных к графику.Веб сервер на raspberry pi 3: 5 способов сделать Python-сервер на Raspberry Pi. Часть 1 / Хабр веб-джорни с Flask и SQLite

Для больше проектов, пожалуйста, посетите мой блог:MJRoBot.org

Салудос с юга мира!

Увидимся в моем следующем уроке!

Спасибо,

Marcelo

Оригинальная статья

Узнайте, как настроить персональный веб-сервер с Raspberry Pi 3

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

Владение маленьким облаком дает множество преимуществ, включая настройку, бесплатное хранилище, бесплатные интернет-сервисы, путь к программному обеспечению с открытым исходным кодом, высококачественную безопасность, полный контроль над вашим контентом, возможность быстро вносить изменения, место для экспериментов. с кодом и многое другое. Большинство из этих преимуществ неизмеримо, но с финансовой точки зрения они могут сэкономить вам более 100 долларов в месяц.

Я мог бы использовать AWS, но я предпочитаю полную свободу, полный контроль над безопасностью и изучение того, как все устроено.

  • Самостоятельный веб-хостинг: нет BlueHost или DreamHost
  • Облачное хранилище: без Dropbox, Box, Google Drive, Microsoft Azure, iCloud или AWS
  • Локальная безопасность
  • HTTPS: давайте зашифруем
  • Аналитика: Google
  • OpenVPN: не нужен частный доступ в Интернет (примерно 7 долларов в месяц)

Вещи, которые я использовал:

  • Raspberry Pi 3 Модель B
  • Карта MicroSD (рекомендуется 32 ГБ, SD-карты, совместимые с Raspberry Pi)
  • Устройство чтения карт памяти microSD USB
  • Кабель Ethernet
  • Маршрутизатор подключен к Wi-Fi
  • Корпус Raspberry Pi
  • Amazon Basics Кабель MicroUSB
  • Зарядное устройство Apple
  • USB-мышь
  • USB-клавиатура
  • Кабель HDMI
  • Монитор (с входом HDMI)
  • MacBook Pro

Шаг 1. Настройка Raspberry Pi

Загрузите самый последний выпуск Raspbian (операционная система Raspberry Pi).Веб сервер на raspberry pi 3: 5 способов сделать Python-сервер на Raspberry Pi. Часть 1 / Хабр Версия Raspbian Jessie ZIP идеальна [1]. Разархивируйте или извлеките загруженный файл. Скопируйте его на SD-карту. Pi Filler упрощает этот процесс. Загрузите Pi Filer 1.3 или самую последнюю версию. Разархивируйте или извлеките загруженный файл и откройте его. Вы должны увидеть это сообщение:

Убедитесь, что устройство чтения карт USB еще НЕ вставлено. Если да, извлеките его. Продолжите, нажав «Продолжить». Должен появиться файловый менеджер. Найдите несжатый файл ОС Raspberry Pi на вашем Mac или ПК и выберите его.Вы должны увидеть другое приглашение, подобное изображенному ниже:

Вставьте карту MicroSD (рекомендуется 32 ГБ, минимум 16 ГБ) в USB-устройство чтения карт MicroSD. Затем вставьте USB-ридер в Mac или ПК. Вы можете переименовать SD-карту в «Raspberry», чтобы отличать ее от других. Щелкните Продолжить. Убедитесь, что SD-карта пуста. Pi Filler сотрет все предыдущее хранилище во время выполнения. Если вам нужно сделать резервную копию карты, сделайте это сейчас. Когда вы будете готовы продолжить, Raspbian OS будет записан на SD-карту.Это займет от одной до трех минут. После завершения записи извлеките USB-ридер, извлеките SD-карту и вставьте ее в слот для SD-карты Raspberry Pi. Подайте питание на Raspberry Pi, подключив шнур питания к стене. Он должен начать загрузку. Логин Raspberry Pi по умолчанию:

.

имя пользователя: pi
пароль: raspberry

Когда Raspberry Pi завершит первую загрузку, должен появиться экран конфигурации с заголовком «Параметры установки», как показано на изображении ниже [2]:

Выберите параметр «Развернуть файловую систему» ​​и нажмите клавишу Enter [3].Также я рекомендую выбрать второй вариант «Изменить пароль пользователя». Это важно для безопасности. Он также персонализирует ваш Raspberry Pi.

(Примечание: для дополнительного уровня безопасности установите fail2ban. Fail2Ban блокирует подозрительные запросы, поступающие из Интернета. Например, если будет слишком много попыток угадать пароль, он заблокирует этот IP-адрес.Веб сервер на raspberry pi 3: 5 способов сделать Python-сервер на Raspberry Pi. Часть 1 / Хабр Его можно установить, введя в терминал: $ sudo apt-get install fail2ban)

Выберите третий вариант в списке параметров настройки «Включить загрузку на рабочий стол / с нуля» и нажмите клавишу Enter.Вы попадете в другое окно с названием «Выбрать вариант загрузки», как показано на изображении ниже.

В окне «Выбрать вариант загрузки» выберите вторую опцию «Рабочий стол, войдите в систему как пользователь ‘pi’ на графическом рабочем столе» и нажмите кнопку Enter [4]. Как только это будет сделано, вы вернетесь на страницу «Параметры настройки». Если нет, нажмите кнопку «ОК» внизу этого окна, и вы вернетесь в предыдущее окно.

После того, как оба этих шага будут выполнены, нажмите кнопку «Готово» внизу страницы, и программа перезагрузится автоматически.Если это не так, используйте следующую команду в терминале для перезагрузки.

$ перезагрузка sudo

После перезагрузки с предыдущего шага, если все прошло хорошо, вы окажетесь на рабочем столе, как на изображении ниже.

На рабочем столе откройте терминал и введите следующие команды, чтобы обновить прошивку Raspberry Pi.

 $ sudo apt-get update 

$ sudo apt-get upgrade -y

$ sudo apt-get dist-upgrade -y

$ sudo rpi-update

Это может занять несколько минут.Теперь Raspberry Pi обновлен и работает.

Шаг 2: Настройка Raspberry Pi

SSH, что означает Secure Shell, представляет собой криптографический сетевой протокол, который позволяет безопасно передавать данные между вашим компьютером и Raspberry Pi. Вы можете управлять Raspberry Pi из командной строки Mac без монитора или клавиатуры.

Чтобы использовать SSH, сначала вам понадобится IP-адрес вашего Pi. Откройте терминал и введите:

  $ sudo ifconfig  

Если вы используете Ethernet, посмотрите раздел «eth0».Если вы используете Wi-Fi, посмотрите раздел «wlan0».

Найдите inet addr, за которым следует IP-адрес — что-то вроде 192.Веб сервер на raspberry pi 3: 5 способов сделать Python-сервер на Raspberry Pi. Часть 1 / Хабр 168.1.115, общий IP-адрес по умолчанию, который я буду использовать в этой статье.

С этим адресом откройте терминал и введите:

  $ ssh [email protected]  

Для SSH на ПК см. Сноску [5].

При появлении запроса введите пароль по умолчанию «малина», если вы его не изменили.

Теперь вы вошли в систему через SSH.

Удаленный рабочий стол

Использовать GUI (графический интерфейс пользователя) иногда проще, чем командную строку. В командной строке Raspberry Pi (с использованием SSH) введите:

  $ sudo apt-get install xrdp  

Xrdp поддерживает клиент удаленного рабочего стола Microsoft для Mac и ПК.

На Mac перейдите в магазин приложений и найдите «Microsoft Remote Desktop». Скачать это. (Для ПК см. Сноску [6].)

После установки найдите на своем Mac программу под названием «Microsoft Remote Desktop.»Откройте его. Вы должны увидеть это:

Нажмите «Создать», чтобы настроить удаленное соединение. Заполните пустые поля, как показано ниже.

Сохраните его, выйдя из окна «Новое».

Теперь вы должны увидеть удаленное соединение в списке «Мои рабочие столы». Дважды щелкните по нему.

После непродолжительной загрузки вы должны увидеть рабочий стол Raspberry Pi в окне на экране, которое выглядит следующим образом:

Отлично. Теперь вам не нужна отдельная мышь, клавиатура или монитор для управления Pi.Это гораздо более легкая установка.

Статический локальный IP-адрес

Иногда меняется локальный IP-адрес 192.168.1.115. Нам нужно сделать его статичным. Тип:

  $ sudo ifconfig  

Запишите из раздела «eth0» или раздела «wlan0» «inet addr» (текущий IP-адрес Pi), «bcast» (диапазон широковещательных IP-адресов) и «маску» (адрес маски подсети). Затем введите:

  $ netstat -nr  

Запишите «пункт назначения» и «шлюз / сеть».Веб сервер на raspberry pi 3: 5 способов сделать Python-сервер на Raspberry Pi. Часть 1 / Хабр «

Совокупные записи должны выглядеть примерно так:

 

сетевой адрес 192.168.1.115
bcast 192.168.1.255
маска 255.255.255.0
шлюз 192.168.1.1
сеть 192.168.1.1
назначение 192.168.1.0

С помощью этой информации вы можете легко установить статический внутренний IP-адрес. Тип:

  $ sudo nano /etc/dhcpcd.conf  

Не используйте / etc / network / interfaces.

Затем все, что вам нужно сделать, это добавить это в конец файла, подставив правильный IP-адрес, который вы хотите.

 

interface eth0
static ip_address = 192.168.1.115
static router = 192.168.1.1
static domain_name_servers = 192.168.1.1

После того, как вы установили статический внутренний IP-адрес, перезагрузите Raspberry Pi с помощью:

  $ перезагрузка sudo  

После перезагрузки с терминала типа:

  $ sudo ifconfig  

Ваши новые статические настройки должны появиться для вашего Raspberry Pi.

Статический глобальный IP-адрес

Если ваш интернет-провайдер уже предоставил вам статический внешний IP-адрес, вы можете перейти к разделу переадресации портов.Если нет, продолжайте читать.

Вы настроили SSH, удаленный рабочий стол и статический внутренний IP-адрес, поэтому теперь компьютеры в локальной сети будут знать, где найти Pi. Но вы по-прежнему не можете получить доступ к Raspberry Pi из-за пределов локальной сети Wi-Fi. Вам нужно, чтобы ваш Raspberry Pi был общедоступным из любой точки Интернета. Для этого требуется статический внешний IP-адрес [7].

Изначально это может быть деликатный процесс. Позвоните своему интернет-провайдеру и запросите статический внешний (иногда называемый статическим глобальным) IP-адрес.Интернет-провайдер имеет право принимать решения, поэтому я был бы очень осторожен с ними. Они могут отклонить ваш запрос статического внешнего IP-адреса.Веб сервер на raspberry pi 3: 5 способов сделать Python-сервер на Raspberry Pi. Часть 1 / Хабр Если они это сделают, вы не можете обвинить интернет-провайдера, потому что есть юридический и операционный риск с таким типом запроса. Они особенно не хотят клиентов, использующих средние или крупные Интернет-услуги. Они могут прямо спросить, зачем вам статический внешний IP-адрес. Вероятно, лучше быть честным и сказать им, что вы планируете разместить личный веб-сайт с низким трафиком или аналогичную небольшую некоммерческую интернет-службу.Если все пойдет хорошо, они должны открыть билет и позвонить вам через неделю или две и сообщить адрес.

Перенаправление портов

Этот недавно полученный статический глобальный IP-адрес, назначенный вашим интернет-провайдером, предназначен для доступа к маршрутизатору. Raspberry Pi по-прежнему недоступен. Вам необходимо настроить переадресацию портов специально для доступа к Raspberry Pi.

Порты — это виртуальные пути, по которым информация распространяется в Интернете. Иногда вам нужно перенаправить порт, чтобы сделать компьютер, такой как Raspberry Pi, доступным для Интернета, потому что он находится за сетевым маршрутизатором.Видео на YouTube под названием «Что такое TCP / IP, порт, маршрутизация, интрасеть, брандмауэр, Интернет» от VollmilchTV помогло мне визуально понять порты.

Переадресация портов может использоваться для таких проектов, как веб-сервер Raspberry Pi, или таких приложений, как VoIP или одноранговая загрузка. На выбор имеется более 65 000 портов, поэтому вы можете назначить другой порт для каждого создаваемого вами Интернет-приложения.

Способ настройки переадресации портов может зависеть от вашего маршрутизатора. Если у вас есть Linksys, видео на YouTube под названием «Как выйти в Интернет с вашим сервером Apache Ubuntu» от Габриэля Рамиреса объясняет, как его настроить.Если у вас нет Linksys, прочтите документацию, прилагаемую к вашему маршрутизатору, чтобы настроить и определить порты для пересылки.

Вам потребуется переадресация портов для SSH, а также для удаленного рабочего стола.Веб сервер на raspberry pi 3: 5 способов сделать Python-сервер на Raspberry Pi. Часть 1 / Хабр

Если вы считаете, что у вас настроена переадресация портов, проверьте, работает ли она через SSH, набрав:

  $ ssh pi @ your_global_ip_address  

Он должен запросить пароль.

Проверьте, работает ли переадресация портов и для удаленного рабочего стола.Откройте Microsoft Remote Desktop. Ваши предыдущие настройки удаленного подключения должны быть сохранены, но вам необходимо обновить поле «Имя ПК» статическим внешним IP-адресом (например, 195.198.227.116) вместо статического внутреннего адреса (например, 192.168.1.115).

Теперь попробуйте подключиться через удаленный рабочий стол. Он должен ненадолго загрузиться и прибыть на рабочий стол Pi.

Хорошая работа. Raspberry Pi теперь доступен из Интернета и готов к продвинутым проектам.

В качестве бонуса вы можете поддерживать два удаленных подключения к вашему Pi. Один через Интернет, а другой через LAN (локальную сеть). Настроить легко. В Microsoft Remote Desktop оставьте одно удаленное соединение под названием «Pi Internet», а другое — «Pi Local». Настройте «Имя ПК» Pi Internet на статический внешний IP-адрес, например 195.198.227.116. Настройте «Имя ПК» Pi Local на статический внутренний IP-адрес, например 192.168.1.115. Теперь у вас есть возможность подключиться глобально или локально.

Если вы этого еще не видели, посмотрите «Как выйти в онлайн с вашим сервером Apache Ubuntu» Габриэля Рамиреса как переход к проекту 2. Он покажет вам техническую архитектуру, лежащую в основе вашего проекта. В нашем случае вы используете Raspberry Pi вместо сервера Ubuntu. Динамический DNS находится между доменной компанией и вашим маршрутизатором, что Рамирес опускает. Помимо этой тонкости, в видео визуально объясняется, как работает система. Вы могли заметить, что в этом руководстве рассматривается настройка Raspberry Pi и переадресация портов на стороне сервера или на стороне сервера.См. Исходный код для более сложных проектов, охватывающих доменное имя, динамический DNS, Jekyll (генератор статического HTML) и Apache (веб-хостинг), который является клиентским или внешним интерфейсом.Веб сервер на raspberry pi 3: 5 способов сделать Python-сервер на Raspberry Pi. Часть 1 / Хабр

Сноски

[1] Я не рекомендую начинать с операционной системы NOOBS. Я предпочитаю начинать с полнофункциональной операционной системы Raspbian Jessie.

[2] Если «Параметры настройки» не всплывают, вы всегда можете найти его, открыв Терминал и выполнив эту команду:

  $ sudo-raspi-config  

[3] Мы делаем это, чтобы использовать все пространство на SD-карте как полный раздел.Все это расширяет операционную систему, чтобы уместить все пространство на SD-карте, которое затем можно использовать в качестве памяти для Raspberry Pi.

[4] Мы делаем это, потому что хотим загрузиться в знакомую среду рабочего стола. Если мы не сделаем этот шаг, Raspberry Pi каждый раз загружается в терминал без графического интерфейса.

[5]

Загрузите и запустите PuTTY или другой клиент SSH для Windows. Введите свой IP-адрес в поле, как показано на скриншоте выше.Оставьте порт по умолчанию на 22. Нажмите Enter, и PuTTY откроет окно терминала, в котором вам будет предложено ввести имя пользователя и пароль. Заполните их и начните удаленно работать со своим Pi.

[6] Если он еще не установлен, загрузите Microsoft Remote Desktop. Найдите на своем компьютере удаленный рабочий стол Microsoft. Запустить его. При появлении запроса введите IP-адрес. Затем появится окно xrdp, в котором вам будет предложено ввести имя пользователя и пароль.

[7] Маршрутизатор имеет динамически назначаемый внешний IP-адрес, поэтому теоретически к нему можно получить доступ из Интернета на мгновение, но вам понадобится помощь вашего интернет-провайдера, чтобы сделать его постоянно доступным.Если бы это было не так, вам нужно было бы перенастраивать удаленное соединение при каждом использовании.

Первоисточник можно найти на сайте Full-Stack Computer Projects Митчелла Маклафлина.

Настройте веб-сервер Raspberry Pi и легко создайте веб-страницу в формате HTML

Введение

У вас есть Raspberry Pi и вы хотите запустить веб-сервер дома? Но вы можете подумать, что делать после запуска веб-сервера на Raspberry Pi.Веб сервер на raspberry pi 3: 5 способов сделать Python-сервер на Raspberry Pi. Часть 1 / Хабр В этом блоге мы шаг за шагом проведем вас по настройке веб-сервера дома с использованием Raspberry Pi в течение нескольких минут, а также поможем вам узнать об основах кодирования HTML, и в конечном итоге у вас будет свой собственный веб-сайт на Интернет!

Что такое веб-сервер?

Веб-сервер
можно просто определить как компьютер, на котором запущено программное обеспечение и хранятся такие файлы, как
HTML-документы, изображения, видео и другие файлы, необходимые для работы веб-сайта.А
веб-сервер всегда подключен к Интернету, потому что веб-сайты доступны для
общественность в любое время. Если веб-сервер отключается, веб-сайт, связанный с
этот сервер также отключается.

Как вы можете посещать веб-сайты через браузер?

Когда ты
введите URL-адрес в браузере, этот URL-адрес преобразуется в IP-адрес, а
браузер отправляет это как HTTP-запрос через Интернет, пока не попадет в Интернет.
сервер, связанный с запрошенным IP-адресом. Когда он попал в Интернет
сервер, HTTP-сервер принимает этот запрос и находит документ, который
пользователь запросил.После этого он отправляет запрошенную веб-страницу обратно в
браузер через HTTP.

Преимущества построения веб-сервера на Raspberry Pi

Есть
несколько преимуществ использования Raspberry Pi для создания веб-сервера.

  • Экономичный
    потому что общие расходы на хостинг дорогие
  • Runs
    на очень малой мощности и, следовательно, экономит электроэнергию
  • Банка
    быть настроенным как портативное устройство

Кроме того, если вы хотите разместить свой веб-сайт на Raspberry Pi, вы можете использовать любой Raspberry Pi по вашему выбору.Даже Raspberry Pi Zero может разместить веб-сервер!

Создание веб-сервера Apache на Raspberry Pi

Существуют разные типы веб-серверов, но мы будем использовать веб-сервер Apache, который является одним из самых известных веб-серверов, которые вы можете настроить на Raspberry Pi.Веб сервер на raspberry pi 3: 5 способов сделать Python-сервер на Raspberry Pi. Часть 1 / Хабр Apache может доставлять файлы HTML по протоколам HTTP и HTTPS, а также поддерживает дополнительные модули, такие как PHP, где он может доставлять динамический контент. Но в этом руководстве мы настроим Apache для доставки статических HTML-страниц, потому что это проще начать.

Требуемый материал

Настройка веб-сервера Apache на Raspberry Pi — несложный процесс. Мы начнем с перечисления того, что вам нужно для этой установки:

Обратите внимание, что мы использовали алюминиевый корпус Argon ONE Raspberry Pi 4, потому что как только вы настроите веб-сервер Apache на своем Raspberry Pi, вы оставите его работать все время. Таким образом, этот чехол может помочь обеспечить лучшее охлаждение, пока Raspberry Pi нагревается от непрерывного использования. С другой стороны, это также очень стильный алюминиевый корпус для использования с Raspberry Pi!

Алюминиевый корпус Argon ONE Raspberry Pi 4

Настройка Raspberry Pi для начальной загрузки

При покупке
Raspberry Pi, на нем из коробки не установлена ​​операционная система.Так,
вам нужно записать операционную систему на карту micro-SD, а затем загрузить
Raspberry Pi с этой карты.

Шаг 1

Во-первых, мы должны загрузить операционную систему на базе Linux. Raspberry Pi поддерживает различные дистрибутивы Linux, такие как Ubuntu, но в этом руководстве мы будем использовать официальную ОС от Raspberry Pi Foundation, которая является ОС Raspberry Pi. Загрузите его здесь, выбрав версию «с настольным компьютером и рекомендуемым программным обеспечением».

Шаг 2

Затем вам необходимо загрузить программное обеспечение под названием «balenaEtcher», которое используется для записи загруженного образа, указанного выше, и загрузки Raspberry Pi с карты Micro-SD.Щелкните здесь, чтобы загрузить последнюю версию этого программного обеспечения.

Шаг 3

Затем подключите карту micro-SD к разъему для карты micro-SD на ПК, используя переходник для карты micro-SD на SD.Веб сервер на raspberry pi 3: 5 способов сделать Python-сервер на Raspberry Pi. Часть 1 / Хабр Вы также можете использовать USB-устройство для чтения карт Micro-SD.

Шаг 4

После этого откройте программу «balenaEtcher». Затем укажите местоположение загруженного изображения, выберите подключенную карту micro-SD и нажмите «flash». Для завершения этого процесса потребуется несколько минут.

Шаг 5

Теперь мы настроим Raspberry Pi для автоматического подключения к беспроводной сети, чтобы мы могли общаться с ней.

Однако, если у вас есть дисплей HDMI, клавиатура и мышь, вы можете пропустить этот шаг, подключить их к Raspberry Pi и перейти к «Установка веб-сервера Apache»

Также, если у вас есть Seeeduino XIAO, вы можете следовать руководству здесь, чтобы настроить связь между Raspberry Pi и ПК, и перейти к «Установка веб-сервера Apache»

Шаг 6

Перейдите в корневую папку Raspberry Pi на своем ПК и создайте файл с именем «wpa_supplicant.conf ». Затем скопируйте следующие коды в этот файл и добавьте имя пользователя и пароль домашнего Wi-Fi в поля «WiFi-имя» и «WiFi-пароль»

  страна = США
ctrl_interface = DIR = / var / run / wpa_supplicant GROUP = netdev
update_config = 1
 
network = {
ssid = "WiFi-имя"
psk = "WiFi-пароль"
key_mgmt = WPA-PSK
приоритет = 1
}
  

Примечание:
Имя и пароль Wi-Fi должны быть такими же, как у вашего локального Wi-Fi, к которому подключен ваш компьютер (убедитесь, что ваш компьютер и Raspberry Pi находятся в одной локальной сети).

Шаг 7

Создать
пустой файл с именем «ssh» в этом каталоге

Шаг 8

Затем извлеките карту micro-SD из ПК и вставьте ее в Raspberry Pi.

Шаг 9

Включите
Raspberry Pi через USB-кабель Type-C и адаптер питания

Шаг 10

Теперь мы загрузим Putty, SSH-клиент, который мы будем использовать для связи с Raspberry Pi. Нажмите здесь, чтобы загрузить.

Шаг 11

Открытая шпатлевка
и установите имя хоста как «raspberrypi.Веб сервер на raspberry pi 3: 5 способов сделать Python-сервер на Raspberry Pi. Часть 1 / Хабр local» и порт как «22». Затем нажмите «Открыть».

Putty Client

Установка веб-сервера Apache

Шаг 1

Прежде всего, обязательно обновите список пакетов на Raspberry Pi, введя следующие команды.

  sudo apt-get update
sudo apt-get обновление  

Шаг 2

Затем установите
Пакет Apache2, введя следующую команду

  sudo apt install apache2 -y  

Вот и все! Просто
два шага, и у вас есть веб-сервер Apache, работающий на вашем Raspberry Pi!

Подтвердить
независимо от того, работает ли этот веб-сервер или нет, введите следующую команду.

  sudo service apache2 статус  

Теперь по порядку
чтобы проверить, что Apache запущен, вы можете ввести IP-адрес вашего Raspberry
Pi в веб-браузере, и вам будет представлена ​​простая веб-страница в виде
следует.

Однако, если
вы не знаете IP-адрес своего Raspberry Pi, вы можете найти его, введя
приведенную ниже команду в терминале вашего Raspberry Pi.

имя хоста -I

Только что настроенный сервер доступен только через вашу домашнюю сеть и недоступен через Интернет.Чтобы сделать этот сервер доступным из любого места, вам необходимо настроить переадресацию портов на вашем маршрутизаторе. Однако мы не планируем обсуждать это в этом блоге.

Настройка HTML-страницы для редактирования

По умолчанию
веб-страница, как показано выше, представляет собой просто HTML-файл в файловой системе Raspberry
Пи. Мы создадим наш собственный HTML-файл и создадим нашу собственную веб-страницу.

Шаг 1

Во-первых, давайте найдем расположение этого HTML-файла на Raspberry Pi. Введите следующую команду в терминале

  cd / var / www / html  

Шаг 2

Затем введите
следующая команда для вывода списка всех файлов в этом каталоге

  LS-AL  

Вам будут представлены все файлы, доступные в этом каталоге, с индексом.Веб сервер на raspberry pi 3: 5 способов сделать Python-сервер на Raspberry Pi. Часть 1 / Хабр html принадлежит пользователю root.

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

  судо чоун пи: index.html  

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

Создание вашей первой HTML-страницы

Мы будем сейчас
сосредоточиться на обучении вас основам HTML.

Прежде всего,
откройте файл index.html, введя команду ниже, и удалите все содержимое
внутри, чтобы начать с новой страницы.

  sudo nano index.html  

Редактор GNU nano

HTML-теги

Прежде всего,
вам нужно знать о тегах HTML, которые являются основной функцией HTML. Теги
используется для идентификации различных частей веб-страницы, а также для специального форматирования
к содержанию.

Как правило,
вы помещаете свой контент в два тега: открывающий тег и закрывающий тег и
содержимое внутри этого тега ведет себя в соответствии с тем, что указано в этих тегах.

Например
Тег может сделать текст жирным. Следовательно, если у вас есть свой контент:

  Это мой  новый  сайт  

Слово «новый»
будут выделены жирным шрифтом. Обратите внимание, что открывающий тег имеет <>, а закрывающий тег имеет

Базовый формат HTML-документа

Генерал
HTML-документ имеет следующий формат

  

   

   
   

   

  

: этот тег
используется, чтобы объявить, что это документ HTML.Вам не нужен закрывающий тег
за это.

:
Этот тег гарантирует
что содержимое внутри будет иметь необходимые характеристики HTML.Веб сервер на raspberry pi 3: 5 способов сделать Python-сервер на Raspberry Pi. Часть 1 / Хабр Этот
имеет закрывающий тег.

: этот тег содержит информацию о вашем
веб-сайт, но содержимое внутри не отображается, когда вы открываете его в веб-браузере.

Например, у вас может быть метатег внутри вашего тега заголовка, чтобы установить кодировку символов для вашего веб-сайта. У него есть закрывающий тег.

  
   
  

Кроме того, вы можете иметь тег заголовка внутри тега заголовка. Этот тег устанавливает заголовок вашей веб-страницы и имеет закрывающий тег.

  
   
    Мой сайт 
  

: этот тег содержит основное содержимое веб-страницы. После открытия веб-страницы все, что вы видите, обычно включается в теги тела.У него есть закрывающий тег. Внутри этого тега body может быть множество других тегов, но мы обсудим только самые полезные из них, которые вам понадобятся для настройки вашей первой базовой веб-страницы.

Теги заголовка

Эти теги обычно используются для заголовков и субтитров страницы. Существует шесть различных тегов заголовков, соответствующих размеру и приоритету заголовков и субтитров. Они варьируются от

до

, а размер постепенно уменьшается от h2 до h6. Также нужен закрывающий

тег

  
   

Заголовок

Подзаголовок

Подзаголовок

Подзаголовок
Подзаголовок
Подзаголовок

Вы можете сохранить файл, нажав Ctrl + X и нажав Y, когда будет предложено в команде, например.Затем перезагрузите страницу в браузере, чтобы увидеть изменения.

Теги абзацев

Эти теги используются для разделения содержимого на разные абзацы. После того, как вы включите свой контент в теги

, он будет помещен внутри абзаца. Также для этого нужен закрывающий тег

.Веб сервер на raspberry pi 3: 5 способов сделать Python-сервер на Raspberry Pi. Часть 1 / Хабр

  

Это первый абзац

Это второй абзац

Это третий абзац

Перезагрузите браузер
чтобы увидеть изменения

Теги разрыва строки

Эти теги используются для разбиения текста на разные строки без резервирования пробелов между двумя строками.Они считаются пустыми элементами, поскольку в них нет закрывающего тега и не может быть никаких атрибутов внутри тега.

  Это предложение прервется здесь 
и начнется с нового

Перезагрузите браузер
чтобы увидеть изменения

Теги для добавления стиля к вашему тексту

Есть несколько
теги, которые полезны для изменения внешнего вида текста.

: текст выделяется жирным шрифтом

: текст будет выделен курсивом

.

: подчеркивает текст

: этот тег используется для выделения чего-либо и отображается курсивом

: этот тег используется для выделения важного текста и выделяется полужирным шрифтом

  Это  полужирный  текст 
Текст выделен курсивом
Это подчеркнутый текст
Это выделенный текст
Это важный текст

Перезагрузите браузер
чтобы увидеть изменения

Ярлык горизонтальной линейки

Эти теги используются для создания горизонтального изображения на вашей веб-странице слева направо.Это пустой элемент и имеет тег


.

  Это приговор

Это отдельное предложение

Перезагрузите браузер, чтобы увидеть изменения

Добавление изображений на вашу веб-страницу

Вы можете добавить
изображения на вашу веб-страницу с помощью тега . Это также пустой элемент
и не имеет закрывающего тега. Принимает следующий формат

  Веб сервер на raspberry pi 3: 5 способов сделать Python-сервер на Raspberry Pi. Часть 1 / Хабр  

Например,
давайте добавим изображение Seeeduino XIAO

  

Это изображение Seeeduiono XIAO

Веб сервер на raspberry pi 3: 5 способов сделать Python-сервер на Raspberry Pi. Часть 1 / Хабр seeedstudio.com/media/catalog/product/cache/9d0ce51a71ce6a79dfa2a98d65a0f0bd/s/e/seeeduino-xiao-preview_1.jpg ">

Перезагрузите браузер
чтобы увидеть изменения

Также вы можете скачать изображение и поместить его в каталог / var / www / html.

Затем вы можете ввести следующее в вашем файле index.html, заменив «Your Image Name» на имя вашего изображения, за которым следует расширение изображения.

  Веб сервер на raspberry pi 3: 5 способов сделать Python-сервер на Raspberry Pi. Часть 1 / Хабр  

Добавление гиперссылок в текст

Вы можете добавить
гиперссылки на текст, используя следующее:

   текст   

Пример

  Щелкните 

Чтобы построить
table используйте тег

. Все содержимое таблицы будет внутри
открывающий тег

и закрывающий

тег.

Тогда мы
добавьте тег

, который является первой строкой таблицы. Все заголовки таблиц будут
быть включенным в этот первый тег

. Все заголовки таблиц должны быть перечислены
с тегом

.

Тогда мы будем
добавьте второй тег

, чтобы создать вторую строку таблицы и добавить данные для
каждый столбец с помощью тега

.

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

  <таблица>
   
       Артикул 
       Название продукта 
       Цена 
   
   
       102010328 
       Seeeduino XIAO 
       4,90 доллара США 
   
  

Перезагрузите браузер, чтобы увидеть изменения

Заключение

Мы верим
вы узнали о том, как настроить веб-сервер на Raspberry Pi, а также узнали
о создании базовой веб-страницы HTML, прочитав этот блог.Мы надеемся, что этот блог
может стать началом вашего пути веб-разработки!

Следите за нами и ставьте лайки:

Продолжить чтение

Raspberry Pi: ваш собственный сервер разработки

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

В этой статье я расскажу вам, как настроить его в качестве домашнего сервера разработки и развернуть полнофункциональное приложение JavaScript, к которому вы можете получить доступ из-за пределов своей сети. Это отлично подходит для создания собственного удаленного цифрового рабочего пространства или просто для контроля над оборудованием, которое вы используете для разработки.

Что вам нужно для этого домашнего сервера Raspberry Pi?

Хотя сейчас это, в частности, руководство по Raspberry Pi 3, оно должно работать с моделями, восходящими к первому поколению — если у вас есть более старая модель или Raspberry Pi Zero, сообщите нам о своем опыте в комментариях ниже.

Помимо самой платы Raspberry Pi вам понадобится:

  • Зарядное устройство Micro USB
  • Кабель Ethernet
  • Карта microSD (минимум 8 ГБ, карты до 32 ГБ работают нормально)

Они также пригодятся при первоначальной настройке:

  • A USB-клавиатура
  • Кабель HDMI и монитор

ОС Raspberry Pi: Raspbian

Установить операционную систему на Raspberry Pi просто.Сначала с помощью компьютера установите загрузочный образ на карту microSD. Затем просто вставьте карту в Raspberry Pi и загрузитесь оттуда.

Raspbian — это дистрибутив Linux, портированный с Debian 7.0 (Wheezy), и официальная ОС для Raspberry Pi, оптимизированная для архитектуры устройства. Хотя есть и другие варианты запуска вашей любимой ОС на Pi, мы будем использовать Raspbian из-за его простоты.

Это руководство было обновлено для работы с этой (или более поздней) версией Raspbian:

  Версия ядра: # 1 SMP Debian 4.9.110-3 + deb9u4 (21.08.2018)
Релиз ядра: 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 .

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-сервер принимает соединения с внешних компьютеров. Вот пример того, как это может выглядеть на странице конфигурации вашего маршрутизатора:

Конфигурация переадресации портов, если внутренний IP-адрес вашего Raspberry Pi — 192.168.1.16 . Весь входящий трафик, связанный с портами 80 или 22, пересылается на этот внутренний адрес.

Вы можете определить внешний IP-адрес своего маршрутизатора, просто набрав «какой у меня IP-адрес» в Google. Если вы затем перейдете за пределы сети вашего маршрутизатора, вы можете проверить, работает ли переадресация портов, открыв SSH-соединение с помощью ssh [email protected] {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, который формирует как серверный, так и клиентский код.

Установите на свой компьютер generator-angular-fullstack :

  npm install -g generator-angular-fullstack
  

Создайте новый каталог для вашего приложения:

  mkdir мое приложение
cd my-app
  

И леска заявка:

  лет angular-fullstack my-app
  

Создайте репозиторий и отправьте код

Теперь создайте репозиторий в BitBucket, как описано здесь.Затем настройте свой локальный каталог:

  git init
git удаленное добавление источника [адрес электронной почты защищен]: USER / REPO.git
  

Итак, вы можете зафиксировать и нажать код:

  git add.
git commit -m 'Начальная фиксация'
git push -u origin master
  

Генератор поставляется с подключаемым модулем grunt-build-control, который позволяет вам фиксировать код сборки в определенной ветке вашего репозитория. Просто добавьте конфигурацию BitBucket в файл Gruntfile.js в корневом каталоге вашего приложения:

  buildcontrol: {
   параметры: {
      dir: 'dist',
      совершить: правда,
      толчок: правда,
      connectCommit: ложь,
      сообщение: 'Построен% sourceName% из фиксации% sourceCommit% в ветке% sourceBranch%'
   },
   bitbucket: {
      параметры: {
         удаленный: '[электронная почта защищена]: ПОЛЬЗОВАТЕЛЬ / РЕПО.мерзавец,
         ветка: 'построить'
      }
   }
},
// ...
  

Сейчас выполняется:

  grunt сборка
  

… для создания папки распространения, а затем:

  grunt buildcontrol: битбакет
  

… для фиксации и передачи кода в ветку сборки в вашем репозитории.

Создание ключа SSH

Теперь ваш код размещен. Прежде чем вы сможете развернуть его на своем Raspberry Pi, вам необходимо сгенерировать SSH-ключ для Raspberry Pi и добавить его в свою учетную запись BitBucket.Мы быстро выполним этот шаг, но если у вас возникнут проблемы, следуйте руководству BitBucket. Итак, войдите в свой терминал Raspberry Pi и сгенерируйте пару открытого / закрытого ключей:

  ssh-keygen
  

Затем запустите агент:

  ssh-агент / bin / bash
  

И добавляем ключ к агенту:

  ssh-add /home/pi/.ssh/id_rsa
  

Теперь вам просто нужно вывести содержимое открытого ключа:

  cat / home / pi /.ssh / id_rsa.pub
  

… чтобы вы могли скопировать и вставить его в BitBucket.

В BitBucket щелкните изображение своего профиля и перейдите в раздел «Управление учетной записью». В разделе БЕЗОПАСНОСТЬ найдите ключи SSH и нажмите кнопку Добавить ключ.

Клонировать репозиторий

Не существует соглашения о том, где размещать код ваших приложений, но вы можете создать каталог / var / www и поместить туда все свои проекты.

  кд / вар
sudo mkdir www
  

Чтобы избежать использования sudo , когда вы хотите разместить файлы в корневом каталоге, вы можете изменить владельца на своего пользователя Pi, а группу — на www-data , который используется Nginx:

  судо чоун -R pi: www-data www
cd www
  

Теперь вы можете клонировать ветку сборки вашего репозитория и установить зависимости:

  git clone [электронная почта защищена]: ПОЛЬЗОВАТЕЛЬ / РЕПО.git --branch build --single-branch
cd REPO
npm install --production
  

По завершении вы можете запустить приложение, установив рабочую среду:

  экспорт NODE_ENV = производство; сервер узла / app.js &
  

Теперь укажите в браузере своего компьютера IP-адрес устройства, чтобы проверить, работает ли оно.

Хотите, чтобы у вас был сервер разработки, который вы могли бы назвать своим? Вы можете с #RaspberryPi.

Настроить обратный прокси Nginx

Остался еще один шаг, чтобы сделать ваше приложение доступным извне.Хотя Nginx прослушивает порт 80, где он будет получать HTTP-запросы для вашего Pi, само приложение Node прослушивает другой порт (например, порт 8080). Следовательно, вам необходимо настроить Nginx для работы в качестве обратного прокси, распознавания запросов, предназначенных для вашего приложения, и передачи их в Node.

Nginx хранит файл конфигурации для каждого обслуживаемого приложения в папке сайтов :

  cd / etc / nginx / sites-available /
  

Здесь вы можете скопировать файл конфигурации по умолчанию и отредактировать по своему усмотрению:

  sudo cp по умолчанию мое приложение
судо нано мое приложение
  

Окончательный файл конфигурации должен выглядеть так, где Nginx действует как прокси для Node.js сервер:

  сервер {
   слушать 80;
   корень / var / www / my-app /; # определяет местоположение настраиваемого приложения
   имя_сервера my-app.dev; # определяет имя хоста, используемое для трафика этого приложения
   место расположения / {
      proxy_pass http: // localhost: 8080 /; # настраивает внутреннее назначение для этого трафика
   }
}
  

Чтобы включить эту конфигурацию, вам необходимо создать символическую ссылку в папке с поддержкой сайтов , где Nginx ищет активные конфигурации во время выполнения:

  sudo ln -s / etc / nginx / sites-available / my-app / etc / nginx / sites-enabled / my-app
  

И перезагрузите сервис, чтобы активировать эти изменения:

  sudo service nginx перезагрузка
  

На этом этапе ваше приложение готово к приему HTTP-трафика, предназначенного для моего приложения .dev (благодаря директиве server_name my-app.dev , которую вы настроили выше). Последний вопрос, который вам нужно решить, - как сделать так, чтобы трафик, который вы отправляете извне, соответствовал этому доменному имени. Хотя вы можете купить доменное имя и указать его на свой IP-адрес, файл hosts приходит на помощь и делает это ненужным.

На рабочей станции, с которой вы будете заходить на сайт, просто добавьте внешний IP-адрес вашего маршрутизатора и сопоставьте его с именем хоста my-app.dev . Любой HTTP-трафик, который вы генерируете для my-app.dev , затем будет отправлен непосредственно на ваш маршрутизатор с правильным именем хоста в HTTP-заголовке Host .

В Windows с правами администратора вы можете редактировать файл, расположенный в папке c: \ windows \ system32 \ drivers \ etc \ hosts , с помощью блокнота. В Linux и Mac вы можете использовать терминал с sudo nano / etc / hosts и sudo nano / private / etc / hosts соответственно.

  ##
# База данных хоста
#
# localhost используется для настройки интерфейса обратной петли
# когда система загружается.Не меняйте эту запись.
##
127.0.0.1 локальный хост
255.255.255.255 широковещательный хост
:: 1 локальный хост

212.124.126.242 my-app.dev # добавить имя вашего хоста в список
  

Что дальше?

Теперь, когда все настроено, вы можете развернуть столько приложений, сколько захотите, на своем Raspberry Pi и установить навсегда или pm2, чтобы ваши серверы Node.js работали.

И только помните, что если что-то пойдет не так, вы можете просто стереть SD-карту и начать заново с нуля!

Как настроить веб-сервер на Raspberry Pi

Хостинг веб-сайта самостоятельно несложно - на самом деле, вы можете сделать это на своем Raspberry Pi, просто установив Raspbian и немного поработав с командной строкой.Ваш Raspberry Pi предлагает простой способ разместить личный или профессиональный веб-сайт, и все, что вам нужно знать о том, как это сделать, содержится в этом удобном руководстве. Вот как настроить веб-сервер на Raspberry Pi.

Как настроить веб-сервер на Raspberry Pi

Для запуска нашего веб-сервера мы используем так называемый стек LEMP: Linux, nginx, MySQL и PHP. Короче говоря, LEMP использует Linux в качестве операционной системы на устройстве, на котором размещен сервер, nginx в качестве самого сервера, MySQL в качестве системы управления базами данных и PHP для динамической обработки.

В нашем случае рассматриваемый дистрибутив Linux будет Raspbian. Как только Raspbian будет запущен на вашем Raspberry Pi, вы обнаружите, что заставить все остальное работать довольно легко!

Шаг 1. Установите Raspbian

Установите Raspbian с помощью SD-карты, как и для любого другого проекта на основе Raspbian. Чтобы узнать больше об установке ОС, перейдите к нашему посту о том, как установить Raspbian на Raspberry Pi.

Шаг 2. Установите Nginx

«E» в LEMP - это «nginx», хотите верьте, хотите нет.Давай займемся этим дальше. Мы обновим наши пакеты, а затем установим nginx. Откройте терминал и выполните следующие команды одну за другой:

 sudo apt-get update
sudo apt-get установить nginx 

При появлении запроса скажите «да». Nginx - это сам сервер, и он очень эффективен.

Шаг 3. Установите MySQL

Нам нужна MySQL, система управления базами данных, для хранения и управления данными для нашего сайта. Как и в случае с nginx, MySQL устанавливается с помощью пары простых строк в терминале.

 sudo apt-get установить mysql-server 

Во время установки вам будет предложено установить пароль root (оставление поля пустым означает, что у вас нет пароля).

 sudo mysql_secure_installation 

На этом этапе у вас будет возможность изменить пароль root. Поскольку вы только что его установили, вы можете сказать «нет». Скажите да всему остальному.

Шаг 4. Установите PHP

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

 sudo apt-get install php5-fpm php5-mysql 

Давайте отредактируем файл. Это настройки PHP, и мы сделаем их более безопасными.

 Судо нано /etc/php5/fpm/php.ini 

Найдите строку с # cgi.fix_pathinfo = 1 и измените ее на cgi.fix_pathinfo = 0. Найти его можно с помощью функции поиска (Ctrl + W). Затем выйдите с помощью Ctrl + X и сохраните с помощью Y.

Затем просто перезапустите PHP:

 sudo systemctl перезапуск php5-fpm 

Шаг 5. Настройте nginx для использования PHP

Давай заставим этих двоих хорошо поиграть вместе.Время редактировать другой файл:

 судо нано / и т. Д. / Nginx / сайты-доступные / по умолчанию 

Оказавшись здесь, вы захотите кое-что изменить. Отредактируйте его так, чтобы он выглядел так:

 server {
    слушаем 80 default_server;
    слушать [::]: 80 default_server;

    корень / вар / www / html;

    index index.php index.html index.htm index.nginx-debian.html;

    server_name [ваш общедоступный IP-адрес];

    место расположения / {
        try_files $ uri $ uri / = 404;
    }

    расположение ~ \.php $ {
        включить сниппеты / fastcgi-php.conf;
        fastcgi_pass unix: /var/run/php5-fpm.sock;
    }

    location ~ /\.ht {
        все отрицать;
    }
} 

Рядом с server_name, где у меня [ваш общедоступный IP-адрес], укажите ваш общедоступный IP-адрес (вы можете узнать его, спросив Google или другую поисковую систему).

Тогда мы просто протестируем это и повторно загрузим nginx.

 судо nginx -t
sudo systemctl перезагрузить nginx 

Это все, что нам нужно сделать на конце Pi!

Шаг 6. Настройте переадресацию портов

Получите доступ к интерфейсу администратора вашего маршрутизатора (вам нужно ввести частный IP-адрес вашего маршрутизатора в адресную строку браузера, а затем, как правило, войти в систему - проверьте свой маршрутизатор для получения дополнительной информации).Настройте переадресацию портов так:

 Сервисный порт: 80
Внутренний порт: 80
IP-адрес: [IP-адрес вашего Pi]
Протокол: TCP
Общий порт службы: HTTP 

Замените [IP-адрес вашего Pi] на - как вы уже догадались - IP-адрес вашего Pi, который вы можете найти с помощью команды терминала hostname -I. Используйте 80 для своих портов и RCP для вашего протокола. Ваши варианты могут немного отличаться от этого, но они должны быть более или менее узнаваемыми.

Если вы все сделали правильно, введите свой публичный IP-адрес в адресную строку браузера, и вы увидите эту страницу.

Вот и все! Теперь у вас есть работающий веб-сервер. Получите доступ к своему веб-сайту, введя свой общедоступный IP-адрес в адресную строку браузера с любого устройства, подключенного к Интернету. На данный момент на вашем сайте будет только приветственная страница nginx, расположенная по адресу / var / www / html. Вы можете удалить это и создать файл с именем index.php (sudo nano index.php) или index.html, если вы знаете, что не собираетесь использовать PHP, и продолжить работу оттуда.

Запуск легкого веб-сервера на Raspberry Pi (lighttpd)

В этом руководстве рассматривается настройка легкого веб-сервера в Linux с использованием веб-сервера lighttpd на Raspberry Pi.Большинство этих инструкций также можно применить к другим дистрибутивам на основе Debian или Ubuntu (за исключением задач, использующих инструмент raspi-config). Я уже написал учебное пособие, основанное на «полнофункциональном» веб-сервере Apache (работающем на веб-сервере LAMP Apache на Raspberry Pi).

Lighttpd предоставляет способ настройки веб-сервера без чрезмерной нагрузки на ограниченные возможности обработки. Он идеально подходит для предоставления веб-доступа к Raspberry Pi в качестве инструмента мониторинга или легкого веб-сервера для личного веб-сайта.

Debian Linux

Это основано на Debian Raspberry Pi Raspbian.

Использование командной строки и редактирование файлов

Поскольку мы собираемся делать это через командную строку, полезно немного разобраться в оболочке. Хотя здесь представлены пошаговые инструкции, если вы ранее не использовали командную строку, я предлагаю вам прочитать базовое справочное руководство по оболочке, а затем вернуться к этому пункту.

Во время установки вы увидите множество команд с префиксом sudo.Команда sudo позволяет пользователю выполнять команду от имени суперпользователя (или, в некоторых случаях, от имени другого пользователя). Без использования команды sudo многие команды не смогли бы указать недостаточные разрешения. Это функция безопасности, которая защищает систему от других пользователей, но также ограничивает размер ущерба, который пользователь может нанести по ошибке (хотя при использовании префикса команды sudo это не поможет от несчастных случаев).

Безопасность

Первый приоритет - сделать Raspberry Pi немного более безопасным.Изображение включает имя пользователя и пароль по умолчанию, которые после подключения к Интернету позволят любому войти в систему и получить свободный доступ к устройству.

Чтобы изменить пароль для пользователя pi после входа в систему, проблема

пароль

и следуйте инструкциям по смене пароля.

Вы также можете добавить свое собственное имя пользователя. Я использовал user1 в качестве имени пользователя, но обычно это будет имя человека. Вы можете пропустить это и сразу перейти к этапам производительности / сети, если это не требуется.

Это добавит нового пользователя и изменит его пароль.

  sudo useradd -m пользователь1

sudo passwd user1  

Здесь вы увидите первое использование команды sudo, которую мы будем часто использовать. Как использовалось выше, команда sudo позволяет пользователю выполнять команду как суперпользователь. Без использования команды sudo это не сработает, поскольку обычным пользователям не разрешено создавать других пользователей. Это функция безопасности, которая защищает систему от других пользователей, но также ограничивает размер ущерба, который пользователь может нанести по ошибке (хотя при использовании префикса команды sudo это не поможет от несчастных случаев).

Новый пользователь должен быть добавлен в определенные группы, чтобы иметь те же привилегии, что и у пользователя pi.
Вы можете добавить нового пользователя в группы с помощью команды usermod или напрямую отредактировать файл. Я сделал следующее, отредактировав файл, чтобы вы могли его видеть (это также, возможно, немного быстрее, поскольку вы можете вносить несколько изменений во время редактирования файла). Имейте в виду, что при редактировании таких файлов ошибка может привести к невозможности входа в систему.

Имеется два текстовых редактора командной строки.Редактор nano - самый простой для новых пользователей (именно об этом я и говорил ниже), но я рекомендую изучить текстовый редактор vi, поскольку это полезный инструмент, который устанавливается во всех системах Linux. Если вы знакомы с vi, замените nano на vi до конца этого руководства.

sudo nano / etc / group
Пройдите добавление файла, user1 до конца всех групп, в которых находится pi.
например,
adm: x: 4: pi, user1

Используйте CTRL-O для сохранения и CTRL-X для выхода после редактирования файла.

Самым важным является запись администратора, поскольку без нее пользователь не сможет запускать sudo и, следовательно, выполнять какое-либо системное администрирование. Конечно, если вы хотите добавить другого пользователя и не хотите предоставлять ему права администратора, вам не нужно вносить какие-либо обновления в файл / etc / group.

тип

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

По умолчанию оболочкой для нового пользователя является оболочка Bourne.Оболочка bash - это улучшение, позволяющее пользователю использовать клавиши со стрелками в командной строке и автозаполнение.

Чтобы установить оболочку по умолчанию для новой учетной записи (при входе в систему под этой учетной записью), используйте:

чш-с / бин / баш

Теперь вы можете удалить имя пользователя pi, если оно больше не требуется.

юзердел пи

Это только начальные этапы повышения безопасности Pi. Есть и другие аспекты безопасности Linux, включая обеспечение применения соответствующих исправлений безопасности по мере их появления (например,apt-get update).

Настройка производительности операционной системы

Настройка производительности - это то, что вы обычно оставляете на потом, но в случае Raspberry Pi есть единственный вариант, который можно сделать для повышения производительности серверов. Настроив его здесь, мы можем позволить ему подхватить его при перезагрузке позже, избавив нас от необходимости перезагружать сервер.

Raspberry Pi имеет до 1 ГБ оперативной памяти. Однако эта оперативная память используется совместно графической и основной системной памятью.По умолчанию под графику отведено 64Мб. Это перебор, если вы не планируете запускать графический интерфейс (или редко), как в случае с сервером. Чтобы уменьшить объем памяти, доступной для графики, до 32 МБ, введите команду
sudo raspi-config и просмотрите параметр разделения памяти в расширенных параметрах.

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

Настройка сети

Следующим шагом будет присвоение Raspberry Pi статического IP-адреса.Это немного сложнее, так как это зависит от вашей собственной настройки и от того, какой у вас роутер, как этого добиться.

По умолчанию Raspberry Pi запрашивает динамический IP-адрес, который выдается вашим маршрутизатором по мере необходимости. Однако это может измениться в будущем, что затруднит подключение к веб-серверу. Вместо этого мы предоставляем ему адрес, который не меняется, например 192.168.1.4.
Обратите внимание, что этот адрес можно использовать в локальной сети, но не в Интернете - позже вы увидите, как обеспечить доступ через маршрутизатор / брандмауэр из Интернета.

Сначала выясните, какой DHCP-адрес был назначен с помощью команды ifconfig - см. Фрагмент ниже

  ...

eth0 Link encap: Ethernet HWaddr b8: 27: eb: 8a: 71: a0

          inet адрес: 192.168.1.110 Bcast: 192.168.1.255 Маска: 255.255.255.0

...  

Это говорит о том, что порт Ethernet 0 - имеет IP-адрес 192.168.1.110

Вам также нужно будет узнать, какой адрес у вашего маршрутизатора, используя команду маршрута

  $ маршрут

Таблица IP-маршрутизации ядра

Шлюз назначения Genmask Flags Metric Ref Use Iface

по умолчанию 192.168.1.1 0.0.0.0 UG 0 0 0 eth0

192.168.1.0 * 255.255.255.0 U 0 0 0 eth0  

Это показывает, что IP-адрес маршрутизатора (шлюз) - 192.168.1.1, и весь трафик отправляется через этот маршрутизатор.

На этом этапе вам также необходимо проверить, какой диапазон адресов выдается маршрутизатором для динамических (DHCP) запросов. Это зависит от конкретного маршрутизатора. В моем случае у меня есть беспроводной маршрутизатор Belkin, доступ к которому можно получить, указав в веб-браузере IP-адрес маршрутизатора 192.168.1.1

Настройки LAN показаны ниже:

В этом случае в локальной сети есть действующие адреса от 192.168.1.1 до 192.168.1.254. Маршрутизатор находится по адресу 192.168.1.1, и любые запросы DHCP будут иметь записи между 192.168.1.100 и 192.168.1.150 (при необходимости вы можете изменить диапазон адресов DHCP). Я использовал 192.168.1.4 для этого сервера.

Чтобы перейти на статический IP-адрес, вам следует заглянуть в файл /etc/dhcpcd.conf, который позволяет вам указать статическую адресацию.

  Судо нано /etc/dhcpcd.conf  

добавьте следующие записи в конец файла

  интерфейс eth0

сообщить 192.168.1.4

статические маршрутизаторы = 192.168.1.1

статический domain_search =

статическое имя_домена_servers = 8.8.8.8 4.4.4.4  

Обратите внимание, что для записи domain_name_servers я использовал DNS-серверы Google, но вы можете предпочесть использовать свой локальный маршрутизатор или DNS-серверы ISP.

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

sudo перезагрузка

После входа в систему проверьте с помощью ifconfig, что у нас есть статический IP-адрес

  ...

eth0 Link encap: Ethernet HWaddr b8: 27: eb: 8a: 71: a0

          inet адрес: 192.168.1.4 Bcast: 192.168.1.255 Маска: 255.255.255.0

...  

Включение ssh

SSH (Secure Shell) - это сетевой протокол, который позволяет удаленно входить в систему и управлять компьютером через командную строку. Как следует из названия, он безопасен, поскольку шифрует обмен данными по сети (чтобы другие не могли видеть ваш пароль и т. Д.).У него также есть некоторые замечательные функции, такие как туннелирование, о которых мы не будем вдаваться.

Сервер ssh установлен в образе по умолчанию, но его необходимо включить, чтобы он запускался во время загрузки. Вы можете включить / отключить сервер ssh, используя команду sudo raspi-config .

Теперь вы можете подключиться к Raspberry pi удаленно (в той же сети) через ssh.
Если у вас есть другой компьютер с Linux в сети, то с терминала запустите

ssh 192.168.1.4
, который будет входить в систему с тем же именем пользователя.Если вы хотите использовать другое имя пользователя, поставьте перед IP-адресом префикс @.
например
ssh [email protected]

SSH также включен в MAC, поэтому вы можете использовать те же команды, что и выше.

Если вы хотите подключиться из Windows, есть несколько вариантов, но я предлагаю программное обеспечение с открытым исходным кодом Putty.

Обеспечение доступа к серверу в Интернете

Далее мы собираемся настроить маршрутизатор, чтобы разрешить ssh-вход и веб-трафик через его брандмауэр на Raspberry Pi.

Вы не забыли изменить пароль по умолчанию для имени пользователя pi, не так ли! Если вы еще не изменили пароль по умолчанию, сделайте это сейчас, иначе любой сможет войти в ваш Raspberry Pi.

Как домашний пользователь, IP-адрес, используемый в вашей локальной сети, является частным диапазоном адресов, который не будет работать через Интернет. Вместо этого ваш интернет-провайдер предоставит один динамический IP-адрес, который используется маршрутизатором. Чтобы трафик проходил из Интернета на ваш Raspberry Pi, необходимо, чтобы IP-адрес Pi выглядел так, как будто он исходит от маршрутизатора.Это процесс, называемый преобразованием сетевых адресов (NAT).

Порты, которые необходимо разрешить, - это порт 80 (http), а если вы хотите иметь возможность войти на компьютер из Интернета, то порт 22 (ssh).

Для этого вам необходимо ознакомиться с инструкциями на вашем роутере. В случае моего маршрутизатора Belkin это осуществляется через Брандмауэр> Настройки виртуальных серверов (см. Ниже), но в Netgear это Advanced> Security> IP Forwarding.

DNS

Последний этап - создание точки входа DNS на IP-адресе вашего маршрутизатора.Если у вас нет фиксированного IP-адреса от вашего провайдера, ваш IP-адрес может измениться. Я использую DuckDNS.

Установить веб-сервер apache

Веб-сервер Apache доступен для загрузки из репозиториев Debian. Это можно сделать с помощью инструментов apt.

Сначала вы обновили репозитории программного обеспечения? Если нет, запустите sudo apt update , чтобы убедиться, что он знает о любых новых доступных пакетах / версиях.

Установка lighttpd

Чтобы установить веб-сервер lighttpd, введите команду.
sudo apt install lighttpd

Это установит веб-сервер, а также загрузит любые другие необходимые пакеты (называемые зависимостями). Сервер будет автоматически запущен и настроен на запуск по умолчанию после перезагрузки.
[ok] Запускаем веб-сервер: lighttpd.

Установить базу данных Maria (необязательно)

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

В прошлом сервер базы данных Mysql использовался в большинстве дистрибутивов. Поскольку mysql теперь управляется Oracle, многие дистрибутивы (включая Debian, на котором основан Raspbian) теперь перешли на аналогичное программное обеспечение базы данных Maria. Maris можно удалить из репозиториев программного обеспечения с помощью:

sudo apt установить mariadb-server

Во время установки появляется запрос пароля.
Пароль предназначен для пользователя root mysql, и настоятельно рекомендуется выбрать подходящий пароль.

Установить PHP

В прошлом Perl часто использовался для веб-программирования, но с тех пор PHP приобрел популярность благодаря тому, что его было проще интегрировать в веб-страницы. Python также набирает популярность в веб-программировании. Для Python существует две разные версии: старый Python (который запускается, когда вы просто набираете python) и новый (рекомендуемый) Python версии 3 (запускается путем ввода python3).

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

Хорошим нововведением является то, что Perl (версия 5) и Python (версии 2.7 и 3) устанавливаются как часть операционной системы, поэтому вам просто нужно установить PHP.

Следующие команды установят PHP версии 5.

  sudo apt установить php5  

Если вы установили базу данных Maria, вам также следует выполнить следующую команду, чтобы установить библиотеки php mysql, чтобы позволить PHP получить доступ к базе данных Maria.Обратите внимание, что это не опечатка, база данных Maria основана на MySQL, поэтому вы также можете использовать библиотеки mysql для взаимодействия с Maria.
sudo apt-get install php5-mysql

Чтобы сервер мог обрабатывать сценарии php, необходимо включить модуль fastcgi-php, введя команду
sudo lighty-enable-mod fastcgi-php
Затем перезагрузите сервер, используя
sudo service lighttpd force-reload

Установить права доступа к веб-каталогу / var / www /

Полезно изменить права доступа к каталогу www, чтобы позволить пользователю обновлять веб-страницы без необходимости быть пользователем root.

Изменить владельца каталога и группу
sudo chown www-data: www-data / var / www
разрешить группе писать в каталог
sudo chmod 775 / var / www
Добавить пользователя pi в www -data группа
sudo usermod -a -G www-data pi

Вы должны выйти и снова войти в систему, чтобы получить права группы, или, если вы используете X, вы можете просто запустить новый терминал.

Тестирование сервера

После завершения настройки вы можете получить доступ к веб-странице, указав в браузере IP-адрес маршрутизатора или запись DNS.

Вы должны вернуть страницу, на которой будет указано, что она работает, но не загружено содержимое.

Чтобы проверить правильность работы веб-сервера и PHP, удалите файл /var/www/index.lighttpd.html и создайте файл /var/www/index.php с содержимым этой страницы.

Обратите внимание, что имя файла ссылки заканчивается на .txt, чтобы мой веб-сервер не запускал это, у вас должен быть файл с расширением .php, чтобы файл запускался как сценарий PHP.

Raspberry как выделенный сервер? Результат потрясающий

Raspberry - одна из величайших революций в современных вычислениях.С 2015 года было продано более 5 миллионов единиц. Большинство людей используют его как медиацентр, консоль-эмулятор видеоигр, музыкальный проигрыватель, рекламу на открытом воздухе… И теперь Copahost подумал: почему бы не использовать его как дешевый выделенный сервер?

Прежде всего, установка

Мы использовали один стандартный Raspberry Pi 3 B (49 евро) с 1 ГБ оперативной памяти и 64-разрядным четырехъядерным процессором ARM Cortex-A53 с тактовой частотой 1,2 ГГц. Хранилище представляет собой одну карту MicroSD Adata Class 10 объемом 32 ГБ (9 евро).

Этот Cortex-A53 в 10 раз быстрее оригинального процессора Raspberry 1.Это огромное улучшение.

Мы установили на него Raspbian Jessie.

Давайте перенесем выделенный сервер Raspberry «младший» в центр обработки данных и включим его на

Расширьте файловую систему с помощью raspi-config

По умолчанию Raspbian разбивает SD-карту только на небольшой раздел. Мы должны ввести raspi-config, чтобы расширить файловую систему, чтобы использовать все доступное пространство на SD-карте.

# raspi-config

А затем просто выберите «Expand Filesystem» и нажмите Enter.

Примечание: вам необходимо перезагрузить его, чтобы изменения вступили в силу.

После перезагрузки мы видим все пространство, смонтированное в /

Установка LAMP - Apache MySQL и PHP

Мы подготовили стандартную и популярную среду, похожую на выделенный сервер. Установлены и настроены Apache 2, PHP 5 и MySQL 5.6. Raspberry был настроен для запуска веб-сайта WordPress в качестве теста.

Прежде всего, давайте установим веб-сервер Apache

.

# sudo apt-get install apache2 -y

Теперь давайте установим PHP5 с Libapache

.

# sudo apt-get install php5 libapache2-mod-php5 -y

Теперь установим MySQL

.

# sudo apt-get install mysql-server php5-mysql -y

Давайте посмотрим, как работает

Тест

- выделенный сервер против Raspberry Pi 3 B

Мы провели стресс-тест веб-сервера, чтобы проверить его предел.Мы выполнили 50 одновременных и последовательных подключений к нему с помощью curl. Результат был потрясающим. Он был довольно стабилен с 35 подключениями и все еще отлично работал с 50 одновременными подключениями!

Мы создали скрипт под названием stress.sh с таким содержанием:

 макс. = 50
для ((i = 1; i <= $ max; ++ i))
делать
curl -s "http://rasptest.copahost.com?[0-500]" &
Выполнено
 

Конечно, мы знаем, что у Raspberry есть простой процессор, совместимый с его ценой.Итак, мы собрали старый выделенный сервер и протестировали их оба с помощью sysbench для Linux.

В Sysbench мы получили 40,23 секунды на E2180 по сравнению с 954,90 секунды на Raspberry Pi 3. Чем ниже, тем лучше. Производительность Raspberry Pi 3 может немного разочаровывать по сравнению со стандартным выделенным сервером.

Другими словами, этот процессор в 23 раза медленнее стандартного двухъядерного Pentium.

Заключение: можно ли запустить Raspberry Pi в качестве выделенного сервера на производстве?

ЦП Cortex-A5, присутствующий в Raspberry 3, в 10 раз быстрее, чем ЦП Raspberry Pi 2.Использование его для размещения простого сайта с простой базой данных MySQL работает отлично. Вы можете рассмотреть возможность использования выделенного сервера Raspberry для простых операций. Когда вы заполняете базу данных MySQL множеством результатов или устанавливаете некоторые плагины WordPress, производительность может немного снизиться.

Плюсы:
Очень низкое энергопотребление
Можно использовать как небольшой и простой веб-сервер и сервер базы данных
К нему можно подключить внешние жесткие диски USB
Очень низкая цена
Красивый стиль

Минусы:
Низкая производительность процессора
Низкая производительность ввода-вывода, так как это зависит от SD-карты
Отсутствует кнопка перезагрузки (для нее есть несколько модов)

Для тех, кому нужен дешевый, но мощный сервер, лучшим вариантом остается VPS-сервер.

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

Веб-сервер

Raspberry Pi с использованием Flask для управления GPIO

В этом проекте вы создадите автономный веб-сервер с Raspberry Pi, который может переключать два светодиода. Вы можете заменить эти светодиоды на любой выход (например, реле или транзистор).

Для создания веб-сервера вы будете использовать микрофреймворк Python под названием Flask.

Необходимые детали

Вот оборудование, необходимое для выполнения этого проекта:

Вы можете использовать предыдущие ссылки или перейти непосредственно на MakerAdvisor.com/tools, чтобы найти все детали для ваших проектов по лучшей цене!

Базовая настройка Raspberry Pi

Прежде чем продолжить чтение этого проекта, убедитесь, что на вашем Raspberry Pi установлена ​​операционная система Raspbian.

Вы можете прочитать мое Руководство по началу работы с Raspberry Pi, чтобы установить Raspbian и выполнить базовую настройку.

Установка Flask

Мы собираемся использовать микрофреймворк Python под названием Flask, чтобы превратить Raspberry Pi в веб-сервер.

Для установки Flask у вас должен быть установлен pip. Выполните следующие команды, чтобы обновить Pi и установить pip:

 [адрес электронной почты защищен] ~ $ sudo apt-get update
[электронная почта защищена] ~ $ sudo apt-get upgrade
[защита электронной почты] ~ $ sudo apt-get install python-pip python-flask 

Затем вы используете pip для установки Flask и его зависимостей:

  [защита электронной почты] ~ $ sudo pip install flask  

Схемы

Схемы для этого проекта довольно просты.Просто подключите два светодиода к контактам GPIO 23 и GPIO 24, как показано на рисунке ниже.

Создание сценария Python

Это основной сценарий нашего приложения. Он настраивает веб-сервер и фактически взаимодействует с GPIO Raspberry Pi.

Чтобы все было организовано, начните с создания новой папки:

  [электронная почта защищена] ~ веб-сервер $ mkdir
[электронная почта защищена] ~ $ cd веб-сервер
[электронная почта защищена]: ~ / веб-сервер $
  

Создайте новый файл с именем app.ру.

  [электронная почта защищена]: ~ / web-server $ nano app.py  

Скопируйте и вставьте следующий скрипт в Raspberry Pi (этот код основан на отличном примере Мэтта Ричардсона).

  ''

Адаптированный отрывок из книги Мэтта Ричардсона «Начало работы с Raspberry Pi»

Изменено Руи Сантосом
Полная информация о проекте: https://randomnerdtutorials.com

'' '

импортировать RPi.GPIO как GPIO
from flask import Flask, render_template, request
app = Flask (__ имя__)

GPIO.setmode (GPIO.BCM)

# Создайте словарь под названием pins для хранения номера, имени и состояния контакта:
pins = {
   23: {'имя': 'GPIO 23', 'состояние': GPIO.LOW},
   24: {'имя': 'GPIO 24', 'состояние': GPIO.LOW}
   }

# Установите каждый вывод как выход и сделайте его низким:
для штифта в штифтах:
   GPIO.setup (контакт, GPIO.OUT)
   GPIO.output (контакт, GPIO.LOW)

@ app.route ("/")
def main ():
   # Для каждого пина считайте состояние пина и сохраните его в словаре пинов:
   для штифта в штифтах:
      контакты [контакт] ['состояние'] = GPIO.input (контакт)
   # Поместите словарь контактов в словарь данных шаблона:
   templateData = {
      'контакты': контакты
      }
   # Передать данные шаблона в файл main.html и вернуть его пользователю
   вернуть render_template ('main.html', ** templateData)

# Функция ниже выполняется, когда кто-то запрашивает URL-адрес с пин-кодом и действием:
@ app.route ("/  / ")
def действие (changePin, действие):
   # Преобразуйте пин из URL в целое число:
   changePin = интервал (changePin)
   # Получить имя устройства для изменяемого пина:
   deviceName = контакты [changePin] ['name']
   # Если часть действия URL-адреса "включена", выполните код с отступом ниже:
   если действие == "включено":
      # Установите штифт высоко:
      GPIO.вывод (changePin, GPIO.HIGH)
      # Сохраняем статусное сообщение для передачи в шаблон:
      message = "Включено" + deviceName + "включено".
   если действие == "выключено":
      GPIO.output (changePin, GPIO.LOW)
      message = "Turned" + deviceName + "off".

   # Для каждого пина считайте состояние пина и сохраните его в словаре пинов:
   для штифта в штифтах:
      контакты [контакт] ['состояние'] = GPIO.input (контакт)

   # Вместе со словарем контактов поместите сообщение в словарь данных шаблона:
   templateData = {
      'контакты': контакты
   }

   return render_template ('main.html ', ** templateData)

если __name__ == "__main__":
   app.run (хост = '0.0.0.0', порт = 80, отладка = True)
  

Посмотреть исходный код

Создание файла HTML

Хранение HTML-тегов отдельно от вашего скрипта Python - вот способ организации вашего проекта.

Flask использует механизм шаблонов под названием Jinja2, который можно использовать для отправки динамических данных из сценария Python в файл HTML.

Создайте новую папку с именем templates:

 [электронная почта защищена]: шаблоны ~ / web-server $ mkdir
[электронная почта защищена]: ~ / web-server $ cd templates
[электронная почта защищена]: ~ / web-server / templates $ 90 100
 

Создайте новый файл с именем main.html.

 [электронная почта защищена]: ~ / web-server / templates $ nano main.html 

Скопируйте и вставьте следующий шаблон в свой Pi:

  

Веб-сервер RPi