Projektstruktur-und-Best-Practices aktualisiert

blaerf 2025-11-16 11:26:22 +00:00
parent 5fb28a9a90
commit c53c6dad73

@ -1,234 +1,234 @@
# Projektstruktur # Projektstruktur
*Hinweis: Dies ist lediglich ein Vorschlag meinerseits, um eine klare, sichere und nachvollziehbare Struktur für unser PHP-/AD-Projekt zu gewährleisten.* *Hinweis: Dies ist lediglich ein Vorschlag meinerseits, um eine klare, sichere und nachvollziehbare Struktur für unser PHP-/AD-Projekt zu gewährleisten.*
Dieses Dokument beschreibt die empfohlene Ordnerstruktur für das Gitea-Repository und für den späteren IIS-Server, sodass jedes Teammitglied genau versteht, was wohin gehört und warum. Dieses Dokument beschreibt die empfohlene Ordnerstruktur für das Gitea-Repository und für den späteren IIS-Server, sodass jedes Teammitglied genau versteht, was wohin gehört und warum.
--- ---
# 1. Ordnerstruktur im Gitea-Repository # 1. Ordnerstruktur im Gitea-Repository
``` ```
ad-admin-panel\ ad-admin-panel\
├── public\ ├── public\
│ ├── index.php │ ├── index.php
│ ├── css\ │ ├── css\
│ ├── js\ │ ├── js\
│ ├── images\ │ ├── images\
│ └── assets\ │ └── assets\
├── app\ ├── app\
│ ├── Controllers\ │ ├── Controllers\
│ ├── Services\ │ ├── Services\
│ │ ├── Ldap\ │ │ ├── Ldap\
│ │ ├── Powershell\ │ │ ├── Powershell\
│ │ └── Snmp\ │ │ └── Snmp\
│ ├── Models\ │ ├── Models\
│ └── Helpers\ │ └── Helpers\
├── config\ ├── config\
│ ├── config.example.php │ ├── config.example.php
│ └── config.php │ └── config.php
├── scripts\ ├── scripts\
│ └── powershell\ │ └── powershell\
├── storage\ ├── storage\
│ ├── logs\ │ ├── logs\
│ └── uploads\ │ └── uploads\
├── docs\ ├── docs\
│ ├── Architektur.md │ ├── Architektur.md
│ ├── Deployment.md │ ├── Deployment.md
│ └── API-Endpunkte.md │ └── API-Endpunkte.md
├── .gitignore ├── .gitignore
└── README.md └── README.md
``` ```
--- ---
## 1.1 Erklärung aller Ordner ## 1.1 Erklärung aller Ordner
### **public/** ### **public/**
Dies ist das *Webroot* der einzige Ordner, der direkt über den Browser erreichbar ist. Dies ist das *Webroot* der einzige Ordner, der direkt über den Browser erreichbar ist.
Hier gehört hinein: Hier gehört hinein:
- `index.php` als Einstiegspunkt - `index.php` als Einstiegspunkt
- CSS-Dateien - CSS-Dateien
- JavaScript-Dateien - JavaScript-Dateien
- Bilder - Bilder
- Frontend-Assets - Frontend-Assets
**Warum:** **Warum:**
Sicherheit. Alles, was sensibel ist (Config, PowerShell, Logs), liegt *außerhalb* des Webroots. Sicherheit. Alles, was sensibel ist (Config, PowerShell, Logs), liegt *außerhalb* des Webroots.
--- ---
### **app\** ### **app\**
Hier liegt die komplette PHP-Anwendungslogik. Hier liegt die komplette PHP-Anwendungslogik.
#### **app\Controllers\** #### **app\Controllers\**
- Verarbeiten Requests aus dem Frontend - Verarbeiten Requests aus dem Frontend
- Rufen passende Services auf - Rufen passende Services auf
- Geben Views oder JSON zurück - Geben Views oder JSON zurück
Beispiel: `UserController.php` zeigt Benutzerliste an oder verarbeitet Formulare. Beispiel: `UserController.php` zeigt Benutzerliste an oder verarbeitet Formulare.
#### **app\Services\** #### **app\Services\**
Hier steckt die "Fachlogik" des Projekts. Hier steckt die "Fachlogik" des Projekts.
- keine HTML-Ausgabe - keine HTML-Ausgabe
- alles, was LDAP, SNMP, PowerShell oder CSV betrifft - alles, was LDAP, SNMP, PowerShell oder CSV betrifft
Unterordner: Unterordner:
**Ldap\** **Ldap\**
- LDAP-Verbindungen - LDAP-Verbindungen
- User anlegen/ändern/löschen - User anlegen/ändern/löschen
- Passwörter setzen - Passwörter setzen
- Gruppen verwalten - Gruppen verwalten
**Powershell\** **Powershell\**
- PHP-Wrapper für `.ps1`-Skripte - PHP-Wrapper für `.ps1`-Skripte
- Benutzerverwaltung per AD-Cmdlets - Benutzerverwaltung per AD-Cmdlets
**Snmp\** **Snmp\**
- SNMP-Status auslesen - SNMP-Status auslesen
- CPU/RAM/Platten/etc. abrufen - CPU/RAM/Platten/etc. abrufen
#### **app\Models\** #### **app\Models\**
Reine Datenobjekte, z.B.: Reine Datenobjekte, z.B.:
- `User.php` - `User.php`
- `ServerStatus.php` - `ServerStatus.php`
Hier werden keine Aktionen ausgeführt nur Struktur & Daten. Hier werden keine Aktionen ausgeführt nur Struktur & Daten.
#### **app\Helpers\** #### **app\Helpers\**
Werkzeuge für: Werkzeuge für:
- Validation - Validation
- kleine Utility-Funktionen - kleine Utility-Funktionen
- Logging-Helfer - Logging-Helfer
--- ---
### **config\** ### **config\**
Globale Einstellungen. Globale Einstellungen.
**config.example.php** **config.example.php**
liegt im Repo liegt im Repo
enthält die Struktur, aber keine Passwörter enthält die Struktur, aber keine Passwörter
**config.php** **config.php**
echte Config echte Config
kommt in `.gitignore` kommt in `.gitignore`
enthält LDAP-Credentials, SNMP-Settings, Pfade usw. enthält LDAP-Credentials, SNMP-Settings, Pfade usw.
--- ---
### **scripts\** ### **scripts\**
Nicht-öffentliche Skripte, die vom PHP-Code aufgerufen werden. Nicht-öffentliche Skripte, die vom PHP-Code aufgerufen werden.
#### **scripts\powershell\** #### **scripts\powershell\**
Hier liegen alle `.ps1` Dateien: Hier liegen alle `.ps1` Dateien:
- `New-AdUser.ps1` - `New-AdUser.ps1`
- `Set-AdUser.ps1` - `Set-AdUser.ps1`
- `Disable-AdUser.ps1` - `Disable-AdUser.ps1`
- `Import-UsersFromCsv.ps1` - `Import-UsersFromCsv.ps1`
Diese Skripte laufen auf dem Server **niemals im Webroot**. Diese Skripte laufen auf dem Server **niemals im Webroot**.
--- ---
### **storage\** ### **storage\**
Dynamische Dateien, die während der Laufzeit entstehen. Dynamische Dateien, die während der Laufzeit entstehen.
#### **storage\logs\** #### **storage\logs\**
- PHP-Logs - PHP-Logs
- Fehlerprotokolle - Fehlerprotokolle
- Aktionen (z.B. wer welchen User angelegt hat) - Aktionen (z.B. wer welchen User angelegt hat)
#### **storage\uploads\** #### **storage\uploads\**
- hochgeladene CSV-Dateien für Massenimporte - hochgeladene CSV-Dateien für Massenimporte
- ggf. später Export-Dateien - ggf. später Export-Dateien
**Wichtig:** **Wichtig:**
Dieser Ordner wird **nie** versioniert und kommt in `.gitignore`. Dieser Ordner wird **nie** versioniert und kommt in `.gitignore`.
--- ---
### **docs\** ### **docs\**
Projektdokumentation. Projektdokumentation.
Hier können alle Markdown-Dokumente rein: Hier können alle Markdown-Dokumente rein:
- `Architektur.md` - `Architektur.md`
- `Deployment.md` - `Deployment.md`
- `API-Endpunkte.md` - `API-Endpunkte.md`
- Diagramme, Erklärungen, Beispiele - Diagramme, Erklärungen, Beispiele
Diese Unterlagen landen später im Wiki. Diese Unterlagen landen später im Wiki.
--- ---
### **README.md** ### **README.md**
Beschreibung des Projekts Beschreibung des Projekts
Was ist das? Was ist das?
Wie installiert man es? Wie installiert man es?
Wie läuft es? Wie läuft es?
### **.gitignore im Repository-Root** ### **.gitignore im Repository-Root**
Im Hauptverzeichnis des Repositories liegt eine `.gitignore`-Datei. Sie sorgt dafür, dass keine temporären oder sensiblen Daten versioniert werden: Im Hauptverzeichnis des Repositories liegt eine `.gitignore`-Datei. Sie sorgt dafür, dass keine temporären oder sensiblen Daten versioniert werden:
``` ```
\vendor\ \vendor\
\.idea\ \.idea\
\.vscode\ \.vscode\
\storage\ \storage\
\config.php \config.php
``` ```
--- ---
# 2. Struktur auf dem IIS-Server # 2. Struktur auf dem IIS-Server
``` ```
C:\Web\AdAdminPanel C:\Web\AdAdminPanel
├── public\ # Webroot im IIS ├── public\ # Webroot im IIS
├── app\ ├── app\
├── config\ ├── config\
├── scripts\ ├── scripts\
│ └── powershell\ │ └── powershell\
├── storage\ ├── storage\
│ ├── logs\ │ ├── logs\
│ └── uploads\ │ └── uploads\
└── vendor\ └── vendor\
``` ```
### Wichtige Punkte: ### Wichtige Punkte:
- IIS zeigt **nur auf `public\`** - IIS zeigt **nur auf `public\`**
- `config\`, `scripts\`, `storage\` bleiben *unsichtbar* für den Browser - `config\`, `scripts\`, `storage\` bleiben *unsichtbar* für den Browser
- PowerShell läuft über einen eigenen Service-Account - PowerShell läuft über einen eigenen Service-Account
- AppPool-Identität erhält nur minimal benötigte Rechte - AppPool-Identität erhält nur minimal benötigte Rechte
--- ---
# 3. Warum diese Struktur gut für das Projekt ist # 3. Warum diese Struktur gut für das Projekt ist
- sicher (Webroot klar getrennt) - sicher (Webroot klar getrennt)
- einfach zu verstehen - einfach zu verstehen
- klarer Ort für jede Art Datei - klarer Ort für jede Art Datei
- PowerShell sauber gekapselt - PowerShell sauber gekapselt
- CSV-Verarbeitung logisch eingebettet - CSV-Verarbeitung logisch eingebettet
- SNMP & LDAP sauber strukturiert - SNMP & LDAP sauber strukturiert
- guter Team-Workflow - guter Team-Workflow
- Deployment klar und eindeutig - Deployment klar und eindeutig
--- ---
# 4. Zusammenfassung # 4. Zusammenfassung
Diese Ordnerstruktur ermöglicht: Diese Ordnerstruktur ermöglicht:
- Klarheit - Klarheit
- Sicherheit - Sicherheit
- Wartbarkeit - Wartbarkeit
- Teamfähigkeit - Teamfähigkeit
- saubere Trennung von Frontend, Logik und Server-Skripten - saubere Trennung von Frontend, Logik und Server-Skripten
Sie sorgt dafür, dass jeder sofort versteht, **wohin was gehört** ohne Chaos und ohne Risiko, dass Passwörter oder Skripte versehentlich öffentlich sind. Sie sorgt dafür, dass jeder sofort versteht, **wohin was gehört** ohne Chaos und ohne Risiko, dass Passwörter oder Skripte versehentlich öffentlich sind.