# IPAM — Déploiement Docker Tout ce qu'il faut pour lancer l'application en une commande. ## Pré-requis - Docker Engine ≥ 24 - Docker Compose v2 (`docker compose` et non `docker-compose`) - Linux conseillé (le mode `network_mode: host` n'est pas pleinement supporté sur Docker Desktop macOS/Windows ; voir la section *Bridge mode* plus bas) ## 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.