File size: 2,688 Bytes
b8c3bdf
 
 
 
 
 
 
1de3bb6
b8c3bdf
1de3bb6
 
85bac43
1de3bb6
b8c3bdf
85bac43
b8c3bdf
 
 
1de3bb6
f5d1b6c
1de3bb6
85bac43
 
b8c3bdf
 
 
c821d11
1de3bb6
2fbf8ff
c821d11
b8c3bdf
85bac43
b8c3bdf
1de3bb6
85bac43
 
b8c3bdf
c821d11
b8c3bdf
 
 
 
 
1de3bb6
b8c3bdf
 
 
 
1de3bb6
b8c3bdf
 
 
 
1de3bb6
b8c3bdf
 
 
 
 
1de3bb6
 
85bac43
 
1de3bb6
 
85bac43
b8c3bdf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
# ═══════════════════════════════════════════════════════════
#  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"]