Automatische Apache-Konfiguration für Projekte, die unter <projectname>.local abgerufen werden können

🌐 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

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert