# 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 . ## 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.