Files
IPAM/README.md
Mathieu c1519bff2e docs: clarifie le déploiement Docker (host vs bridge)
- README racine : section Docker réécrite avec distinction Linux
  natif (host mode, découverte LAN active) vs macOS/Windows/Docker
  Desktop (override bridge, découverte désactivée). Mention de la
  contrainte Compose v2.24+.
- docker/README.md : pré-requis précisés, limitation Docker Desktop
  documentée explicitement.

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

3.7 KiB

IPAM Homelab

Application web TypeScript / Next.js 15 pour gérer l'inventaire IP d'un homelab : hôtes, ports, applications, avec découverte réseau automatique (ping sweep, scan de ports, ARP, mDNS).

Stack

  • Next.js 15 (App Router) + React 18 + TypeScript
  • Prisma ORM avec support SQLite ou PostgreSQL (via variable d'env)
  • TailwindCSS + design system inspiré shadcn/ui
  • Zod pour la validation
  • Pino pour les logs
  • Docker / Docker Compose pour le déploiement

Démarrage rapide

# 1. Installer les dépendances
npm install

# 2. Copier la configuration d'exemple
cp .env.example .env

# 3. Générer le client Prisma et créer la DB
npm run db:generate
npm run db:migrate

# 4. (Optionnel) Charger des données d'exemple
npm run db:seed

# 5. Lancer en développement
npm run dev

Accès : http://localhost:3000

Passer de SQLite à PostgreSQL

Dans .env :

DATABASE_PROVIDER=postgresql
DATABASE_URL="postgresql://ipam:ipam@localhost:5432/ipam?schema=public"

Puis :

npm run db:generate
npm run db:migrate

Déploiement Docker

Détails complets dans docker/README.md.

Pré-requis

  • Docker Engine ≥ 24 + Docker Compose v2.24+ (!reset requis pour l'override bridge)
  • Linux natif recommandé en production (seul environnement où la découverte LAN fonctionne pleinement)

Configuration

cp .env.docker.example .env
# Édite .env pour ajuster DISCOVERY_DEFAULT_CIDRS à ton LAN (ex: 192.168.1.0/24)

Linux natif (production homelab — recommandé)

Mode host activé : la découverte ARP / mDNS / ping sweep voit l'ensemble du LAN.

# SQLite (autonome)
docker compose -f docker/docker-compose.yml --profile sqlite up -d --build

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

UI : http://<ip-de-la-machine>:3000

macOS / Windows / Docker Desktop (dev local uniquement)

network_mode: host ne fonctionne pas dans la VM Docker Desktop : on ajoute l'override bridge qui mappe explicitement 3000:3000. ⚠️ La découverte LAN (ARP / mDNS / ping) sera désactivée — seule la saisie manuelle reste fonctionnelle.

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

UI : http://localhost:3000

Commandes utiles

docker compose -f docker/docker-compose.yml logs -f ipam   # logs
docker compose -f docker/docker-compose.yml down           # stop
docker compose -f docker/docker-compose.yml down -v        # stop + suppression données

Découverte réseau

Scanner Description Requiert
ping Ping sweep ICMP sur un CIDR cap_net_raw ou bin ping
port Scan TCP connect sur une IP
arp Lit la table ARP locale (ip neigh / arp -a) Accès au LAN (host network)
mdns Écoute Bonjour / DNS-SD Multicast sur le LAN

Lancer un scan complet via CLI :

npm run discovery:run -- --kind full --cidr 192.168.1.0/24

Via l'API :

curl -X POST http://localhost:3000/api/discovery \
  -H 'Content-Type: application/json' \
  -d '{"kind":"full","cidr":"192.168.1.0/24"}'

Architecture

Voir ARCHITECTURE.md pour le détail des couches et la procédure d'ajout d'un nouveau module métier ou d'un nouveau scanner.