Dockerfile 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. # Build stage
  2. FROM golang:1.22.5-alpine AS builder
  3. # Build arguments
  4. ARG CORS_ALLOWED_ORIGIN
  5. ARG STRIPE_SECRET_KEY
  6. ARG STRIPE_API_KEY
  7. ARG STRIPE_WEBHOOK_SECRET
  8. # Set environment variables
  9. ENV CORS_ALLOWED_ORIGIN=${CORS_ALLOWED_ORIGIN}
  10. ENV STRIPE_SECRET_KEY=${STRIPE_SECRET_KEY}
  11. ENV STRIPE_API_KEY=${STRIPE_API_KEY}
  12. ENV STRIPE_WEBHOOK_SECRET=${STRIPE_WEBHOOK_SECRET}
  13. # Install build dependencies
  14. RUN apk add --no-cache git make gcc musl-dev sqlite-dev
  15. WORKDIR /app
  16. # Copy go mod files
  17. COPY go.mod go.sum ./
  18. RUN go mod download
  19. # Copy source code
  20. COPY . .
  21. # Build the application
  22. RUN CGO_ENABLED=1 GOOS=linux go build -o byom-onboard ./cmd/api/main.go
  23. # Final stage
  24. FROM alpine:3.19
  25. # Install runtime dependencies
  26. RUN apk add --no-cache ca-certificates tzdata sqlite sqlite-dev
  27. # Create non-root user
  28. RUN adduser -D -H -h /app appuser
  29. WORKDIR /app
  30. # Copy binary from builder
  31. COPY --from=builder /app/byom-onboard .
  32. COPY config.yaml .
  33. # Create data directory and set permissions
  34. RUN mkdir -p /app/data && \
  35. chown -R appuser:appuser /app
  36. USER appuser
  37. EXPOSE 8080
  38. ENV CONFIG_FILE=/app/config.yaml
  39. ENV CORS_ALLOWED_ORIGIN=${CORS_ALLOWED_ORIGIN}
  40. ENV STRIPE_SECRET_KEY=${STRIPE_SECRET_KEY}
  41. ENV STRIPE_API_KEY=${STRIPE_API_KEY}
  42. ENV STRIPE_WEBHOOK_SECRET=${STRIPE_WEBHOOK_SECRET}
  43. CMD ["./byom-onboard", "serve", "--config=/app/config.yaml"]