2afb2e3bd2181733e045a1b0ba24fd50abe1b3a3
Sans binaryTargets explicites, Prisma ne génère l'engine que pour la plateforme du builder, ce qui fait échouer le runtime sur les containers Alpine arm64 (Raspberry Pi, Apple Silicon en émulation). Ajout des cibles linux-musl-openssl-3.0.x et linux-musl-arm64-openssl-3.0.x en plus de "native". Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
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: hostpour 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
Languages
TypeScript
87.9%
Dockerfile
4.3%
CSS
3%
Shell
2.6%
JavaScript
2.2%