Kenny4123 commited on
Commit
1de3bb6
·
verified ·
1 Parent(s): a501c8b

Upload 2 files

Browse files
Files changed (2) hide show
  1. Dockerfile +45 -72
  2. kentro_src.zip +3 -0
Dockerfile CHANGED
@@ -1,86 +1,59 @@
1
- # ─────────────────────────────────────────────────────────────────────────────
2
- # Kentro – HuggingFace Zip Deploy
3
- # Upload ONLY this Dockerfile + kentro_upload.zip to your HF Space root.
4
- #
5
- # REDIS SETUP (free, takes 2 minutes):
6
- # 1. Go to https://upstash.com create free Redis DB
7
- # 2. Copy the "Redis URL" (starts with rediss://)
8
- # 3. In your HF Space → Settings → Repository secrets
9
- # Add secret: REDIS_URL = rediss://...your url...
10
- # Without Redis the app still works — AI moves use direct callback instead.
11
- # ─────────────────────────────────────────────────────────────────────────────
12
-
13
- # ── Stage 1: Build React frontend ─────────────────────────────────────────────
14
- FROM node:20-alpine AS frontend-builder
15
-
16
  RUN apk add --no-cache unzip
 
 
17
 
 
 
18
  WORKDIR /build
19
- COPY kentro_deploy.zip .
20
- RUN unzip -q kentro_deploy.zip && rm -f kentro_deploy.zip
21
-
22
- WORKDIR /build/frontend
23
- RUN npm install --prefer-offline --no-audit --no-fund
24
  RUN npm run build
25
 
26
- # ── Stage 2: Build Go backend ─────────────────────────────────────────────────
27
  FROM golang:1.22-alpine AS backend-builder
28
-
29
- RUN apk add --no-cache gcc musl-dev unzip
30
-
31
  WORKDIR /build
32
- COPY kentro_deploy.zip .
33
- RUN unzip -q kentro_deploy.zip && rm -f kentro_deploy.zip
34
-
35
- WORKDIR /build/backend
36
  RUN go mod download
37
- RUN go mod tidy
38
- RUN CGO_ENABLED=1 GOOS=linux go build \
39
- -ldflags="-s -w -extldflags '-static'" \
40
- -o kentro_server ./cmd/server
41
-
42
- # ── Stage 3: Runtime ───────────────────────────────────────────────────────────
43
- FROM python:3.11-slim AS runtime
44
-
45
- RUN apt-get update && apt-get install -y --no-install-recommends \
46
- libsqlite3-0 unzip wget \
47
- && rm -rf /var/lib/apt/lists/*
48
 
 
 
49
  WORKDIR /app
50
 
51
- # Copy compiled artifacts
52
- COPY --from=backend-builder /build/backend/kentro_server ./kentro_server
53
- COPY --from=frontend-builder /build/frontend/dist ./frontend/dist
54
-
55
- # Extract Python engine files from zip, then delete zip
56
- COPY kentro_deploy.zip /tmp/k.zip
57
- RUN unzip -q /tmp/k.zip -d /tmp/src \
58
- && cp /tmp/src/nigerian_draughts.py . \
59
- && cp /tmp/src/engine_bridge.py . \
60
- && cp /tmp/src/kivy_stub.py . \
61
- && cp /tmp/src/scan_nigerian . \
62
- && cp -r /tmp/src/data . \
63
- && rm -rf /tmp/k.zip /tmp/src
64
-
65
- RUN chmod +x ./scan_nigerian ./kentro_server
66
-
67
- # Data directory for SQLite (persisted across restarts on HF Spaces)
68
- RUN mkdir -p /data && chmod 777 /data
69
-
70
- RUN useradd -u 1000 -m kentro && chown -R kentro:kentro /app /data
71
- USER 1000
72
-
73
- ENV PORT=7860 \
74
- DB_PATH=/data/kentro.db \
75
- STATIC_DIR=/app/frontend/dist \
76
- PYTHONUNBUFFERED=1 \
77
- PYTHONDONTWRITEBYTECODE=1
78
- # REDIS_URL is injected at runtime from HF Space secret — never hardcoded here.
79
- # If not set, the app runs fine in single-node mode (AI moves via direct callback).
80
-
81
  EXPOSE 7860
82
 
83
- HEALTHCHECK --interval=30s --timeout=5s --start-period=15s --retries=3 \
84
- CMD wget -qO- http://localhost:7860/health || exit 1
85
 
86
- CMD ["./kentro_server"]
 
1
+ # ═══════════════════════════════════════════════════════
2
+ # Kentro – Nigerian Draughts Platform
3
+ # Multi-stage build: unzip src build frontend build backend runtime
4
+ # ═══════════════════════════════════════════════════════
5
+
6
+ # ── Stage 1: Unpack source ────────────────────────────────────────────────────
7
+ FROM alpine:3.19 AS unpacker
8
+ WORKDIR /src
 
 
 
 
 
 
 
9
  RUN apk add --no-cache unzip
10
+ COPY kentro_src.zip .
11
+ RUN unzip kentro_src.zip && rm kentro_src.zip
12
 
13
+ # ── Stage 2: Build React frontend ─────────────────────────────────────────────
14
+ FROM node:20-alpine AS frontend-builder
15
  WORKDIR /build
16
+ COPY --from=unpacker /src/frontend/package*.json ./
17
+ RUN npm ci --silent
18
+ COPY --from=unpacker /src/frontend/ .
 
 
19
  RUN npm run build
20
 
21
+ # ── Stage 3: Build Go backend ─────────────────────────────────────────────────
22
  FROM golang:1.22-alpine AS backend-builder
 
 
 
23
  WORKDIR /build
24
+ COPY --from=unpacker /src/backend/go.mod /src/backend/go.sum ./
 
 
 
25
  RUN go mod download
26
+ COPY --from=unpacker /src/backend/ .
27
+ RUN CGO_ENABLED=0 GOOS=linux go build -ldflags="-s -w" -o server ./cmd/server
 
 
 
 
 
 
 
 
 
28
 
29
+ # ── Stage 4: Runtime image ────────────────────────────────────────────────────
30
+ FROM python:3.11-slim
31
  WORKDIR /app
32
 
33
+ RUN apt-get update && apt-get install -y --no-install-recommends \
34
+ ca-certificates && rm -rf /var/lib/apt/lists/*
35
+
36
+ RUN pip install --no-cache-dir --quiet \
37
+ flask flask-socketio eventlet
38
+
39
+ COPY --from=backend-builder /build/server ./server
40
+ COPY --from=frontend-builder /build/dist ./frontend/dist
41
+ COPY --from=unpacker /src/engine_bridge.py .
42
+ COPY --from=unpacker /src/nigerian_draughts.py .
43
+ COPY --from=unpacker /src/kivy_stub.py .
44
+ COPY --from=unpacker /src/scan_nigerian ./scan_nigerian
45
+ COPY --from=unpacker /src/scan.ini .
46
+ COPY --from=unpacker /src/data/ ./data/
47
+
48
+ RUN mkdir -p /data && \
49
+ useradd -r -s /bin/false appuser && \
50
+ chown -R appuser:appuser /app
51
+ RUN chmod +x /app/scan_nigerian
52
+
53
+ USER appuser
 
 
 
 
 
 
 
 
 
54
  EXPOSE 7860
55
 
56
+ ENV PORT=7860 \
57
+ STATIC_DIR=/app/frontend/dist
58
 
59
+ CMD ["/app/server"]
kentro_src.zip ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:f37e0fc1a05e4bd18d2bf16e368bf7b223cb15ab37a62281c93faa448281b266
3
+ size 6382680