
Wir haben uns einmal entschlossen, unsere routinemäßigen Arbeitsmomente zu automatisieren. Erstelle dein eigenes Ensemble (ansible) oder so ähnlich. Ich bin auf die Website des Ensembles geklettert, habe mir angesehen, wie es funktioniert
... es stellt über ssh eine Verbindung zum Remote-Server her und führt dort eine Art Skripte aus ... Hör auf, dachte ich, braucht das wirklich ein Ensemble? Ohne Ensemble kann ich es selbst ... alleine ... schaffen! Und damit nicht nur ich, entschied ich mich, eine Webanwendung zu schreiben. Die Anwendung wurde
Update Server genannt , abgekürzt als
UpS .
Morgen! Unter dem Schnitt viele Bilder und ein paar Gifs.
Ich entschied mich, die Anwendung mit Python und Dzhanga zu machen. Sowohl in diesem als auch im anderen Bereich gibt es genügend Spezialisten und „Spezialisten“. Daher werde ich jetzt nicht die Anzahl der Codezeilen messen.
Interessenten können
hier nachsehen
, dass es keine Geheimnisse gibt, und die meisten Teams sind auf unser Projekt spezialisiert. Ich werde nur erzählen (und zeigen), welche Funktionen sich in der Anwendung implementiert haben. Also. Ich habe meine Python aufgenommen, übrigens, meine Python ist nicht sehr groß, normal, durchschnittlich 2,7. Ich bekam für ihn einen brandneuen (damals) dzhang 1.10 und fing an, sie zu verbinden. Und so und so verbunden. Ich ging von oben und unten hinein, in jeder Hinsicht, die ich versuchte. Und so stellte sich am Ende heraus.

Aber als erstes beginnt alles mit einer so einfachen Seite mit einer Beschreibung.

Durch Klicken auf
Projects Jumbotron gelangen wir zur Projektauswahlseite.

Nachdem wir das Projekt ausgewählt haben, gelangen wir zur Hauptseite mit einer Liste von Servern, Skripten usw.

Kommen wir zu den Details. Die Anwendung identifizierte mehrere Entitäten: Server (Server), Skript (Skript), Service Pack (Update), Aufgabe in der Krone (Cron-Job), Ereignis in der Geschichte (Ereignis), Projekt (Projekt) und nicht ganz die Essenz von Dump (Dump).
Ein leichter Exkurs
Wir spielen mit meinem Sohn in der Titan-Quest, oder besser gesagt, ich spiele, und er schaut) Dort fallen einige Artefakte, in der russischen Version Entitäten genannt, aus den Monstern heraus. Eines schönen Tages fiel mir dort eine Art Essenz von Achilles ein. Das Bild ist etwas anderes, aber aus derselben Oper)
Der Sohn sah und rief:
- Papa, sieh dir Achilles 'Glaubwürdigkeit an!)
Das Wesentliche ist das Projekt. Server, Skripte und Updates hängen am Projekt. Crown Jobs und Dumps werden erstellt. Objekte werden auf den entsprechenden Registerkarten verteilt. Links befindet sich ein Menü mit einer Liste von Befehlen. Lassen Sie uns die Lesezeichen durchgehen. Erste Lesezeichen-Skripte.

Hier sehen wir die verfügbaren Skripte und Server (Server sind auf allen Registerkarten verfügbar, da sie fast immer benötigt werden). Skripte können aus einer Datei geladen oder in der Benutzeroberfläche mit der Schaltfläche
Hinzufügen erstellt werden . Unterstützt von SH-, PY-, YML- und SQL-Skripten.

Im Skriptfenster gibt es eine Beschreibung (
Beschreibung ), einen Code (
Vorschau ), einen Autor und ein Datum. Für SH- und PY-Skripte können Optionen hinzugefügt werden (
Optionsfeld ). Das Skript (und jedes andere Objekt) wird durch Klicken auf einen beliebigen Teil des Bedienfelds ausgewählt (mit Ausnahme der "Schnell" -Schaltflächen). Klicken Sie auf das Skript (zweites, drittes usw.), klicken Sie auf den Server (zweites, drittes usw.) und klicken Sie auf das
Skript Ausführen . Das ausgewählte Skript oder die ausgewählten Skripte werden auf dem oder den ausgewählten Servern ausgeführt. Wenn Sie ein Skript "schnell" ausführen müssen, können Sie die Schaltfläche "schnell" im Skriptfenster verwenden, auf den Server (zweites, drittes usw.) klicken und auf
Ausführen des gewünschten Skripts klicken. Beim Schreiben eines Artikels wurden Änderungen angezeigt. Getrennte SQL-Skripte vom Rest, fügte einen separaten Befehl und ein Permichon zum Ausführen von Esquels hinzu. Dies erlaubte zum Beispiel, nur Rechte zum Ausführen von Esquels zu geben, weil SH und PY sind viel leistungsfähiger und bieten nahezu unbegrenzte Möglichkeiten. Aber ich habe die Screenshots nicht wiederholt.) Ich konnte mich auf Skripte beschränken, fast alles konnte mit ihnen gemacht werden, aber es war schon schwierig zu stoppen.
Gehen Sie voran, Service Packs.

Auf dieser Registerkarte können Sie neue Updates hinzufügen, auf Server kopieren und Updates durchführen.

Tatsächlich können es beliebige Dateien sein, da in diesem Beispiel eine reguläre txt-Datei als Testupdate verwendet wird. Sie laden eine Datei auf den Server hoch (meistens handelt es sich um eine Zip-Datei) und verwenden sie irgendwie mithilfe von Skripten. Bei Updates werden auch eine Beschreibung, ein Autor, ein Datum und eine Größe angezeigt.
Als nächstes kommen die Müllkippen.

Es wird eine Liste der Dateien angezeigt, die vom Befehl
Get dump empfangen oder hier vom Computer heruntergeladen wurden.

Dumps haben keine Beschreibung, es gibt nur einen Namen, eine Größe und eine Erstellungszeit. Wahrscheinlich haben nicht nur alle mindestens einmal (zwei, drei) die Nahrungsgrundlage geknallt? Ich habe diese Gelegenheit auf eine neue Ebene genutzt.)
Dump senden Mit diesem Befehl wird die Serverbasis aus dem ausgewählten Dump bereitgestellt. Spüren Sie die Gelegenheit? (Sie hören das Furzknacken) Ja, in
nicht fähigen Händen kann dieser Befehl ALLE Basen auf ALLEN Servern mit nur wenigen Klicks töten! Aus diesem Grund ist die Schaltfläche dieses (und ähnlichen) Befehls rot übermalt und sollte sehr vorsichtig gedrückt werden. Für Volumendumps ist die Verwendung natürlich problematisch, für kleine Testbasen jedoch sehr praktisch. Cron.

All diese Schande kann durch die Kronen laufen. Diese Registerkarte zeigt die aktiven Aufgaben an.

Jede Aufgabe hat eine eindeutige Kennung (
crontab id ), die für nachfolgende Manipulationen erforderlich ist. Die Beschreibung gibt an, was die Aufgabe tun wird. Führen Sie im
Beispiel das Skript
test2.sh auf dem Server mit der Adresse jboss @ localhost aus. Die Startzeit der Aufgabe wird im Feld
Startdatum im Format JJJJ-MM-TT HH: MM angegeben. Der Autor und die Erstellungszeit werden angegeben. Sie können die Aufgabe abbrechen, die Uhrzeit ändern, die Aufgabe dauerhaft machen (sie wird jeden Tag zur angegebenen Zeit ausgeführt) oder umgekehrt, einmalig.
Hier werden Protokolle der ausgeführten Befehle angezeigt.

Sie können mit den Protokollen nichts anfangen, alles ist bereits erledigt. Setzen Sie sich und sehen Sie, was passiert ist.) Wenn Sie auf das Protokollschild klicken, wird es in einem separaten Fenster geöffnet. Wenn mehrere Prozesse ausgeführt werden, wird die Schaltfläche
Alle Protokolle angezeigt und alle Protokolle in einem Fenster geöffnet (ich habe vergessen, diesen Screenshot aufzunehmen).
Server. Wie gesagt, die Liste der Server ist auf allen Registerkarten verfügbar.

Der Server zeigt die Adresse (
ssh-Adresse ) an. Sie kann im Format user @ address geschrieben werden. Es ist jedoch besser, ssh-Aliase (~ / .ssh / config) zu verwenden und einige aussagekräftige Namen anzugeben. Die HTTP-Adresse ist die URL einer Anwendung, die auf einem Server bereitgestellt wird. Der
Arbeitsordner (
Serverordner ) und der Port (
Serverbindungsport ) sind der Ordner, in dem sich die Anwendung befindet, und der Port, den sie öffnet. Beschreibung, Autor, Datum. Der Screenshot zeigte einige neue Befehle, die zum Zeitpunkt des Schreibens hinzugefügt wurden:
Prop und
Full . Wir haben zwei Hauptkonfigurationsdateien. Mit diesen Befehlen können Sie sie bequem bearbeiten.

Der Rest des Teams. Erstes Rot:
Wartung EIN \ AUS - Aktivieren / Deaktivieren Sie die Seite Geplante Arbeiten für die geplante Wartung von O_o oder wenn ein Fehler aufgetreten ist (z. B. nach dem
Senden eines Speicherauszugs).
Konfiguration neu laden - Lädt die jboss-Konfiguration neu (unser Projekt verwendet jboss).
Neustart \ start \ stop \ kill jboss - Stopp, Start, Neustart von jboss und ein brutaler Kill, wenn nichts anderes hilft)
Weitere nützliche Dinge:
Systeminfo - Zeigt Informationen zum Server an: Speicher, Festplatte, Prozessor, Benutzer, Prozesse.
Zustand überprüfen - Eine schnelle Überprüfung des Zustands der Anwendung, die nach dem Anwendungsprozess sucht, prüft, ob der Port geöffnet ist, und versucht, diesen Port mit einer Locke anzuklopfen
Check conf - zeigt die Konfigurationsdatei der Anwendung an.
Protokolle prüfen - Zeigt Anwendungsprotokolle an.
GC-Protokoll prüfen - Zeigt den Protokoll-Garbage-Collector an.
Tag \ Woche \ Monat \ Alle Protokolle abrufen - Ermöglicht das Herunterladen von Protokollen für eine bestimmte Zeit in einem Archiv.
Backup base \ system \ full - Erstellt eine Sicherungskopie der Datenbank, Anwendungsdateien, und beides.
Utils kopieren - kopiert alle möglichen Skripte auf den Server.
Peep-Passwörter - Ermöglicht das Aufheben des Administratorkennworts.
Updates überprüfen - Zeigt an, welche Update-Dateien auf den Server hochgeladen werden.
Tunnel erstellen - leitet den Anwendungsport vom Anwendungsserver an
UpS weiter (wir haben schließlich ssh). Sie können direkt eine Verbindung zum Anwendungsport herstellen. Nützlich zur Überprüfung der Funktionalität bei fehlendem Zugriff (http \ s) auf die primäre Adresse.
Die Befehle
Systeminfo ,
Zustand überprüfen ,
Conf prüfen ,
Protokolle prüfen ,
Peep-Passwörter prüfen ,
Updates prüfen und
Tunnel erstellen enthalten „schnelle“ Analoga direkt auf dem Bedienfeld jedes Servers.
Im oberen Bereich befindet sich ein Verlaufslink. Das Ergebnis der Ausführung aller (fast) Befehle wird im Verlauf aufgezeichnet. Berechtiger müssen den Verlauf anzeigen und Befehle ausführen. Permichons werden vom Standard-Dzhangovsky-Admin-Panel aufgehängt. Das einzige, was ich hier hinzugefügt habe, war, dass ich die Django-Guardian-Bibliothek verschraubt habe, mit der Sie Permichons an Objekten anbringen können. Es schien mir sehr praktisch, aber der Djanga kann es nicht sofort tun.
Natürlich bin ich kein Wi-Guru, aber ich habe versucht, das Management einfach und nicht erzwungen zu gestalten.) Klicken Sie auf die erforderlichen Objekte, wählen Sie das Team aus und
oh, das war's . Klicken Sie auf die Schaltfläche, um das Ergebnis zu erhalten. Irgendwie so.

Ein paar Worte darüber, wie das alles funktioniert. Python und dzhanga, wie gesagt, Ansichten, Modelle, URLs, Formulare, das ist alles, was es für eine solche Datei
befiehlt . Verfügbare Dateien werden in dieser Datei beschrieben (bisher ist alles logisch, oder?). Es sieht ungefähr so aus:
class CommandClass: """ """ def __init__( self, permission='run_command', # Permission needed to run this command. position=1, # Position in commands list section='', # Section command will be placed to. style='', # Class assigned to a command button title='', # Pop up help message(via title) short='', # Short name for commands in quick section menu='', # Command name in UI name='', # Command name(an internal command name) run='', # Prevent CRONing his=True, # Command log will be saved to history fst=False, # Add command to quick section dgr='false', # If true will show confirmation window job='false', # Check if some cron jobs selected srv='false', # Check if some servers selected upd='false', # Check if some updates selected scr='false', # Check if some scripts selected dmp='false', # Check if some dumps selected ): self.permission = permission self.position = position self.section = section self.style = style self.title = title self.short = short self.name = name self.menu = menu self.run = run self.his = his self.fst = fst self.srv = srv self.upd = upd self.job = job self.scr = scr self.dmp = dmp self.dgr = dgr
Alle vorhandenen Befehle werden im Befehlswörterbuch beschrieben. Der Name des Wörterbuchs ist eine Art Spiel mit den Wörtern Befehl (Befehl) und Wörterbuch (Wörterbuch). Kenner des Englischen werden wahrscheinlich eine andere versteckte Bedeutung finden. Wörterbuch:
commandick = {
Jeder Befehl ist ein separates Modul im Modulordner. Befehle werden von einem separaten Prozess gestartet. Wenn mehrere Server ausgewählt sind, wird für jeden ein
Starter.py- Skript erstellt, das das erforderliche Modul (Befehl) importiert und ausführt. Haben Sie sich eine neue Funktion ausgedacht? Fügen Sie die Datei zum
Modulordner hinzu und beschreiben Sie sie im Wörterbuch. Hier ist eine Anwendung. Vangyu Massenkommentare über Fahrradbau. Zu Ihrer Größe ... Geschichten, möchte ich dies beantworten. Warum machen die Leute immer wieder neue Leute? Immerhin haben die Leute schon ... bis zu einem gewissen Grad viel vor. Weil ich den Prozess mag) Also mag ich den Prozess, den ich dir auch wünsche, erschaffe, erfinde, versuche)
andere HandwerkeAbschließend möchte ich noch ein paar meiner Handwerke erwähnen. Für das kleinste
Malbuch . Ein Skript, das das Färben anderer Skripte vereinfacht:
Für ältere Kinder, die viel Zeit in der Konsole verbringen, ein schönes
Dashboard .

Für diejenigen, die sich bereits eng im Rahmen des localhost befinden, gibt es ein
Skript , das aus Ihrem
~ / .ssh / config ein Menü (Dialogfeld)
erstellt . Jeder weiß, warum
~ / .ssh / config benötigt wird?) Es sieht so aus:

Und natürlich
PIE-PIE!Viele mochten Piu-Piu (mehr als 550 Sterne auf dem Github), vielen Dank für Ihre freundlichen Worte und für Ihre Hilfe! Hast du nichts von Piu-Piu gehört? Lesen Sie
hier ,
hier und
hier . Ich möchte die Handlung weiterentwickeln und das Spiel vergrößern. Ich habe Ideen zur Optimierung, aber es bleibt leider nicht genug Zeit. Neujahrsfeiertage sind sehr willkommen, ich hoffe ich kann am Spiel arbeiten. Übrigens kann piu-piu passend installiert werden:
sudo apt install -y piu-piu

Frohes Neues Jahr!)