Управление пакетами 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:HTTPProtocol:TCPHost IP:127.0.0.1Host Port:18000Guest 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.

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