# Plesk Test Server

Docker-basierter Plesk-Testserver für die Entwicklung und das Testen der Email-Provisionierung.

## Schnellstart

```bash
# Container starten
docker-compose up -d

# Logs anzeigen (erster Start dauert einige Minuten)
docker-compose logs -f

# Nach vollständigem Start: Passwort + API-Key einrichten
./setup-domain.sh
```

**Erster Start dauert 5-10 Minuten** - Plesk muss sich initialisieren.

Das `setup-domain.sh` Skript:
- Wartet bis Plesk bereit ist (max. 5 Minuten, mit Timeout)
- **Konfiguriert Fail2Ban für Entwicklung** (Bantime: 60 Sekunden, max 10 Fehlversuche)
- Setzt das Admin-Passwort auf `plesk1234!`
- Generiert einen API-Key
- Gibt Anleitung zur manuellen Domain-Erstellung aus

## Zugangsdaten

| Feld | Wert |
|------|------|
| URL | https://localhost:8443 |
| Benutzer | admin |
| Passwort | plesk1234! |

## Domain einrichten (manuell)

Plesk prüft DNS-Einträge und blockiert externe Domains per Default.
Die Domain muss daher manuell im Panel erstellt werden:

1. Plesk Panel öffnen: https://localhost:8443
2. Login: admin / plesk1234!
3. **Tools & Settings** → **Security** → **Prohibited Domain Names**
   - Policy auf **None** setzen
4. **Websites & Domains** → **Add Domain**
5. Domain: `stressfrei-wechseln.de`
6. Mail-Service aktivieren

## API-Authentifizierung

### Option 1: Benutzername + Passwort

Die einfachste Methode für Tests:

```
Benutzername: admin
Passwort: plesk1234!
```

In OpenCRM Email-Provider Einstellungen:
- **API-URL**: `https://localhost:8443`
- **Benutzername**: `admin`
- **Passwort**: `plesk1234!`

### Option 2: API-Key (empfohlen für Produktion)

1. Im Plesk Panel: **Tools & Einstellungen** → **API**
2. **Schlüssel hinzufügen**
3. Beschreibung eingeben (z.B. "OpenCRM")
4. IP-Beschränkung optional
5. Schlüssel kopieren

In OpenCRM Email-Provider Einstellungen:
- **API-URL**: `https://localhost:8443`
- **API-Key**: `<generierter-schlüssel>`
- Benutzername/Passwort leer lassen

### Authentifizierungs-Priorität in OpenCRM

OpenCRM verwendet **entweder** API-Key **oder** Benutzername/Passwort, nicht beides gleichzeitig:

| API-Key | Benutzername/Passwort | Verwendet wird |
|---------|----------------------|----------------|
| ✅ Vorhanden | egal | **Nur API-Key** |
| ❌ Leer | ✅ Vorhanden | **Basic Auth** |
| ❌ Leer | ❌ Leer | Fehler |

**Warum?** Wenn beide angegeben werden und eines davon falsch ist, würde Plesk trotzdem das funktionierende akzeptieren. Das führt zu verwirrenden Situationen beim Verbindungstest.

### API-Key per CLI generieren

```bash
docker exec -it plesk-test plesk bin secret_key --create -description "OpenCRM" -ip-address ""
```

Schlüssel anzeigen:
```bash
docker exec -it plesk-test plesk bin secret_key --list
```

## API testen

### Verbindung testen

```bash
# Mit Benutzername/Passwort
curl -k -u admin:plesk1234! \
  "https://localhost:8443/api/v2/server"

# Mit API-Key
curl -k -H "X-API-Key: DEIN_API_KEY" \
  "https://localhost:8443/api/v2/server"
```

### E-Mail-Adresse anlegen (REST API v2)

```bash
curl -k -u admin:plesk1234! \
  -X POST "https://localhost:8443/api/v2/cli/mail/call" \
  -H "Content-Type: application/json" \
  -d '{
    "params": [
      "--create", "test@stressfrei-wechseln.de",
      "-forwarding", "true",
      "-forwarding-addresses", "ziel@example.com"
    ]
  }'
```

### E-Mail prüfen ob existiert

```bash
curl -k -u admin:plesk1234! \
  "https://localhost:8443/api/v2/cli/mail/call" \
  -H "Content-Type: application/json" \
  -d '{
    "params": ["--info", "test@stressfrei-wechseln.de"]
  }'
```

## Verzeichnisstruktur

```
plesktest/
├── docker-compose.yml    # Docker Compose Konfiguration
├── setup-domain.sh       # Automatisches Setup-Skript
├── .gitignore            # Git-Ignores für Daten
├── README.md             # Diese Datei
└── plesk-data/           # Persistente Plesk-Daten (nicht in Git)
```

## Befehle

```bash
# Starten
docker-compose up -d

# Stoppen
docker-compose down

# Stoppen + Daten löschen (Neustart)
docker-compose down -v
rm -rf plesk-data/*

# Logs anzeigen
docker-compose logs -f

# Shell im Container
docker exec -it plesk-test bash

# Plesk CLI
docker exec -it plesk-test plesk bin --help
```

## Bekannte Einschränkungen

- **Selbstsigniertes Zertifikat**: Browser zeigt Sicherheitswarnung
- **Keine echte Domain**: DNS funktioniert nicht, nur für API-Tests geeignet
- **Ressourcen**: Plesk benötigt ca. 2-4 GB RAM
- **Erster Start**: Initialisierung dauert mehrere Minuten

## Fehlerbehebung

### Container startet nicht

```bash
# Prüfen ob Port belegt
lsof -i :8443

# Container-Status
docker-compose ps

# Detaillierte Logs
docker-compose logs plesk
```

### API antwortet nicht

1. Warten bis Plesk vollständig gestartet ist (Logs beobachten)
2. HTTPS mit `-k` Flag für selbstsigniertes Zertifikat
3. Firewall/Netzwerk prüfen

### Domain anlegen schlägt fehl

Im Docker-Container funktionieren einige Plesk-Features eingeschränkt.
Für reine API-Tests der Email-Funktionen reicht das Setup aus.

### API-Anfragen werden nach mehreren Tests blockiert (Fail2Ban)

Das Setup-Script konfiguriert Fail2Ban mit kurzer Bantime (60 Sekunden).
Falls du trotzdem geblockt wirst:

```bash
# Aktuell gebannte IPs anzeigen
docker exec plesk-test fail2ban-client status plesk-panel

# Alle IPs entbannen
docker exec plesk-test fail2ban-client unban --all

# Fail2Ban komplett deaktivieren (nur für Tests!)
docker exec plesk-test systemctl stop fail2ban
```
