# DroneDetector v2 Отдельный проектный контур (без миграции legacy), в котором: - SDR-сканеры работают **на хосте** под `systemd`; - `server_to_master` и `NN_server` работают в **Docker Compose**; - весь runtime-конфиг хранится в **одном корневом `.env`**. ## 1. Быстрый старт ### Prerequisites - Ubuntu/Debian (apt) - NVIDIA GPU + установленный драйвер (`nvidia-smi` должен работать) - Интернет для установки пакетов и сборки Docker-образов - HackRF + GNU Radio стек (будет установлен через `install_all.sh`) ### Установка и запуск ```bash cd /home/sibscience-4/from_ssh/DroneDetector chmod +x install_all.sh ./install_all.sh ``` `install_all.sh`: 1. выполняет preflight; 2. ставит host non-python зависимости SDR; 3. настраивает Docker + NVIDIA runtime; 4. поднимает compose сервисы; 5. устанавливает/перезапускает `systemd` unit'ы; 6. проверяет статус, при ошибке печатает логи. ## 2. Матрица сервисов ### Host / systemd (SDR) - `dronedetector-sdr-433.service` -> `src/main_433.py` - `dronedetector-sdr-750.service` -> `src/main_750.py` - `dronedetector-sdr-868.service` -> `src/main_868.py` - `dronedetector-sdr-3300.service` -> `src/main_3300.py` - `dronedetector-sdr-4500.service` -> `src/main_4500.py` - `dronedetector-sdr-5200.service` -> `src/main_5200.py` - `dronedetector-sdr-5800.service` -> `src/main_5800.py` - `dronedetector-sdr-915.service` -> `orange_scripts/main_915.py` - `dronedetector-sdr-1200.service` -> `orange_scripts/main_1200.py` - `dronedetector-sdr-2400.service` -> `orange_scripts/main_2400.py` ### Docker Compose - `dronedetector-server-to-master` -> `src/server_to_master.py` - `dronedetector-nn-server` -> `NN_server/server.py` Compose unit: - `dronedetector-compose.service` ## 3. Конфигурация Единственный источник runtime-конфига: `./.env`. Все entrypoint'ы загружают root `.env` через `common/runtime.py` и валидируют обязательные переменные. При ошибке сервис падает сразу с понятным сообщением. ## 4. API (без изменения контрактов) - NN_server: `POST /receive_data` - server_to_master: `POST /process_data` Форматы payload/ответов сохранены в текущей логике сервисов. ## 5. Диагностика ### systemd ```bash systemctl status dronedetector-sdr-*.service journalctl -u dronedetector-sdr-868.service -n 200 --no-pager systemctl status dronedetector-compose.service journalctl -u dronedetector-compose.service -n 200 --no-pager ``` ### docker compose ```bash docker compose -f deploy/docker/docker-compose.yml ps docker compose -f deploy/docker/docker-compose.yml logs dronedetector-server-to-master docker compose -f deploy/docker/docker-compose.yml logs dronedetector-nn-server ``` ## 6. Host non-python dependencies Устанавливаются `install_all.sh`: - GNU Radio - gr-osmosdr - libhackrf/hackrf-tools (`hackrf` package) - libusb - udev-related runtime via distro packages SDR precheck перед каждым unit запуском: - наличие `hackrf_info` - наличие `gnuradio-config-info` - импорт `osmosdr` - детект устройства HackRF ## 7. install_all.sh: параметры и поведение Скрипт idempotent: повторный запуск допустим. Что делает: - preflight (OS, диск, `.env`, GPU) - host deps - `.venv-sdr` c `--system-site-packages` - Docker Engine (если отсутствует) - NVIDIA Container Toolkit - `docker compose up -d --build` - установка unit'ов в `/etc/systemd/system` - verify + авто-логи при ошибке ## 8. Типовые ошибки `.env` Примеры fail-fast сообщений: - `[src/server_to_master.py] invalid .env configuration: ...` - `[NN_server/server.py] no NN_* model entries configured` - `[orange_scripts/compose_send_data_915.py] invalid .env configuration: ...` Частые причины: - пустое обязательное поле (`SERVER_PORT`, `lochost`, `hack_868` и т.д.) - неверный тип (`SERVER_PORT=abc`) - неправильный serial HackRF (не найден среди `lsusb -v -d 1d50:6089 | grep iSerial`) ## 9. Ручная приемка 1. `./install_all.sh` выполняется до конца. 2. `docker compose -f deploy/docker/docker-compose.yml up -d` поднимает оба контейнера. 3. Все `dronedetector-sdr-*` имеют `active (running)`. 4. Тестовый POST в `NN_server /receive_data` доходит до `server_to_master /process_data`. 5. Контур работает минимум 1 минуту без падений. ## 10. Ручной запуск сервисов (без пересборки) ### Docker-серверы Запуск без пересборки: ```bash docker compose -f deploy/docker/docker-compose.yml up -d ``` Пересборка только при изменении кода/зависимостей контейнеров: ```bash docker compose -f deploy/docker/docker-compose.yml up -d --build ``` Остановка Docker-серверов: ```bash docker compose -f deploy/docker/docker-compose.yml down ``` ### Все SDR-сервисы (systemd) ```bash sudo systemctl status dronedetector-sdr-433.service sudo systemctl status dronedetector-sdr-750.service sudo systemctl status dronedetector-sdr-868.service sudo systemctl status dronedetector-sdr-3300.service sudo systemctl status dronedetector-sdr-4500.service sudo systemctl status dronedetector-sdr-5200.service sudo systemctl status dronedetector-sdr-5800.service sudo systemctl status dronedetector-sdr-915.service sudo systemctl status dronedetector-sdr-1200.service sudo systemctl status dronedetector-sdr-2400.service ``` ```bash sudo systemctl stop dronedetector-sdr-433.service sudo systemctl stop dronedetector-sdr-750.service sudo systemctl stop dronedetector-sdr-868.service sudo systemctl stop dronedetector-sdr-3300.service sudo systemctl stop dronedetector-sdr-4500.service sudo systemctl stop dronedetector-sdr-5200.service sudo systemctl stop dronedetector-sdr-5800.service sudo systemctl stop dronedetector-sdr-915.service sudo systemctl stop dronedetector-sdr-1200.service sudo systemctl stop dronedetector-sdr-2400.service ``` Проверка статуса всех SDR unitов: ```bash sudo systemctl status dronedetector-sdr-*.service --no-pager ``` ### Просмотр логов SDR ``` bash # 50 последних sudo journalctl -u dronedetector-sdr-5800.service -n 50 --no-pager # в реальном времени sudo journalctl -u dronedetector-sdr-5800.service -f # c последней перезагрузки сервиса since="$(systemctl show -p ActiveEnterTimestamp --value dronedetector-sdr-5800.service)" sudo journalctl -u dronedetector-sdr-5800.service --since "$since" --no-pager ``` ### Просмотр логов от server-to-master ``` bash docker compose -f deploy/docker/docker-compose.yml logs --timestamps dronedetector-server-to-master | tail -n 50 ``` есть щас проблема с отладкой т.к. слабый сигнал быстро отравляет трешхолд