Mathieu BOURBON db7ea77a63 chore(next): migre vers serverExternalPackages (Next 15)
La cle experimental.serverComponentsExternalPackages est depreciee depuis
Next 15 au profit de serverExternalPackages au niveau racine de la config.
Meme comportement, moins de warnings au build.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-18 16:40:52 +02:00
2026-04-18 16:24:44 +02:00
2026-04-18 16:24:44 +02:00
2026-04-18 16:24:44 +02:00
2026-04-18 16:24:44 +02:00
2026-04-18 16:24:44 +02:00
2026-04-18 16:24:44 +02:00
2026-04-18 16:24:44 +02:00
2026-04-18 16:24:44 +02:00
2026-04-18 16:24:44 +02:00
2026-04-18 16:24:44 +02:00
2026-04-18 16:24:44 +02:00
2026-04-18 16:24:44 +02:00

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

# Avec SQLite (simple, fichier local persisté dans un volume)
docker compose --profile sqlite -f docker/docker-compose.yml up -d

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

Le conteneur utilise network_mode: host pour permettre les scans ARP / mDNS / ping sur le LAN. À désactiver si non nécessaire.

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.

Description
IPAM
Readme 129 KiB
Languages
TypeScript 87.9%
Dockerfile 4.3%
CSS 3%
Shell 2.6%
JavaScript 2.2%