Server Tools v2 ist ein modulares Bash-Toolkit zur Verwaltung von Debian/Ubuntu-Servern. Es ersetzt den monolithischen Vorgänger (v1, Single-File mit ~900 Zeilen) durch eine saubere, testbare Architektur mit 15 spezialisierten Bibliotheken und über 5.900 Zeilen Code.
Server Tools v2 automatisiert wiederkehrende Server-Administrationsaufgaben - von Datenbank-Management über 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 | Vollständig (13 Typen) |
| Audit-Logging | Keines | Vollständig |
| Backups | Keine | Auto-Backup vor Löschoperationen |
| Tests | Keine | 332 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 für die Zugangskontrolle: Der User besitzt die
html/-Dateien,www-dataerhält rwX-Zugriff. Fürlogs/ist es umgekehrt -www-databesitzt die Logs, der User erhält 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 fügen 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 prüfen |
| Root-Zugriff | Erforderlich | Alle Operationen benötigen root |
| Apache | 2.4+ | apache2ctl -v |
| MySQL/MariaDB | 5.7+ / 10.3+ | mysql --version |
| OpenSSL | 1.1+ | Für Passwort-Generierung |
| Certbot | Optional | Wird automatisch installiert bei SSL-Nutzung |
| UFW | Optional | Nur für Firewall-Management |
| Fail2Ban | Optional | Nur für Fail2Ban-Management |
| acl (setfacl/getfacl) | Optional | Nur für SSH User Management |
Root-Zugriff ist zwingend erforderlich. Das Tool prüft 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 über 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 |
Bestätigungen 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
# Einfacher Reverse Proxy (z.B. Node.js-App)
server-tools vhost create --domain app.example.com --type proxy \
--backend http://localhost:3000
# Mit WebSocket-Support (z.B. fuer Socket.io)
server-tools vhost create --domain ws.example.com --type proxy \
--backend http://localhost:3000 --websocket
# ProxyPreserveHost deaktivieren
server-tools vhost create --domain api.example.com --type proxy \
--backend http://localhost:8080 --preserve-host false
# 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 für existierenden User |
db delete --name <db> [--user <user>] [--drop-user] |
DB löschen (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 (Größe, 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> [--type php\|proxy] [--php <v>] [--backend <url>] [--websocket] [--aliases <list>] |
VHost erstellen (PHP oder Reverse Proxy) |
vhost delete --domain <domain> |
VHost löschen |
vhost list |
Alle VHosts auflisten |
vhost php --domain <domain> --version <php> |
PHP-Version ändern |
vhost info --domain <domain> |
VHost-Details anzeigen |
vhost redirect --from <domain> --to <url> [--code 301\|302] |
Redirect erstellen |
| Option | Beschreibung | Standard |
|---|---|---|
--type php\|proxy |
VHost-Typ | php |
--backend <url> |
Backend-URL (Pflicht bei proxy) | - |
--websocket |
WebSocket-Proxy aktivieren | Aus |
--preserve-host on\|off |
ProxyPreserveHost Header | on |
VHost-Löschung wird blockiert, wenn ein SSH-User der Domain zugewiesen ist. Erst den User löschen, dann den VHost.
| Befehl | Beschreibung |
|---|---|
user create --domain <d> --username <u> |
SSH-User für Domain erstellen |
user delete --username <u> |
User löschen (Ownership zurück auf www-data) |
user list |
Alle Domain-User auflisten |
user add-key --username <u> --key "ssh-ed25519 ..." |
SSH-Key hinzufügen |
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 löschen |
ssl wildcard --domain <domain> [--provider <name>] |
Wildcard-SSL via DNS |
ssl list |
Alle Zertifikate auflisten |
ssl check [--days <n>] |
Bald ablaufende Zertifikate prüfen |
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>] |
Übergreifende 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 Menüpunkt öffnet ein Untermenu mit allen verfügbaren Operationen. Das Database-Menu z.B. bietet 17 Optionen für alle Datenbank-Operationen.
Das interaktive Menu eignet sich für manuelle Administration. Für 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 für 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-Länge (12-64) |
ST_PASSWORD_MIN_LENGTH |
12 |
Minimale Passwort-Länge (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 Löschoperationen |
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) |
ST_PROXY_PRESERVE_HOST |
true |
ProxyPreserveHost Standard für Reverse Proxy VHosts |
| Variable | Default | Beschreibung |
|---|---|---|
ST_CERTBOT_EMAIL |
(leer) | Let's Encrypt E-Mail |
ST_DNS_PROVIDER |
(leer) | DNS-Provider für Wildcard-SSL |
ST_DNS_CREDENTIALS_FILE |
(leer) | DNS API Credentials-Datei |
| Variable | Default | Beschreibung |
|---|---|---|
ST_USER_DEFAULT_SHELL |
/bin/bash |
Standard-Shell für 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"
ST_PROXY_PRESERVE_HOST=true
# 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-Ausführung prüft Server Tools Owner- und Permission-Checks: Die Datei muss root gehören und darf nicht world-readable oder group-writable sein.
Alle Benutzereingaben werden vor Verarbeitung validiert. 13 Validierungstypen stehen zur Verfügung:
| 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 |
Längen-Prüfung (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-Prüfung (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-Prüfung).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 (Löschen, Ändern) erzeugen automatisch ein Backup, sofern
ST_AUTO_BACKUP=true(Default). Schlägt das Backup fehl, wird nachgefragt ob fortgefahren werden soll.
Symptom: bash: ./bin/server-tools: Permission denied
Prüfung:
ls -la bin/server-tools
Lösung:
chmod +x bin/server-tools
Symptom: Script bricht sofort ab
Lösung:
sudo server-tools <command>
# oder
sudo su -
server-tools <command>
Symptom: ERROR: MySQL connection failed
Prüfung:
# MySQL laeuft?
systemctl status mysql
# Credentials vorhanden?
cat /root/.my.cnf
# Manuell testen
mysql -e "SELECT 1"
Lösung:
# Credentials anlegen
echo -e "[client]\npassword=DEIN_ROOT_PASSWORT" > /root/.my.cnf
chmod 600 /root/.my.cnf
Symptom: ERROR: Apache configuration test failed
Prüfung:
apache2ctl configtest
Lösung: Die Ausgabe von configtest zeigt den Fehler. Häufige 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
Prüfung:
# ACL-Tools installiert?
which setfacl getfacl
# Filesystem unterstuetzt ACLs?
mount | grep acl
Lösung:
# 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
Lösung:
chmod 600 /etc/server-tools/config
Wenn ein Problem nicht in dieser Liste steht: Das Audit-Log unter
/var/log/server-tools-audit.logenthält Details zu allen ausgeführten 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, 332 Tests
├── .github/workflows/
│ └── ci.yml # CI: ShellCheck + shfmt + BATS
├── Makefile
├── README.md
├── CHANGELOG.md
└── CONTRIBUTING.md
Jedes Modul schützt 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 führen überdie()zu Exit Code 1 mit Logging.
Tests verwenden BATS (Bash Automated Testing System) mit:
bats-support - Basis-Assertionsbats-assert - Erweiterte Assertionsbats-file - Datei-Assertions332 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 läuft in einem isolierten TEST_TMPDIR mit gemockten System-Commands. Kein Test berührt das echte System.
Die GitHub Actions Pipeline führt 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 ausführen |
make test-verbose |
Tests mit Trace-Output |
make lint |
ShellCheck ausführen |
make format |
shfmt Auto-Format |
make format-check |
Format-Prüfung ohne Änderungen |
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 überschrieben?
Nein. create_vhost prüft 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 überschreiben 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'
Unterstützt Server Tools PostgreSQL?
Nein, nur MySQL/MariaDB.
Können mehrere Entwickler auf denselben Domain-User zugreifen?
Ja. Das SSH User Management nutzt ein 1:1 Mapping (ein User pro Domain). Mehrere Entwickler können separate SSH-Keys zum selben User hinzufügen und so gemeinsam auf die Domain zugreifen.
Kann ich mit Server Tools einen Reverse Proxy fuer eine Node.js-App einrichten?
Ja, seit v2.3.0. Verwende --type proxy:
server-tools vhost create --domain app.example.com --type proxy --backend http://localhost:3000
WebSocket-Support (z.B. fuer Socket.io oder Live-Reloading) wird mit --websocket aktiviert. Apache-Module (proxy, proxy_http, proxy_wstunnel) werden automatisch aktiviert.
Brauche ich chroot für die SSH-User-Isolation?
Nein. Server Tools nutzt POSIX ACLs statt chroot. Das ist einfacher zu verwalten und reicht für die meisten Anwendungsfälle aus. Die ACLs stellen sicher, dass User nur auf ihre zugewiesene Domain zugreifen können.
Lizenz: MIT | Aktuelle Version: 2.2.0 (19. Februar 2026)
Das vollständige Changelog mit allen Versionen ist auf GitHub verfügbar:
CHANGELOG.md auf GitHub