# Stage 1: Build Image (Frontend) FROM node:20-alpine AS frontend-builder WORKDIR /app/frontend COPY frontend-react/package*.json ./ RUN npm install COPY frontend-react/ . RUN npm run build # Stage 2: Build Image (Backend) FROM --platform=$BUILDPLATFORM golang:1.24-alpine AS backend-builder WORKDIR /app/backend ARG TARGETOS TARGETARCH COPY backend/go.mod backend/go.sum ./ RUN go mod download COPY backend/ . # Build static binary for Linux amd64 RUN CGO_ENABLED=0 GOOS=$TARGETOS GOARCH=$TARGETARCH go build -ldflags="-w -s" -o server cmd/server/main.go # Stage 3: Final Image FROM alpine:latest WORKDIR /app # Install runtime dependencies RUN apk add --no-cache sqlite ca-certificates tzdata python3 py3-pip RUN pip3 install --break-system-packages --ignore-installed yt-dlp || true # Copy backend binary COPY --from=backend-builder /app/backend/server . # Copy frontend build to the expected static directory COPY --from=frontend-builder /app/frontend/dist ./dist # Create data directory RUN mkdir -p data # Environment variables ENV PORT=8000 ENV DATABASE_URL=/app/data/streamflow.db # Expose port EXPOSE 8000 # Start server CMD ["./server"]