Eine Frage an die PyInfra-Admins hier im fediverse. Ich hab mich in den letzten Tagen mit diesem Tool beschäftigt und so einige deploy-scripte geschrieben. Nun komme ich an Punkte, wo ich nicht sicher bin, ob das, was ich gerade mache, so im Sinne des Erfinders ist.
Ich möchte ein paar Server (6 - 10) per pyinfra einrichten. Dabei werden einige Server komplette Webserver mit PHP, PHP-FPM, diversen WebApps (Nextcloud, CMS, WIKI, etc.) und einige bekommen nur einen VPN-Server. Das ist so ganz grob mein Ziel.
Ich bin so weit, dass PyInra mir den kompletten Server aufsetzt. Von der statischen IP, ein paar Anpassungen an der .bashrc, den SSH-Port ändert, Apache, LetsEncrypt, fail2ban, php, php-fpm (beides für verschiedene php-versionen) usw. alles installiert. Toll!
Jetzt bin ich garde dabei, ein Deploy-Script zu schreiben, das mir die Umgebung für eine WebApp einrichtet: vhost.conf für die Domain erstellen und konfigurieren, User, Gruppe, HomeDirs, LogDirs usw. erstellen, LetsEncrypt-Zertifikate holen, usw.
Danach sollen dann all die WebApps (also zum Beispiel nextcloud) per deploy-script installiert werden.
Das sieht alles schon ziemlich gut aus und ich kann mir vorstellen, wie das alles zusammen spielen wird. Aber es ist noch ein weiter Weg.
Mein Problem ist gerade, dass mein Inventory-Script allein nur für einen Host in Kürze bei etwa 200 Zeilen an Host-Data Umfang hat. Ich habe die Befürchtung, dass ich bei dem Umfang an Parametern den Überblick verliere und Fehler mache. Wenn man nur mit dem simplen Dictonary von Python arbeitet, kann man leicht einen Fehler machen, wenn man einen Key angibt und sich dabei vertippt. Es gibt ja keine Fehlerkorrektur oder ein Check, dass der Name des Keys richtig geschrieben wurde. Oder man vergisst einen Eintrag im Dictonary - also in der Beschreibung des Hostes - vorzunehmen. Und dann fliegt hinterher alles auseinander. Ich bin nun dabei, eigene Klasse für die Hosts, Apps und so weiter zu erstellen und dafür zu sorgen, dass dort alles korrekt ist. Aber das ist eine riesige Menge an Arbeit, die mal nicht in 2 Tagen erledigt scheint.
Ist das sinnvoll? Ist das der richtige Weg? Wie handhabt ihr das?
@robertmx @@linux on Linux.Community #pyinfra #linux #administration #it
Tech Cyborg hat dies geteilt.
robertmx
Als Antwort auf Jeff Toon • • •Die Frage wo die zur Konfiguration nötigen Daten leben ist recht komplex. Ich versuche viele defaults in die einzelnen Deploys zu verschieben und nur einen minimalen Satz an Informationen im inventory zu halten.
Ein anderer Ansatz wäre es, vom Inventory weitere Configfragmente (evtl. als Dataclass z.B.) zu laden und diese dann nicht alle in einer Datei zu haben, sondern nach Funktion gruppiert. Grundsätzlich erstelle ich einzelne deploys für die verschiedenen services
1/x
Jeff Toon mag das.
robertmx
Als Antwort auf robertmx • • •und jedes deploy hat ein Konfigurationsobjekt, in welchem alle Variable zu diesem deploy vorhanden sind (meist eine dataclass).
Es gibt soweit ich weiß, keinen kanonischen Weg das Problem zu managen. Bei Ansible hatte ich mehrere getrennt group_vars Dateien, das war aber irgendwann auch leider völlig undurchsichtig.
2/2
Jeff Toon mag das.
Jeff Toon
Als Antwort auf robertmx • •dataclass ist ein prima Tipp! Das kannte ich noch nicht.
robertmx
Als Antwort auf Jeff Toon • • •Ich versuche das eher nach Diensten zu gruppieren. Also ein deploy für nextcloud, was dann u.U. auch einzelne Teildeploys für bestimmt Komponenten (collabora office z.B.) enthält.
Sobald etwas von mehr als einem Dienst benötigt wird (z.B. Apache), bekommt es ein eigenes Deploy.
Im Inventar habe ich eine Beschreibung, welche Dienste auf welchen Hosts laufen (das besagte Konfigurationsobjekt bzw. Teile davon). Das Deploy konsumiert dann diese Information zusammen mit den Defaults 1/x
Jeff Toon mag das.
robertmx
Als Antwort auf robertmx • • •robertmx
Als Antwort auf robertmx • • •Bin allerdings jederzeit neugierig andere/bessere/elegantere Lösungen für dieses Problem 😁.
3/3
Jeff Toon
Als Antwort auf robertmx • •robertmx
Als Antwort auf Jeff Toon • • •Jeff Toon
Als Antwort auf robertmx • •Dazu habe ich eine HostConfig-Klasse, die all diese Yamls einliest und mir die Daten als Dictonary und mit ausgesuchten Methoden als ShortCut (is_apache() ) zur Verfügung stellt.
Keine Ahnung, ob das Konzept so sinnvoll ist. 🤔 Ich komme erstmal mit klar. 🙂
robertmx
Als Antwort auf Jeff Toon • • •Jeff Toon mag das.