# ============================================================= # Stage 1: Build rtlamr from source (Go) # ============================================================= FROM golang:1.24-bookworm AS go-builder RUN go install github.com/bemasher/rtlamr@latest # ============================================================= # Stage 2: Build rtl-sdr tools from source (C) # ============================================================= FROM debian:bookworm-slim AS sdr-builder RUN apt-get update && apt-get install -y --no-install-recommends \ build-essential cmake pkg-config git ca-certificates libusb-1.0-0-dev \ && rm -rf /var/lib/apt/lists/* RUN git clone https://github.com/osmocom/rtl-sdr.git /tmp/rtl-sdr \ && cd /tmp/rtl-sdr \ && mkdir build && cd build \ && cmake .. -DINSTALL_UDEV_RULES=ON -DDETACH_KERNEL_DRIVER=ON \ && make -j"$(nproc)" \ && make install # ============================================================= # Stage 3: Python runtime # ============================================================= FROM python:3.13-slim-bookworm LABEL maintainer="HAMeter" LABEL description="SDR utility meter reader for Home Assistant" # Runtime dependency for rtl-sdr RUN apt-get update && apt-get install -y --no-install-recommends \ libusb-1.0-0 \ && rm -rf /var/lib/apt/lists/* # Copy compiled binaries from builder stages COPY --from=go-builder /go/bin/rtlamr /usr/local/bin/rtlamr COPY --from=sdr-builder /usr/local/bin/rtl_tcp /usr/local/bin/rtl_tcp COPY --from=sdr-builder /usr/local/lib/librtlsdr* /usr/local/lib/ RUN ldconfig # Install Python dependencies COPY requirements.txt /app/requirements.txt RUN pip install --no-cache-dir -r /app/requirements.txt # Copy application code COPY hameter/ /app/hameter/ WORKDIR /app # Web UI port EXPOSE 9090 # Persistent config storage VOLUME /data # Docker sends SIGTERM on stop; we handle it gracefully STOPSIGNAL SIGTERM ENTRYPOINT ["python", "-m", "hameter"]