Files
IPAM/docker/README.md
Mathieu 6c020e7ee3 feat(docker): finalise le déploiement compose (sqlite + postgres)
- Compose nettoyé en deux profils isolés (sqlite, postgres) avec
  healthcheck HTTP et network_mode host pour la découverte LAN.
- Override docker-compose.bridge.yml pour les environnements où
  host mode n'est pas disponible (macOS/Windows).
- Entrypoint tolérant : fallback prisma db push quand aucune
  migration n'existe encore.
- Dockerfile robuste sans package-lock.json (npm install fallback).
- .env.docker.example et docker/README.md pour un démarrage en
  une commande.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-15 14:03:46 +02:00

3.4 KiB

IPAM — Déploiement Docker

Tout ce qu'il faut pour lancer l'application en une commande.

Pré-requis

  • Docker Engine ≥ 24
  • Docker Compose v2 (docker compose et non docker-compose)
  • Linux conseillé (le mode network_mode: host n'est pas pleinement supporté sur Docker Desktop macOS/Windows ; voir la section Bridge mode plus bas)

Fichiers fournis

Fichier Rôle
Dockerfile Image multi-stage (deps → build → runner) basée sur node:20-alpine
entrypoint.sh Attente PostgreSQL, migrations Prisma, seed optionnel, lancement Next
docker-compose.yml Compose principal — profils sqlite et postgres, mode host
docker-compose.bridge.yml Override pour passer en mode bridge (sans découverte LAN)

Démarrage rapide — profil SQLite

# 1. Prépare la config
cp .env.docker.example .env
# (édite .env si besoin — surtout DISCOVERY_DEFAULT_CIDRS)

# 2. Build + run
docker compose -f docker/docker-compose.yml --profile sqlite up -d --build

# 3. Logs
docker compose -f docker/docker-compose.yml logs -f ipam

L'UI est disponible sur http://localhost:3000.

Profil PostgreSQL

cp .env.docker.example .env
# Dans .env, bascule sur PostgreSQL :
#   DATABASE_PROVIDER=postgresql
#   DATABASE_URL="postgresql://ipam:ipam@127.0.0.1:5432/ipam?schema=public"

docker compose -f docker/docker-compose.yml --profile postgres up -d --build

Le container ipam-postgres expose le port 5432 sur l'hôte (utile pour prisma studio ou un client SQL externe).

Bridge mode (sans découverte LAN)

Utile sur macOS / Windows ou pour un test rapide de l'UI :

docker compose \
  -f docker/docker-compose.yml \
  -f docker/docker-compose.bridge.yml \
  --profile sqlite up -d --build

⚠️ En bridge, ARP / mDNS / ping sweep ne fonctionneront pas sur ton LAN — seule la saisie manuelle reste pleinement utilisable.

Commandes utiles

# Arrêter
docker compose -f docker/docker-compose.yml down

# Tout supprimer (y compris les volumes — perte des données !)
docker compose -f docker/docker-compose.yml down -v

# Re-seeder manuellement
docker exec -it ipam npx tsx prisma/seed.ts

# Prisma studio (depuis l'hôte, profil postgres)
DATABASE_URL="postgresql://ipam:ipam@localhost:5432/ipam?schema=public" npx prisma studio

# Shell dans le container
docker exec -it ipam sh

Variables d'environnement clés

Toutes les variables sont documentées dans .env.docker.example. Les plus importantes pour Docker :

  • DATABASE_PROVIDERsqlite (défaut) ou postgresql
  • DATABASE_URL — fichier file:/app/data/ipam.db ou DSN PostgreSQL
  • RUN_SEEDtrue pour exécuter prisma/seed.ts au premier boot
  • DISCOVERY_DEFAULT_CIDRS — plages scannées par défaut, à adapter à ton LAN

Persistance

Volume Contenu
ipam-data Base SQLite (/app/data/ipam.db)
ipam-postgres Données PostgreSQL

Les deux survivent à docker compose down, mais pas à down -v.

Pourquoi network_mode: host ?

Pour qu'un container puisse :

  • envoyer des paquets ICMP (ping sweep)
  • lire la table ARP (ip neigh) du réseau local
  • recevoir les annonces mDNS (port 5353 UDP multicast)

…il doit partager la pile réseau de l'hôte. Sans host, ces fonctionnalités sont aveugles au LAN.

Les cap_add: [NET_RAW, NET_ADMIN] permettent par ailleurs au binaire ping du container d'ouvrir un socket ICMP en non-root.