first commit
This commit is contained in:
@@ -0,0 +1,3 @@
|
||||
# Plesk Daten (nicht committen)
|
||||
plesk-data/*
|
||||
!plesk-data/.gitkeep
|
||||
@@ -0,0 +1,221 @@
|
||||
# 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
|
||||
```
|
||||
@@ -0,0 +1,20 @@
|
||||
version: '3.8'
|
||||
|
||||
services:
|
||||
plesk:
|
||||
image: plesk/plesk:latest
|
||||
container_name: plesk-test
|
||||
hostname: plesk.local
|
||||
ports:
|
||||
- "8443:8443" # Plesk Panel (HTTPS)
|
||||
- "8880:8880" # Plesk Panel (HTTP)
|
||||
volumes:
|
||||
# Named Volume statt Bind-Mount (keine Permission-Probleme)
|
||||
- plesk-data:/var/lib/plesk
|
||||
restart: unless-stopped
|
||||
privileged: true
|
||||
|
||||
volumes:
|
||||
plesk-data:
|
||||
|
||||
# Nach dem Start: ./setup-domain.sh ausführen
|
||||
Executable
+143
@@ -0,0 +1,143 @@
|
||||
#!/bin/bash
|
||||
# Setup-Skript für Plesk Test-Server
|
||||
# Ausführen nachdem der Container gestartet wurde
|
||||
|
||||
CONTAINER="plesk-test"
|
||||
ADMIN_PASSWORD="plesk1234!"
|
||||
MAX_WAIT=300
|
||||
|
||||
echo "============================================"
|
||||
echo "Plesk Test-Server Setup"
|
||||
echo "============================================"
|
||||
echo ""
|
||||
|
||||
# Prüfen ob Container läuft
|
||||
if ! docker ps --format '{{.Names}}' | grep -q "^${CONTAINER}$"; then
|
||||
echo "Container '$CONTAINER' läuft nicht!"
|
||||
echo "Starte zuerst mit: docker-compose up -d"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "Warte auf Plesk (max. ${MAX_WAIT}s)..."
|
||||
WAITED=0
|
||||
while [ $WAITED -lt $MAX_WAIT ]; do
|
||||
if docker exec $CONTAINER curl -sk https://localhost:8443/login 2>/dev/null | grep -q "Plesk"; then
|
||||
echo "Plesk Panel ist erreichbar!"
|
||||
break
|
||||
fi
|
||||
echo " ... warte ($WAITED s)"
|
||||
sleep 10
|
||||
WAITED=$((WAITED + 10))
|
||||
done
|
||||
|
||||
if [ $WAITED -ge $MAX_WAIT ]; then
|
||||
echo "Timeout! Plesk nicht bereit nach ${MAX_WAIT}s"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
sleep 5
|
||||
|
||||
echo ""
|
||||
echo "Konfiguriere Fail2Ban für Entwicklung..."
|
||||
# Bantime auf 1 Minute setzen (Standard ist oft 10+ Minuten)
|
||||
docker exec $CONTAINER bash -c 'cat > /etc/fail2ban/jail.d/dev-settings.conf << EOF
|
||||
[DEFAULT]
|
||||
bantime = 60
|
||||
findtime = 60
|
||||
maxretry = 10
|
||||
|
||||
[plesk-panel]
|
||||
enabled = true
|
||||
bantime = 60
|
||||
findtime = 60
|
||||
maxretry = 10
|
||||
|
||||
[plesk-apache]
|
||||
enabled = true
|
||||
bantime = 60
|
||||
findtime = 60
|
||||
maxretry = 10
|
||||
|
||||
[plesk-wordpress]
|
||||
enabled = false
|
||||
|
||||
[plesk-proftpd]
|
||||
enabled = false
|
||||
|
||||
[plesk-postfix]
|
||||
enabled = false
|
||||
|
||||
[plesk-dovecot]
|
||||
enabled = false
|
||||
|
||||
[ssh]
|
||||
enabled = false
|
||||
|
||||
[recidive]
|
||||
enabled = false
|
||||
EOF'
|
||||
|
||||
# Fail2Ban neu laden
|
||||
docker exec $CONTAINER bash -c 'systemctl restart fail2ban 2>/dev/null || service fail2ban restart 2>/dev/null || true'
|
||||
echo " -> Bantime auf 60 Sekunden gesetzt"
|
||||
|
||||
echo ""
|
||||
echo "Setze Admin-Passwort..."
|
||||
docker exec $CONTAINER plesk bin admin --set-admin-password -passwd "$ADMIN_PASSWORD" 2>&1
|
||||
|
||||
echo ""
|
||||
echo "Erstelle API-Key..."
|
||||
docker exec $CONTAINER plesk bin secret_key --delete -filter "OpenCRM-Test" 2>/dev/null
|
||||
KEY_OUTPUT=$(docker exec $CONTAINER plesk bin secret_key --create -description "OpenCRM-Test" 2>&1)
|
||||
echo "$KEY_OUTPUT"
|
||||
|
||||
# Extrahiere den Key (UUID-Format)
|
||||
API_KEY=$(echo "$KEY_OUTPUT" | grep -oE '[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}' | head -1)
|
||||
|
||||
echo ""
|
||||
echo "============================================"
|
||||
echo "SETUP ABGESCHLOSSEN"
|
||||
echo "============================================"
|
||||
echo ""
|
||||
echo "Plesk Panel:"
|
||||
echo " URL: https://localhost:8443"
|
||||
echo " Benutzer: admin"
|
||||
echo " Passwort: $ADMIN_PASSWORD"
|
||||
echo ""
|
||||
if [ -n "$API_KEY" ]; then
|
||||
echo "API-Key: $API_KEY"
|
||||
else
|
||||
echo "API-Key: (siehe Ausgabe oben)"
|
||||
fi
|
||||
echo ""
|
||||
echo "============================================"
|
||||
echo "DOMAIN MANUELL ERSTELLEN"
|
||||
echo "============================================"
|
||||
echo ""
|
||||
echo "Plesk prüft DNS-Einträge und blockiert externe Domains."
|
||||
echo "Domain muss manuell im Panel erstellt werden:"
|
||||
echo ""
|
||||
echo "1. https://localhost:8443 öffnen"
|
||||
echo "2. Login: admin / $ADMIN_PASSWORD"
|
||||
echo "3. Tools & Settings > Security > Prohibited Domain Names"
|
||||
echo " -> Policy auf 'None' setzen"
|
||||
echo "4. Websites & Domains > Add Domain"
|
||||
echo "5. Domain: stressfrei-wechseln.de"
|
||||
echo "6. Mail-Service aktivieren"
|
||||
echo ""
|
||||
echo "============================================"
|
||||
echo "OpenCRM Einstellungen"
|
||||
echo "============================================"
|
||||
echo ""
|
||||
echo " Name: Plesk Test"
|
||||
echo " Typ: PLESK"
|
||||
echo " API-URL: https://localhost:8443"
|
||||
if [ -n "$API_KEY" ]; then
|
||||
echo " API-Key: $API_KEY"
|
||||
else
|
||||
echo " Benutzer: admin"
|
||||
echo " Passwort: $ADMIN_PASSWORD"
|
||||
fi
|
||||
echo " Domain: stressfrei-wechseln.de"
|
||||
echo ""
|
||||
echo "============================================"
|
||||
Reference in New Issue
Block a user