Files
Charon/Dockerfile
T

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"]