Dockerfile 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. FROM python:3.14-slim
  2. COPY --from=ghcr.io/astral-sh/uv:latest /uv /bin/uv
  3. # Node.js 22 LTS
  4. RUN apt-get update \
  5. && apt-get install -y --no-install-recommends ca-certificates curl tini xvfb \
  6. && curl -fsSL https://deb.nodesource.com/setup_22.x | bash - \
  7. && apt-get install -y --no-install-recommends nodejs \
  8. && rm -rf /var/lib/apt/lists/*
  9. WORKDIR /app
  10. # Entrypoint & stdout logging
  11. COPY docker/entrypoint.sh /entrypoint.sh
  12. COPY docker/uvicorn_log.json /etc/uvicorn_log.json
  13. RUN chmod +x /entrypoint.sh
  14. # Python deps — cached until pyproject.toml / uv.lock change
  15. COPY pyproject.toml uv.lock ./
  16. # TypeScript deps — cached until package*.json changes
  17. COPY room_cal/service_api/typescript/package*.json \
  18. ./room_cal/service_api/typescript/
  19. RUN cd room_cal/service_api/typescript \
  20. && npm ci \
  21. && node_modules/.bin/playwright install-deps chromium
  22. # Vue/Vite deps — cached until package*.json changes
  23. COPY room_cal/vue/package*.json ./room_cal/vue/
  24. RUN cd room_cal/vue && npm ci
  25. # App source + install project
  26. COPY room_cal/ ./room_cal/
  27. RUN cd room_cal/vue && npm run build
  28. RUN mkdir /root/.local && ln -s /config /root/.local/room_cal \
  29. && uv sync --group api --group mcp --no-dev --frozen --no-install-project \
  30. && uv sync --group api --group mcp --no-dev --frozen
  31. # Exec
  32. ENTRYPOINT ["/usr/bin/tini", "--"]
  33. CMD ["/entrypoint.sh"]