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.

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

Als Antwort auf robertmx

@robertmx Ah, ok ... du hast dann ein deploy für apache, ein deploy für den nginx, einen für php, usw. Du rufst dann also gezielt auf, was du jetzt bei dem einen oder anderen Server deployen willst. Ein spannender Ansatz. Ich hatte jetzt in meinen Host-Data-Daten für jeden Host per Flag eingebunden, ob apache, nginx, php & co installiert werden sollen, welche ssh-zugangsdaten es gibt, welche Apps installiert sind, usw. Wenn man dann noch die php.ini-Werte für apache, cli, php-fpm und die einzelnen pools festlegen möchte, dann wirds langsam eeecht viel 😉
dataclass ist ein prima Tipp! Das kannte ich noch nicht.
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

Als Antwort auf robertmx

@robertmx Ich habe die letzten Tage immer mal etwas "gebastelt". Bei mir sieht es jetzt so aus, dass ich mit yaml.configs arbeite, die ich bei jedem pyinfra-Lauf abarbeite. Da gibt es für jeden Server einen eigenen Komplex an yamls: Netzwerk, SSH, PHP, usw. Und dazu gibt es für jede dort installierte App (Nextcloud, CMS, etc.) eine yaml mit allen nötigen Angaben wie DocRoot, Domain, usw. Das ist bestimmt nicht der Weisheit letzter Schluss, aber es funktioniert 🙂 Und es ist schon irgendwie cool, wenn man sich zurücklehnen kann, während ein Script all die Installationsschritte auf dem Server durchführt.
Als Antwort auf robertmx

@robertmx Ich hab einen separaten Ordner als mein Rechenzentrum deklariert und dort für jeden Server einen Unterordner mit dem FQDN des Servers (webserver_my_domain_de) und dort gibt es einen Ordner config und einen Ordner apps. Dort residieren die yamls. Config enthält alles Grundlegende zum Server wie Netzwerk, SSH, PhpEinstellungen, Liste der aktiven Dienste, usw. Und in apps liegen yamls für jede App, die auf dem Server installiert werden soll. Da steht dann die Domain, eine Id, ggf, Admin-User E-Mail und was vielleicht sonst noch nötig sein könnte und die PHP.ini-Werte für den PHP-FPM-Pool.
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. 🙂

Hallo Linux-Admins, ich brauche mal einen Rat. Ich bin seit recht vielen Jahren mit Linux-Servern "zugange". Ich komme mit der Shell gut zurecht. Einen LAMP-Server aufzusetzen, ist im Grunde mehr oder weniger kein Ding. Programmierung ist jetzt auch nicht so das Problem. Aber ich mache das nicht 24/7. Ich hab noch andere "Hobbies" im WebUmfeld. Gerade bei Neuerungen und Problemlösungen brauche ich einfach zu lange. Daher würde ich so manche Admin-Aufgaben gern automatisieren.

Wie managed man seine Server am sinnvollsten? Sind Tools wie Froxlor, Cockpit, ISPconfig und der gleichen zur Unterstützung wirklich sinnvoll? Ich habe jetzt 2 Jahre mit YunoHost experimentiert. Das System ist schick, aber bei der Umstellung von der einen auf die andere Version knallts. Die Community ist nett und hilfsbereit, aber wenn es Probleme und Fragen gibt und man nach 4 Wochen auf verschiedene Posts so gar keine Reaktion bekommt, dann ist bei allem Verständnis und Geduld auch für ein OpenSource-Tool etwas knifflig. Da stellt sich dann auch im halb-privaten Umfeld doch die Frage der Praktikabilität.

So ein komplexes Tool nun auch noch vollständig bis in den letzten Winkel zu durchdringen, um die Probleme und Bugs dann selbst zu lösen, sprengt dann doch den Rahmen meiner verfügbaren Zeit.

Ich hab jetzt angefangen, wieder alles per Hand zu installieren und zu scripten. Aber ist das wirklich sinnvoll, das Rad neu zu erfinden? Es gibt immer wieder Änderungen an den Systemen und dann buddelt man sich durch die Blogs und Doku, bis man endlich aktuelle Infos hat. Anderseits, weiß man dann, was man hat und kennt sich aus.

Ich bin gerade etwas hin-und-her-gerissen. Habt ihr Tipps, Anregungen oder Gedanken für mich?

@@linux on Linux.Community #linux #administration #debian #it

teilten dies erneut

Als Antwort auf Jeff Toon

Ihr habt hier ja jetzt immer wieder ansible angeführt. Ich bin selbst darüber vor ein paar Monaten gestolpert und fand das vom Lesen so ganz spannend. Wie ist denn so eure Erfahrung mit dem Einarbeiten in ansible? Und letztendlich ja auch Docker?

Ist das eine Sache von "mal n Stündchen einlesen und dann gehts los" oder ist das für jedes Thema eher "Eine Woche bei Keks und Kaffee einschließen und durchboxen"? Ich finde es ja super toll, immer etwas Neues zu lernen. Allerdings lässt einem das Leben nicht immer den Freiraum dazu ...

Anderseits, wenn ich jetzt 4 Tage mit dem BashScripten verbringe, kann ich auch 2 Tage in ein neues Tool investieren und bin dann schon nach 3 Tagen vielleicht fertig. Vielleicht 😉

@Lukas Rotermund @Rainer "friendica" Sokoll @robertmx @@linux on Linux.Community

Als Antwort auf Jeff Toon

@lukasrotermund @rainer

Naja es ist schon eine Lernkurve, man kann aber ganz gut nach ca. einer Stunde mit learning by doing starten.

Ich komme aus der Pythonecke, daher sagt mir PyInfra deutlich besser zu. Datenmanipulation in Ansible (yaml) ist mühsam, die Alternativen dazu auch.

PyInfra ist von der Abstraktion auch deutlich näher an dem dir bekannten shellscripting dran. Also mit einem Background in Programmierung würde ich PyInfra probieren, sonst Ansible.

Als Antwort auf Jeff Toon

Ich antworte mal wild auf alles 😉
Das Konzept "Reverse proxy mit Diensten, die nur auf loopback lauschen" ist total sinnvoll und skaliert.
Neue Dienste mache ich nur so. Wenn man möchte, hat man einen Wildcard-Record im DNS (*.example.com) und auf dem Reverse proxy ein Wildcard-Zertifikat von LE (es gibt übrigens nicht nur LE als kostenlose CA mit ACME-Support) - und schon hat man seine neue Website in kürzester Zeit am Netz.
Docker-Container aktuell halten: containrrr.dev/watchtower/
Bei Containern sollte man aber unbedingt darauf achten, daß man Images verwendet, die auch gepflegt werden, also günstigstenfalls solche, die vom Softwareanbieter selbst kommen. Wie bei friendica zum Beispiel 😉
fail2ban: Wird m.E. überbewertet. Wer Du unsichere Dienste anbietet, sollte die reparieren - und das kann fail2ban nicht. Immerhin hält es die Logs kürzer 😉 Wäre nicht meine erste Prio.
Go: Das ist nun ziemlich egal, in welcher Sprache eine Software geschrieben ist, solange man nicht debuggen möchte. Go hat den Vorteil, daß es (immer?) nur ein Binary ist, das alle Abhängigkeiten reingelinkt hat und dann aber auch entsprechend groß ist.
Ansible/Python: Ansible IST Python! Und wers richtig ausreizen möchte, kann als Template-Sprache Jinja einsetzen, was einem Pythonista entgegenkommen sollte.
Ansible ist nichts, was man in zwei Stunden lernt. Aber die Doku ist gut, es gibt eine große Community.
Und man muß die Kosten-Nutzen-Relation sehen. Bei privaten 5 Kisten würde ich wohl kein Ansible einsetzen, es sei denn, ich wäre ein neugieriges Spielkind mit Spaß an Software.

Eigene Kinder + eigener Kleingarten + eigene Technik > 100% Auslastung. Für so etwas Banales wie einen regulären Job und Geld verdienen hab ich keine Zeit mehr. An solche persönlichen Dinge wie Freunde treffen, Sport machen oder liebe, alte Hobbys wieder angehen, wage ich ja nicht mal zu denken ...

Gibt man den Kleingarten wieder auf? Unsere Oase, wenn in Berlin wieder jeder Quadratmeter Grün belegt ist?

Oder schmeiße ich die ganze Technik - unsere Computer, Netzlaufwerke, Clouds, BackupServer, Firewalls und diesen ganzen "Mist" - einfach weg und gehe zurück auf Zettel und Stift?

... ich fürchte, die Kinder müssen arbeiten gehen. 🤔

#fedielten @FediEltern group #papasein #kleingarten #garten #natur #kinder #lebenAmLimit #computer #it #Job #Arbeit #linux #Berlin

teilten dies erneut