# 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 ```bash # 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` : ```env DATABASE_PROVIDER=postgresql DATABASE_URL="postgresql://ipam:ipam@localhost:5432/ipam?schema=public" ``` Puis : ```bash npm run db:generate npm run db:migrate ``` ## Déploiement Docker > Détails complets dans [`docker/README.md`](./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 ```bash 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. ```bash # 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://: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. ```bash docker compose \ -f docker/docker-compose.yml \ -f docker/docker-compose.bridge.yml \ --profile sqlite up -d --build ``` UI : ### Commandes utiles ```bash 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 : ```bash npm run discovery:run -- --kind full --cidr 192.168.1.0/24 ``` Via l'API : ```bash 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`](./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.