- 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>
89 lines
3.3 KiB
YAML
89 lines
3.3 KiB
YAML
# ProxmoxPanel — Docker Compose
|
|
# Démarrage : docker-compose up --build
|
|
# Accès : http://localhost (port 80) ou https://panel.geronzi.fr via Traefik
|
|
|
|
services:
|
|
|
|
# ── Backend Go (API + WebSocket) ────────────────────────────────────────
|
|
backend:
|
|
build:
|
|
context: ./backend
|
|
dockerfile: Dockerfile
|
|
|
|
container_name: proxmoxpanel-backend
|
|
restart: unless-stopped
|
|
expose:
|
|
- "3001"
|
|
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:
|
|
- proxmoxpanel-net
|
|
# Limite de ressources recommandées
|
|
deploy:
|
|
resources:
|
|
limits:
|
|
memory: 256M
|
|
cpus: "1.0"
|
|
healthcheck:
|
|
test: ["CMD", "wget", "-qO-", "http://localhost:3001/api/health"]
|
|
interval: 30s
|
|
timeout: 5s
|
|
retries: 3
|
|
start_period: 10s
|
|
|
|
# ── Frontend Vue 3 (Nginx + assets statiques) ───────────────────────────
|
|
frontend:
|
|
build:
|
|
context: ./frontend
|
|
dockerfile: Dockerfile
|
|
container_name: proxmoxpanel-frontend
|
|
restart: unless-stopped
|
|
ports:
|
|
# En développement local : http://localhost:80
|
|
# En production : Traefik se charge du port 443 → ce port est juste pour accès direct
|
|
- "80:80"
|
|
depends_on:
|
|
backend:
|
|
condition: service_healthy
|
|
networks:
|
|
- proxmoxpanel-net
|
|
deploy:
|
|
resources:
|
|
limits:
|
|
memory: 64M
|
|
cpus: "0.5"
|
|
|
|
# ── Volumes ────────────────────────────────────────────────────────────────
|
|
volumes:
|
|
# Données persistantes : SQLite + clés cryptographiques
|
|
# NE PAS supprimer ce volume sans sauvegarder panel.db au préalable
|
|
panel-data:
|
|
name: proxmoxpanel-data
|
|
|
|
# ── Réseaux ────────────────────────────────────────────────────────────────
|
|
networks:
|
|
proxmoxpanel-net:
|
|
name: proxmoxpanel-net
|
|
driver: bridge
|