feat: système de rebuild Docker pour installation de modules has_backend
- internal/docker/client.go : client HTTP brut sur socket Unix - BuildImage() : build depuis repo git avec ARG MODULES - RebuildAndRestart() : rebuild async + remplacement de container - HandleReplacement() : le container successeur arrête et renomme l'ancien - Restart() : redémarrage simple (enable/disable sans rebuild) - cmd/gen-modules/main.go : générateur de registered_modules.go Lit MODULES env var, génère imports + appels RegisterModules() - registered_modules.go : version par défaut (aucun module) - main.go : appel RegisterModules(loader) + HandleReplacement() au démarrage - settings.go : inject DockerClient, has_backend dans moduleResp/moduleJSON, trigger rebuild à l'install, restart à l'enable/disable - migrations/006 : colonne has_backend sur table modules - Dockerfile : ARG MODULES, git clone modules, go run ./cmd/gen-modules - docker-compose.yml : socket Docker, group_add, env vars CONTAINER_NAME/GIT_REPO/GIT_BRANCH Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
parent
dcf3b937fa
commit
a61f805cd0
8 changed files with 658 additions and 27 deletions
|
|
@ -1,18 +1,36 @@
|
|||
# ── É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
|
||||
|
||||
# Dépendances de compilation (git pour les modules Go)
|
||||
RUN apk add --no-cache git
|
||||
RUN apk add --no-cache git ca-certificates
|
||||
|
||||
WORKDIR /build
|
||||
ARG MODULES=""
|
||||
ENV MODULES=${MODULES}
|
||||
|
||||
# Copier les fichiers de dépendances en premier (optimise le cache Docker)
|
||||
WORKDIR /workspace/core/backend
|
||||
|
||||
# Copier les sources du CORE (build context = backend/)
|
||||
COPY go.mod go.sum ./
|
||||
RUN go mod download
|
||||
|
||||
# Copier tout le code source
|
||||
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 \
|
||||
|
|
@ -21,26 +39,21 @@ RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 \
|
|||
# ── É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é
|
||||
# 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
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue