# Приёмный (ingest) стек + шлюз на vm-mts1. Лёгкий: без TimescaleDB/HA/Grafana. # Устройства (трекеры Navtelecom) шлют FLEX на :2000 → flex-server декодирует → # MQTT (mosquitto) → api (шлюз) → REST/WS для фронта. # # Раскладка каталога (собирает деплой-агент на ноде, /opt/monitor-ingest): # docker-compose.yml # mosquitto/mosquitto.conf # flex-server/ (содержимое navtelecom-flex-server: Dockerfile, flex_server/, requirements.txt) # api/ (содержимое servaki-monitor/server: Dockerfile, package.json, src/) services: mosquitto: image: eclipse-mosquitto:2 container_name: monitor-mosquitto restart: unless-stopped volumes: - ./mosquitto/mosquitto.conf:/mosquitto/config/mosquitto.conf:ro flex-server: build: ./flex-server container_name: monitor-flex restart: unless-stopped ports: - "2000:2000" # ← порт приёма устройств (указывается в трекере) environment: FLEX_LISTEN_PORT: 2000 MQTT_ENABLED: "true" MQTT_HOST: mosquitto MQTT_PORT: 1883 MQTT_BASE_TOPIC: navtelecom DB_ENABLED: "false" # без TimescaleDB — экономим диск LOG_LEVEL: INFO depends_on: - mosquitto api: build: ./api container_name: monitor-api restart: unless-stopped ports: - "127.0.0.1:4100:4100" # наружу только через Caddy (/api, /socket) env_file: - .env # JWT_SECRET + YANDEX_* (секреты, не в репозитории) environment: PORT: 4100 DATA_DIR: /data MQTT_URL: mqtt://mosquitto:1883 MQTT_BASE_TOPIC: navtelecom volumes: - ./data:/data # персист арендаторов/привязок устройств depends_on: - mosquitto