# Build wieloetapowy — bo `pyswisseph` to rozszerzenie C bez gotowych wheeli. # # Na PyPI (2.10.3.2) wheels kończą się na cp311 i obejmują wyłącznie i686/x86_64. # Dla Pythona 3.12 oraz dla arm64 pip ZAWSZE kompiluje ze źródeł, a `-slim` nie ma # kompilatora — dlatego jednoetapowy build tu padał. Kompilujemy w etapie builder, # a do obrazu finalnego wchodzi już tylko gotowy wheel (bez toolchaina). FROM python:3.12-slim AS builder RUN apt-get update \ && apt-get install -y --no-install-recommends build-essential \ && rm -rf /var/lib/apt/lists/* WORKDIR /build COPY requirements.txt . RUN pip wheel --no-cache-dir --wheel-dir /wheels -r requirements.txt FROM python:3.12-slim WORKDIR /app COPY --from=builder /wheels /wheels COPY requirements.txt . RUN pip install --no-cache-dir --no-index --find-links=/wheels -r requirements.txt \ && rm -rf /wheels COPY . . # Sanity check na etapie budowania: brak działającego swissepha ma wywalić build, # a nie dopiero pierwszy request. RUN python -c "import swisseph as swe; swe.set_ephe_path(None); print('swisseph OK', swe.version)" EXPOSE 8003 CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "8003"]