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:
enzo 2026-03-22 16:54:21 +01:00
parent dcf3b937fa
commit a61f805cd0
8 changed files with 658 additions and 27 deletions

View file

@ -17,10 +17,25 @@ services:
volumes:
# Volume persistant pour SQLite, clés JWT, clé maître AES
- panel-data:/app/data
# Socket Docker — permet au backend de reconstruire son propre container lors d'un install de module
- /var/run/docker.sock:/var/run/docker.sock
group_add:
# GID du groupe docker sur l'hôte (docker group = accès au socket).
# Trouver avec : getent group docker | cut -d: -f3
# Surcharger avec : DOCKER_GID=xxx docker compose up -d
- "${DOCKER_GID:-999}"
environment:
- DATA_DIR=/app/data
- LISTEN_ADDR=:3001
- APP_ENV=production
# Identité de ce container (utilisé pour l'auto-rebuild des modules)
- CONTAINER_NAME=proxmoxpanel-backend
# Repo git du CORE (pour docker build --remote lors d'un install module)
- GIT_REPO=https://git.geronzi.fr/proxmoxPanel/core.git
# Branche git à utiliser pour le rebuild
- GIT_BRANCH=frontend/alpine
# Tag de l'image Docker construite
- IMAGE_TAG=proxmoxpanel-backend:latest
# Pas de réseau host — le container reste isolé
# Les connexions SSH sortantes vers le host Proxmox sont autorisées via le réseau Docker
networks: