# ========================================== # Chat Switchboard Unified Dockerfile # Option B: Multi-stage build # ========================================== # Stage 1: Backend build FROM golang:1.22-bookworm AS backend WORKDIR /app COPY server/go.mod ./ COPY server/go.sum ./ RUN go mod download COPY server/ . RUN CGO_ENABLED=1 go build -o /backend chat-switchboard-api # 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:alpine AS production # Copy backend binary COPY --from=backend /backend /usr/local/bin/ # Copy built frontend files COPY --from=frontend /app/standalone /usr/share/nginx/html # Copy custom nginx config for reverse proxy COPY nginx.conf /etc/nginx/conf.d/default.conf # Create startup script RUN echo '#!/bin/sh\n\ mkdir -p /app/data\n\ /usr/local/bin/backend serve &\n\ nginx -g "daemon off;"\n' > /start.sh && chmod +x /start.sh EXPOSE 80 CMD ["/start.sh"]