Dies ist eine alte Version des Dokuments!
Projekt: Fehlerhafter Webserver
Überblick
Ein realistisches Troubleshooting-Projekt für Azubis im 1. Lehrjahr. Aufgabe: Einen defekten Apache httpd auf RHEL reparieren – nicht nur „irgendwie zum Laufen bringen“, sondern eine nachhaltige, produktionsreife Lösung entwickeln.
Dieses Projekt verbindet Diagnose (Fehler finden), Betrieb (systemd, Firewall, Logging) und Wartbarkeit (nachhaltige Konfiguration, Dokumentation).
Lernziele
Nach diesem Projekt kannst du:
- Diagnosemethodik: Systematisch von außen nach innen arbeiten (Netzwerk → Dienst → Konfiguration → Dateisystem)
- Apache httpd verstehen: HTTP-Basics, VirtualHost-Konfiguration, Fehlerdiagnose
- systemd beherrschen: Dienste starten/stoppen/enablen, Logs lesen, Status prüfen
- Firewall-Regeln setzen: firewalld konfigurieren, persistent machen (nicht nur provisorisch)
- Nachhaltige Lösungen: Unterschied zwischen Quick Fix und echten Lösung verstehen
- Dokumentation: Fehler und Lösungsweg nachvollziehbar festhalten
- Betriebsbewusstsein: Monitoring, Health-Checks und operative Verantwortung verstehen
Voraussetzungen
- Grundkenntnisse in Linux-Befehlen (ls, cd, cat, grep, sudo)
- Verständnis für Dateirechte und Eigentümer
- Zugang zu einer RHEL 8/9 VM mit Root-Privilegien
- Bereitschaft, Fehler selbstständig zu diagnostizieren (gestufte Hinweise vom Ausbilder, aber kein „hier ist die Lösung“)
Projektstruktur
Das Projekt besteht aus drei Schwierigkeitsstufen (easy, medium, hard) und etwa 1–3 Stunden Bearbeitungszeit je Level.
| Level | Fehler | Dauer | Komplexität |
|---|---|---|---|
| easy | F7 (fehlende index.html) | 30–45 min | Anfänger – reine Datei-Problem |
| medium | F1 (Syntax), F8 (Pfad), F6 (enabled) | 60–90 min | Fortgeschritten – Config-Fehler verdecken sich gegenseitig |
| hard | F1, F2 (Port), F5 (Firewall), F6, F7, F8 | 2–3h | Profi – Netzwerk + Config + Dienst |
Vorbereitung durch den Ausbilder
Der Ausbilder bereitet die fehlerhafte VM vor:
sudo ./prepare_azubi_webserver.sh --level medium
Danach bekommst du eine VM, auf der httpd zwar installiert ist, aber nicht funktioniert. Der Rest ist deine Aufgabe.
Wichtige Regeln
⚠ **Keine Holzhammer-Lösungen**: `systemctl stop firewalld` oder `setenforce 0` sind **nicht** akzeptabel -- auch wenn dadurch die Fehler verschwinden. Du musst die **echte Ursache** beheben. ⚠ **Dokumentieren ist Pflicht**: Wie hast du den Fehler gefunden? Was war die Ursache? Wie hast du ihn gelöst -- und **warum ist die Lösung nachhaltig**? ⚠ **Test auch von außen**: Ein lokales `curl http://localhost` ist nicht ausreichend -- teste auch von einem anderen Rechner aus, um Firewall-Probleme zu entdecken.
Materialien
Vorbereitung (lies ZUERST):
- Azubi_Vorbereitung.pdf – Apache-Grundlagen, systemd, Diagnosewerkzeuge, Best Practices
Aufgabenstellung:
- Azubi_Aufgabenstellung.pdf – Was du tun sollst, systematische Vorgehensweise, Dokumentationspflicht
Referenz (während der Bearbeitung):
- Ausbilder_HowTo.pdf – Fehlerkatalog F1-F8, Fortschrittskontrolle (nur Ausbilder)
- Musterlösung.pdf – Erwartete Diagnosewege je Level (nur Ausbilder)
Schritt-für-Schritt-Vorgehen
1. **Vorbereitung lesen** → Azubi_Vorbereitung.pdf durch 2. **Aufgabe verstehen** → Azubi_Aufgabenstellung.pdf lesen 3. **VM vorbereiten** → Ausbilder führt `prepare_azubi_webserver.sh` aus 4. **Diagnostizieren** → Systematisch von außen nach innen arbeiten 5. **Dokumentieren** → Fehler, Ursache, Lösung, Nachhaltigkeit festhalten 6. **Testen** → Lokal und extern -- curl muss `HTTP/1.1 200 OK` zeigen 7. **Nachgespräch** → Mit Ausbilder besprechen: Was war schwierig? Warum ist die Lösung nachhaltig? Wie würde das in der Produktion aussehen?
Es können mehrere Fehler sein
Die VM enthält zwischen 1 und 6 Fehler, je nach Schwierigkeitslevel. Du wirst sie nicht alle auf einmal sehen – sobald du einen behoben hast, wird oft der nächste sichtbar.
Tipp: Arbeite systematisch vor:
1. Ist der Dienst überhaupt erreichbar? (Netzwerk/Dienst-Ebene) 2. Läuft der Dienst? (systemd-Status) 3. Kann httpd starten? (Konfiguration) 4. Existieren die Dateien, die der Dienst braucht? (Dateisystem) 5. Kann ich von außen darauf zugreifen? (Firewall)
Löse die Fehler in dieser Reihenfolge – nicht umgekehrt. Ein früher Fehler verdeckt oft die späteren.
Monitoring & Automatisierung (Ausblick)
Nach erfolgreicher Fertigstellung: Denke darüber nach, wie man solche Fehler automatisch erkennt:
- Tägliche Health-Checks per Cron-Skript
- Integration in Checkmk für zentrales Monitoring
- Ansible-Playbook für sichere, wiederholbare Installation
Diese sind Folgeprojekte, bauen aber auf den Erkenntnissen aus diesem Projekt auf.
Wenn du stecken bleibst
Das ist normal – Troubleshooting ist schwierig, genau das ist der Sinn der Übung.
1. **Erst selbst nachdenken** -- 10 Minuten Nachdenken sind wertvoll 2. **Logs lesen** -- `journalctl -xeu httpd`, `tail -50 /var/log/httpd/error_log` 3. **Frag den Ausbilder** -- Es gibt 5 Ebenen von Hinweisen, nicht nur "hier ist die Lösung"
Keine Abkürzungen! Lösungen wie `systemctl stop firewalld` (ohne echte Diagnose) oder `setenforce 0` sind nicht akzeptabel – auch wenn der Fehler dann verschwindet. Du lernst dabei nichts.
Zeitrahmen & Bewertung
| Level | Zeit | Fokus |
|---|---|---|
| easy | 30–45 min | Erste Erfahrung mit Fehlersuche |
| medium | 60–90 min | Mehrere Fehler, gegenseitige Abhängigkeiten |
| hard | 2–3h | Vollständiger Produktivzustand: Netzwerk, Dienst, Config |
Bewertung:
- 40% – Alle Fehler gefunden & behoben
- 30% – Korrekte, dauerhafte Lösung (nicht Quick Fix)
- 20% – Nachvollziehbare Dokumentation
- 10% – Selbstständigkeit (wenig Hilfe nötig)
Nachbereitung
Nach erfolgreicher Fertigstellung besprecht ihr:
- Welcher Fehler war am schwierigsten zu finden?
- Wie würde Monitoring (Checkmk) das verhindern?
- Wie könnte man das mit Ansible automatisieren?
- Was ist eine nachhaltige vs. eine provisorische Lösung?
Diese Diskussion ist genauso wichtig wie die technische Fertigstellung.
—
Viel Erfolg! 🚀
