# ============================================================================= # Nakama with Custom Chess Modules # ============================================================================= # Two-stage build: # 1. Build TypeScript modules with Node.js # 2. Copy compiled JS to Nakama runtime # ============================================================================= # Stage 1: Build TypeScript modules FROM node:20-alpine AS builder # Install git for GitHub dependencies (nakama-runtime) and file for debugging RUN apk add --no-cache git file WORKDIR /app # Copy module files and install dependencies COPY modules/package*.json ./ # Use npm ci for reproducible builds from lock file RUN npm ci && \ echo "=== Installed versions ===" && \ npm ls --depth=0 # Copy source and build COPY modules/tsconfig.json ./ COPY modules/src ./src # Build with esbuild (output to build/index.js) RUN npm run build # Verify build output exists and show details RUN ls -la build/ && test -f build/index.js && \ echo "=== File info ===" && \ file build/index.js && \ echo "=== Line count ===" && \ wc -l build/index.js && \ echo "=== First 5 lines ===" && \ head -5 build/index.js && \ echo "=== Lines 1259-1265 ===" && \ sed -n '1259,1265p' build/index.js # Stage 2: Nakama runtime with modules FROM registry.heroiclabs.com/heroiclabs/nakama:3.35.1 # Copy compiled JavaScript modules # Nakama expects modules at /nakama/data/modules/ COPY --from=builder /app/build/index.js /nakama/data/modules/main.js # Copy config file (optional - can also be passed via CLI) COPY config.yml /nakama/data/config.yml