🌐 Apache Virtual Hosts automatisieren
Nachdem ich meine Projekte automatisiert angelegt habe, fehlte noch ein wichtiger Baustein:
👉 Apache Virtual Hosts
Manuell ist das jedes Mal:
- Config-Datei erstellen
- aktivieren
- Apache neu laden
👉 wiederholbar, aber nervig.
💡 Ziel
Ein Skript, das:
- einen VHost erstellt
- Fehler erkennt
- keine kaputten Zustände hinterlässt
🔧 Das Skript
#!/usr/bin/env bash
set -euo pipefail
NAME=""
FORCE=false
# --- Argument Parsing ---
for arg in "$@"; do
case $arg in
--force) FORCE=true ;;
--help)
echo "Usage: create_vhost <name> [--force]"
exit 0
;;
*)
NAME="$arg"
;;
esac
done
if [[ -z "${NAME:-}" ]]; then
echo "❌ Kein Name angegeben"
exit 1
fi
DOMAIN="$NAME.local"
DOC_ROOT="/mnt/myhome/www/$NAME"
LOG_DIR="$DOC_ROOT/logs"
CONF="/etc/apache2/sites-available/$NAME.conf"
echo "🌐 Erstelle VHost für: $DOMAIN"
# --- Prüfen ob Config existiert ---
if [[ -f "$CONF" && "$FORCE" = false ]]; then
echo "⚠️ Config existiert bereits: $CONF"
echo "👉 Nutze --force zum Überschreiben"
exit 1
fi
# --- Verzeichnisse ---
echo "📁 Erstelle Verzeichnisse"
mkdir -p "$DOC_ROOT"
mkdir -p "$LOG_DIR"
# Logs explizit anlegen (verhindert Apache-Fehler)
touch "$LOG_DIR/error.log" "$LOG_DIR/access.log"
# --- Apache Config ---
echo "⚙️ Erstelle Apache Config"
sudo tee "$CONF" > /dev/null <<EOF
<VirtualHost *:80>
ServerName $DOMAIN
DocumentRoot $DOC_ROOT
<Directory $DOC_ROOT>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
ErrorLog $LOG_DIR/error.log
CustomLog $LOG_DIR/access.log combined
</VirtualHost>
EOF
# --- Aktivieren ---
echo "🔗 Aktiviere VHost"
sudo a2ensite "$NAME.conf" >/dev/null 2>&1 || true
# --- Config testen ---
echo "🧪 Prüfe Apache Config"
if sudo apache2ctl configtest; then
echo "🔄 Lade Apache neu"
sudo systemctl reload apache2
else
echo "❌ Apache Config Fehler – Änderungen werden zurückgerollt"
sudo rm -f "$CONF"
exit 1
fi
echo "✅ VHost erfolgreich erstellt: http://$DOMAIN"
🧠 Wichtige Erkenntnisse
1. Existierende Configs sind gefährlich
Ich hatte mehrfach das Problem, dass ich eine Config überschrieben habe und danach nicht mehr wusste, was eigentlich aktiv ist.
Deshalb:
--force
👉 bewusstes Überschreiben statt stiller Fehler
2. Apache bricht wegen fehlender Log-Dateien
Ein überraschender Fehler:
Projektordner gelöscht → Logs weg → Apache startet nicht mehr sauber
Lösung:
touch error.log access.log
👉 klingt banal, spart aber Debugging-Zeit
3. Config immer testen
apache2ctl configtest
👉 Pflicht, bevor man reload macht
4. Rollback ist wichtig
Wenn die Config fehlschlägt:
rm config
👉 verhindert „Zombie-Konfigurationen“
5. Pfad zum Projekt
Ich nutze bewusst:
/mnt/myhome/www/project
statt /var/www, weil:
- keine Berechtigungsprobleme
- bessere Kontrolle
- flexibler Aufbau
👉 im Home liegt nur ein Symlink
🚀 Fazit
Ein kleines Skript ersetzt:
- mehrere manuelle Schritte
- potenzielle Fehlerquellen
- unnötiges Debugging
Und vor allem:
👉 dein Setup wird reproduzierbar

Schreibe einen Kommentar