[Unit] Description=Stack ADS-B (readsb + tar1090 + adsb2pg) Requires=docker.service After=docker.service network-online.target Wants=network-online.target [Service] Type=oneshot RemainAfterExit=yes WorkingDirectory=/data/adsb # Laisse le bus USB s'énumérer avant de détecter les dongles ExecStartPre=/bin/sleep 15 # Recalcule .env.receivers (RX_SERIAL + COMPOSE_PROFILES) depuis le # matériel réellement présent. C'est ce qui rend le stack adaptatif : # 1, 2 ou 3 dongles démarrent les profiles rx1..rx3 correspondants, et un # dongle débranché ne laisse pas tourner un readsb à vide. ExecStartPre=/data/adsb/scripts/gen_env.sh # Les deux --env-file sont nécessaires : # .env → PG_PASSWORD (secret, non versionné) # .env.receivers → COMPOSE_PROFILES et RX_SERIAL (généré) # Dès qu'on passe --env-file, Compose cesse de charger .env automatiquement, # d'où l'obligation de le déclarer explicitement lui aussi. ExecStart=/usr/bin/docker compose --env-file /data/adsb/.env --env-file /data/adsb/.env.receivers up -d --remove-orphans ExecStop=/usr/bin/docker compose --env-file /data/adsb/.env --env-file /data/adsb/.env.receivers down TimeoutStartSec=180 [Install] WantedBy=multi-user.target