- 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>
110 lines
3.6 KiB
Markdown
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.
|