Files
IPAM/docker/README.md
Mathieu c1519bff2e docs: clarifie le déploiement Docker (host vs bridge)
- 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>
2026-05-15 14:33:24 +02:00

110 lines
3.6 KiB
Markdown

# IPAM — Déploiement Docker
Tout ce qu'il faut pour lancer l'application en une commande.
## Pré-requis
- Docker Engine ≥ 24
- Docker Compose **v2.24+** (le tag `!reset` utilisé par l'override bridge est requis)
- Linux natif **fortement conseillé** : `network_mode: host` ne fonctionne pas dans la VM de Docker Desktop (macOS / Windows). Sur ces plateformes, utilise l'override bridge — voir plus bas — mais la découverte LAN (ARP / mDNS / ping sweep) sera désactivée.
## Fichiers fournis
| Fichier | Rôle |
|---|---|
| `Dockerfile` | Image multi-stage (deps → build → runner) basée sur `node:20-alpine` |
| `entrypoint.sh` | Attente PostgreSQL, migrations Prisma, seed optionnel, lancement Next |
| `docker-compose.yml` | Compose principal — profils `sqlite` et `postgres`, mode host |
| `docker-compose.bridge.yml` | Override pour passer en mode bridge (sans découverte LAN) |
## Démarrage rapide — profil SQLite
```bash
# 1. Prépare la config
cp .env.docker.example .env
# (édite .env si besoin — surtout DISCOVERY_DEFAULT_CIDRS)
# 2. Build + run
docker compose -f docker/docker-compose.yml --profile sqlite up -d --build
# 3. Logs
docker compose -f docker/docker-compose.yml logs -f ipam
```
L'UI est disponible sur <http://localhost:3000>.
## Profil PostgreSQL
```bash
cp .env.docker.example .env
# Dans .env, bascule sur PostgreSQL :
# DATABASE_PROVIDER=postgresql
# DATABASE_URL="postgresql://ipam:ipam@127.0.0.1:5432/ipam?schema=public"
docker compose -f docker/docker-compose.yml --profile postgres up -d --build
```
Le container `ipam-postgres` expose le port `5432` sur l'hôte (utile pour `prisma studio` ou un client SQL externe).
## Bridge mode (sans découverte LAN)
Utile sur macOS / Windows ou pour un test rapide de l'UI :
```bash
docker compose \
-f docker/docker-compose.yml \
-f docker/docker-compose.bridge.yml \
--profile sqlite up -d --build
```
⚠️ En bridge, **ARP / mDNS / ping sweep ne fonctionneront pas** sur ton LAN — seule la saisie manuelle reste pleinement utilisable.
## Commandes utiles
```bash
# Arrêter
docker compose -f docker/docker-compose.yml down
# Tout supprimer (y compris les volumes — perte des données !)
docker compose -f docker/docker-compose.yml down -v
# Re-seeder manuellement
docker exec -it ipam npx tsx prisma/seed.ts
# Prisma studio (depuis l'hôte, profil postgres)
DATABASE_URL="postgresql://ipam:ipam@localhost:5432/ipam?schema=public" npx prisma studio
# Shell dans le container
docker exec -it ipam sh
```
## Variables d'environnement clés
Toutes les variables sont documentées dans [`.env.docker.example`](../.env.docker.example).
Les plus importantes pour Docker :
- `DATABASE_PROVIDER``sqlite` (défaut) ou `postgresql`
- `DATABASE_URL` — fichier `file:/app/data/ipam.db` ou DSN PostgreSQL
- `RUN_SEED``true` pour exécuter `prisma/seed.ts` au premier boot
- `DISCOVERY_DEFAULT_CIDRS` — plages scannées par défaut, à adapter à ton LAN
## Persistance
| Volume | Contenu |
|---|---|
| `ipam-data` | Base SQLite (`/app/data/ipam.db`) |
| `ipam-postgres` | Données PostgreSQL |
Les deux survivent à `docker compose down`, mais pas à `down -v`.
## Pourquoi `network_mode: host` ?
Pour qu'un container puisse :
- envoyer des paquets ICMP (ping sweep)
- lire la table ARP (`ip neigh`) du réseau local
- recevoir les annonces mDNS (port 5353 UDP multicast)
…il doit partager la pile réseau de l'hôte. Sans `host`, ces fonctionnalités sont aveugles au LAN.
Les `cap_add: [NET_RAW, NET_ADMIN]` permettent par ailleurs au binaire `ping` du container d'ouvrir un socket ICMP en non-root.