draught.com / Dockerfile
Kenny4123's picture
Update Dockerfile
2fbf8ff verified
# ═══════════════════════════════════════════════════════════
# 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"]