LEMP mit Docker Compose: Nginx, PHP-FPM und MariaDB

Ein LEMP-Stack (Linux, Nginx, PHP-FPM, MariaDB) ist eine beliebte Kombination für performante Webanwendungen. Docker Compose ermöglicht die einfache Orchestrierung aller Komponenten in Containern, inklusive Netzwerke, Volumes und Konfigurationen. In diesem Tutorial lernen Sie, wie ein vollständiger LEMP-Stack mit Docker Compose aufgesetzt wird, inklusive Persistenz, Sicherheitsaspekten und Best Practices.

Grundstruktur eines LEMP-Stacks

Ein moderner LEMP-Stack besteht aus drei Hauptservices:

  • Nginx: Webserver und Reverse Proxy, leitet Anfragen an PHP-FPM weiter
  • PHP-FPM: Verarbeitung von PHP-Skripten
  • MariaDB: Datenbank für persistente Speicherung

Weitere Komponenten

  • Volumes für Datenbank und Applikationscode
  • Interne Docker-Netzwerke für sichere Kommunikation zwischen den Services
  • Optionale Secrets für sensible Daten wie Passwörter

Volumes für Persistenz

Um Datenverlust bei Container-Neustarts zu vermeiden, sollten Datenbanken und Upload-Verzeichnisse persistent gespeichert werden.

volumes:
  db_data:
  app_data:
  • db_data für MariaDB-Daten
  • app_data für Webanwendungen, z. B. PHP-Dateien und Logs
  • Volumes sind unabhängig von Container-Lebenszyklen

Netzwerke für interne Kommunikation

Separate Netzwerke sorgen für eine klare Trennung zwischen Frontend und Backend, erhöhen die Sicherheit und ermöglichen einfache Service-Kommunikation.

networks:
  frontend_net:
  backend_net:
  • Nginx und PHP-FPM im frontend_net
  • PHP-FPM und MariaDB im backend_net
  • Datenbank bleibt intern und ist nicht direkt von außen erreichbar

Beispiel: docker-compose.yml für LEMP

version: '3.8'

services:
nginx:
image: nginx:latest
ports:
- "80:80"
volumes:
- ./nginx/conf:/etc/nginx/conf.d
- app_data:/var/www/html
networks:
- frontend_net
depends_on:
- php

php:
image: php:8.2-fpm
volumes:
- app_data:/var/www/html
networks:
- frontend_net
- backend_net
depends_on:
- db

db:
image: mariadb:11
environment:
MYSQL_ROOT_PASSWORD_FILE: /run/secrets/db_root_password
MYSQL_DATABASE=lempdb
volumes:
- db_data:/var/lib/mysql
networks:
- backend_net
secrets:
- db_root_password

secrets:
db_root_password:
file: ./db_root_password.txt

volumes:
db_data:
app_data:

networks:
frontend_net:
backend_net:

Erklärungen zur Compose-Datei

  • Nginx: Port 80 auf Host gemappt, Konfiguration aus ./nginx/conf, fungiert als Reverse Proxy
  • PHP-FPM: Container verarbeitet PHP-Skripte, greift auf denselben Volume wie Nginx zu
  • MariaDB: Datenbank-Container, Root-Passwort über Secret, persistente Daten im Volume
  • Secrets: Sensible Daten wie Datenbankpasswort werden nicht in der Compose-Datei gespeichert
  • Netzwerke: Trennung von Frontend und Backend zur Erhöhung der Sicherheit

Start und Verwaltung des LEMP-Stacks

Der gesamte Stack wird mit einem Befehl gestartet:

docker-compose up -d

Zum Stoppen und Entfernen aller Container, Netzwerke und Volumes:

docker-compose down -v

Best Practices

  • Volumes für Datenbanken und Applikationen verwenden
  • Secrets für sensible Daten einsetzen
  • Separate Netzwerke für Frontend und Backend
  • Startreihenfolge über depends_on definieren
  • Nginx-Konfiguration über Versionierung im Volume pflegen
  • CI/CD-Pipelines für automatisierte Builds und Deployments einrichten
  • Regelmäßige Security-Updates der Images einplanen
  • Logs und Monitoring zentral erfassen

Praxisbeispiele

Starten des Stacks

docker-compose up -d

Logs überwachen

docker-compose logs -f nginx
docker-compose logs -f php
docker-compose logs -f db

Rollback auf vorherige App-Version

docker service update --image my_app:1.0 my_php_service

Zusammenfassung

Ein LEMP-Stack mit Nginx, PHP-FPM und MariaDB lässt sich effizient mit Docker Compose orchestrieren. Durch den Einsatz von Volumes für Persistenz, Secrets für sensible Daten und separaten Netzwerken wird der Stack sicher, wartbar und reproduzierbar. Best Practices wie Startabhängigkeiten, CI/CD-Integration und regelmäßige Updates sorgen dafür, dass Webanwendungen zuverlässig in Entwicklung, Test und Produktion betrieben werden können.

Konfiguriere Cisco Router & Switches und liefere ein Packet-Tracer-Lab/GNS3

Ich biete professionelle Unterstützung im Bereich Netzwerkkonfiguration und Network Automation für private Anforderungen, Studienprojekte, Lernlabore, kleine Unternehmen sowie technische Projekte. Ich unterstütze Sie bei der Konfiguration von Routern und Switches, der Erstellung praxisnaher Topologien in Cisco Packet Tracer, dem Aufbau und Troubleshooting von GNS3- und EVE-NG-Labs sowie bei der Automatisierung von Netzwerkaufgaben mit Netmiko, Paramiko, NAPALM und Ansible. Kontaktieren Sie mich jetzt – klicken Sie hier.

Meine Leistungen umfassen:

  • Professionelle Konfiguration von Routern und Switches

  • Einrichtung von VLANs, Trunks, Routing, DHCP, NAT, ACLs und weiteren Netzwerkfunktionen

  • Erstellung von Topologien und Simulationen in Cisco Packet Tracer

  • Aufbau, Analyse und Fehlerbehebung von Netzwerk-Labs in GNS3 und EVE-NG

  • Automatisierung von Netzwerkkonfigurationen mit Python, Netmiko, Paramiko, NAPALM und Ansible

  • Erstellung von Skripten für wiederkehrende Netzwerkaufgaben

  • Dokumentation der Konfigurationen und Bereitstellung nachvollziehbarer Lösungswege

  • Konfigurations-Backups, Optimierung bestehender Setups und technisches Troubleshooting

Benötigen Sie Unterstützung bei Ihrem Netzwerkprojekt, Ihrer Simulation oder Ihrer Network-Automation-Lösung? Kontaktieren Sie mich jetzt – klicken Sie hier.

Related Articles