# ── Étape 1 : Build du binaire Go ────────────────────────────────────────── FROM golang:1.26-alpine AS builder # Dépendances de compilation (git pour les modules Go) RUN apk add --no-cache git WORKDIR /build # Copier les fichiers de dépendances en premier (optimise le cache Docker) COPY go.mod go.sum ./ RUN go mod download # Copier tout le code source COPY . . # Compiler le binaire de façon statique # -ldflags="-s -w" : supprime les infos de debug pour réduire la taille RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 \ go build -ldflags="-s -w" -o /bin/proxmoxpanel ./ # ── Étape 2 : Image finale minimale ──────────────────────────────────────── FROM alpine:3.20 # Certificats CA pour les requêtes HTTPS vers l'API Proxmox RUN apk add --no-cache ca-certificates tzdata # Créer un utilisateur non-root pour la sécurité RUN addgroup -g 1001 pxp && adduser -u 1001 -G pxp -s /bin/sh -D pxp WORKDIR /app # Copier le binaire compilé COPY --from=builder /bin/proxmoxpanel /app/proxmoxpanel # Créer les répertoires de données avec les bonnes permissions RUN mkdir -p /app/data && chown -R pxp:pxp /app USER pxp # Port d'écoute du backend EXPOSE 3001 # Variables d'environnement par défaut ENV DATA_DIR=/app/data \ LISTEN_ADDR=:3001 \ APP_ENV=production CMD ["/app/proxmoxpanel"]