# Dokumentation: phpIPAM Installation mit Docker und Traefik ## Übersicht Diese Anleitung beschreibt die schrittweise Einrichtung von phpIPAM in einem Docker-Setup mit: * separatem MariaDB-Container * phpIPAM Webinterface (Image: phpipam/phpipam-www:latest) * Kea DHCP (optional) * Traefik als Reverse Proxy mit HTTPS * persistenten Volumes für Daten und Konfiguration --- ## 1. Voraussetzungen * Zwei Server (Docker-Hosts): * Server 1: Traefik + Public DNS (z. B. ipam.example.com) * Server 2: phpIPAM, MariaDB, Kea-DHCP * Gemeinsames internes Netzwerk z. B. über WireGuard, Tailscale oder VPN (alternativ: exposed Ports mit Caution) --- ## 2. Projektstruktur /opt/docker/ddi-stack ```plaintext /opt/docker/ddi-stack/ ├── db/ # MariaDB-Daten ├── kea/ # KEA-Konfiguration ├── phpipam/ # phpIPAM-Volume (persistente Daten) ├── docker-compose.yml # Docker Stack Definition ``` ⸻ ## 3. docker-compose.yml ```yaml version: '3.8' services: db: image: mariadb:10.5 container_name: ddi-db restart: unless-stopped environment: MYSQL_ROOT_PASSWORD: ******** MYSQL_DATABASE: phpipam MYSQL_USER: ipam MYSQL_PASSWORD: ***** volumes: - ./db:/var/lib/mysql networks: - ddi-net phpipam: image: phpipam/phpipam-www:latest container_name: ddi-phpipam depends_on: - db environment: MYSQL_HOST: db MYSQL_USER: ipam MYSQL_PASS: ****** MYSQL_DBNAME: phpipam volumes: - ./phpipam:/phpipam labels: - "traefik.enable=true" - "traefik.http.routers.ipam.rule=Host(`ipam.example.com`)" - "traefik.http.routers.ipam.entrypoints=websecure" - "traefik.http.routers.ipam.tls.certresolver=le" - "traefik.http.services.ipam.loadbalancer.server.port=80" - "traefik.http.routers.ipam.middlewares=mw-redirect-to-https,mw-secure-headers" networks: - ddi-net kea-dhcp: image: jonasal/kea-dhcp4:2.6.3-alpine container_name: ddi-kea network_mode: host volumes: - ./kea:/kea command: ["kea-dhcp4", "-c", "/kea/kea-dhcp4.conf"] restart: unless-stopped depends_on: - phpipam networks: ddi-net: driver: bridge ``` --- ## 4. Persistenz phpIPAM ```yaml volumes: - ./phpipam:/phpipam ``` Wichtig: Wenn du das Volume beim ersten Start leer lässt, wird phpIPAM aus dem Image in /phpipam extrahiert. Wenn du jedoch eine Git-Version mountest, achte auf Versionskompatibilität (z. B. v1.5.x != 1.7.x). Wenn du mit einer eigenen Kopie arbeiten willst: ```bash cd /opt/docker/ddi-stack mkdir phpipam cd /tmp && git clone https://github.com/phpipam/phpipam.git cp -r phpipam/* /opt/docker/ddi-stack/phpipam ``` --- ## 5. Apache Alias Problem im Container Wenn du mit dem phpipam/phpipam-www arbeitest: * Der Container nutzt: Alias "/" "/phpipam/" * Wichtig: Die Daten müssen in /phpipam liegen * Prüfen mit: ```bash docker exec -it ddi-phpipam ls -lah /phpipam/index.php ``` --- ## 6. Traefik-Einbindung Labels im Container (siehe oben) Middlewares in ''traefik.yml'' oder Labels ```yaml middlewares: mw-redirect-to-https: redirectScheme: scheme: https mw-secure-headers: headers: frameDeny: true ``` Zertifikats-Resolver: ```yaml tls: certResolver: le ``` --- ## 7. Fehlerbehebung * **403 Forbidden**: Volume gemountet, aber index.php fehlt oder Pfad falsch * **404 style.css**: Volume gemountet mit inkompatibler Version (z. B. Git-Master vs. Container-Version) * **config.php fehlt**: cp config.dist.php config.php im Volume * **Bad Gateway**: Container läuft nicht oder falscher Port (muss 80 sein) * **jQuery error**: JS oder CSS wurde nicht geladen – oft wegen Pfadproblemen durch inkompatible Mounts --- ## 8. Weiterer Ablauf * Aufruf: https://ipam.example.com * “Neue Installation” auswählen * DB-Zugangsdaten entsprechend .env bzw. docker-compose.yml * Admin-Zugang anlegen * phpIPAM fertig einrichten --- ## 9. Backup-Hinweis * /phpipam (Konfiguration, HTML, js/css) * /var/lib/mysql (DB-Daten) * Optional: mysqldump und tar-basierte Sicherung per Cron