- 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>
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+ (
!resetrequis 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
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.