- 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>
130 lines
3.7 KiB
Markdown
130 lines
3.7 KiB
Markdown
# 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://<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.
|
|
|
|
```bash
|
|
docker compose \
|
|
-f docker/docker-compose.yml \
|
|
-f docker/docker-compose.bridge.yml \
|
|
--profile sqlite up -d --build
|
|
```
|
|
|
|
UI : <http://localhost:3000>
|
|
|
|
### 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.
|