Если нужен собственный веб-сервер — например, чтобы хранить фотографии и видео и делиться ими, — можно арендовать виртуальный (VDS) или физический сервер в стойке провайдера. Но такой сервер не будет нашим на все сто. Сегодня мы настроим веб-сервер, которым больше никто не сможет управлять.
Это практическая инструкция о том, как запустить свой веб-сервер. Минимальные требования к железу такие:
- видеокарта, которая умеет выводить в 1024×768 пк;
- процессор с тактовой частотой от 2 ГГц;
- жёсткий диск с хотя бы 20 Гбайт свободного пространства;
- оперативная память от 4 ГБайт.
Операционная система может быть любой начиная с Windows 95 и Linux Mint. Мы используем Fedora Server.
Ещё веб-сервер можно поднять на сетевом хранилище или на Wi-Fi-роутере. Об этих способах расскажем в другой раз.
Устанавливаем софт
Для наших целей хватит Apache2 — кросс-платформенного веб-сервера с открытым исходным кодом. Это довольно старое ПО, но его по-прежнему можно использовать. Apache2 не подойдёт только в том случае, если сайт должен обрабатывать десятки тысяч запросов в секунду.
Чтобы установить Apache2, вводим в командной строке по очереди две команды — первая обновляет менеджер пакетов, вторая ставит всё, что нужно:
$ sudo apt update
$ sudo apt install lamp-server^ -y
Таким образом мы подключим сразу 5 пакетов: сам Apache2, язык сценариев PHP5, клиент PHP5-MySQL и реляционную базу данных MySQL-Server. Сценарии мы будем писать на Python, но PHP5 этому не помешает.
Чтобы проверить, что наш сервер работает, введём адрес 127.0.0.1 или localhost в адресную строку браузера:
Это стандартная заглушка Apache2, которая используется для проверки работы сервера. На ней буквально написано: «если вы видите страницу, значит, всё в порядке».
Ещё статус сервера можно проверить такой командой:
$ sudo systemctl status apache2
Настраиваем сеть
Теперь покажем наш веб-сервер другим пользователям. Пока сервер домашний, подключиться к нему могут только пользователи локальной сети — с тех устройств, которые подключены к нашему роутеру. Чтобы это исправить, нужно приобрести «белый», или публичный, IP у провайдера. Тогда наш веб-сервер станет доступен из любой точки, где есть интернет. В среднем белый IP стоит 200 рублей в месяц.
Белые IP-адреса не меняются после перезагрузки сервера, роутера или любого другого сетевого оборудования. Это значит, что по этому адресу можно обратиться из любой точки мира, где есть интернет, и зайти на нужный сервер. По этой причине белые адреса должны быть уникальными.
Серые адреса используются только в локальных сетях и не видны снаружи, а потому могут повторяться. Проще говоря, адрес 192.168.0.100 может быть у любого компьютера в локальной сети, а белые адреса всегда привязаны к конкретному серверу. Выделить каждому устройству белый IP невозможно — не хватит числовых комбинаций.
Чтобы решить проблему с нехваткой белых адресов, существуют серые IP-адреса в диапазоне 192.168.0.1–192.168.255.254. Например, если у нас несколько компьютеров, не обязательно присваивать белые адреса им всем. Роутер распределит между ними серые IP, а для доступа в интернет хватит одного белого. Так устроен NAT — механизм, который конвертирует внутренние адреса во внешние и наоборот.
Нашему веб-серверу тоже нужен собственный адрес, пусть и серый. По умолчанию роутер выдаст ему динамический внутренний IP (полученный относительно случайным образом), из-за чего мы не сможем подключиться к нему с другого устройства, потому что не знаем, какие цифры ввести в адресную строку.
Настроим статический DHCP — сетевой протокол, который позволяет устройствам автоматически получать IP-адреса. Динамический IP присваивается на определённый срок, например на 24 часа. Если не настроить DHCP, то через сутки придётся снова заходить в административную панель роутера, чтобы узнать актуальный адрес. Статическая настройка решает эту проблему навсегда.
Покажем, как это работает, на примере роутера ZTE H298A. У вас может быть любой другой роутер, но принцип настройки будет одинаковым, различие только в названиях пунктов меню.
Зайдём в панель администратора роутера по адресу 192.168.0.1 и найдём раздел «Локальная сеть»:
Листаем страницу вниз и находим пункт «Привязка DHCP»:
Чтобы настроить DHCP, нам нужно выяснить MAC-адрес нашего роутера. Сделать это можно при помощи команды ifconfig
в командной строке:
Теперь смотрим настройки роутера. Действительно, у нашего сервера IP-адрес 192.168.0.10, а MAC-адрес — a8:a1:59:1a:9a:33. IP выдан нам на 23 часа и 46 минут. Это значит, что через сутки адрес поменяется и мы уже не сможем по нему зайти на сервер с другого устройства:
Присвоим нашему серверу постоянный DHCP, чтобы адрес всегда был одним и тем же. Для этого скопируем значение MAC-адреса и вставим его в поле «MAC Адрес». В поле «IP Адрес» первые 3 ячейки заполняем числами 192, 168, 0. В последней ячейке можно указать любое число от 2 до 255. У нас получилось так:
Подтверждаем создание элемента и перезагружаем роутер. Ждём пару минут, пока он загрузится снова, и опять заходим в настройки локальной сети:
Замечаем статус Infinity. Это значит, что адрес 192.168.0.200 бессрочно закреплён за нашим сервером. Теперь мы точно знаем, что он не поменяется. Давайте протестируем наши настройки.
Попробуем зайти с телефона:
Проверим доступность сервера с другого компьютера командой ping
и зайдём с браузера:
Всё работает. Другие устройства, подключённые к Wi-Fi, видят наш сервер. Это значит, что план-минимум мы выполнили: настроили софт и подняли локальный сервер.
Что дальше
Пока что на нашем сервере висит дефолтная заглушка. В следующий раз мы попробуем вместо неё запустить Python-скрипт и снова посмотрим, как это будет выглядеть на других девайсах. Подпишитесь, чтобы не пропустить :-)