Benutzer-Werkzeuge

Webseiten-Werkzeuge


it-themen:projekt:dokumentation:phpipam_mit_docker_und_traefik

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

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

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

snippet.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:

snippet.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:
snippet.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

snippet.yaml
middlewares:
  mw-redirect-to-https:
    redirectScheme:
      scheme: https
  mw-secure-headers:
    headers:
      frameDeny: true

Zertifikats-Resolver:

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

  • “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
it-themen/projekt/dokumentation/phpipam_mit_docker_und_traefik.txt · Zuletzt geändert: von lars