Spaces:
Runtime error
Runtime error
| # ═══════════════════════════════════════════════════════════ | |
| # Kentro – Nigerian Draughts | Multi-stage Docker build | |
| # Stage 1: unzip source | |
| # Stage 2: build React frontend | |
| # Stage 3: compile Go backend | |
| # Stage 4: Python runtime (SCAN engine bridge) | |
| # ═══════════════════════════════════════════════════════════ | |
| # ── 1. Unpack ───────────────────────────────────────────── | |
| FROM alpine:3.19 AS unpacker | |
| WORKDIR /src | |
| RUN apk add --no-cache unzip | |
| COPY kentro_src.zip . | |
| RUN unzip -q kentro_src.zip && rm kentro_src.zip | |
| # ── 2. Frontend (React + Vite + Tailwind) ───────────────── | |
| FROM node:20-alpine AS frontend | |
| WORKDIR /app | |
| COPY --from=unpacker /src/frontend/package*.json ./ | |
| RUN npm install --silent | |
| COPY --from=unpacker /src/frontend/ . | |
| RUN npm run build | |
| # ── 3. Backend (Go) ─────────────────────────────────────── | |
| FROM golang:1.22-alpine AS backend | |
| WORKDIR /app | |
| RUN apk add --no-cache gcc musl-dev | |
| COPY --from=unpacker /src/backend/ . | |
| RUN go mod tidy && go mod download | |
| RUN CGO_ENABLED=1 GOOS=linux \ | |
| go build -ldflags="-s -w" -o server ./cmd/server | |
| # ── 4. Runtime ──────────────────────────────────────────── | |
| FROM python:3.11-slim | |
| WORKDIR /app | |
| RUN apt-get update && \ | |
| apt-get install -y --no-install-recommends ca-certificates libgcc-s1 && \ | |
| rm -rf /var/lib/apt/lists/* | |
| # Go binary + frontend assets | |
| COPY --from=backend /app/server ./server | |
| COPY --from=frontend /app/dist/ ./frontend/dist/ | |
| # Python engine bridge + board logic | |
| COPY --from=unpacker /src/engine_bridge.py . | |
| COPY --from=unpacker /src/nigerian_draughts.py . | |
| COPY --from=unpacker /src/kivy_stub.py . | |
| # SCAN engine binary + config + eval weights | |
| COPY --from=unpacker /src/scan_nigerian ./scan_nigerian | |
| COPY --from=unpacker /src/scan.ini . | |
| COPY --from=unpacker /src/data/ ./data/ | |
| # Permissions + non-root user | |
| RUN chmod +x ./scan_nigerian && \ | |
| useradd -r -u 1001 -s /bin/false appuser && \ | |
| chown -R appuser:appuser /app && \ | |
| mkdir -p /data && chown appuser:appuser /data | |
| USER appuser | |
| EXPOSE 7860 | |
| ENV PORT=7860 \ | |
| STATIC_DIR=/app/frontend/dist | |
| CMD ["./server"] | |