FROM golang:1.25-alpine AS builder
# Set the working directory inside the container
WORKDIR /app
# Copy dependency files and download modules (leverages Docker caching)
COPY go.mod go.sum ./
RUN go mod download
# Copy the rest of the application source code
COPY main.go main.go
# Build a statically linked binary (disabling CGO ensures it works in an empty scratch image)
RUN CGO_ENABLED=0 GOOS=linux go build -o /main .
# Stage 2: Final minimal runtime environment
FROM debian:bookworm-slim
RUN apt-get update && \
apt-get install -y ffmpeg && \
rm -rf /var/lib/apt/lists/*
WORKDIR /app
# Copy the pre-compiled binary from the builder stage
COPY --from=builder /main /app/main
COPY /frontend /app/frontend
COPY /yt-dlp_linux /app/yt-dlp_linux
# Command to execute when the container starts
ENTRYPOINT ["/app/main"]