Server Tools v2 ist ein modulares Bash-Toolkit zur Verwaltung von Debian/Ubuntu-Servern. Es ersetzt den monolithischen Vorgaenger (v1, Single-File mit ~900 Zeilen) durch eine saubere, testbare Architektur mit 15 spezialisierten Bibliotheken und ueber 5.900 Zeilen Code.
Server Tools v2 automatisiert wiederkehrende Server-Administrationsaufgaben - von Datenbank-Management ueber Virtual Host-Erstellung bis SSL-Zertifikate und SSH-User-Verwaltung. Spart durchschnittlich 15-30 Minuten pro Verwaltungsaufgabe.
Das Tool bietet zwei Interfaces:
server-tools db create --name mydb --user myuser)server-tools ohne Argumente)| Aspekt | v1 | v2 |
|---|---|---|
| Architektur | Single-File (~900 Zeilen) | 15 modulare Libraries (~5.900 LOC) |
| Sprache | Deutsch (Ausgaben) | Englisch |
| Input-Validierung | Minimal | Vollstaendig (13 Typen) |
| Audit-Logging | Keines | Vollstaendig |
| Backups | Keine | Auto-Backup vor Loeschoperationen |
| Tests | Keine | 315 BATS-Tests |
| CI/CD | Keines | ShellCheck + shfmt + BATS |
| Security | Basis | Umfassend (Escaping, Path-Traversal-Schutz, ACLs) |
| Rollback | Keines | Bei Fehlern in mehrstufigen Operationen |
.sql, .sql.gz, .sql.zip)/etc/shellsSSH User Management nutzt POSIX ACLs fuer die Zugangskontrolle: Der User besitzt die
html/-Dateien,www-dataerhaelt rwX-Zugriff. Fuerlogs/ist es umgekehrt -www-databesitzt die Logs, der User erhaelt Leserechte.
/etc/cron.d/ verwalten (nicht crontab)Server Tools v2 folgt dem Composable Building Blocks Pattern: Jede Library besteht aus atomaren Funktionen (Building Blocks), die von High-Level-Operationen komponiert werden.
| Schicht | Module | Aufgabe |
|---|---|---|
| Foundation | core, config, security | Logging, Konfiguration, Input-Validierung |
| Infrastructure | backup | Backup-Erstellung und -Verwaltung |
| Services | database, vhost, ssl, cron, firewall, fail2ban, log, status, user | Fachliche Operationen |
| Interface | cli, menu | Benutzer-Interaktion (CLI oder TUI) |
Am Beispiel von database.sh:
Building Blocks sind reine Funktionen ohne Seiteneffekte (kein Logging, keine Validierung). High-Level-Operationen fuegen Validierung, Logging und Rollback hinzu. Das macht die Blocks einzeln testbar und wiederverwendbar.
| Anforderung | Version | Hinweise |
|---|---|---|
| Betriebssystem | Debian 11+, Ubuntu 20.04+ | Andere Distros nicht getestet |
| Bash | 5.0+ | bash --version pruefen |
| Root-Zugriff | Erforderlich | Alle Operationen benoetigen root |
| Apache | 2.4+ | apache2ctl -v |
| MySQL/MariaDB | 5.7+ / 10.3+ | mysql --version |
| OpenSSL | 1.1+ | Fuer Passwort-Generierung |
| Certbot | Optional | Wird automatisch installiert bei SSL-Nutzung |
| UFW | Optional | Nur fuer Firewall-Management |
| Fail2Ban | Optional | Nur fuer Fail2Ban-Management |
| acl (setfacl/getfacl) | Optional | Nur fuer SSH User Management |
Root-Zugriff ist zwingend erforderlich. Das Tool prueft beim Start
EUID == 0und bricht bei fehlenden Rechten ab.
# Repository klonen und neueste Version auschecken
git clone https://github.com/markus-michalski/server-tools-v2.git
cd server-tools-v2
git checkout "$(git tag -l 'v*' | sort -V | tail -1)"
# Als root installieren
sudo ./bin/server-tools install
Das Install-Kommando:
/etc/server-tools/ mit Default-Config (Permissions 600)/root/db-credentials/ (umask 077)/root/server-tools-backups/ (chmod 700)/usr/local/lib/server-tools//usr/local/bin/server-tools (chmod 700)st und servertools# Repository klonen
git clone https://github.com/markus-michalski/server-tools-v2.git
cd server-tools-v2
# Direkt ausfuehren (erkennt automatisch lokale libs)
sudo ./bin/server-tools
Nach der Installation ist das Tool ueber drei Befehle erreichbar:
server-tools,st(Kurzform) undservertools.
cd server-tools-v2
git fetch --tags
git checkout "$(git tag -l 'v*' | sort -V | tail -1)"
sudo ./bin/server-tools install
# Config-Datei anpassen
sudo nano /etc/server-tools/config
# MySQL-Root-Credentials anlegen
sudo nano /root/.my.cnf
Inhalt von /root/.my.cnf:
[client]
password=dein_mysql_root_passwort
# Permissions setzen
sudo chmod 600 /root/.my.cnf
server-tools [--yes|-y] [--quiet|-q] <command> <subcommand> [options]
| Flag | Kurz | Beschreibung |
|---|---|---|
--yes |
-y |
Bestaetigungen automatisch akzeptieren |
--quiet |
-q |
Nur Fehler ausgeben |
--version |
-v |
Versionsnummer anzeigen |
--config |
-c |
Aktive Konfiguration anzeigen |
--help |
-h |
Hilfe anzeigen |
# Vollstaendig: DB + User + Passwort
server-tools db create --name shop_production --user shop_user
# Mit eigenem Passwort
server-tools db create --name shop_production --user shop_user --password 'MyS3cur3Pass!'
# DB fuer existierenden User
server-tools db create-for-user --name shop_staging --user shop_user
# Einfacher VHost mit PHP 8.3
server-tools vhost create --domain example.com --php 8.3
# Mit Aliases und eigenem DocumentRoot
server-tools vhost create --domain example.com \
--aliases "www.example.com cdn.example.com" \
--php 8.2 \
--docroot /var/www/example.com/public
# User fuer Domain erstellen
server-tools user create --domain example.com --username exampledev
# SSH-Key hinzufuegen
server-tools user add-key --username exampledev \
--key "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAI... user@laptop"
# Passwort setzen (oder automatisch generieren lassen)
server-tools user set-password --username exampledev
# Standard-Zertifikat
server-tools ssl create --domain example.com --email admin@example.com
# Wildcard ueber Cloudflare DNS
server-tools ssl wildcard --domain example.com --provider cloudflare
# 1. VHost anlegen
server-tools vhost create --domain shop.example.com --php 8.3
# 2. SSL aktivieren
server-tools ssl create --domain shop.example.com
# 3. Datenbank anlegen
server-tools db create --name shop_db --user shop_user
# 4. SSH-User fuer Entwickler einrichten
server-tools user create --domain shop.example.com --username shopdev
server-tools user add-key --username shopdev --key "ssh-ed25519 AAAA..."
# 5. Firewall oeffnen
server-tools firewall allow --port 443
| Befehl | Beschreibung |
|---|---|
db create --name <db> --user <user> [--password <pass>] |
DB + User erstellen |
db create-for-user --name <db> --user <user> |
DB fuer existierenden User |
db delete --name <db> [--user <user>] [--drop-user] |
DB loeschen (optional mit User) |
db backup --name <db> |
Einzelne DB sichern |
db backup-all |
Alle User-Datenbanken sichern |
db restore --name <db> --file <path> |
DB aus Dump wiederherstellen |
db import --name <db> --file <path> |
SQL-Datei importieren (.sql, .sql.gz, .sql.zip) |
db export --name <db> [--output <path>] |
DB in Datei exportieren |
db list |
Alle Datenbanken und User auflisten |
db info --name <db> |
DB-Details (Groesse, Tabellen, User) |
db grant --name <db> --user <user> [--level all\|readonly\|readwrite] |
Rechte zuweisen |
db grants --user <user> |
Alle Rechte eines Users anzeigen |
| Befehl | Beschreibung |
|---|---|
vhost create --domain <d> [--php <v>] [--aliases <list>] [--docroot <p>] |
VHost erstellen |
vhost delete --domain <domain> |
VHost loeschen |
vhost list |
Alle VHosts auflisten |
vhost php --domain <domain> --version <php> |
PHP-Version aendern |
vhost info --domain <domain> |
VHost-Details anzeigen |
vhost redirect --from <domain> --to <url> [--code 301\|302] |
Redirect erstellen |
VHost-Loeschung wird blockiert, wenn ein SSH-User der Domain zugewiesen ist. Erst den User loeschen, dann den VHost.
| Befehl | Beschreibung |
|---|---|
user create --domain <d> --username <u> |
SSH-User fuer Domain erstellen |
user delete --username <u> |
User loeschen (Ownership zurueck auf www-data) |
user list |
Alle Domain-User auflisten |
user add-key --username <u> --key "ssh-ed25519 ..." |
SSH-Key hinzufuegen |
user set-password --username <u> [--password <p>] |
Passwort setzen/generieren |
user info --username <u> |
User-Details anzeigen |
| Befehl | Beschreibung |
|---|---|
ssl create --domain <domain> [--email <email>] |
Zertifikat erstellen |
ssl delete --domain <domain> |
Zertifikat loeschen |
ssl wildcard --domain <domain> [--provider <name>] |
Wildcard-SSL via DNS |
ssl list |
Alle Zertifikate auflisten |
ssl check [--days <n>] |
Bald ablaufende Zertifikate pruefen |
ssl renew |
Renewal-Cronjob einrichten |
| Befehl | Beschreibung |
|---|---|
cron add --schedule '<cron>' --command '<cmd>' --name '<name>' |
Cronjob anlegen |
cron remove --pattern <search> |
Cronjob entfernen |
cron list |
Alle Cronjobs anzeigen |
| Befehl | Beschreibung |
|---|---|
firewall status |
UFW-Status anzeigen |
firewall allow --port <port> [--proto tcp\|udp] |
Port freigeben |
firewall deny --port <port> [--proto tcp\|udp] |
Port sperren |
Alias
fwkann stattfirewallverwendet werden, z.B.server-tools fw status.
| Befehl | Beschreibung |
|---|---|
fail2ban status |
Alle Jails mit Statistiken anzeigen |
fail2ban banned |
Alle gesperrten IPs auflisten |
fail2ban unban --ip <address> |
IP aus allen Jails entbannen |
Alias
f2bkann stattfail2banverwendet werden.
| Befehl | Beschreibung |
|---|---|
logs apache [--domain <d>] [--lines <n>] |
Apache Access Log |
logs apache-errors [--domain <d>] [--lines <n>] |
Apache Error Log |
logs mysql [--lines <n>] |
MySQL Error Log |
logs audit [--lines <n>] [--filter <text>] |
Audit Log |
logs search --pattern <text> [--lines <n>] |
Uebergreifende Suche |
server-tools status
Zeigt: Services, Systemressourcen, Versionen, Konfiguration, Backups.
Ohne Argumente startet server-tools das interaktive TUI-Menu:
+=======================================+
| Server Tools v2.2.0 |
+=======================================+
1) Database Management
2) Virtual Host Management
3) SSL Certificate Management
4) Cron Job Management
5) Firewall Management
6) Fail2Ban Management
7) Log Viewer
8) SSH User Management
9) System Status
10) Exit
Select option [1-10]:
Jeder Menuepunkt oeffnet ein Untermenu mit allen verfuegbaren Operationen. Das Database-Menu z.B. bietet 17 Optionen fuer alle Datenbank-Operationen.
Das interaktive Menu eignet sich fuer manuelle Administration. Fuer Scripting und Automation empfiehlt sich der CLI-Modus.
Pfad: /etc/server-tools/config (oder ST_CONFIG_FILE Umgebungsvariable)
Alle Variablen beginnen mit dem Prefix ST_ und haben sinnvolle Defaults:
| Variable | Default | Beschreibung |
|---|---|---|
ST_CONFIG_FILE |
/etc/server-tools/config |
Pfad zur Config-Datei |
ST_AUDIT_LOG |
/var/log/server-tools-audit.log |
Audit-Log-Datei |
ST_AUDIT_LOGGING |
true |
Audit-Logging aktiviert |
| Variable | Default | Beschreibung |
|---|---|---|
ST_CREDENTIAL_DIR |
/root/db-credentials |
Credential-Speicherort |
ST_CREDENTIAL_FILE_PERMISSIONS |
600 |
Datei-Permissions fuer Credentials (600 oder 400) |
ST_MYSQL_CONFIG_FILE |
/root/.my.cnf |
MySQL-Root-Credentials |
ST_DEFAULT_CHARSET |
utf8mb4 |
Standard-Zeichensatz |
ST_DEFAULT_COLLATION |
utf8mb4_unicode_ci |
Standard-Kollation |
ST_PASSWORD_LENGTH |
25 |
Generierte Passwort-Laenge (12-64) |
ST_PASSWORD_MIN_LENGTH |
12 |
Minimale Passwort-Laenge (min. 8) |
| Variable | Default | Beschreibung |
|---|---|---|
ST_BACKUP_DIR |
/root/server-tools-backups |
Allgemeines Backup-Verzeichnis |
ST_DB_BACKUP_DIR |
/root/db-backups |
DB-Dump-Verzeichnis |
ST_AUTO_BACKUP |
true |
Auto-Backup vor Loeschoperationen |
ST_BACKUP_RETENTION_DAYS |
30 |
Aufbewahrungsdauer in Tagen (1-365) |
| Variable | Default | Beschreibung |
|---|---|---|
ST_DEFAULT_PHP_VERSION |
8.3 |
Standard PHP-Version |
ST_PHP_VERSIONS_TO_SCAN |
7.4 8.0 8.1 8.2 8.3 8.4 |
FPM-Socket-Scan |
ST_APACHE_SERVER_ADMIN |
webmaster@localhost |
ServerAdmin-Eintrag |
ST_ALLOWED_DOCROOT_PATHS |
/var/www:/srv/www |
Erlaubte DocumentRoot-Pfade |
ST_APACHE_LOG_DIR |
/var/log/apache2 |
Apache-Log-Verzeichnis |
ST_LOGROTATE_DAYS |
14 |
Max Log-Alter |
ST_LOGROTATE_ROTATE |
52 |
Rotations-Anzahl (~1 Jahr) |
| Variable | Default | Beschreibung |
|---|---|---|
ST_CERTBOT_EMAIL |
(leer) | Let's Encrypt E-Mail |
ST_DNS_PROVIDER |
(leer) | DNS-Provider fuer Wildcard-SSL |
ST_DNS_CREDENTIALS_FILE |
(leer) | DNS API Credentials-Datei |
| Variable | Default | Beschreibung |
|---|---|---|
ST_USER_DEFAULT_SHELL |
/bin/bash |
Standard-Shell fuer neue User |
| Variable | Default | Beschreibung |
|---|---|---|
ST_LOG_LINES |
50 |
Standard-Anzahl Log-Zeilen |
ST_MYSQL_LOG_FILE |
/var/log/mysql/error.log |
MySQL-Error-Log-Pfad |
# /etc/server-tools/config
# Database
ST_DEFAULT_CHARSET="utf8mb4"
ST_DEFAULT_COLLATION="utf8mb4_unicode_ci"
ST_PASSWORD_LENGTH=30
# Apache
ST_DEFAULT_PHP_VERSION="8.3"
ST_APACHE_SERVER_ADMIN="admin@example.com"
# Backup
ST_AUTO_BACKUP=true
ST_BACKUP_RETENTION_DAYS=60
# SSL
ST_CERTBOT_EMAIL="admin@example.com"
ST_DNS_PROVIDER="cloudflare"
# SSH Users
ST_USER_DEFAULT_SHELL="/bin/bash"
Die Config-Datei wird per
sourceeingelesen. Bei Root-Ausfuehrung prueft Server Tools Owner- und Permission-Checks: Die Datei muss root gehoeren und darf nicht world-readable oder group-writable sein.
Alle Benutzereingaben werden vor Verarbeitung validiert. 13 Validierungstypen stehen zur Verfuegung:
| Typ | Validierung | Beispiel |
|---|---|---|
domain |
RFC 1035, Labels 1-63 Zeichen, TLD 2+ Buchstaben | example.com |
database |
Max 64 Zeichen, [a-zA-Z0-9_-] |
shop-production |
username |
Max 32 Zeichen, [a-zA-Z0-9_-] |
shop-user |
linux_username |
POSIX-konform, lowercase, max 32, kein Start mit Zahl | shopdev |
ssh_public_key |
Keine Newlines, 40-8192 Zeichen, ssh-rsa/ed25519/ecdsa/sk-* | ssh-ed25519 AAAA... |
path |
Path-Traversal-Schutz via realpath + Whitelist-Check |
/var/www/shop |
email |
Basis RFC 5322 | admin@example.com |
password |
Laengen-Pruefung (konfigurierbar, min 8) | |
php_version |
Whitelist: 7.4, 8.0-8.4 | 8.3 |
cron_schedule |
5-Feld Cron-Regex, max 500 Zeichen | 0 3 * * * |
port |
1-65535, numerisch | 443 |
protocol |
tcp oder udp | tcp |
ip_address |
IPv4 mit Oktett-Pruefung (0-255) | 192.168.1.1 |
url |
http/https mit validem Host | https://example.com |
mysql_escape() + Backtick-Quotingrealpath + Whitelist (ST_ALLOWED_DOCROOT_PATHS)safe_write_file() (mktemp + mv, TOCTOU-sicher, Symlink-Pruefung).my.cnf-Permissionsopenssl rand -base64 (~6 Bits/Zeichen Entropie)[2026-02-18 14:32:15] [INFO] user=root action=create_database db=shop_production user=shop_user
[2026-02-18 14:33:01] [INFO] user=root action=create_vhost domain=shop.example.com php=8.3
[2026-02-19 10:15:42] [INFO] user=root action=create_user username=shopdev domain=shop.example.com
[2026-02-18 14:35:22] [WARNING] user=root action=delete_database db=old_staging backup=true
Alle destruktiven Operationen (Loeschen, Aendern) erzeugen automatisch ein Backup, sofern
ST_AUTO_BACKUP=true(Default). Schlaegt das Backup fehl, wird nachgefragt ob fortgefahren werden soll.
Symptom: bash: ./bin/server-tools: Permission denied
Pruefung:
ls -la bin/server-tools
Loesung:
chmod +x bin/server-tools
Symptom: Script bricht sofort ab
Loesung:
sudo server-tools <command>
# oder
sudo su -
server-tools <command>
Symptom: ERROR: MySQL connection failed
Pruefung:
# MySQL laeuft?
systemctl status mysql
# Credentials vorhanden?
cat /root/.my.cnf
# Manuell testen
mysql -e "SELECT 1"
Loesung:
# Credentials anlegen
echo -e "[client]\npassword=DEIN_ROOT_PASSWORT" > /root/.my.cnf
chmod 600 /root/.my.cnf
Symptom: ERROR: Apache configuration test failed
Pruefung:
apache2ctl configtest
Loesung: Die Ausgabe von configtest zeigt den Fehler. Haeufige Ursachen:
# PHP-FPM pruefen
systemctl status php8.3-fpm
# Module aktivieren
a2enmod headers proxy_fcgi
systemctl reload apache2
Symptom: ERROR: ACL support not available oder setfacl: command not found
Pruefung:
# ACL-Tools installiert?
which setfacl getfacl
# Filesystem unterstuetzt ACLs?
mount | grep acl
Loesung:
# ACL-Paket installieren
apt-get install acl
# Falls ACLs nicht im Mount aktiviert sind
mount -o remount,acl /var/www
Symptom: WARNING: Config file is world-readable
Loesung:
chmod 600 /etc/server-tools/config
Wenn ein Problem nicht in dieser Liste steht: Das Audit-Log unter
/var/log/server-tools-audit.logenthaelt Details zu allen ausgefuehrten Operationen und aufgetretenen Fehlern.
server-tools-v2/
├── bin/
│ └── server-tools # Entry Point (~300 LOC)
├── lib/
│ ├── core.sh # Logging, Fehlerbehandlung, Dependencies (122 LOC)
│ ├── config.sh # Konfiguration, Defaults, Validierung (161 LOC)
│ ├── security.sh # Input-Validierung, Escaping, Audit (254 LOC)
│ ├── backup.sh # Backup-Erstellung und Cleanup (106 LOC)
│ ├── database.sh # MySQL CRUD (885 LOC)
│ ├── vhost.sh # Apache VHosts, Logrotate, Redirects (666 LOC)
│ ├── ssl.sh # Let's Encrypt, Wildcard-SSL (455 LOC)
│ ├── cron.sh # Cronjob-Verwaltung via /etc/cron.d (165 LOC)
│ ├── firewall.sh # UFW Firewall (189 LOC)
│ ├── fail2ban.sh # Fail2Ban Jails (158 LOC)
│ ├── log.sh # Log-Viewer (241 LOC)
│ ├── status.sh # Service-Status, Systemressourcen (167 LOC)
│ ├── user.sh # Per-Domain SSH User Management (464 LOC)
│ ├── cli.sh # CLI-Interface (916 LOC)
│ └── menu.sh # TUI-Interface (712 LOC)
├── conf/
│ └── server-tools.conf.example # Config-Template
├── tests/
│ ├── test_helper.bash # BATS-Helper mit Mock-System
│ └── unit/ # 13 Test-Dateien, 315 Tests
├── .github/workflows/
│ └── ci.yml # CI: ShellCheck + shfmt + BATS
├── Makefile
├── README.md
├── CHANGELOG.md
└── CONTRIBUTING.md
Jedes Modul schuetzt sich gegen mehrfaches Laden:
[[ -n "${_DATABASE_SOURCED:-}" ]] && return
_DATABASE_SOURCED=1
| Exit Code | Bedeutung |
|---|---|
| 0 | Erfolgreich |
| 1 | Allgemeiner Fehler / Validierung fehlgeschlagen |
Server Tools nutzt
set -euo pipefailim Entry Point. Alle Fehler fuehren ueberdie()zu Exit Code 1 mit Logging.
Tests verwenden BATS (Bash Automated Testing System) mit:
bats-support - Basis-Assertionsbats-assert - Erweiterte Assertionsbats-file - Datei-Assertions315 Tests in 13 Dateien decken alle Module ab:
| Testdatei | Thema |
|---|---|
cli.bats |
CLI Argument Parsing, Routing, Help-Texte |
database.bats |
MySQL Building Blocks, Credentials, Validation |
security.bats |
Input-Validierung (alle 13 Typen), Escaping, Audit, Password |
vhost.bats |
Config-Generierung, Redirects, Logrotate, Validation |
ssl.bats |
Certbot-Integration, Wildcard, Email-Fallback |
config.bats |
Config Loading, Validation, Defaults |
backup.bats |
Backup-Erstellung, Cleanup, Auto-Backup |
core.bats |
Logging, Error Handling, Root-Check |
cron.bats |
Cron Name Sanitizing, Content Generation, Validation |
log.bats |
tail/grep, Log-Pfade, Cross-Log-Search |
firewall.bats |
UFW-Wrapper, Port/Protocol-Validation |
fail2ban.bats |
Jail Parsing, Ban/Unban, IP-Validation |
status.bats |
Service-Checks, System-Resources |
# Alle Tests ausfuehren
make test
# Einzelnes Modul testen
bats tests/unit/database.bats
# Mit Verbose-Output
bats --verbose-run tests/unit/
Jeder Test laeuft in einem isolierten TEST_TMPDIR mit gemockten System-Commands. Kein Test beruehrt das echte System.
Die GitHub Actions Pipeline fuehrt bei jedem Push und Pull Request aus:
.sh-Dateien-bn -ci)| Target | Beschreibung |
|---|---|
make help |
Hilfe anzeigen |
make install |
System-weite Installation (root) |
make uninstall |
Deinstallation (root) |
make setup-tests |
BATS-Dependencies installieren |
make test |
Tests ausfuehren |
make test-verbose |
Tests mit Trace-Output |
make lint |
ShellCheck ausfuehren |
make format |
shfmt Auto-Format |
make format-check |
Format-Pruefung ohne Aenderungen |
make check |
lint + format-check + test |
make clean |
Test-Artefakte entfernen |
Kann ich Server Tools auf CentOS/RHEL nutzen?
Nein, aktuell nur Debian/Ubuntu. Die Package-Manager-Aufrufe (apt-get) und Pfade (/etc/apache2) sind Debian-spezifisch.
Werden bestehende VHost-Konfigurationen ueberschrieben?
Nein. create_vhost prueft vorher ob der VHost existiert und bricht ab, falls ja.
Was passiert mit meinen Daten wenn ich Server Tools deinstalliere?
Gar nichts. Server Tools verwaltet nur Konfigurationen und erstellt Backups. Datenbanken, VHosts und SSL-Zertifikate bleiben bestehen.
Kann ich v1 und v2 parallel betreiben?
Ja, die Binary-Namen sind kompatibel. Nach Installation von v2 ueberschreiben die Symlinks die v1-Installation. Das alte Script kann weiterhin direkt aufgerufen werden.
Wie sichere ich alle Datenbanken automatisch?
# Manuell
server-tools db backup-all
# Als taeglichen Cronjob
server-tools cron add \
--schedule '0 2 * * *' \
--command '/usr/local/bin/server-tools db backup-all --yes --quiet' \
--name 'db-daily-backup'
Unterstuetzt Server Tools PostgreSQL?
Nein, nur MySQL/MariaDB.
Koennen mehrere Entwickler auf denselben Domain-User zugreifen?
Ja. Das SSH User Management nutzt ein 1:1 Mapping (ein User pro Domain). Mehrere Entwickler koennen separate SSH-Keys zum selben User hinzufuegen und so gemeinsam auf die Domain zugreifen.
Brauche ich chroot fuer die SSH-User-Isolation?
Nein. Server Tools nutzt POSIX ACLs statt chroot. Das ist einfacher zu verwalten und reicht fuer die meisten Anwendungsfaelle aus. Die ACLs stellen sicher, dass User nur auf ihre zugewiesene Domain zugreifen koennen.
Lizenz: MIT | Aktuelle Version: 2.2.0 (19. Februar 2026)
Das vollstaendige Changelog mit allen Versionen ist auf GitHub verfuegbar:
CHANGELOG.md auf GitHub