# ── Étape 1 : Build du binaire Go ────────────────────────────────────────── # Build context = core/backend/ (context: ./backend dans docker-compose.yml) # ARG MODULES : IDs des modules à compiler, séparés par des virgules (ex: "viewLogs,viewServices") FROM golang:1.26-alpine AS builder RUN apk add --no-cache git ca-certificates ARG MODULES="" ENV MODULES=${MODULES} WORKDIR /workspace/core/backend # Copier les sources du CORE (build context = backend/) COPY go.mod go.sum ./ COPY . . # Cloner les modules demandés et les ajouter au go.mod. # Les replace directives utilisent ../../{module} ce qui correspond à /workspace/{module} ✓ RUN if [ -n "$MODULES" ]; then \ for mod in $(echo "$MODULES" | tr ',' ' '); do \ echo "→ Clonage du module $mod..." && \ git clone "https://git.geronzi.fr/proxmoxPanel/$mod" "/workspace/$mod" && \ printf "\nrequire git.geronzi.fr/proxmoxPanel/$mod v0.0.0\n" >> go.mod && \ printf "\nreplace git.geronzi.fr/proxmoxPanel/$mod => ../../$mod\n" >> go.mod; \ done; \ fi # Générer registered_modules.go avec les imports et appels RegisterModule corrects RUN go run ./cmd/gen-modules # Résoudre et télécharger toutes les dépendances (modules inclus) RUN go mod tidy && go mod download # 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 RUN apk add --no-cache ca-certificates tzdata # Utilisateur non-root pour la sécurité RUN addgroup -g 1001 pxp && adduser -u 1001 -G pxp -s /bin/sh -D pxp WORKDIR /app COPY --from=builder /bin/proxmoxpanel /app/proxmoxpanel RUN mkdir -p /app/data && chown -R pxp:pxp /app USER pxp EXPOSE 3001 ENV DATA_DIR=/app/data \ LISTEN_ADDR=:3001 \ APP_ENV=production CMD ["/app/proxmoxpanel"]