Как быстро запустить веб сервер?

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

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

Установка сервера

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

Windows

В Windows очень удобно пользоваться пакетным менеджером Chocolatey (choco), который содержит opensource пакеты. Все нижеследующие команды необходимо выполнять в Powershell, запущенном от администратора.

  1. Установим choco через Powershell
    Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1')))
  2. После установки проверим его запуск командой
    choco -v
  3. Установим Python через репозиторий:
    choco install python --pre -y

    или конкретную версию

    choco install python --version 3.11.6 -y

Linux

В Linux в зависимости от версии необходимо установить pip менеджер и из него поставить Python. Можно поставить и из репозитория, но там как правильно, доступны устаревшие версии (в universe на данный момент доступна версия 3.10).

В Ubuntu / Debian 

add-apt-repository -y ppa:deadsnakes/ppa
apt-get update
apt install python3.10

CentOS / RHEL

В CentOS 7 установлен Python 2.7.5 по умолчанию. Python 3.6.8 последний доступный в основном репозитории. Другие версии я не рассматриваю я данной статье.

Python 3.6.8 можно установить командой

yum update
yum install python3

Запуск сервера

Python по умолчанию запускает HTTP-сервер на порту 8000 и связывает его со всеми доступными сетевыми интерфейсами на вашем компьютере — к адресу IPv4 0.0.0.0 или адресу IPv6 ::.

python3 -m http.server
или
python -m http.server

Какую команду использовать зависит от операционной системы и версии Python. В Windows надо указывать «python». В Linux — «python3».

Во второй версии питона сервер запускался командой

python -m SimpleHTTPServer 8000

По умолчанию Python обслуживает файлы, расположенные в вашем текущем рабочем каталоге, где вы выполнили команду для запуска сервера. Итак, когда вы откроете корневой адрес (/) вашего сервера в веб-браузере, вы увидите все файлы и папки в соответствующем каталоге. Самый простой вариант на локальной машине это http://localhost:8000

Можно поменять как порт, например, на порт 80. Обратите внимание, что для запуска сервера на портах меньше 1024 необходимы привилегии администратора.

python3 -m http.server 80

Вы можете указать серверу связать его домашний адрес (/) с совершенно другим каталогом, указав необязательный параметр -d:

python3 -m http.server -d ~/Pictures/

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

Если у вас на компьютере несколько сетевых интерфейсов, например, если в Windows установлен WSL2 или другая виртуальная машина, то сервер можно прибить к одному из таких интерфейсов.

Например, у меня WSL2 висит на IP 172.17.240.1.

В таком случае я могу запустить:

python3 -m http.server -b 172.17.240.1 8080

Открытие сервера в интернет

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

Для первого условия у провайдера необходимо купить «белый» (публично маршрутизируемый) IP адрес, вместе с этим снимаются и ограничения по стандартным портам снаружи. А вот маршрутизацию внутри вашей сети сделать чуть сложнее. Для этого используется технология DST-NAT.

В большинстве домашних роутер проброс делается через меню публикации виртуального сервера (или аналогичное). В более сложных, типа Mikrotik, это можно сделать через меню IP -> Firewall -> NAT или командную строку (замените на свои IP):

/ip firewall nat add chain=dstnat action=dst-nat dst-address=10.20.30.40 dst-port=80 protocol=tcp to-addresses=192.168.1.100 to-ports=8080

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

Поддержку HTTPS можно добавить уже через код самого приложения на Python, указав в нем путь к имеющимся SSL сертификатам:

from http.server import HTTPServer, BaseHTTPRequestHandler
import ssl

httpd = HTTPServer(('localhost', 8443), BaseHTTPRequestHandler)

httpd.socket = ssl.wrap_socket (httpd.socket,
        keyfile="path/to/key.pem",
        certfile='path/to/cert.pem', server_side=True)
httpd.serve_forever()

Был ли наш пост полезен?

Нажмите на звезду, чтобы оценить мои труды!

Средний рейтинг: 0 / 5. Количество голосов: 0

Пока голосов нет. Проголосуй первым!

Мне жаль, что пост вам не помог 🙁

Позвольте мне исправиться.

Поделитесь, что можно улучшить?

Похожие посты