59 lines
1.3 KiB
Docker
59 lines
1.3 KiB
Docker
# Multi-stage Dockerfile for CaddyProxyManager+ (Go backend + React frontend)
|
|
|
|
# ---- Frontend Builder ----
|
|
FROM node:20-alpine AS frontend-builder
|
|
WORKDIR /app/frontend
|
|
|
|
# Copy frontend package files
|
|
COPY frontend/package*.json ./
|
|
RUN npm ci
|
|
|
|
# Copy frontend source and build
|
|
COPY frontend/ ./
|
|
RUN npm run build
|
|
|
|
# ---- Backend Builder ----
|
|
FROM golang:1.22-alpine AS backend-builder
|
|
WORKDIR /app/backend
|
|
|
|
# Install build dependencies
|
|
RUN apk add --no-cache gcc musl-dev sqlite-dev
|
|
|
|
# Copy Go module files
|
|
COPY backend/go.mod backend/go.sum ./
|
|
RUN go mod download
|
|
|
|
# Copy backend source
|
|
COPY backend/ ./
|
|
|
|
# Build the Go binary
|
|
RUN CGO_ENABLED=1 GOOS=linux go build -a -installsuffix cgo -o api ./cmd/api
|
|
|
|
# ---- Final Runtime ----
|
|
FROM alpine:latest
|
|
WORKDIR /app
|
|
|
|
# Install runtime dependencies
|
|
RUN apk --no-cache add ca-certificates sqlite-libs
|
|
|
|
# Copy Go binary from backend builder
|
|
COPY --from=backend-builder /app/backend/api /app/api
|
|
|
|
# Copy frontend build from frontend builder
|
|
COPY --from=frontend-builder /app/frontend/dist /app/frontend/dist
|
|
|
|
# Set default environment variables
|
|
ENV CPM_ENV=production
|
|
ENV CPM_HTTP_PORT=8080
|
|
ENV CPM_DB_PATH=/app/data/cpm.db
|
|
ENV CPM_FRONTEND_DIR=/app/frontend/dist
|
|
|
|
# Create data directory
|
|
RUN mkdir -p /app/data
|
|
|
|
# Expose HTTP port
|
|
EXPOSE 8080
|
|
|
|
# Run the application
|
|
CMD ["/app/api"]
|