Rex: Datenbank- und Website-Aufgaben mit SVN-Externals
Übersicht
Dieses Dokument beschreibt zwei typische Workflows: 1) Erstellen von Aufgaben für einen Datenbankserver und 2) Erstellen von Aufgaben für einen Webserver mittels Rex. Beide Projekte verwenden SVN-Externals, um gemeinsame Bibliotheken (lib/Common, lib/Service) in das Projekt einzubinden. Ziel ist ein reproduzierbares Setup: NTP konfigurieren, Service-Module installieren, konfigurieren und neu starten.
Wichtig: Verwenden Sie keine Klartext-Passwörter in Versionskontrolle. Nutzen Sie stattdessen sichere Secrets-Manager oder SSH-Schlüssel, wenn möglich.
Datenbank-Tasks erstellen
Wechseln Sie in das Repository für die Datenbank:
wks01 Service# cd ../database
wks01 database# touch RexfileFügen Sie nun zwei gemeinsame Repositories als externes Repository hinzu:
wks01 database# svn propedit svn:externals .Fügen Sie im Editor die folgenden Zeilen ein, speichern und schließen Sie den Editor:
lib/Common http://svn01/svn/common
lib/Service http://svn01/svn/service
Nachdem Sie die Externals gesetzt haben, führen Sie ein Update durch und committen die neue Einstellung:
wks01 database# svn up
wks01 database# svn ci -m "added external repositories"Der Befehl svn up prüft jetzt beide externen Repositories auf Updates. Wenn jemand neue Services in eines dieser Repositories hinzufügt, erhalten Sie diese nach einem svn up automatisch.
Erstellen Sie nun Ihr Rexfile, um einen Datenbankserver zu konfigurieren:
set user => "root";
set password => "f00b4r";
include qw/
Common::NTP
Service::MySQL
/;
set group => srvdb => "db01";
task "prepare", group => "srvdb", sub {
# run the common ntp task "prepare"
Common::NTP::prepare();
# install mysql
Service::MySQL::prepare();
# configure mysql
Service::MySQL::configure({
key_buffer => "32M",
max_allowed_packet => "32M",
});
# restart mysql
service mysql => "restart";
};
Erläuterung der wichtigsten Punkte:
- Zeile 1–2: Authentifizierung für Zielhost (db01). Alternativ SSH-Schlüssel verwenden. Weitere Informationen: http://rexify.org/howtos/start.html
- include qw/: Bindet die Module Common::NTP und Service::MySQL ein. Aufgaben aus diesen Modulen werden zu Perl-Funktionen.
- set group => srvdb: Definiert die Servergruppe “srvdb” und fügt “db01” hinzu. Mehrere Hosts sind möglich:
set group => srvdb => "db01", "db02", "db03";
set group => srvdb => "db[01..03]";- task “prepare”: Diese Aufgabe wird auf allen Servern in der Gruppe srvdb ausgeführt. Sie führt NTP-Vorbereitung, Installation und Konfiguration von MySQL aus und startet den Service neu.
Committen Sie die Datei:
wks01 database# svn add Rexfile
wks01 database# svn ci -m "inital commit of Rexfile"Server einrichten:
wks01 database# rex prepareAufgaben auflisten:
wks01 database# rex -TWebsite-Tasks erstellen
Wechseln Sie in das Website-Projektverzeichnis:
wks01 database# cd ../website
wks01 website# touch RexfileAuch hier müssen die Externals definiert werden:
wks01 website# svn propedit svn:externals .Fügen Sie im Editor die folgenden Zeilen ein, speichern und schließen Sie den Editor:
lib/Common http://svn01/svn/common
lib/Service http://svn01/svn/service
Update und Commit:
wks01 database# svn up
wks01 database# svn ci -m "added external repositories"Erstellen Sie das Rexfile zur Einrichtung eines Webservers:
# Rexfile
set user => "root";
set password => "test";
include qw/
Common::NTP
Service::Apache
/;
set group => srvweb => "web01";
task "prepare", group => "srvweb", sub {
# run the common ntp task "prepare"
Common::NTP::prepare();
# install apache
Service::Apache::prepare();
# configure apache
Service::Apache::configure({
timeout => 60,
});
# restart apache
service apache2 => "restart";
};
Datei speichern und ins Repository übernehmen:
wks01 website# svn add Rexfile
wks01 website# svn ci -m "initial Rexfile"Webserver einrichten:
wks01 website# rex prepareNach Einrichtung von Datenbank und Webserver können Sie eine Anwendung bereitstellen. Beispiel: Deployment einer TAR- oder ZIP-Datei.
task "deploy", group => "srvweb", sub {
upload "your-web-application.tar.gz", "/tmp";
extract "/tmp/your-web-application.tar.gz",
owner => "www-data",
group => "www-data",
to => "/var/www";
rm "/tmp/your-web-application.tar.gz";
};
Checkliste vor dem Rollout
- SSH-Zugriff und Credentials prüfen (vorzugsweise SSH-Schlüssel).
- Externals korrekt gesetzt und svn up ausgeführt.
- Rexfile syntaktisch prüfen (rex -T zeigt die Tasks).
- Services-Module in lib/Common und lib/Service aktuell.
- Backup-Plan für Datenbanken vorhanden.
- Firewall/Ports für MySQL/HTTP zugelassen.
Kriterien für erfolgreiche Bereitstellung
- Alle Tasks laufen ohne Fehlermeldung durch (rex gibt Exit-Code 0).
- MySQL ist erreichbar auf dem Zielhost und akzeptiert Verbindungen.
- Apache antwortet mit HTTP 200 für die bereitgestellte Anwendung.
- Dateirechte und Besitz der Webdateien sind korrekt (www-data:www-data).
- Konfigurationsänderungen sind versioniert und dokumentiert.
Fehlerfälle und alternative Ansätze
Wann es scheitern kann:
- Externals-URLs sind nicht erreichbar oder intern umgezogen.
- Authentifizierungsfehler (falsches Passwort oder fehlender SSH-Key).
- Unterschiedliche Paketnamen/Service-Namen in verschiedenen Distributionen.
Alternative Ansätze:
- Konfigurationsmanagement-Tools wie Ansible oder Puppet für komplexere Orchestrierung.
- Containerisierung (Docker/Kubernetes) für isolierte Anwendungs-Deployments.
Mentale Modelle / Heuristiken:
- Keep common logic in shared modules (lib/Common, lib/Service).
- Tasks sollten idempotent sein (mehrmaliges Ausführen ändert nichts zusätzlich).
- Trennen Sie Infrastruktur-Setup (prepare) von Applikations-Deployments (deploy).
Kurzanleitung / Cheat Sheet
- Externals setzen: svn propedit svn:externals .
- Externals anwenden: svn up
- Dateien hinzufügen/committen: svn add
&& svn ci -m “msg” - Tasks ausführen: rex
- Tasks auflisten: rex -T
Beispiel-Befehle zusammengefasst:
svn propedit svn:externals .
svn up
svn ci -m "added external repositories"
rex prepare
rex -TTestfälle und Akzeptanzkriterien
- Akzeptanz 1: Nach rex prepare startet MySQL und ein einfacher SELECT läuft lokal ohne Fehler.
- Akzeptanz 2: Nach rex prepare antwortet Apache auf / mit HTTP 200.
- Akzeptanz 3: Deploy-Task entpackt Dateien nach /var/www und Dateibesitz ist www-data.
1‑Zeiler Glossar
- Rexfile: Konfigurationsdatei mit Tasks für Rex.
- svn:externals: SVN-Eigenschaft, die externe Repositories ins Arbeitsverzeichnis einbindet.
- Task: Eine definierte Aktion, die Rex gegen Hosts ausführt.
- include: Bindet modulare Bibliotheken ein, die Tasks bereitstellen.
- group: Logische Gruppierung von Hosts in Rex.
Sicherheits- und Datenschutzhinweis
- Speichern Sie Zugangsdaten nicht im Klartext im Versionskontrollsystem.
- Beschränken Sie Zugriffsrechte auf Repositories und Server.
- Prüfen Sie Konfigurationsdateien auf sensible Informationen vor dem Commit.
Zusammenfassung
Mit Rex und SVN-Externals erstellen Sie modulare, wiederholbare Deployments für Datenbank- und Webserver. Nutzen Sie gemeinsame Bibliotheken für wiederverwendbare Tasks, prüfen Sie Externals regelmäßig und vermeiden Sie Klartext-Credentials im Repository. Eine kurze Checkliste, Akzeptanzkriterien und Testfälle helfen, Deployments zuverlässig und nachvollziehbar zu machen.
Ähnliche Materialien
Podman auf Debian 11 installieren und nutzen
Apt-Pinning: Kurze Einführung für Debian
FSR 4 in jedem Spiel mit OptiScaler
DansGuardian + Squid (NTLM) auf Debian Etch installieren
App-Installationsfehler auf SD-Karte (Error -18) beheben