control/default/pdf.yml
@@ -1,6 +1,6 @@ to: context standalone: true template: handbuch-vereine template: userdoc section-divs: true top-level-division: chapter csl: eva-berlin-konferenz.csl @@ -9,4 +9,4 @@ data-dir: '${HS_PUBBASE}/pandoc/' resource-path: ['.','${HS_PUBBASE}/pandoc/','${HS_PUBBASE}/context/tex/texmf-project/images'] filters: - div-context.lua - div-context.lua source/plattform/backup/index.md
@@ -1,12 +1,9 @@ # Backup Hostsharing führt täglich Sicherungen der Daten der Produktivsysteme durch. Die Datensicherungen werden in einem vom Produktivrechenzentrum rund 5 km entfernten Rechenzentrum aufbewahrt. Die Datenübertragung zwischen den Standorten erfolgt ssh-verschlüsselt über eigene Leitungen. Die Backups jedes Produktivsystems werden separat archiviert und können nur von diesem System zur Rücksicherung angefordert werden. Ferner wird gewährleistet, dass Backups nicht nachträglich kompromittiert werden können. Hostsharing führt täglich Sicherungen der Daten der Produktivsysteme durch. Die Datensicherungen werden in einem vom Produktivrechenzentrum rund 5 km entfernten Rechenzentrum aufbewahrt. Die Datenübertragung zwischen den Standorten erfolgt ssh-verschlüsselt über eigene Leitungen. Die Backups jedes Produktivsystems werden separat archiviert und können nur von diesem System zur Rücksicherung angefordert werden. Ferner wird gewährleistet, dass Backups nicht nachträglich kompromittiert werden können. In der Regel werden mindestens 15 Backups vorgehalten. source/plattform/index.md
@@ -1,8 +1,5 @@ # Managed Operations Platform In diesem Kapitel beschreiben wir Komponenten der Managed Operations Platform. ::: {.toctree maxdepth="1"} rechenzentren netze redundanz replikation monitoring backup :::intro In diesem Kapitel beschreiben wir Komponenten der Managed Operations Platform. ::: source/plattform/netze/index.md
@@ -2,44 +2,31 @@ ## Separierte Netzwerke Die Aufteilung in private, abgeschottete Netze (VLANs) zwischen den Managed Servern eines Nutzers erlaubt effiziente und sichere Verbindungen. Die Aufteilung in private, abgeschottete Netze (VLANs) zwischen den Managed Servern eines Nutzers erlaubt effiziente und sichere Verbindungen. Dabei wird zwischen den folgenden Netzen unterschieden, die nicht nur durch VLANs, sondern zusätzlich durch Verkabelung und separate Switches oder Router getrennt sind: Dabei wird zwischen den folgenden Netzen unterschieden, die nicht nur durch VLANs, sondern zusätzlich durch Verkabelung und separate Switches oder Router getrennt sind: Frontend-Netzwerk : Dieses Netzwerk ist für allgemeine Anfragen gedacht. Die Firewall erlaubt aktuell den Zugang zu allen Adressen in diesem Netzwerk. Mittelfristig ist geplant, nur beabsichtigt belegte Ports freizugeben. : Dieses Netzwerk ist für allgemeine Anfragen gedacht. Die Firewall erlaubt aktuell den Zugang zu allen Adressen in diesem Netzwerk. Mittelfristig ist geplant, nur beabsichtigt belegte Ports freizugeben. Server-Netzwerk : Physikalisch getrenntes Netzwerk zur Kommunikation der Anwendungen untereinander. In diesem Netzwerk lassen sich VLANs aufschalten, um den Traffic zwischen verschiedenen Anwendungskomponenten sicher übertragen zu können. Darüberhinaus können auch verschiedene Traffic-Arten einer Anwendung separiert werden, so z.B. die Verbindung einer Anwendung zur Datenbank von derjenigen zu einem Cache oder Load-Balancer. : Physikalisch getrenntes Netzwerk zur Kommunikation der Anwendungen untereinander. In diesem Netzwerk lassen sich VLANs aufschalten, um den Traffic zwischen verschiedenen Anwendungskomponenten sicher übertragen zu können. Darüberhinaus können auch verschiedene Traffic-Arten einer Anwendung separiert werden, so z.B. die Verbindung einer Anwendung zur Datenbank von derjenigen zu einem Cache oder Load-Balancer. Speichernetzwerk : Dieses Netzwerk wird verwendet für Storage-Traffic. Es basiert auf dedizierten Punkt-zu-Punkt-Verkabelungen, die von außen nicht erreichbar sind. Das Netzwerk nutzt private IPv4-Adressen und ist nicht nur von außen nicht erreichbar, sondern auch nur zugänglich für die Backup-Server, nicht jedoch für die Managed Server. : Dieses Netzwerk wird verwendet für Storage-Traffic. Es basiert auf dedizierten Punkt-zu-Punkt-Verkabelungen, die von außen nicht erreichbar sind. Das Netzwerk nutzt private IPv4-Adressen und ist nicht nur von außen nicht erreichbar, sondern auch nur zugänglich für die Backup-Server, nicht jedoch für die Managed Server. Management-Netzwerk : Dieses physikalische Netzwerk wird verwendet für den Zugang zu IPMI-Controllern (Intelligent Platform Management Interface Controller), RAC (Remote Access Controller), Switches und Routern. Es verwendet private IPv4-Adressen, die von außen nicht erreichbar sind. Es wird auch noch verfügbar sein, wenn Probleme in den anderen Netzen auftauchen. : Dieses physikalische Netzwerk wird verwendet für den Zugang zu IPMI-Controllern (Intelligent Platform Management Interface Controller), RAC (Remote Access Controller), Switches und Routern. Es verwendet private IPv4-Adressen, die von außen nicht erreichbar sind. Es wird auch noch verfügbar sein, wenn Probleme in den anderen Netzen auftauchen. source/plattform/rechenzentren/index.md
@@ -2,36 +2,28 @@ ## Berlin, primärer Standort Die Hostsharing eG betreibt ihre Community Cloud im [Berlin 1 Data Center](https://www.e-shelter.de/de/location/berlin-1-data-center) von NTT Global Data Centers. Das Rechenzentrum ist nach ISO 9001, ISO 27001 und ISO 50001 zertifiziert. Die Hostsharing eG betreibt ihre Community Cloud im [Berlin 1 Data Center](https://www.e-shelter.de/de/location/berlin-1-data-center) von NTT Global Data Centers. Das Rechenzentrum ist nach ISO 9001, ISO 27001 und ISO 50001 zertifiziert. Wachschutz : Das Rechenzentrum wird durch ein 7-stufiges Sicherheitssystem vor unbefugtem Zutritt geschützt. Wachschutz und Sicherheitspersonal sind 24 Stunden am Tag anwesend, an 365 Tagen im Jahr. : Das Rechenzentrum wird durch ein 7-stufiges Sicherheitssystem vor unbefugtem Zutritt geschützt. Wachschutz und Sicherheitspersonal sind 24 Stunden am Tag anwesend, an 365 Tagen im Jahr. Betriebssicherheit : Ebenfalls rund um die Uhr an sieben Tagen in der Woche vor Ort ist kompetentes Betriebspersonal, das die ausfallkritische Infrastruktur überwacht. Bei einer Störung kann es sofort eingreifen, sodass Ausfälle verhindert und maximale Verfügbarkeit gewährleistet ist. : Ebenfalls rund um die Uhr an sieben Tagen in der Woche vor Ort ist kompetentes Betriebspersonal, das die ausfallkritische Infrastruktur überwacht. Bei einer Störung kann es sofort eingreifen, sodass Ausfälle verhindert und maximale Verfügbarkeit gewährleistet ist. Das Rechenzentrum bietet standardmäßig Tier 3. Auf Anfrage kann Hostsharing Tier 4 gewährleisten. Georedundanz : Das Berlin 1 Data Center ist eins von 160 Rechenzentren von NTT in über 20 Ländern. Auf Anfrage können mit dem Rechenzentrumsbetreiber georedundante Lösungen realisiert werden. : Das Berlin 1 Data Center ist eins von 160 Rechenzentren von NTT in über 20 Ländern. Auf Anfrage können mit dem Rechenzentrumsbetreiber georedundante Lösungen realisiert werden. ## Berlin, sekundärer Standort Hostsharing erstellt jeden Tag eine Datensicherung (Backup) in einem zweiten, entfernten Rechenzentrum. Es ist nach ISO/IEC 27001:2013 zertifiziert und wird von der Firma [I/P/B Internet Provider in Berlin GmbH](https://www.ipb.de/) betrieben. Hostsharing erstellt jeden Tag eine Datensicherung (Backup) in einem zweiten, entfernten Rechenzentrum. Es ist nach ISO/IEC 27001:2013 zertifiziert und wird von der Firma [I/P/B Internet Provider in Berlin GmbH](https://www.ipb.de/) betrieben. source/plattform/redundanz/index.md
@@ -1,10 +1,7 @@ # Redundanz Hostsharing hält Hardware und aktive Netzwerkkomponenten, welche für den Produktiv-Betrieb erforderlich sind, redundant vor. Entsprechendes gilt für die Netzwerk- und Stromverkabelung. Hostsharing hält Hardware und aktive Netzwerkkomponenten, welche für den Produktiv-Betrieb erforderlich sind, redundant vor. Entsprechendes gilt für die Netzwerk- und Stromverkabelung. Auch die Stromversorgung und Peerings mit den Carrieren sind redundant ausgelegt, letztere sogar mehrfach. So hat das Versagen einer einzelnen Komponente -- abgesehen von Umschaltzeiten -- keine Auswirkungen auf den Produktivbetrieb. Auch die Stromversorgung und Peerings mit den Carrieren sind redundant ausgelegt, letztere sogar mehrfach. So hat das Versagen einer einzelnen Komponente -- abgesehen von Umschaltzeiten -- keine Auswirkungen auf den Produktivbetrieb. source/plattform/replikation/index.md
@@ -1,11 +1,5 @@ # Replikation Hostsharing repliziert mit Hilfe der Software DRBD die Festplatteninhalte aller Produktivsysteme in Echtzeit auf ein Standby-System (RAID 1 über das Netzwerk). Hostsharing repliziert mit Hilfe der Software DRBD die Festplatteninhalte aller Produktivsysteme in Echtzeit auf ein Standby-System (RAID 1 über das Netzwerk). Auf diese Weise stellt Hostsharing sicher, dass im Fall eines Hardwareschadens der Betrieb mit allen persistent gespeicherten Daten unverzüglich fortgesetzt werden kann, ohne dass durch das Einspielen des Backups Datenänderungen, die sich in der Zwischenzeit ergeben haben - etwa eingegangene E-Mails oder Datenbanktransaktionen - verloren gehen. Auf diese Weise stellt Hostsharing sicher, dass im Fall eines Hardwareschadens der Betrieb mit allen persistent gespeicherten Daten unverzüglich fortgesetzt werden kann, ohne dass durch das Einspielen des Backups Datenänderungen, die sich in der Zwischenzeit ergeben haben - etwa eingegangene E-Mails oder Datenbanktransaktionen - verloren gehen. source/referenz/backup/index.md
@@ -1,23 +1,17 @@ # Backup {#kap-backup} Hostsharing führt nächtliche Sicherungen der Daten durch. In der Regel können jeweils mindestens die letzten 15 nächtlichen Datensicherungen wiederhergestellt werden. Hostsharing führt nächtliche Sicherungen der Daten durch. In der Regel können jeweils mindestens die letzten 15 nächtlichen Datensicherungen wiederhergestellt werden. In der Datensicherung enthalten sind: - die Paket-Konfiguration - die Dateien im Paket selbst, sofern diese nicht vom Paket-Admin explizit ausgeschlossen wurden - die Dateien im Paket selbst, sofern diese nicht vom Paket-Admin explizit ausgeschlossen wurden - die zum Paket gehörigen Datenbanken - die zum Paket gehörigen eingegangenen E-Mails - die Logfiles ::: attention ::: title Attention ::: In der Datensicherung sind **nicht** enthalten: - ausgehende, aber noch nicht versandte E-Mails @@ -27,26 +21,17 @@ ## Datenbanken Unmittelbar vor Beginn der Sicherung der Daten des Dateisystems werden MySQL-, PostgreSQL-Datenbanken und `crontab`{.interpreted-text role="file"}-Dateien in das Verzeichnis `/home/pacs/xyz00/.bak/`{.interpreted-text role="file"} gesichert. Diese Sicherungen fließen in die nachfolgende Dateisystemsicherung ein. Die Rücksicherung von Datenbanken erfolgt durch den Paket-Admin auf Basis der im Verzeichnis `/home/pacs/xyz00/.bak/`{.interpreted-text role="file"} abgelegten Datenbanksicherungen. Unmittelbar vor Beginn der Sicherung der Daten des Dateisystems werden MySQL-, PostgreSQL-Datenbanken und `crontab`-Dateien in das Verzeichnis `/home/pacs/xyz00/.bak/` gesichert. Diese Sicherungen fließen in die nachfolgende Dateisystemsicherung ein. Die Rücksicherung von Datenbanken erfolgt durch den Paket-Admin auf Basis der im Verzeichnis `/home/pacs/xyz00/.bak/` abgelegten Datenbanksicherungen. ## Rücksicherung Für die Rücksicherung der Datenbestände ist ein Rücksicherungsauftrag für die betroffene Sicherungsdatei in Auftrag zu geben. Der Rücksicherungsauftrag erfolgt per E-Mail an <service@hostsharing.net> und beinhaltet folgende Angaben: Für die Rücksicherung der Datenbestände ist ein Rücksicherungsauftrag für die betroffene Sicherungsdatei in Auftrag zu geben. Der Rücksicherungsauftrag erfolgt per E-Mail an <service@hostsharing.net> und beinhaltet folgende Angaben: - das betreffende Webpaket, - den Pfad des rückzusichernden Verzeichnisses oder alternativ den Pfad und den Dateinamen der rückzusichernden Datei - den Pfad des rückzusichernden Verzeichnisses oder alternativ den Pfad und den Dateinamen der rückzusichernden Datei - sowie das Datum des angeforderten Sicherungslaufs. Die Rücksicherung wird vom Service unter: `/home/restore/YYY-MM-DD`{.interpreted-text role="file"} bereitgestellt. Die Rücksicherung wird vom Service unter: `/home/restore/YYY-MM-DD` bereitgestellt. source/referenz/hostkeys/index.md
@@ -1,10 +1,8 @@ # SSH-Hostkeys Wenn Sie sich zum ersten Mal mit der Secure Shell (`ssh`{.interpreted-text role="command"}) bei Hostsharing anmelden, fragt das Programm nach, ob Sie dem Hostkey des Servers vertrauen möchten. Das Hostsharing-System identifiziert sich Ihnen gegenüber mit dem Fingerabdruck des Hostkeys. Die Meldung sieht folgendermaßen aus: Wenn Sie sich zum ersten Mal mit der Secure Shell (`ssh`) bei Hostsharing anmelden, fragt das Programm nach, ob Sie dem Hostkey des Servers vertrauen möchten. Das Hostsharing-System identifiziert sich Ihnen gegenüber mit dem Fingerabdruck des Hostkeys. Die Meldung sieht folgendermaßen aus: ``` console $ ssh xyz00@xyz00.hostsharing.net @@ -13,15 +11,9 @@ Are you sure you want to continue connecting (yes/no)? ``` In der zweiten Zeile der Meldung zeigt die Secure Shell den Fingerabdruck des Servers an: `SHA256:rPqZO8FA+FQW/rQ1itbuNF9uWmBH82MSQp44fR1v6tQ` Diesen können Sie mit dem in der folgenden Liste aufgeführten Fingerabdruck vergleichen, um sicherzugehen, dass Sie sich wirklich auf einem Server der Hostsharing eG anmelden. Wenn die Fingerabdrücke übereinstimmen, können Sie die Frage mit [yes]{.title-ref} beantworten. Die Secure Shell setzt dann den Prozess des Einloggens fort und fragt nach dem Passwort für den angegebenen Benutzer. In der zweiten Zeile der Meldung zeigt die Secure Shell den Fingerabdruck des Servers an: `SHA256:rPqZO8FA+FQW/rQ1itbuNF9uWmBH82MSQp44fR1v6tQ` Diesen können Sie mit dem in der folgenden Liste aufgeführten Fingerabdruck vergleichen, um sicherzugehen, dass Sie sich wirklich auf einem Server der Hostsharing eG anmelden. Wenn die Fingerabdrücke übereinstimmen, können Sie die Frage mit `yes` beantworten. Die Secure Shell setzt dann den Prozess des Einloggens fort und fragt nach dem Passwort für den angegebenen Benutzer. SHA256:N1CtFnS1BwJrYoXUqZO61SM8RIpkfdhPOw+XVOaiYQo h01.hostsharing.net (RSA) SHA256:HVgsVWEw6pxUFPGEIIuZOrd9bBiGQu0jVoq+sDFqpGk h02.hostsharing.net (RSA) @@ -106,18 +98,13 @@ SHA256:rPqZO8FA+FQW/rQ1itbuNF9uWmBH82MSQp44fR1v6tQ h97.hostsharing.net (RSA) SHA256:N0iSQTm3AFAhdgQ4OhSptQ0vhuURPUyAt33L72ZeLM8 h98.hostsharing.net (RSA) Den Namen des Servers, auf dem Ihr Web-Paket liegt, erfahren Sie in HSAdmin. Gehen Sie dazu in den Bereich `Web-Paket`{.interpreted-text role="guilabel"}, wählen Sie Ihr Web-Paket aus (in unserem Beispiel `xyz00`). Es öffnet sich rechts der Reiter `Web-Paket`{.interpreted-text role="guilabel"} und es werden Informationen zu Ihrem Paket angezeigt. In der Zeile Server/Hive finden Sie die Bezeichnung des Servers, auf dem Ihr Webpaket sich befindet. Den Namen des Servers, auf dem Ihr Web-Paket liegt, erfahren Sie in HSAdmin. Gehen Sie dazu in den Bereich `Web-Paket`, wählen Sie Ihr Web-Paket aus (in unserem Beispiel `xyz00`). Es öffnet sich rechts der Reiter `Web-Paket` und es werden Informationen zu Ihrem Paket angezeigt. In der Zeile Server/Hive finden Sie die Bezeichnung des Servers, auf dem Ihr Webpaket sich befindet. ::: {#fig_hsadmin-paket-info}  {width="100%"} ::: In unserem Beispiel müssten Sie den Fingerabdruck von h97.hostsharing.net mit dem von der Secure Shell angezeigten vergleichen. In unserem Beispiel müssten Sie den Fingerabdruck von h97.hostsharing.net mit dem von der Secure Shell angezeigten vergleichen. source/referenz/hsadmin/emailaddress/index.md
@@ -2,62 +2,48 @@ ## Funktionen ::: option emailaddress.search `emailaddress.search` Suche E-Mail-Adresse nach den im Befehlsausdruck angegebenen Feldern und Werten ::: : Suche E-Mail-Adresse nach den im Befehlsausdruck angegebenen Feldern und Werten ::: option emailaddress.add `emailaddress.add` Füge eine neue E-Mail-Adresse nach den im Befehlsausdruck angegebenen Feldern und Werten hinzu. ::: : Füge eine neue E-Mail-Adresse nach den im Befehlsausdruck angegebenen Feldern und Werten hinzu. ::: option emailaddress.update `emailaddress.update` Aktualisiere eine E-Mail-Adresse nach den im Befehlsausdruck angegebenen Feldern und Werten. ::: : Aktualisiere eine E-Mail-Adresse nach den im Befehlsausdruck angegebenen Feldern und Werten. ::: option emailaddress.remove `emailaddress.remove` Lösche eine E-Mail-Adresse nach den im Befehlsausdruck angegebenen Feldern und Werten. ::: : Lösche eine E-Mail-Adresse nach den im Befehlsausdruck angegebenen Feldern und Werten. ## Editierbare Felder Das HSAdmin-Modul `emailaddress` kann entsprechend der folgenden Befehlssyntax von `HSAdmin`{.interpreted-text role="command"} Felder setzen oder verändern: Das HSAdmin-Modul `emailaddress` kann entsprechend der folgenden Befehlssyntax von `HSAdmin`{.interpreted-text role="command"} Felder setzen oder verändern: emailaddress.function({where:{field:'value',...}, set:{field:'value',...}}) Im Modul `emailaddress` stehen folgende Felder zur Verfügung. domain `domain` : Name einer Domain localpart `localpart` : Bezeichnung für den lokalen Teil einer E-Mail-Adresse: der Teil vor `@`. target `target` : Ziel einer E-Mail-Adresse, mehrere Ziele werden durch Kommata getrennt ## Beispiele Mit dem folgenden Befehl erhalten Sie eine Liste aller E-Mail-Adressen der Domain `hs-example.de`. Mit dem folgenden Befehl erhalten Sie eine Liste aller E-Mail-Adressen der Domain `hs-example.de`. ``` console xyz00@hsadmin> emailaddress.search({where:{domain:"hs-example.de"}}) @@ -70,8 +56,7 @@ xyz00@hsadmin> emailaddress.add ({set:{domain:'hs-example.de',localpart:'info',target:'xyz00-hs_example.de'}}) ``` Das Programm gibt dann folgende Meldung als Quittierung des Befehls zurück: Das Programm gibt dann folgende Meldung als Quittierung des Befehls zurück: ``` console [ @@ -90,9 +75,8 @@ ] ``` Wenn später einmal der Wunsch aufkommt, die eintreffenden E-Mails stattdessen an eine externe E-Mail-Adresse weiterzuleiten, kann man den Eintrag aktualisieren. Das Ziel (`target`) lässt sich entweder ändern: Wenn später einmal der Wunsch aufkommt, die eintreffenden E-Mails stattdessen an eine externe E-Mail-Adresse weiterzuleiten, kann man den Eintrag aktualisieren. Das Ziel (`target`) lässt sich entweder ändern: ``` console xyz00@hsadmin> emailaddress.update ({where:{domain:'hs-example.de',localpart:'info'}, set:{target:'andere@mail.de'}}) @@ -112,8 +96,8 @@ ] ``` Oder man ergänzt die neue E-Mail-Adresse, indem man sie zusätzlich einfügt. Mehrere Ziele werden mit Kommata abgegrenzt. Oder man ergänzt die neue E-Mail-Adresse, indem man sie zusätzlich einfügt. Mehrere Ziele werden mit Kommata abgegrenzt. ``` console xyz00@hsadmin> emailaddress.update ({where:{domain:'hs-example.de',localpart:'info'}, set:{target:'andere@mail.de,xzy00-hs_example.de'}}) source/referenz/hsadmin/emailaliases/index.md
@@ -1,82 +1,62 @@ # Modul emailalias {#kap-modul-emailalias} Mit diesem Modul können Sie ein E-Mail-Alias setzen. Ein typischer Anwendungsfall wird in `kap-email-alias`{.interpreted-text role="numref"} beschrieben. Mit diesem Modul können Sie ein E-Mail-Alias setzen. Ein typischer Anwendungsfall wird im Abschnitt [E-mail-Alias einrichten](#kap-email-alias) beschrieben. ## Funktionen ::: option emailalias.search `emailalias.search` Suche E-Mail-Alias nach den im Befehlsausdruck angegebenen Feldern und Werten ::: : Suche E-Mail-Alias nach den im Befehlsausdruck angegebenen Feldern und Werten ::: option emailalias.add `emailalias.add` Füge eine neue E-Mail-Alias nach den im Befehlsausdruck angegebenen Feldern und Werten hinzu. ::: Füge eine neue E-Mail-Alias nach den im Befehlsausdruck angegebenen Feldern und Werten hinzu. ::: option emailalias.update `emailalias.update` Aktualisiere eine E-Mail-Alias nach den im Befehlsausdruck angegebenen Feldern und Werten. ::: Aktualisiere eine E-Mail-Alias nach den im Befehlsausdruck angegebenen Feldern und Werten. ::: option emailalias.remove `emailalias.remove` Lösche eine E-Mail-Alias nach den im Befehlsausdruck angegebenen Feldern und Werten. ::: Lösche eine E-Mail-Alias nach den im Befehlsausdruck angegebenen Feldern und Werten. ## Editierbare Felder Das HSAdmin-Modul `emailalias` kann entsprechend der folgenden Befehlssyntax von `HSAdmin`{.interpreted-text role="command"} Felder setzen oder verändern: Das HSAdmin-Modul `emailalias` kann entsprechend der folgenden Befehlssyntax von `HSAdmin` Felder setzen oder verändern: emailalias.function({where:{field:'value',...}, set:{field:'value',...}}) Im Modul `emailalias` stehen folgende Felder zur Verfügung. name `name` : Name des E-Mail-Alias target `target` : Ziel einer E-Mail-Adresse; mehrere Ziele werden durch Kommata getrennt ## Beispiele Das folgende E-Mail-Alias überschreibt die Voreinstellung für den Paket-Admin `xyz00`. E-Mails an diesen Benutzer landen nicht mehr in seinem Postfach, sondern werden an die E-Mailadresse `webmaster@hs-example.de` weitergeleitet. Das folgende E-Mail-Alias überschreibt die Voreinstellung für den Paket-Admin `xyz00`. E-Mails an diesen Benutzer landen nicht mehr in seinem Postfach, sondern werden an die E-Mailadresse `webmaster@hs-example.de` weitergeleitet. ``` console xyz00@hsadmin> emailalias.add ({set:{name:'xyz00',target:'webmaster@hs-example.de'}}) ``` In dem nächsten beiden Beispielen wird zunächst nach der Konfiguration für das E-Mail-Alias `xyz00` gesucht. Anschließend wird ein Postfach `xyz00-mailbox` zusätzlich zu der bereits eingetragenen E-Mail-Adresse hinzugefügt. Da das Programm die Felder komplett überschreibt, müssen alle Werte angegeben werden. In dem nächsten beiden Beispielen wird zunächst nach der Konfiguration für das E-Mail-Alias `xyz00` gesucht. Anschließend wird ein Postfach `xyz00-mailbox` zusätzlich zu der bereits eingetragenen E-Mail-Adresse hinzugefügt. Da das Programm die Felder komplett überschreibt, müssen alle Werte angegeben werden. ``` console xyz00@hsadmin> emailalias.search ({where:{name:'xyz00'}}) xyz00@hsadmin> emailalias.update ({where:{name:'xyz00'},set:{target:'xyz00-mailbox,webmaster@hs-example.de'}}) ``` Im letzten Beispiel wird das E-Mail-Alias wieder gelöscht, sodass E-Mails an den Paket-Admin wieder an sein Postfach ausgeliefert werden. Im letzten Beispiel wird das E-Mail-Alias wieder gelöscht, sodass E-Mails an den Paket-Admin wieder an sein Postfach ausgeliefert werden. ``` console xyz00@hsadmin> emailalias.remove ({where:{name:'xyz00'}}) source/referenz/hsadmin/postgresqldb/index.md
@@ -2,69 +2,54 @@ ## Funktionen ::: option postgresqldb.search `postgresqldb.search` Suche Datenbank nach den im Befehlsausdruck angegebenen Feldern und : Suche Datenbank nach den im Befehlsausdruck angegebenen Feldern und Werten ::: ::: option postgresqldb.add `postgresqldb.add` Füge eine neue Datenbank nach den im Befehlsausdruck angegebenen Feldern und Werten hinzu. ::: : Füge eine neue Datenbank nach den im Befehlsausdruck angegebenen Feldern und Werten hinzu. ::: option postgresqldb.update `postgresqldb.update` Aktualisiere eine Datenbank nach den im Befehlsausdruck angegebenen Feldern und Werten. ::: : Aktualisiere eine Datenbank nach den im Befehlsausdruck angegebenen Feldern und Werten. ::: option postgresqldb.remove Lösche eine Datenbank nach den im Befehlsausdruck angegebenen Feldern und Werten. ::: `postgresqldb.remove` : Lösche eine Datenbank nach den im Befehlsausdruck angegebenen Feldern und Werten. ## Editierbare Felder Das HSAdmin-Modul `postgresqldb` kann entsprechend der folgenden Befehlssyntax von `HSAdmin`{.interpreted-text role="command"} Felder setzen oder verändern: Das HSAdmin-Modul `postgresqldb` kann entsprechend der folgenden Befehlssyntax von `HSAdmin` Felder setzen oder verändern: postgresqldb.function({where:{field:'value',...}, set:{field:'value',...}}) Im Modul `postgresqldb` stehen folgende Felder zur Verfügung. name `name` : Datenbankname (z.B. xyz00_abc) owner `owner` : Datenbanknutzer (z.B. xyz00_owner) encoding `encoding` : Zeichensatz der Datenbank (Standard ist UTF-8) ## Beispiele Im ersten Beispiel erzeugen wir die Datenbank `xyz00_abc` und übergeben ihr als Besitzer den Datenbanknutzer `xyz00_owner`. Im ersten Beispiel erzeugen wir die Datenbank `xyz00_abc` und übergeben ihr als Besitzer den Datenbanknutzer `xyz00_owner`. ``` console xyz00@hsadmin> postgresqldb.add({set:{name:'xyz00_abc',owner:'xyz00_owner'}}) ``` Die den beiden folgenden Beispielen lassen wir uns zunächst mit `postgresqldb.search`{.interpreted-text role="option"} Informationen zur Datenbank `xyz00_abc` anzeigen. Anschließend löschen wir sie mit `postgresqldb.remove`{.interpreted-text role="option"}. Die den beiden folgenden Beispielen lassen wir uns zunächst mit `postgresqldb.search` Informationen zur Datenbank `xyz00_abc` anzeigen. Anschließend löschen wir sie mit `postgresqldb.remove`. ``` console xyz00@hsadmin> postgresqldb.search({where:{name:'xyz00_abc'}}) source/referenz/hsadmin/postgresqluser/index.md
@@ -2,49 +2,37 @@ ## Funktionen ::: option postgresqluser.search `postgresqluser.search` Suche Datenbank-Benutzer nach den im Befehlsausdruck angegebenen Feldern und Werten ::: : Suche Datenbank-Benutzer nach den im Befehlsausdruck angegebenen Feldern und Werten ::: option postgresqluser.add `postgresqluser.add` Füge einen neuen Datenbank-Benutzer nach den im Befehlsausdruck angegebenen Feldern und Werten hinzu. ::: : Füge einen neuen Datenbank-Benutzer nach den im Befehlsausdruck angegebenen Feldern und Werten hinzu. ::: option postgresqluser.update `postgresqluser.update` Aktualisiere einen Datenbank-Benutzer nach den im Befehlsausdruck angegebenen Feldern und Werten. ::: : Aktualisiere einen Datenbank-Benutzer nach den im Befehlsausdruck angegebenen Feldern und Werten. ::: option postgresqluser.remove Lösche einen Datenbank-Benutzer nach den im Befehlsausdruck angegebenen Feldern und Werten. ::: `postgresqluser.remove` : Lösche einen Datenbank-Benutzer nach den im Befehlsausdruck angegebenen Feldern und Werten. ## Editierbare Felder Das HSAdmin-Modul `postgresqluser` kann entsprechend der folgenden Befehlssyntax von `HSAdmin`{.interpreted-text role="command"} Felder setzen oder verändern: Das HSAdmin-Modul `postgresqluser` kann entsprechend der folgenden Befehlssyntax von `HSAdmin` Felder setzen oder verändern: postgresqluser.function({where:{field:'value',...}, set:{field:'value',...}}) Im Modul `postgresqluser` stehen folgende Felder zur Verfügung. name `name` : Name des Datenbank-Benutzers (z.B. `xyz00_owner`) password `password` : Passwort des Datenbank-Benutzers @@ -57,26 +45,24 @@ xyz00@hsadmin> postgresqluser.add ({set:{name:'xyz00_owner',password:'!1?2-3aBc'}}) ``` Mit `postgresqluser.search`{.interpreted-text role="option"} können wir die Eigenschaften eines Benutzers anzeigen. Der gewünschte Benutzer wird mit `where` ausgewählt. Mit `postgresqluser.search` können wir die Eigenschaften eines Benutzers anzeigen. Der gewünschte Benutzer wird mit `where` ausgewählt. ``` console xyz00@hsadmin> postgresqluser.search ({where:{name:'xyz00_owner'}}) ``` Mit `postgresqluser.update`{.interpreted-text role="option"} können Eigenschaften eines Benutzers verändert werden. Der gewünschte Benutzer wird mit `where` ausgewählt. Anschliend wird in unserem Beispiel mit `set` ein neues Passwort gesetzt. Mit `postgresqluser.update` können Eigenschaften eines Benutzers verändert werden. Der gewünschte Benutzer wird mit `where` ausgewählt. Anschliend wird in unserem Beispiel mit `set` ein neues Passwort gesetzt. ``` console xyz00@hsadmin> postgresqluser.update ({where:{name:'xyz00_owner'},set:{password:'neues-passwort'}}) ``` Und zuletzt können Datenbank-Benutzer auch wieder gelöscht werden. Dazu benutzen wir den Befehl `postgresqluser.remove`{.interpreted-text role="option"}. Der zu löschende Benutzer wird mit `where` ausgewählt. Und zuletzt können Datenbank-Benutzer auch wieder gelöscht werden. Dazu benutzen wir den Befehl `postgresqluser.remove`. Der zu löschende Benutzer wird mit `where` ausgewählt. ``` console xyz00@hsadmin> postgresqluser.remove ({where:{name:'xyz00_owner'}}) source/referenz/hsadmin/q/index.md
@@ -2,18 +2,15 @@ ## Funktionen ::: option q.search `q.search` Das HSAdmin-Modul hat nur die Funktion `search`. Hiermit ist die Ausgabe der bereits ausgeführten HSAdmin-Aktionen möglich. Die Ausgabe zeigt an, ob eine Aktion erfolgreich abgeschlossen werden konnte oder ob beim Ausrollen der Konfiguration auf den Server Fehler aufgetreten sind. Im Erfolgsfall wird als Status \'done\' angezeigt. Wenn Fehler aufgetreten sind wird der Status \'error\' ausgegeben. Daneben wird eine interne Fehlermeldung im Feld \'exception\' angezeigt. Wenden Sie sich im Fehlerfall bitte an den Service. ::: : Das HSAdmin-Modul hat nur die Funktion `search`. Hiermit ist die Ausgabe der bereits ausgeführten HSAdmin-Aktionen möglich. Die Ausgabe zeigt an, ob eine Aktion erfolgreich abgeschlossen werden konnte oder ob beim Ausrollen der Konfiguration auf den Server Fehler aufgetreten sind. Im Erfolgsfall wird als Status ›done‹ angezeigt. Wenn Fehler aufgetreten sind wird der Status ›error‹ ausgegeben. Daneben wird eine interne Fehlermeldung im Feld ›exception‹ angezeigt. Wenden Sie sich im Fehlerfall bitte an den Service. ## Beispiele source/referenz/hsadmin/skript/createall.py
source/referenz/hsadmin/skript/createdomain.js
source/referenz/hsadmin/skript/createdomain.py
source/referenz/hsadmin/skript/createdomainandadmin.js
source/referenz/hsadmin/skript/createuseranddb.js
source/referenz/hsadmin/skript/createuseranddb.py
source/referenz/hsadmin/skript/index.md
@@ -1,39 +1,29 @@ # HSAdmin über Skripte steuern {#kap-hsscript-skript} In `kap-hsadmin-syntax`{.interpreted-text role="numref"} wurde die Option `-f`{.interpreted-text role="option"} erwähnt, die gesetzt werden kann, um HSAdmin eine Datei zu übergeben, in der sich die Befehle befinden. Die Option ermöglicht es, ohne großen Aufwand Skriptdateien zu pflegen, mit denen wiederkehrende Aufgaben bequem erledigt werden können. Dieses Kapitel zeigt, wie Sie die Anlage einer neuen Wordpress-Website mit Hilfe eines solchen Skripts vereinfachen können. Im Abschnitt [Syntax](#kap-hsadmin-syntax) wurde die Option `-f` erwähnt, die gesetzt werden kann, um HSAdmin eine Datei zu übergeben, in der sich die Befehle befinden. Die Option ermöglicht es, ohne großen Aufwand Skriptdateien zu pflegen, mit denen wiederkehrende Aufgaben bequem erledigt werden können. Dieses Kapitel zeigt, wie Sie die Anlage einer neuen Wordpress-Website mit Hilfe eines solchen Skripts vereinfachen können. Bevor Sie die eigentliche Wordpress-Software installiert, müssen mehrere Schritte auf der Hostsharing-Plattform erledigt sein. Bevor Sie die eigentliche Wordpress-Software installiert, müssen mehrere Schritte auf der Hostsharing-Plattform erledigt sein. 1. Es existiert ein `Domain-Admin`{.interpreted-text role="role"} bzw. es wird ein neuer Domain-Admin angelegt. 2. Es wird eine Domain erstellt und dem Domain-Admin zugewiesen. 3. Es wird ein `Datenbank-Nutzer`{.interpreted-text role="role"} angelegt. 4. Es wird eine Datenbank angelegt und dem Datenbank-Nutzer zugewiesen. 1. Es existiert ein Domain-Admin bzw. es wird ein neuer Domain-Admin angelegt. 2. Es wird eine Domain erstellt und dem Domain-Admin zugewiesen. 3. Es wird ein Datenbank-Nutzer angelegt. 4. Es wird eine Datenbank angelegt und dem Datenbank-Nutzer zugewiesen. Mit der folgenden Skript-Datei kann man diese vier Schritte mit einem Befehl ausführen. Mit der folgenden Skript-Datei kann man diese vier Schritte mit einem Befehl ausführen. ``` {.text linenos=""} ```bash user.add ({set:{name:'xyz00-domains',comment:'Domain-Admin',password:'!1?2-3aBc',shell:'/bin/bash'}}) domain.add ({set:{name:'beispiel.de',user:'xyz00-domains'}}) mysqluser.add ({set:{name:'xyz00_owner',password:'?2?3-4cVg'}}) mysqldb.add ({set:{name:'xyz00_abc',owner:'xyz00_owner'}}) ``` In Zeile 1 wird der Domain-Admin erzeugt, in Zeile 2 die Domain `beispiel.de` angelegt, in Zeile 3 der Datenbank-Nutzer und in Zeile 4 die Datenbank. Es ist möglich, die Datei lesbarer zu formatieren, indem man jedem Key-Value-Paar eine eigene Zeile zuweist. In Zeile 1 wird der Domain-Admin erzeugt, in Zeile 2 die Domain `beispiel.de` angelegt, in Zeile 3 der Datenbank-Nutzer und in Zeile 4 die Datenbank. Es ist möglich, die Datei lesbarer zu formatieren, indem man jedem Key-Value-Paar eine eigene Zeile zuweist. ``` {.text linenos=""} ```bash user.add ({set:{ name:'xyz00-domains', comment:'Domain-Admin', @@ -54,66 +44,69 @@ }}) ``` Wenn Sie die Datei unter dem Namen `befehlsskript.txt`{.interpreted-text role="file"} im Verzeichnis des `Paket-Admin`{.interpreted-text role="role"} speichern, können Sie alle Befehle mit einem HSAdmin-Aufruf abarbeiten: Wenn Sie die Datei unter dem Namen `befehlsskript.txt` im Verzeichnis des `Paket-Admin` speichern, können Sie alle Befehle mit einem HSAdmin-Aufruf abarbeiten: ``` console xyz00@h50:~$ hsscript -f befehlsskript.txt ``` Wenn Sie beispielsweise häufig Wordpress-Websites installieren, können Sie für jede Website eine solche Befehlsdatei anlegen und unter einem sinnvollen Namen (z.B. `wordpress-beispiel_de.txt`{.interpreted-text role="file"}) abspeichern. Wenn Sie beispielsweise häufig Wordpress-Websites installieren, können Sie für jede Website eine solche Befehlsdatei anlegen und unter einem sinnvollen Namen (z.B. `wordpress-beispiel_de.txt`) abspeichern. ::: admonition :::admonition Beachten Sie die richtige Reihenfolge Bei der Anlage von Benutzern, Datenbanken und Domains ist die im Beispiel gezeigt Reihenfolge einzuhalten. Um eine Domain anzulegen, muss der Domain-Admin bereits existieren. Eine Datenbank kann nur erzeugt werden, wenn der Datenbank-Nutzer bereits angelegt ist. Bei der Anlage von Benutzern, Datenbanken und Domains ist die im Beispiel gezeigt Reihenfolge einzuhalten. Um eine Domain anzulegen, muss der Domain-Admin bereits existieren. Eine Datenbank kann nur erzeugt werden, wenn der Datenbank-Nutzer bereits angelegt ist. Beim Löschen müssen Sie die Reihenfolge umkehren: Datenbank löschen, Datenbank-Nutzer löschen, Domain löschen, Domain-Admin löschen. Beim Löschen müssen Sie die Reihenfolge umkehren: Datenbank löschen, Datenbank-Nutzer löschen, Domain löschen, Domain-Admin löschen. ::: Noch bequemer ist es, die notwendigen Benutzer, Domains und Datenbanken mit Hilfe eines ausführlicheren JS-Skripts oder über die Python-API anzulegen. Noch bequemer ist es, die notwendigen Benutzer, Domains und Datenbanken mit Hilfe eines ausführlicheren JS-Skripts oder über die Python-API anzulegen. ## HSAdmin mit Javascript ansprechen Im Folgenden zeigen wir zwei JS-Skripts, die in der Regel im Verzeichnis des `Paket-Admin`{.interpreted-text role="role"} mit dessen Benutzerrechten aufgerufen werden. Mit dem ersten Skript erstellen wir eine Domain und weisen ihr einen eigenen Domain-Admin zu, dessen Name aus dem Namen der Domain abgeleitet wird. Mit dem zweiten Skript erzeugen wir eine Datenbank und einen Datenbank-Nutzer, sodass wir unter der gewünschten Domain zum Beispiel eine PHP-Anwendung wie Wordpress einrichten können. Im Folgenden zeigen wir zwei JS-Skripts, die in der Regel im Verzeichnis des Paket-Admin mit dessen Benutzerrechten aufgerufen werden. Mit dem ersten Skript erstellen wir eine Domain und weisen ihr einen eigenen Domain-Admin zu, dessen Name aus dem Namen der Domain abgeleitet wird. Mit dem zweiten Skript erzeugen wir eine Datenbank und einen Datenbank-Nutzer, sodass wir unter der gewünschten Domain zum Beispiel eine PHP-Anwendung wie Wordpress einrichten können. ### JS-Skript zur Anlage einer Domain Ein Skript, um eine Domain mit einem gesonderten Domain-Admin anzulegen, könnte so aussehen: Ein Skript, um eine Domain mit einem gesonderten Domain-Admin anzulegen, könnte so aussehen: ::: {.literalinclude linenos=""} createdomainandadmin.js ::: ```bash #!/usr/local/bin/hsscript -f Die Funktion `pwGen()` erzeugt ein achtstelliges Passwort aus einer Reihe von vorgegebenen Zeichen. Empfehlenswert sind längere Passworte. Die Funktion `createDomainAndDomainAdmin(args)` erzeugt die Domain und den Domain-Admin. Der Namen des Domain-Admin ergibt sich aus dem Namen der Domain. Bei einer Domain, die einen Bindestrich enthält, muss dieser durch einen Unterstrich ersetzt werden, da Benutzernamen nur einen Bindestrich enthalten dürfen. createDomainAndDomainAdmin(arguments); Das Skript wird im Benutzerverzeichnis des Paket-Admin gespeichert und ausführbar gemacht: function pwGen() { var chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz_#%&+!?="; var pwLength = 12; var randomstring = ''; for (var i=0; i<pwLength; i++) { var rnum = Math.floor(Math.random() * chars.length); randomstring += chars.substring(rnum,rnum+1); } return randomstring; } function createDomainAndDomainAdmin(args) { var domainName = args[0]; var userName = 'xyz00-' + args[0].replace("-","_"); var randomPassword = pwGen(); var createdUser = user.add({set:{name:userName,password:randomPassword,shell:'/bin/bash'}}); var createdDomain = domain.add({set:{name:domainName,user:userName}}); print("created domain " + createdDomain[0].name + " with domainadmin " + createdUser[0].name + " and password " + randomPassword); } ``` Die Funktion `pwGen()` erzeugt ein achtstelliges Passwort aus einer Reihe von vorgegebenen Zeichen. Empfehlenswert sind längere Passworte. Die Funktion `createDomainAndDomainAdmin(args)` erzeugt die Domain und den Domain-Admin. Der Namen des Domain-Admin ergibt sich aus dem Namen der Domain. Bei einer Domain, die einen Bindestrich enthält, muss dieser durch einen Unterstrich ersetzt werden, da Benutzernamen nur einen Bindestrich enthalten dürfen. Das Skript wird im Benutzerverzeichnis des Paket-Admin gespeichert und ausführbar gemacht: ``` console xyz00@h50:~$ chmod u+x createdomainandadmin.js @@ -126,29 +119,69 @@ created domain my-domain.de with domainadmin xyz00-my_domain.de and password slo%haY= ``` Wenn Sie alle Domains mit einem einzigen Domain-Admin verwalten, können Sie den Benutzernamen des Domain-Admin hart kodieren. Zeile 18 lautet dann: Wenn Sie alle Domains mit einem einzigen Domain-Admin verwalten, können Sie den Benutzernamen des Domain-Admin hart kodieren. ::: {.literalinclude lines="18"} createdomain.js ::: ```bash #!/usr/local/bin/hsscript -f createDomainAndDomainAdmin(arguments); function pwGen() { var chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz_#%&+!?="; var string_length = 12; var randomstring = ''; for (var i=0; i<string_length; i++) { var rnum = Math.floor(Math.random() * chars.length); randomstring += chars.substring(rnum,rnum+1); } return randomstring; } function createDomainAndDomainAdmin(args) { var domainName = args[0]; var userName = 'xyz00-doms'; var randomPassword = pwGen(); var createdUser = user.add({set:{name:userName,password:randomPassword,shell:'/bin/bash'}}); var createdDomain = domain.add({set:{name:domainName,user:userName}}); print("created domain " + createdDomain[0].name + " with domainadmin " + createdUser[0].name + " and password " + randomPassword); ``` ### JS-Skript zur Anlage einer Datenbank Das Skript zur Anlage einer Datenbank und eines Datenbank-Nutzers sieht ähnlich aus. ::: {.literalinclude linenos=""} createuseranddb.js ::: ```bash #!/usr/local/bin/hsscript -f Die Funktion `createMySQLUserAndDB(args)` erzeugt den Datenbank-Nutzer und die Datenbank. Da sich Datenbank und Datenbank-Nutzer nicht in die Quere kommen, haben sie der Einfachheit halber den gleichen Namen. createMySQLUserAndDB(arguments); Beim Aufruf des Skripts muss eine Zeichenkette übergeben werden, die Bestandteil der Namen von Datenbank und Datenbank-Nutzer wird. function pwGen() { var chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz_#%&+!?="; var pwLength = 18; var randomstring = ''; for (var i=0; i<pwLength; i++) { var rnum = Math.floor(Math.random() * chars.length); randomstring += chars.substring(rnum,rnum+1); } return randomstring; } function createMySQLUserAndDB(args) { var userName = 'xyz00_' + args[0]; var dbName = userName; var randomPassword = pwGen(); var createdUser = mysqluser.add({set:{name:userName,password:randomPassword}}); var createdDatabase = mysqldb.add({set:{name:dbName,owner:userName}}); print("created user " + createdUser[0].name + " and database " + createdDatabase[0].name + " with password " + randomPassword); ``` Die Funktion `createMySQLUserAndDB(args)` erzeugt den Datenbank-Nutzer und die Datenbank. Da sich Datenbank und Datenbank-Nutzer nicht in die Quere kommen, haben sie der Einfachheit halber den gleichen Namen. Beim Aufruf des Skripts muss eine Zeichenkette übergeben werden, die Bestandteil der Namen von Datenbank und Datenbank-Nutzer wird. ``` console xyz00@h50:~$ ./createuseranddb.js my_domain_wordpress @@ -156,10 +189,6 @@ ``` ::: attention ::: title Attention ::: Merken Sie sich die Passworte, da Sie diese später benötigen. Bei einer Datenbank-Anwendungen müssen Sie bei der Konfiguration den Datenbank-Benutzer und sein Passwort angeben. @@ -167,20 +196,20 @@ ## Nutzung der Python-API {#kap-python-api} Sie können HSAdmin auch remote über die Python-API des Programms ansprechen. Das ermöglicht es Ihnen von einem entfernten Rechner aus HSAdmin zu bedienen. Um mit der Python-API zu arbeiten müssen Sie zunächst die Python-Bindings für HSAdmin installieren. Sie können HSAdmin auch remote über die Python-API des Programms ansprechen. Das ermöglicht es Ihnen von einem entfernten Rechner aus HSAdmin zu bedienen. Um mit der Python-API zu arbeiten müssen Sie zunächst die Python-Bindings für HSAdmin installieren. ### Installation von hs.admin.api Wir installieren die Python-Bindings in einer virtuellen Python-Umgebung, sodass wir diese zunächst einrichten und aktivieren. Wir installieren die Python-Bindings in einer virtuellen Python-Umgebung, sodass wir diese zunächst einrichten und aktivieren. ``` console $ python3 -m venv /hsadmin $ . /hsadmin/bin/activate ``` <!-- todo: pipenv? --> Anschließend klonen wir die Python-Bindings und installieren sie. @@ -190,62 +219,69 @@ $ python setup.py install ``` Nun steht uns das Modul mit dem Python-Bindings in der virtuellen Umgebung zur Verfügung, sodass wir es in einem Skript importieren können. Nun steht uns das Modul mit dem Python-Bindings in der virtuellen Umgebung zur Verfügung, sodass wir es in einem Skript importieren können. ### Python-Skript Um die API in einem Skript nutzen zu können, müssen wir mit folgendem Code ein API-Objekt erzeugen. Um die API in einem Skript nutzen zu können, müssen wir mit folgendem Code ein API-Objekt erzeugen. ::: {.literalinclude linenos="" lines="1-9"} createdomain.py ::: ```python from hs.admin.api import API Nun ist es möglich, mit der üblichen Syntax HSAdmin im Skript anzusprechen. api = API(cas=dict( uri='https://login.hostsharing.net/cas/v1/tickets', service='https://config.hostsharing.net:443/hsar/backend'), credentials=dict(username='xyz00', password='sehr-geheim'), backends=[ 'https://config.hostsharing.net:443/hsar/xmlrpc/hsadmin', 'https://config2.hostsharing.net:443/hsar/xmlrpc/hsadmin']) Mit diesen beiden Befehlen legen wir beispielsweise einen Domain-Admin und eine neue Domain an. api.user.add(set={'name': 'xyz00-domain.de', 'password': 'geheim', 'shell': '/bin/bash'}) api.domain.add(set={'name': 'domain.de', 'user': 'xyz00-domain.de'}) ``` ::: {.literalinclude lines="11-12"} createdomain.py ::: Nun ist es möglich, mit der üblichen Syntax HSAdmin im Skript anzusprechen. Mit diesen beiden Befehlen legen wir beispielsweise einen Domain-Admin und eine neue Domain an. ```python api.user.add(set={'name': 'xyz00-domain.de', 'password': 'geheim', 'shell': '/bin/bash'}) api.domain.add(set={'name': 'domain.de', 'user': 'xyz00-domain.de'}) ``` Eine Datenbank lässt sich folgendermaßen anlegen. ::: {.literalinclude lines="11-12"} createuseranddb.py ::: ```python from hs.admin.api import API Nun wollen wir diese Befehle in ein Skript einbauen, das noch einige andere nützliche Dinge für uns erledigt. Reseller und Webmaster, die viele Anwendungen betreuen, buchen häufig mehrere Pakete bei Hostsharing, sodass sie gerne ein Skript hätten, dem sie auch das Kürzel für das Paket übergeben können, in dem sie eine Domain mit Datenbank einrichten möchten. Außerdem wäre es hilfreich, wenn das Skript dafür sorgt, dass Benutzernamen und Datenbankenname immer nach einem einheitlichen Schema erzeugt werden, sodass die Orientierung leichter fällt. In unserem Beispielskript übergeben wir daher dem Skript drei Argumente: api = API(cas=dict( uri='https://login.hostsharing.net/cas/v1/tickets', service='https://config.hostsharing.net:443/hsar/backend'), credentials=dict(username='xyz00', password='sehr-geheim'), backends=[ 'https://config.hostsharing.net:443/hsar/xmlrpc/hsadmin', 'https://config2.hostsharing.net:443/hsar/xmlrpc/hsadmin']) api.mysqluser.add(set={'name': 'xyz00_domain_de', 'password': 'geheim'}) api.mysqldb.add(set={'name': 'xyz00_domain_de', 'owner': 'xyz00_domain_de'}) ``` Nun wollen wir diese Befehle in ein Skript einbauen, das noch einige andere nützliche Dinge für uns erledigt. Reseller und Webmaster, die viele Anwendungen betreuen, buchen häufig mehrere Pakete bei Hostsharing, sodass sie gerne ein Skript hätten, dem sie auch das Kürzel für das Paket übergeben können, in dem sie eine Domain mit Datenbank einrichten möchten. Außerdem wäre es hilfreich, wenn das Skript dafür sorgt, dass Benutzernamen und Datenbankenname immer nach einem einheitlichen Schema erzeugt werden, sodass die Orientierung leichter fällt. In unserem Beispielskript übergeben wir daher dem Skript drei Argumente: 1. das Kürzel für das Paket 2. den Domainnamen 3. eine Projekt-ID Die Projekt-ID darf nicht mehr als 10 Zeichen umfassen, da sie zusammen mit dem fünfstelligen Paketkürzel in den Namen für Datenbank und Datenbank-Nutzer verwendet wird. Diese dürfen aber nicht länger als 16 Zeichen sein. Als Schema für eine Projekt-ID kommt also beispielsweise eine Kombination aus einer Kundennummer und einer Abkürzung in Frage. Wir verwenden in unserem Beispiel dafür eine dreistellige Kundennummer und die Abkürzung `wp` für Wordpress. Die Elemente trennen wir mit dem Unterstrich, da nur dieser als Namensbestandteil erlaubt ist. Die Projekt-ID darf nicht mehr als 10 Zeichen umfassen, da sie zusammen mit dem fünfstelligen Paketkürzel in den Namen für Datenbank und Datenbank-Nutzer verwendet wird. Diese dürfen aber nicht länger als 16 Zeichen sein. Als Schema für eine Projekt-ID kommt also beispielsweise eine Kombination aus einer Kundennummer und einer Abkürzung in Frage. Wir verwenden in unserem Beispiel dafür eine dreistellige Kundennummer und die Abkürzung `wp` für Wordpress. Die Elemente trennen wir mit dem Unterstrich, da nur dieser als Namensbestandteil erlaubt ist. Wenn wir für den Kunden mit der Kundennummer 23 im Paket `xyz00` eine Domain für einen Wordpress-Blog einrichten möchten, lautet der Aufruf des Skripts folgendermaßen: Wenn wir für den Kunden mit der Kundennummer 23 im Paket `xyz00` eine Domain für einen Wordpress-Blog einrichten möchten, lautet der Aufruf des Skripts folgendermaßen: ``` console $ python createall.py xyz00 hs-example.de 023_wp @@ -253,42 +289,72 @@ Der Code des Skripts sieht so aus: ::: {.literalinclude linenos=""} createall.py ::: ```python import random import string import sys from hs.admin.api import API from subprocess import check_output In den ersten fünf Zeilen importieren wir einige Module bzw. Funktionen, die wir benötigen. In den Zeilen 7 bis 9 lesen wir die übergebenen Argumente aus und speichern die Werte in entsprechenden Variablen. paketadmin = sys.argv[1] domainname = sys.argv[2] projektid = sys.argv[3] Um das API-Objekt zu erzeugen, benötigen wir das Passwort für den übergebenen Paket-Admin. Wir lesen in Zeile 11 das Passwort aus dem verschlüsselten Passwort-Tresor des Kommandozeilenprogramms `pass`{.interpreted-text role="command"} aus und speichern es in der Variablen `pw`. Weitere Informationen zu dem Programm finden Sie auf der Website <https://www.passwordstore.org/>. Sie können natürlich andere Programme wählen, um ein Passwort aus einem Passwort-Tresor auszulesen. Falls Sie nur ein Paket bei Hostsharing verwalten, können Sie das Passwort auch direkt ins Skript eintragen. Aus Sicherheitsgründen sollten Sie dies möglichst vermeiden. pw = check_output(["pass", "hostsharing/"+paketadmin]).decode("utf-8").strip("\n") Anschließend erzeugt das Skript das API-Objekt, wobei es als Credentials den Namen des Paket-Admin und sein Passwort übergibt. Der Namen des Paket-Admin ist identisch mit dem Paket, in dem die Domain angelegt werden soll. api = API(cas=dict( uri='https://login.hostsharing.net/cas/v1/tickets', service='https://config.hostsharing.net:443/hsar/backend'), credentials=dict(username=paketadmin, password=pw), backends=[ 'https://config.hostsharing.net:443/hsar/xmlrpc/hsadmin', 'https://config2.hostsharing.net:443/hsar/xmlrpc/hsadmin']) Danach wird ein Zufallsgenerator definiert, mit die Passworte erzeugt werden, die später benötigt werden. In Zeile 27 und 28 werden die Passworte für den Domain-Admin und den Datenbank-Nutzer erzeugt und in Variablen gespeichert. Direkt anschließend erzeugt das Skript aus den beim Aufruf übergebenen Werten die Namen für den Domain-Admin, den Datenbank-Nutzer und die Datenbank. def pwGen(stringLength=12): """Function to generate a random password """ In den Zeilen 33 bis 36 werden der Domain-Admin, die Domain, den Datenbank-Nutzer und die Datenbank angelegt. password_characters = string.ascii_letters + string.digits return ''.join(random.choice(password_characters) for i in range(stringLength)) pw_dadmin = pwGen() pw_dbuser = pwGen() dadmin = paketadmin+'-'+domainname.replace("-", "_") dbuser = paketadmin+'_'+projektid dbname = paketadmin+'_'+projektid api.user.add(set={'name': dadmin, 'password': pw_dadmin, 'shell': '/bin/bash'}) api.domain.add(set={'name': domainname, 'user': dadmin}) api.mysqluser.add(set={'name': dbuser, 'password': pw_dbuser}) api.mysqldb.add(set={'name': dbname, 'owner': dbuser}) print("Domainname:" +domainname) print("Domain-Admin: " + dadmin + " mit dem Passwort:" +pw_dadmin) print("Datenbank-Nutzer: " +dbuser + " Passwort:" +pw_dbuser) print("Datenbankname: " +dbname) ``` In den ersten fünf Zeilen importieren wir einige Module bzw. Funktionen, die wir benötigen. In den Zeilen 7 bis 9 lesen wir die übergebenen Argumente aus und speichern die Werte in entsprechenden Variablen. Um das API-Objekt zu erzeugen, benötigen wir das Passwort für den übergebenen Paket-Admin. Wir lesen in Zeile 11 das Passwort aus dem verschlüsselten Passwort-Tresor des Kommandozeilenprogramms `pass` aus und speichern es in der Variablen `pw`. Weitere Informationen zu dem Programm finden Sie auf der Website <https://www.passwordstore.org/>. Sie können natürlich andere Programme wählen, um ein Passwort aus einem Passwort-Tresor auszulesen. Falls Sie nur ein Paket bei Hostsharing verwalten, können Sie das Passwort auch direkt ins Skript eintragen. Aus Sicherheitsgründen sollten Sie dies möglichst vermeiden. Anschließend erzeugt das Skript das API-Objekt, wobei es als Credentials den Namen des Paket-Admin und sein Passwort übergibt. Der Namen des Paket-Admin ist identisch mit dem Paket, in dem die Domain angelegt werden soll. Danach wird ein Zufallsgenerator definiert, mit die Passworte erzeugt werden, die später benötigt werden. In Zeile 27 und 28 werden die Passworte für den Domain-Admin und den Datenbank-Nutzer erzeugt und in Variablen gespeichert. Direkt anschließend erzeugt das Skript aus den beim Aufruf übergebenen Werten die Namen für den Domain-Admin, den Datenbank-Nutzer und die Datenbank. In den Zeilen 33 bis 36 werden der Domain-Admin, die Domain, den Datenbank-Nutzer und die Datenbank angelegt. Und zum Schluss gibt das Skript alle Daten aus. Idealerweise würde ein solches Skript die neuen Benutzernamen mit den jeweiligen Passworten in den Passwort-Tresor eintragen, sodass dies nicht mit der Hand erledigt werden muss. Idealerweise würde ein solches Skript die neuen Benutzernamen mit den jeweiligen Passworten in den Passwort-Tresor eintragen, sodass dies nicht mit der Hand erledigt werden muss. <!-- todo: Im Text werden Zeilennummern erwähnt. Wir brauchen eine Lösung dafür --> source/referenz/hsadmin/webfrontend/index.md
@@ -1,8 +1,5 @@ # HSAdmin-Webfrontend HSAdmin verfügt über ein Webfrontend <https://admin.hostsharing.net> zur Verwaltung eines `Web-Pakets</referenz/webpaket/index>`{.interpreted-text role="doc"}. HSAdmin verfügt über ein Webfrontend <https://admin.hostsharing.net> zur Verwaltung eines Web-Pakets. Die Bedienung wurde in `kap-hsadmin-einstieg`{.interpreted-text role="numref"} beschrieben. Die Bedienung wurde im Abschnitt [Einführung in HSAdmin](#kap-hsadmin-einstieg) beschrieben. source/referenz/htaccess/index.md
@@ -1,22 +1,15 @@ # htaccess {#kap-htaccess} Das Verhalten des Apache Webservers lässt sich durch `.htaccess`{.interpreted-text role="file"}-Dateien im Verzeichnis einer Domain steuern. Die zentrale Konfiguration lässt sich damit für einzelne Verzeichnisse überschreiben. Eine `.htaccess`{.interpreted-text role="file"}-Datei wirkt sich auf das Verzeichnis aus, in dem sie sich befindet, und auf alle Unterverzeichnisse. Konfigurationen, die es ermöglichen, dass der Webserver Rechte anderer User erhalten kann, sind dabei nicht erlaubt. Das Verhalten des Apache Webservers lässt sich durch `.htaccess`-Dateien im Verzeichnis einer Domain steuern. Die zentrale Konfiguration lässt sich damit für einzelne Verzeichnisse überschreiben. Eine `.htaccess`-Datei wirkt sich auf das Verzeichnis aus, in dem sie sich befindet, und auf alle Unterverzeichnisse. Konfigurationen, die es ermöglichen, dass der Webserver Rechte anderer User erhalten kann, sind dabei nicht erlaubt. ## Bereiche einer Website mit Passwort schützen Ein typischer Anwendungsfall ist der Schutz eines bestimmten Verzeichnisses mit einem Passwort. Dazu muss zunächst eine Passwort-Datei mit dem Namen `.htpasswd`{.interpreted-text role="file"} im `etc`{.interpreted-text role="file"}-Verzeichnis der Domain angelegt werden. Dies erfolgt mit dem Programm `htpasswd`{.interpreted-text role="command"}. Ein typischer Anwendungsfall ist der Schutz eines bestimmten Verzeichnisses mit einem Passwort. Dazu muss zunächst eine Passwort-Datei mit dem Namen `.htpasswd` im `etc`-Verzeichnis der Domain angelegt werden. Dies erfolgt mit dem Programm `htpasswd`. ``` console xyz00-doms@h97:~$ cd ~/doms/hs-example.de/etc @@ -26,13 +19,10 @@ xyz00-doms@h97:~$ ``` Statt der Sternchen geben Sie das gewünschte Passwort ein. Es wird verschlüsselt gespeichert. Die Option `-c` wird nur bei der ersten Anlage der Passwort-Datei gesetzt. Wenn ein Passwort für einen zweiten Benutzer eingerichtet wird, muss `htpasswd`{.interpreted-text role="command"} ohne die Option aufgerufen werden, da sonst die Datei komplett überschrieben würde und das Passwort für den ersten Benutzer verloren ginge. Statt der Sternchen geben Sie das gewünschte Passwort ein. Es wird verschlüsselt gespeichert. Die Option `-c` wird nur bei der ersten Anlage der Passwort-Datei gesetzt. Wenn ein Passwort für einen zweiten Benutzer eingerichtet wird, muss `htpasswd` ohne die Option aufgerufen werden, da sonst die Datei komplett überschrieben würde und das Passwort für den ersten Benutzer verloren ginge. ``` console xyz00-doms@h97:~$ cd ~/doms/hs-example.de/etc @@ -42,10 +32,8 @@ xyz00-doms@h97:~$ ``` Diese Passwort-Datei kann nun für beliebige Verzeichnisse der Domain genutzt werden. Um ein Verzeichnis mit einem Passwort zu schützen, legen Sie dazu einfach eine `htaccess`{.interpreted-text role="file"}-Datei mit folgendem Inhalt in dem betreffenden Verzeichnis an. Diese Passwort-Datei kann nun für beliebige Verzeichnisse der Domain genutzt werden. Um ein Verzeichnis mit einem Passwort zu schützen, legen Sie dazu einfach eine `htaccess`-Datei mit folgendem Inhalt in dem betreffenden Verzeichnis an. ``` text order allow,deny @@ -56,19 +44,14 @@ AuthUserFile /home/doms/hs-example.de/etc/.htpasswd ``` Beim Aufruf des Bereichs im Webbrowser wird der Besucher aufgefordert, den Benutzernamen (in unserem Beispiel `peter` oder `paula`) sowie das jeweilige Passwort einzugeben. Beim Aufruf des Bereichs im Webbrowser wird der Besucher aufgefordert, den Benutzernamen (in unserem Beispiel `peter` oder `paula`) sowie das jeweilige Passwort einzugeben. ## Weiterleitungen (Redirects) Ein anderer typischer Anwendungsfall sind Redirects. Weiterleitungen werden benötigt, wenn alte Inhalte verschoben werden, sodass sie unter einer neuen Webadresse erreichbar sind. Weiterleitungen verhindern, dass Links, die von anderen Webseiten auf den verschobenen Inhalt gesetzt wurden, ins Leere gehen. Dazu können Sie eine `htaccess`{.interpreted-text role="file"}-Datei im obersten Verzeichnis anlegen, in dem Sie alle Weiterleitungen aufführen. Ein anderer typischer Anwendungsfall sind Redirects. Weiterleitungen werden benötigt, wenn alte Inhalte verschoben werden, sodass sie unter einer neuen Webadresse erreichbar sind. Weiterleitungen verhindern, dass Links, die von anderen Webseiten auf den verschobenen Inhalt gesetzt wurden, ins Leere gehen. Dazu können Sie eine `htaccess`-Datei im obersten Verzeichnis anlegen, in dem Sie alle Weiterleitungen aufführen. ``` text Redirect permanent /alte-url-1/ /neue-url-1/ @@ -78,17 +61,12 @@ ## Eigene 404-Datei festlegen Wenn ein Benutzer auf Ihrer Website eine ungültige Webadresse aufruft, zeigt der Browser eine 404-Meldung an. Sie können diese Standardanzeige anpassen, indem Sie den Webserver anweisen, bei einem 404-Fehler eine besondere Webseite anzuzeigen. Wenn ein Benutzer auf Ihrer Website eine ungültige Webadresse aufruft, zeigt der Browser eine 404-Meldung an. Sie können diese Standardanzeige anpassen, indem Sie den Webserver anweisen, bei einem 404-Fehler eine besondere Webseite anzuzeigen. ``` text ErrorDocument 403 /404.html ``` Weitere Möglichkeiten, das Verhalten des Webservers über `htaccess`{.interpreted-text role="file"}-Dateien zu steuern, finden Sie in der [Apache-Dokumentation](https://httpd.apache.org/docs/2.4/). Eine deutschsprachige Anleitung und Beispielkonfigurationen finden Sie unter: <https://wiki.selfhtml.org/wiki/Webserver/htaccess> Weitere Möglichkeiten, das Verhalten des Webservers über `htaccess`-Dateien zu steuern, finden Sie in der [Apache-Dokumentation](https://httpd.apache.org/docs/2.4/). Eine deutschsprachige Anleitung und Beispielkonfigurationen finden Sie unter: <https://wiki.selfhtml.org/wiki/Webserver/htaccess> source/referenz/logging/index.md
@@ -2,33 +2,20 @@ ## Traffic {#kap-traffic} Im Web-Paket wird jeden Monat eine Traffic-Log-Datei für den erzeugten Traffic erzeugt, die den Verbrauch eines jeden Tages pro Zeile enthält. Der Traffic setzt sich aus HTTP-, FTP- und Mail-Traffic (POP3, IMAP) zusammen. Bei Überschreitung des gebuchten Traffics wird der `Paket-Admin`{.interpreted-text role="role"} automatisch per E-Mail informiert. Im Web-Paket wird jeden Monat eine Traffic-Log-Datei für den erzeugten Traffic erzeugt, die den Verbrauch eines jeden Tages pro Zeile enthält. Der Traffic setzt sich aus HTTP-, FTP- und Mail-Traffic (POP3, IMAP) zusammen. Bei Überschreitung des gebuchten Traffics wird der Paket-Admin automatisch per E-Mail informiert. Der Traffic für einzelne Benutzer innerhalb eines Pakets kann nicht beschränkt werden. Der Traffic für einzelne Benutzer innerhalb eines Pakets kann nicht beschränkt werden. ## Traffic-Log-File {#kap-traffic-log} Der im Web-Paket erzeugte Traffic wird dem Paket-Admin unter `/home/pacs/xyz00/var/traffic-iptables-YYYY-MM.log`{.interpreted-text role="file"} zugänglich gemacht. Das Logfile hat folgenden Aufbau: Der im Web-Paket erzeugte Traffic wird dem Paket-Admin unter `/home/pacs/xyz00/var/traffic-iptables-YYYY-MM.log` zugänglich gemacht. Das Logfile hat folgenden Aufbau: +-----+----+-------+-------+--------+---------+-----+--------+-----+ | Da | P | M | Tages | Traffi | IP- | T | IP-A | T | | tum | ak | onats | limit | csumme | Adresse | raf | dresse | raf | | | et | limit | | | 1 | fic | 2 | fic | | | | | | | | 1 | | 2 | +=====+====+=======+=======+========+=========+=====+========+=====+ | 2 | x | > | 34 | > | 83.223 | 89. | | 0. | | 020 | yz | 10240 | 1.333 | 89.367 | .79.125 | 367 | | 000 | | -01 | 00 | | | | | | | | | -01 | | | | | | | | | +-----+----+-------+-------+--------+---------+-----+--------+-----+ | Datum | Paket | Monatslimit | Tageslimit | Trafficsumme | IP 1 | Traffic 1 | IP 2 | Traffic 2 | |------------|-------|-------------|------------|--------------|---------------|-----------|------|-----------| | 2020-01-01 | xyz00 | 10240 | 341.333 | 89.367 | 83.223.79.125 | 89.367 | | 0.000 | Die Bedeutung der einzelnen Spalten: @@ -56,15 +43,7 @@ ## HTTP-Log {#kap-http-log} Das in kurzen Abständen aktualisierte Logfile `web.log`{.interpreted-text role="file"} des Webservers steht im Paketverzeichnis `/home/pacs/xyz00/var/`{.interpreted-text role="file"} dem Paket-Admin zur Verfügung. Aus dem Logfile werden nach Ablauf des Tages einzelne Logfiles für alle abgerufenen Domains und Sub-Domains generiert und unter `/home/pacs/xyz00/var/web-www.example.org-YYYYMMDD-HHMI.log.gz`{.interpreted-text role="file"} gespeichert. Diese Dateien werden 48 Tage archiviert und nach Ablauf dieser Frist automatisch gelöscht. Das Error-Logfile `web.err` des Webservers steht unter `/home/pacs/xyz00/var`{.interpreted-text role="file"} dem Paket-Admin zur Verfügung. Das in kurzen Abständen aktualisierte Logfile `web.log` des Webservers steht im Paketverzeichnis `/home/pacs/xyz00/var/` dem Paket-Admin zur Verfügung. Aus dem Logfile werden nach Ablauf des Tages einzelne Logfiles für alle abgerufenen Domains und Sub-Domains generiert und unter `/home/pacs/xyz00/var/web-www.example.org-YYYYMMDD-HHMI.log.gz` gespeichert. Diese Dateien werden 48 Tage archiviert und nach Ablauf dieser Frist automatisch gelöscht. Das Error-Logfile `web.err` des Webservers steht unter `/home/pacs/xyz00/var` dem Paket-Admin zur Verfügung. source/referenz/php/index.md
@@ -1,19 +1,14 @@ # PHP {#kap-php} PHP ist standardmäßig über FastCGI konfiguriert. In den Ordnern `fastcgi` und `fastcgi-ssl` unterhalb des Domainordners findet sich eine phpstub-Datei; der Webserver liefert php-Dateien mit den Rechten des Users aus. PHP ist standardmäßig über FastCGI konfiguriert. In den Ordnern `fastcgi` und `fastcgi-ssl` unterhalb des Domainordners findet sich eine phpstub-Datei; der Webserver liefert php-Dateien mit den Rechten des Users aus. ## Eigene PHP Konfiguration Im Ordner `fastcgi` oder `fastcgi-ssl` wird die Datei php.ini angelegt. In dieser Datei werden die Änderungen gegenüber den Standardwerten eingetragen. In dieser Datei werden die Änderungen gegenüber den Standardwerten eingetragen. Eine Übersicht über die Standardwerte von PHP können unter `/etc/php/7.4/cgi/php.ini`{.interpreted-text role="file"} eingesehen werden. Eine Übersicht über die Standardwerte von PHP können unter `/etc/php/7.4/cgi/php.ini` eingesehen werden. ## PHP Prozesse stoppen @@ -25,19 +20,14 @@ ## phpstub Die Datei `phpstub` ist standardmäßig vorhanden, alternativ kann sie aus dem Ordner `/usr/local/src/phpstub` wiederhergestellt werden. Die Datei `phpstub` ist standardmäßig vorhanden, alternativ kann sie aus dem Ordner `/usr/local/src/phpstub` wiederhergestellt werden. ## Vorinstallierte PHP Version wechseln Hostsharing bietet neben der vom Betriebssystem vorinstallierten Standardversion 7.4 auch PHP 7.0, 7.1, 7.2, und 7.3 an. Hostsharing bietet neben der vom Betriebssystem vorinstallierten Standardversion 7.4 auch PHP 7.0, 7.1, 7.2, und 7.3 an. Um die Version zu wechseln, genügt es, den jeweiligen phpstub auszutauschen. Version 7.3 liegt unter `/usr/local/src/phpstub/phpstub73`{.interpreted-text role="file"}; das Versionformat ist entsprechend `/usr/local/src/phpstub/phpstubXX`{.interpreted-text role="file"}. Um die Version zu wechseln, genügt es, den jeweiligen phpstub auszutauschen. Version 7.3 liegt unter `/usr/local/src/phpstub/phpstub73`; das Versionformat ist entsprechend `/usr/local/src/phpstub/phpstubXX`. ### phpstub für PHP 7.3 kopieren @@ -58,4 +48,4 @@ verwendet. Auf die gleiche Weise können auch PHP 7.2, PHP 7.1 oder PHP 7.0 aktiviert werden aktiviert werden. source/referenz/wartungsfenster/index.md
@@ -1,26 +1,19 @@ # Wartungsfenster Es gibt Standard-Wartungsfenster von 1 bis 2 Uhr (*früh*) und von 4 bis 5 Uhr (*spät*). Hives/Server mit ungeraden Nummern (h01, h03, ... h99) werden im Rahmen des frühen Wartungsfensters gewartet, Hives/Server mit geraden Nummern (h02, h04, ... h98) werden im späten Wartungsfenster gewartet. Es gibt Standard-Wartungsfenster von 1 bis 2 Uhr (*früh*) und von 4 bis 5 Uhr (*spät*). Hives/Server mit ungeraden Nummern (h01, h03, ... h99) werden im Rahmen des frühen Wartungsfensters gewartet, Hives/Server mit geraden Nummern (h02, h04, ... h98) werden im späten Wartungsfenster gewartet. Im Fall von Managed Servern haben die Mitglieder folgende Wahlmöglichkeiten: Im Fall von Managed Servern haben die Mitglieder folgende Wahlmöglichkeiten: - Tausch des Wartungsfensters *früh* gegen *spät* oder umgekehrt. Die Festlegung kann individuell je Managed Server getroffen werden. Dieser Service ist kostenfrei. - Tausch des Wartungsfensters *früh* gegen *spät* oder umgekehrt. Die Festlegung kann individuell je Managed Server getroffen werden. Dieser Service ist kostenfrei. - Vereinbarung individueller Wartungsfenster, Vorankündigungsfristen, Absprachen und Vorgehensweisen. Die Berechnung erfolgt dann abhängig vom konkreten Aufwand im Wartungsfall gemäß unseres gültigen Abrechnungssatzes. - Vereinbarung individueller Wartungsfenster, Vorankündigungsfristen, Absprachen und Vorgehensweisen. Die Berechnung erfolgt dann abhängig vom konkreten Aufwand im Wartungsfall gemäß unseres gültigen Abrechnungssatzes. Mit dieser Änderung ermöglichen wir den Mitgliedern weitreichende Flexibilität und die Möglichkeit, individuelle Prozesse verbindlich festzulegen. Mit dieser Änderung ermöglichen wir den Mitgliedern weitreichende Flexibilität und die Möglichkeit, individuelle Prozesse verbindlich festzulegen. Selbstverständlich werden auch im Falle der kostenfreien Standardwartung angemessene Ankündigungsfristen eingehalten. Selbstverständlich werden auch im Falle der kostenfreien Standardwartung angemessene Ankündigungsfristen eingehalten.