Dockerfile 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  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. # Docker CLI for container self-restart/update
  18. ca-certificates curl gnupg \
  19. && pip install --upgrade pip \
  20. && pip install --no-cache-dir -r requirements.txt \
  21. # Install Docker CLI from official Docker repo
  22. && install -m 0755 -d /etc/apt/keyrings \
  23. && curl -fsSL https://download.docker.com/linux/debian/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg \
  24. && chmod a+r /etc/apt/keyrings/docker.gpg \
  25. && 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 \
  26. && apt-get update \
  27. && apt-get install -y --no-install-recommends docker-ce-cli docker-compose-plugin \
  28. && apt-get purge -y gcc g++ make scons \
  29. && rm -rf /var/lib/apt/lists/*
  30. # Copy backend code
  31. COPY . .
  32. # Expose backend API port
  33. EXPOSE 8080
  34. CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8080"]