first commit

This commit is contained in:
Mathieu BOURBON
2026-04-18 16:24:44 +02:00
commit fbb6138c28
72 changed files with 3509 additions and 0 deletions

44
docker/Dockerfile Normal file
View File

@@ -0,0 +1,44 @@
# syntax=docker/dockerfile:1.6
# ---------- Stage 1 : deps ----------
FROM node:20-alpine AS deps
RUN apk add --no-cache libc6-compat
WORKDIR /app
COPY package.json package-lock.json* ./
RUN npm ci
# ---------- Stage 2 : build ----------
FROM node:20-alpine AS builder
WORKDIR /app
COPY --from=deps /app/node_modules ./node_modules
COPY . .
RUN npx prisma generate
RUN npm run build
# ---------- Stage 3 : runner ----------
FROM node:20-alpine AS runner
WORKDIR /app
ENV NODE_ENV=production
ENV PORT=3000
# Outils système utiles à la découverte réseau
# - iputils : ping ICMP (privileged / cap_net_raw)
# - iproute2 : ip neigh (ARP)
# - nmap : fallback scan ports (optionnel, décommente si besoin)
RUN apk add --no-cache iputils iproute2
RUN addgroup --system --gid 1001 nodejs
RUN adduser --system --uid 1001 nextjs
COPY --from=builder /app/public ./public
COPY --from=builder --chown=nextjs:nodejs /app/.next/standalone ./
COPY --from=builder --chown=nextjs:nodejs /app/.next/static ./.next/static
COPY --from=builder --chown=nextjs:nodejs /app/prisma ./prisma
COPY --from=builder --chown=nextjs:nodejs /app/node_modules/.prisma ./node_modules/.prisma
COPY --from=builder --chown=nextjs:nodejs /app/node_modules/@prisma ./node_modules/@prisma
USER nextjs
EXPOSE 3000
CMD ["node", "server.js"]

61
docker/docker-compose.yml Normal file
View File

@@ -0,0 +1,61 @@
# ---------------------------------------------------------------
# IPAM — Docker Compose
# ---------------------------------------------------------------
# Deux profils :
# - `sqlite` → ipam seul, base dans un volume
# - `postgres` → ipam + postgres
#
# Usage :
# docker compose --profile sqlite up -d
# docker compose --profile postgres up -d
# ---------------------------------------------------------------
services:
ipam:
build:
context: ..
dockerfile: docker/Dockerfile
container_name: ipam
restart: unless-stopped
# Network mode host : indispensable pour ARP / mDNS / ping sweep
# sur le réseau local. Commenter cette ligne si non nécessaire.
network_mode: host
environment:
NODE_ENV: production
PORT: 3000
env_file:
- ../.env
volumes:
- ipam-data:/app/data
# Capabilities requises pour le ping ICMP raw
cap_add:
- NET_RAW
- NET_ADMIN
profiles: [sqlite, postgres]
depends_on:
postgres:
condition: service_healthy
required: false
postgres:
image: postgres:16-alpine
container_name: ipam-postgres
restart: unless-stopped
environment:
POSTGRES_USER: ipam
POSTGRES_PASSWORD: ipam
POSTGRES_DB: ipam
volumes:
- ipam-postgres:/var/lib/postgresql/data
ports:
- '5432:5432'
healthcheck:
test: ['CMD-SHELL', 'pg_isready -U ipam']
interval: 5s
timeout: 3s
retries: 10
profiles: [postgres]
volumes:
ipam-data:
ipam-postgres: