# ============================================ # Chat Switchboard - Unified Dockerfile # ============================================ # Stage 1: Build Go backend # Stage 2: Build standalone frontend # Stage 3: Production image (nginx + backend) # # nginx serves frontend on :80, proxies /api/ to Go on :8080 # ============================================ # ── Stage 1: Go backend build ──────────────── FROM golang:1.22-bookworm AS backend WORKDIR /app COPY server/go.mod server/go.sum* ./ COPY server/ . RUN go mod download && go mod tidy && go mod verify RUN CGO_ENABLED=0 go build -ldflags="-s -w" -o /bin/switchboard . # ── Stage 2: Frontend build ────────────────── FROM alpine:3.19 AS frontend WORKDIR /app RUN apk add --no-cache bash coreutils COPY build.sh ./ COPY src ./src RUN chmod +x build.sh && ./build.sh # ── Stage 3: Production ───────────────────── FROM nginx:1-alpine RUN apk add --no-cache bash # Copy Go backend COPY --from=backend /bin/switchboard /usr/local/bin/switchboard # Copy built frontend COPY --from=frontend /app/standalone /usr/share/nginx/html # Copy nginx config COPY nginx.conf /etc/nginx/conf.d/default.conf # Startup script: launches Go backend before nginx starts COPY scripts/docker-entrypoint.sh /docker-entrypoint.d/90-start-backend.sh RUN chmod +x /docker-entrypoint.d/90-start-backend.sh EXPOSE 80