Основы командной строки Linux и запуск сервисов

Управление пакетами apt и запуск Python HTTP-сервиса в venv

Содержание курса

3. Сетевой интерфейс 0.0.0.0 и проброс порта

Посмотрим на терминал после предыдущей команды: курсор замер на пустой строке, а привычное приглашение ввода student@devops-lab:~$ не появляется. Наша программа перешла в режим переднего плана (foreground) и заблокировала терминал — она непрерывно ожидает сетевых подключений.

По умолчанию наш скрипт слушает адрес 127.0.0.1. Это внутренний сетевой интерфейс самой виртуальной машины (loopback). Программа с такой настройкой принимает запросы только от соседних процессов внутри этой же Ubuntu. Снаружи, через адаптер VirtualBox, к ней не достучаться: пакеты от сетевой карты гостя будут отбрасываться.

Сначала остановим текущий процесс. Нажмите сочетание клавиш Ctrl+C. Терминал сразу вернёт приглашение ввода команд.

Чтобы сервер принимал соединения с любого доступного сетевого интерфейса виртуальной машины, его нужно привязать к специальному адресу 0.0.0.0. Запустим скрипт с явными флагами адреса и порта:

.venv/bin/python app.py --host 0.0.0.0 --port 8000

Терминал снова перешёл в режим ожидания. Теперь нужно связать гостевой порт с портом вашего основного компьютера (хоста).

Не закрывая окно виртуальной машины, откройте её параметры в окне VirtualBox: выберите виртуальную машину, нажмите Settings (Настроить) → вкладка Network (Сеть) → проверьте, что выбран Adapter 1 с типом NAT, и раскройте блок Advanced (Дополнительно). Нажмите кнопку Port Forwarding (Проброс портов). Добавьте новое правило кнопкой + со следующими полями:

  • Name: HTTP
  • Protocol: TCP
  • Host IP: 127.0.0.1
  • Host Port: 18000
  • Guest IP: оставьте поле пустым (для автоматического приёма по DHCP)
  • Guest Port: 8000

Нажмите OK в окне правил и затем OK в окне настроек машины.

Теперь проверим работу сервиса. Откройте браузер на основном компьютере (в Windows) и перейдите по адресу:

http://127.0.0.1:18000/health

Браузер покажет ответ:

{"status": "ok"}

Запрос от браузера пришёл на порт 18000 хоста, VirtualBox перенаправил его через NAT на виртуальный интерфейс Ubuntu к порту 8000, а процесс Python принял его благодаря привязке к 0.0.0.0.

Связка браузера Windows, правила NAT и Python app.py в venv
Запрос к Python-сервису через NAT

Вернитесь в окно терминала виртуальной машины и снова нажмите Ctrl+C. Процесс корректно завершит работу и освободит сетевой порт.

Начать заново?

Помощник начнёт новый диалог по этой задаче. Текущая переписка останется в истории до конца срока хранения.

О переписке

Можно приложить до трёх фото PNG, JPEG или WebP по 5 МБ.

Переписка и фото хранятся 90 дней после последнего принятого сообщения. Преподаватель получит доступ к диалогу, когда вы попросите его помочь.

Проверка решения остаётся отдельным действием.