# Build stage FROM golang:1.22-alpine AS builder # Install build dependencies RUN apk --no-cache add gcc musl-dev sqlite-dev git # Set working directory WORKDIR /app # Copy go mod files COPY go.mod go.sum ./ # Download dependencies RUN go mod download # Copy source code COPY . . # Build the application RUN CGO_ENABLED=1 GOOS=linux go build -a -ldflags '-linkmode external -extldflags "-static"' -o dealroom ./cmd/dealroom # Production stage FROM alpine:3.19 # Install runtime dependencies RUN apk --no-cache add ca-certificates tzdata # Create app user RUN addgroup -g 1001 -S dealroom && \ adduser -S dealroom -u 1001 -G dealroom # Create data directories RUN mkdir -p /data/db /data/files /data/backups && \ chown -R dealroom:dealroom /data # Copy binary from builder COPY --from=builder /app/dealroom /usr/local/bin/dealroom RUN chmod +x /usr/local/bin/dealroom # Switch to app user USER dealroom # Set working directory WORKDIR /data # Expose port EXPOSE 8080 # Health check HEALTHCHECK --interval=30s --timeout=10s --start-period=30s --retries=3 \ CMD wget --no-verbose --tries=1 --spider http://localhost:8080/health || exit 1 # Set environment variables ENV PORT=8080 \ DB_PATH=/data/db/dealroom.db \ FILES_PATH=/data/files \ BACKUP_PATH=/data/backups # Run the application CMD ["dealroom"]