Dockerfile 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. # Backend-only Dockerfile
  2. FROM python:3.11-slim-bookworm
  3. # Faster, repeatable builds
  4. ENV PYTHONDONTWRITEBYTECODE=1 \
  5. PYTHONUNBUFFERED=1 \
  6. PIP_NO_CACHE_DIR=1 \
  7. PIP_DISABLE_PIP_VERSION_CHECK=1
  8. WORKDIR /app
  9. COPY requirements.txt ./
  10. RUN apt-get update && apt-get install -y --no-install-recommends \
  11. gcc g++ make libjpeg-dev zlib1g-dev git \
  12. # GPIO/NeoPixel support for DW LEDs
  13. python3-dev python3-pip \
  14. libgpiod2 libgpiod-dev \
  15. scons \
  16. systemd \
  17. # nmcli for WiFi management (talks to host NetworkManager via mounted dbus socket)
  18. network-manager \
  19. # Docker CLI for container self-restart/update
  20. ca-certificates curl gnupg \
  21. && pip install --upgrade pip \
  22. && pip install --no-cache-dir -r requirements.txt \
  23. # Install Docker CLI from official Docker repo
  24. && install -m 0755 -d /etc/apt/keyrings \
  25. && curl -fsSL https://download.docker.com/linux/debian/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg \
  26. && chmod a+r /etc/apt/keyrings/docker.gpg \
  27. && echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian bookworm stable" > /etc/apt/sources.list.d/docker.list \
  28. && apt-get update \
  29. && apt-get install -y --no-install-recommends docker-ce-cli docker-compose-plugin \
  30. && apt-get purge -y gcc g++ make scons \
  31. && rm -rf /var/lib/apt/lists/*
  32. # Copy backend code
  33. COPY . .
  34. # Expose backend API port
  35. EXPOSE 8080
  36. CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8080"]