Plesk mit SSH bedienen

Plesk ist ein webbasiertes Hosting-Control-Panel, das als Verwaltungsschicht zwischen Betriebssystem und Hosting-Diensten fungiert.
Über das Plesk-CLI-Tool können nahezu alle Funktionen der Weboberfläche auch per SSH gesteuert werden - von Domain- und Benutzerverwaltung über Datenbanken bis hin zu Sicherheit, Backups und Automatisierung.
Diese Website dokumentiert die Nutzung von Plesk über die Kommandozeile und richtet sich an Administratoren, die servernah arbeiten möchten.
Vollständige Dokumentation : Plesk CLI commands
Plesk: notwendige Informationen
Für den Kunden sind folgende Informationen notwendig: E-Mail-Adresse, Kundenname und erste Domain.
EMAIL="user@domain.invalid"
CUSTOMER_NAME="Max Mustermann"
DOMAIN="domain.invalid" Kunde anlegen im Terminal
Ich erzeuge den Nutzernamen als websichere Version des Kundennamens und ein dynamisches Passwort. Dafür muss das Paket pwgen installiert sein.
CUSTOMER_ID=$(echo "{$CUSTOMER_NAME}" | iconv -f UTF-8 -t ASCII//TRANSLIT | tr '[:upper:]' '[:lower:]' | tr -cs 'a-z0-9' '_' | sed 's/^_//; s/_$//')
CUSTUMER_PW=$(pwgen -s 16)
plesk bin customer --create "${CUSTOMER_ID}" \
-email "${EMAIL}" \
-passwd "${CUSTUMER_PW}" \
-name "${CUSTOMER_NAME}" ⚠ Vollständige Dokumentation: Plesk CLI customer command
Kunden einen Subscription zuordnen
Nun existiert zwar der Kunde, er kann sein Hosting aber noch nicht nutzen. Hierfür muss noch eine Subscription angelegt werden. Um einem Kunden die vereinbarten Leistungen im Plesk zuzuordnen, muss dieser noch ein Serviceplan zugeordnet werden. Ich nutze den Serviceplan Default Domain.
Umlautdomains werden besser als Puny-Code Version angelegt. Hierfür muss das Paket idn2 installiert sein. Ich selbst nutze eine geteilte IP im Plesk. Diese wird über die Datenbank ermittelt.
Zusätzlich vergebe ich für die Subscription noch die Zugangsdaten für den System-Nutzer.
PUNYDOMAIN=$(idn2 --quiet "${DOMAIN}")
IP=$(plesk db -Ne "SELECT ip_address FROM IP_Addresses WHERE main='true' LIMIT 1;")
SYS_USER_ID=$(echo -n "${PUNYDOMAIN}"; echo -n "_"; pwgen -A -0 -s 8)
SYS_USER_PW=$(pwgen -s 16)
plesk bin subscription --create "${DOMAIN}" \
-owner "${CUSTOMER_ID}" \
-service-plan "Default Domain" \
-ip "${IP}" \
-login "${SYS_USER_ID}" \
-passwd "${SYS_USER_PW}" ⚠ Vollständige Dokumentation: Plesk CLI subscription command
Ausgabe aller Daten für den Kunden und die Subscription
Die zum Teil generierten Daten werden im Terminal ausgegeben, um diese gesammelt an einem sicheren Platz abzuspeichern.
clear;
echo "Kunde: ${CUSTOMER_NAME} - E-Mail: ${EMAIL}"
echo "Domain: ${DOMAIN} ($PUNYDOMAIN) - IP: ${IP}"
echo "Zugang Plesk: ${CUSTOMER_ID} // ${CUSTUMER_PW}"
echo "Zugang Server: ${SYS_USER_ID} // ${SYS_USER_PW}" Zusätzliche Domain für einen Kunden anlegen
Nun kann man für die Subscription des Kunden eine zusätzliche Domain anlegen. Domains benötigen vielerlei Optionen. Im folgenden Liste ich diese auf:
- DNS: Ich selbst nutze einen externen DNS. Ich konfiguriere daher
-dns false. - Webhosting: Die Domain wird mit Webhosting eingerichtet, die Option heißt
-hosting true. - Seo-Redirect: Mit diesem Parameter wird festgelegt, ob die www-Subdomain oder die Domain ohne www als primäre Domain genutzt wird. Mit
-seo-redirect nonewerden beide gleichwertig behandelt. - PHP: Die Domain nutzt aktiviertes PHP, der Parameter heißt
-php true - Mailhosting Sofern für die Domain Mailversand und/oder -empfang unterstützt werden soll, ist
-mail_service trueder korrekte Parameter. Andernfall lautet der Parameter-mail_service false - Leeres Document-Root Mit dieser Option wird das Document-Root leer angelegt, andernfalls wird eine Plesk-Promo-Seite eingefügt.
ADD_DOMAIN="additional.invalid"
plesk bin site --create "${ADD_DOMAIN}" \
-webspace-name "${DOMAIN}" \
-dns false \
-hosting true \
-seo-redirect none \
-php true \
-mail_service true \
-empty-document-root true Wenn man nur eine Domain für einen Redirect einrichten will, so muss der Parameter -hst_type std genutzt werden. Für das Ziel des Redirects nutzt man dann den Parameter -target_url.
ADD_DOMAIN="additional.invalid"
RED_DOMAIN="redirect.invalid"
plesk bin site --create "${ADD_DOMAIN}" \
-webspace-name "${DOMAIN}" \
-dns false \
-hst_type std \
-target_url "${RED_DOMAIN}" ⚠ Vollständige Dokumentation: Plesk CLI site command
Subdomain innerhalb einer Domain anlegen
Innerhalb einer Domain benötigt man auch manchmal Subdomains, um verschiedene Services einer Domain voneinander zu trennen. Hierfür ist der Befehl plesk bin subdomain vorgesehen.
SUBDOMAIN="sub.domain.invalid"
DOMAIN="domain.invalid"
plesk bin subdomain --create "${SUBDOMAIN}" \
-dns false \
-domain "${DOMAIN}" \
-www-root "${SUBDOMAIN}" \
-hosting true \
-seo-redirect none \
-php true \
-mail_service false \
-empty-document-root true E-Mail-Adresse als Weiterleitung anlegen
Nicht immer aber manchmal benötigt man für die angelegte Domain eine Mailweiterleitung. Diese kann sehr einfach angelegt werden.
LOCAL_PART="user"
DOMAIN="domain.invalid"
TARGET_MAIL="target@domain.invalid"
plesk bin mail --create "${LOCAL_PART}@${DOMAIN}" \
-forwarding true \
-forwarding-addresses add: "${TARGET_MAIL}" ⚠ Vollständige Dokumentation: Plesk CLI mail command
Datenbank innerhalb einer Domain anlegen
Für die meisten Applikationen innerhalb eines Webspaces benötigt man eine Datenbank.
Zunächst legt man die Datenbank in über den Befehl plesk bin database --create der richtigen Subscription (Parameter -domain) an. Danach muss der Datenbanknutzer in der gleichen Subscrition wie die Datenbank selbst mit dem Befehl plesk bin database --create-dbuser erstellt werden. Über den Befehl plesk bin database --update wird der Nutzer der Datenbank zugeordnet und mittels -set-acl localhost,127.0.0.1,::1 werden nur lokale Verbindungen zugelassen.
SUBSCRITPION_DOMAIN="domain.invalid"
DATABASE_NAME="databasename"
DATABASE_USER="${DATABASE_NAME}"
DATABASE_PW=$(pwgen -s 16)
plesk bin database --create "${DATABASE_NAME}" \
-domain "${SUBSCRITPION_DOMAIN}" \
-type mysql
plesk bin database --create-dbuser "${DATABASE_USER}" \
-passwd "${DATABASE_PW}" \
-domain ${SUBSCRITPION_DOMAIN} \
-server localhost:3306 \
-database "${DATABASE_NAME}"
plesk bin database --update "${DATABASE_NAME}" \
-update_user "${DATABASE_USER}" \
-set-acl localhost,127.0.0.1,::1
echo "Database ${DATABASE_NAME} // ${DATABASE_USER} // ${DATABASE_PW}" Lets Encrypt Zertifikat installieren
DOMAIN="domain.invalid"
EMAIL="user@domain.invalid"
plesk bin extension --exec letsencrypt cli.php \
-d "${DOMAIN}" \
-d "www.${DOMAIN}" \
-m "${EMAIL}"
Zum nächsten Artikel "Plesk besser machen mit einfachen Mitteln"
Zum vorherigen Artikel "Ubuntu Phased Updates"