Technologieführer

Rex: Datenbank- und Website-Aufgaben mit SVN-Externals

4 min read DevOps Aktualisiert 18 Sep 2025
Rex: Datenbank- & Website-Tasks mit SVN-Externals
Rex: Datenbank- & Website-Tasks 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 Rexfile

Fü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 prepare

Aufgaben auflisten:

wks01 database# rex -T

Website-Tasks erstellen

Wechseln Sie in das Website-Projektverzeichnis:

wks01 database# cd ../website  
wks01 website# touch Rexfile

Auch 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 prepare

Nach 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 -T

Testfä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.

Autor
Redaktion

Ähnliche Materialien

Podman auf Debian 11 installieren und nutzen
DevOps

Podman auf Debian 11 installieren und nutzen

Apt-Pinning: Kurze Einführung für Debian
Systemadministration

Apt-Pinning: Kurze Einführung für Debian

FSR 4 in jedem Spiel mit OptiScaler
Grafikkarten

FSR 4 in jedem Spiel mit OptiScaler

DansGuardian + Squid (NTLM) auf Debian Etch installieren
Netzwerk

DansGuardian + Squid (NTLM) auf Debian Etch installieren

App-Installationsfehler auf SD-Karte (Error -18) beheben
Android

App-Installationsfehler auf SD-Karte (Error -18) beheben

Netzwerkordner mit KNetAttach in KDE
Linux Netzwerk

Netzwerkordner mit KNetAttach in KDE