# INTERCEPT - Signal Intelligence Platform # Docker container for running the web interface FROM python:3.11-slim LABEL maintainer="INTERCEPT Project" LABEL description="Signal Intelligence Platform for SDR monitoring" # Set working directory WORKDIR /app # Install system dependencies for SDR tools RUN apt-get update && apt-get install -y --no-install-recommends \ # RTL-SDR tools rtl-sdr \ librtlsdr-dev \ libusb-1.0-0-dev \ # 433MHz decoder rtl-433 \ # Pager decoder multimon-ng \ # Audio tools for Listening Post ffmpeg \ # SSTV decoder runtime libs libsndfile1 \ # SatDump runtime libs (weather satellite decoding) libpng16-16 \ libtiff6 \ libjemalloc2 \ libvolk2-bin \ libnng1 \ libzstd1 \ # WiFi tools (aircrack-ng suite) aircrack-ng \ iw \ wireless-tools \ # Bluetooth tools bluez \ bluetooth \ # GPS support gpsd-clients \ # Utilities # APRS direwolf \ # WiFi Extra hcxdumptool \ hcxtools \ # SDR Hardware & SoapySDR soapysdr-tools \ soapysdr-module-rtlsdr \ soapysdr-module-hackrf \ soapysdr-module-lms7 \ limesuite \ hackrf \ # Utilities curl \ procps \ && rm -rf /var/lib/apt/lists/* # Build dump1090-fa and acarsdec from source (packages not available in slim repos) RUN apt-get update && apt-get install -y --no-install-recommends \ build-essential \ git \ pkg-config \ cmake \ libncurses-dev \ libsndfile1-dev \ libgtk-3-dev \ libasound2-dev \ libsoapysdr-dev \ libhackrf-dev \ liblimesuite-dev \ libfftw3-dev \ libpng-dev \ libtiff-dev \ libjemalloc-dev \ libvolk2-dev \ libnng-dev \ libzstd-dev \ libsqlite3-dev \ libcurl4-openssl-dev \ zlib1g-dev \ libzmq3-dev \ # Build dump1090 && cd /tmp \ && git clone --depth 1 https://github.com/flightaware/dump1090.git \ && cd dump1090 \ && sed -i 's/-Werror//g' Makefile \ && make BLADERF=no RTLSDR=yes \ && cp dump1090 /usr/bin/dump1090-fa \ && ln -s /usr/bin/dump1090-fa /usr/bin/dump1090 \ && rm -rf /tmp/dump1090 \ # Build AIS-catcher && cd /tmp \ && git clone https://github.com/jvde-github/AIS-catcher.git \ && cd AIS-catcher \ && mkdir build && cd build \ && cmake .. \ && make \ && cp AIS-catcher /usr/bin/AIS-catcher \ && cd /tmp \ && rm -rf /tmp/AIS-catcher \ # Build readsb && cd /tmp \ && git clone --depth 1 https://github.com/wiedehopf/readsb.git \ && cd readsb \ && make BLADERF=no PLUTOSDR=no SOAPYSDR=yes \ && cp readsb /usr/bin/readsb \ && cd /tmp \ && rm -rf /tmp/readsb \ # Build rx_tools && cd /tmp \ && git clone https://github.com/rxseger/rx_tools.git \ && cd rx_tools \ && mkdir build && cd build \ && cmake .. \ && make \ && make install \ && cd /tmp \ && rm -rf /tmp/rx_tools \ # Build acarsdec && cd /tmp \ && git clone --depth 1 https://github.com/TLeconte/acarsdec.git \ && cd acarsdec \ && mkdir build && cd build \ && cmake .. -Drtl=ON \ && make \ && cp acarsdec /usr/bin/acarsdec \ && rm -rf /tmp/acarsdec \ # Build slowrx (SSTV decoder) && cd /tmp \ && git clone --depth 1 https://github.com/windytan/slowrx.git \ && cd slowrx \ && make \ && install -m 0755 slowrx /usr/local/bin/slowrx \ && rm -rf /tmp/slowrx \ # Build SatDump (weather satellite decoder - NOAA APT & Meteor LRPT) && cd /tmp \ && git clone --depth 1 https://github.com/SatDump/SatDump.git \ && cd SatDump \ && mkdir build && cd build \ && cmake -DCMAKE_BUILD_TYPE=Release -DBUILD_GUI=OFF .. \ && make -j$(nproc) \ && make install \ && ldconfig \ && cd /tmp \ && rm -rf /tmp/SatDump \ # Cleanup build tools to reduce image size && apt-get remove -y \ build-essential \ git \ pkg-config \ cmake \ libncurses-dev \ libsndfile1-dev \ libasound2-dev \ libpng-dev \ libtiff-dev \ libjemalloc-dev \ libvolk2-dev \ libnng-dev \ libzstd-dev \ libsoapysdr-dev \ libhackrf-dev \ liblimesuite-dev \ libsqlite3-dev \ libcurl4-openssl-dev \ zlib1g-dev \ libzmq3-dev \ && apt-get autoremove -y \ && rm -rf /var/lib/apt/lists/* # Copy requirements first for better caching COPY requirements.txt . RUN pip install --no-cache-dir -r requirements.txt # Copy application code COPY . . # Create data directory for persistence RUN mkdir -p /app/data /app/data/weather_sat # Expose web interface port EXPOSE 5050 # Environment variables with defaults ENV INTERCEPT_HOST=0.0.0.0 \ INTERCEPT_PORT=5050 \ INTERCEPT_LOG_LEVEL=INFO \ PYTHONUNBUFFERED=1 # Health check using the new endpoint HEALTHCHECK --interval=30s --timeout=10s --start-period=5s --retries=3 \ CMD curl -sf http://localhost:5050/health || exit 1 # Run the application CMD ["python", "intercept.py"]