Der Weg zum Fullstack-Developer

Meine Erfahrungen, Auffrischung meiner Programmierkenntnisse und mein persönliches Knowledge-Management

🧩 WordPress-Installer Script (install_wordpress.sh)

Dieses Script automatisiert die lokale WordPress-Installation über WP-CLI und ist für eine dev-freundliche Umgebung unter ~/www/<projekt> gedacht.

Es unterstützt:

  • dynamische Projektnamen
  • optionalen Admin-User + Passwort
  • .env Integration
  • sichere Default-Werte
  • reproduzierbare Installationen

📦 Grundidee

Jede WordPress-Instanz wird isoliert in einem Verzeichnis installiert:

~/www/<project-name>

Beispiel:

~/www/blog
~/www/shop

⚙️ Anforderungen

  • WP-CLI installiert
  • PHP + Webserver (z. B. nginx/apache)
  • MySQL/MariaDB Datenbank
  • .env Datei im Projektordner

🧪 .env Beispiel

DB_NAME=wordpress_db
DB_USER=wp_user
DB_PASSWORD=secret

Optional (vom Script ergänzt):

WP_ADMIN_USER=chidraeve
WP_ADMIN_EMAIL=chidraeve@blog.local
WP_ADMIN_PASSWORD=generated_or_custom

🚀 Script-Verhalten

1. Projektname als Pflichtparameter

./install_wordpress.sh blog

2. Optional:

./install_wordpress.sh blog adminuser adminpass

3. Defaults

Falls nichts angegeben wird:

  • Admin User → whoami
  • Email → <user>@<project>.local
  • Passwort → automatisch generiert

4. Passwort-Handling

  • wird generiert, falls nicht gesetzt
  • wird in .env gespeichert
  • wird im Terminal ausgegeben

👉 Vorteil: kein „verlorenes Passwort“-Problem mehr


5. WordPress Installation Ablauf

Schritt 1: Setup Verzeichnis

mkdir -p ~/www/<name>
cd ~/www/<name>

Schritt 2: WordPress Download

wp core download --locale=de_DE

Schritt 3: Config erstellen

wp config create \
--dbname="$DB_NAME" \
--dbuser="$DB_USER" \
--dbpass="$DB_PASSWORD"

Schritt 4: Installation

wp core install \
--url="http://<name>.local" \
--title="<name>" \
--admin_user="$ADMIN_USER" \
--admin_password="$ADMIN_PASSWORD" \
--admin_email="$ADMIN_EMAIL"

🧠 Design-Entscheidungen (wichtig)

✔ 1. Idempotenz (kein Doppelinstall)

Script bricht ab, wenn WordPress bereits existiert.


✔ 2. Environment-first Design

Alle wichtigen Werte kommen aus .env.


✔ 3. sichere Defaults

Kein hartcodierter Admin-User wie „admin“.


✔ 4. Passwort persistiert

Kein Verlust durch Terminal-Output-only.


🔐 Sicherheitsaspekte

  • .env sollte chmod 600 haben
  • kein Passwort in Git committen
  • lokale Domains (.local) vermeiden externe Exposure

🔧 Das Skript

#!/usr/bin/env bash
set -euo pipefail

show_help() {
    echo "Usage: install_wordpress <name> [admin_user] [admin_password]"
    echo
    echo "Installiert eine lokale WordPress-Instanz unter ~/www/<name>"
    echo
    echo "Argumente:"
    echo "  name             Projektname (Domain: <name>.local)"
    echo "  admin_user       Optional (default: aktueller User)"
    echo "  admin_password   Optional (default: wird generiert)"
}

if [[ "${1:-}" == "--help" ]]; then
    show_help
    exit 0
fi

NAME="${1:-}"
ADMIN_USER="${2:-$(whoami)}"
ADMIN_PASSWORD="${3:-}"

if [ -z "$NAME" ]; then
    show_help
    exit 1
fi

WP_DIR="$HOME/www/$NAME"

if [ -d "$WP_DIR/wp-admin" ]; then
    echo "? WordPress scheint bereits installiert zu sein in $WP_DIR"
    exit 1
fi

mkdir -p "$WP_DIR"
cd "$WP_DIR"

if [ ! -f ".env" ]; then
    echo "? .env nicht gefunden"
    exit 1
fi

# .env laden
set -o allexport
source .env
set +o allexport

# Passwort generieren falls nicht gesetzt
if [ -z "$ADMIN_PASSWORD" ]; then
    ADMIN_PASSWORD="$(openssl rand -base64 16)"
    GENERATED_PASSWORD=true
else
    GENERATED_PASSWORD=false
fi

ADMIN_EMAIL="${ADMIN_USER}@${NAME}.local"

# Funktion: Key in .env setzen oder ersetzen
set_env_var() {
    local key="$1"
    local value="$2"

    if grep -q "^${key}=" .env; then
        sed -i "s|^${key}=.*|${key}=${value}|" .env
    else
        echo "${key}=${value}" >> .env
    fi
}

# Admin-Daten in .env schreiben
set_env_var "WP_ADMIN_USER" "$ADMIN_USER"
set_env_var "WP_ADMIN_EMAIL" "$ADMIN_EMAIL"

if [ "$GENERATED_PASSWORD" = true ]; then
    set_env_var "WP_ADMIN_PASSWORD" "$ADMIN_PASSWORD"
fi

if ! command -v wp >/dev/null 2>&1; then
    echo "? WP-CLI ist nicht installiert"
    exit 1
fi

echo "? Installiere WordPress in $WP_DIR"

wp core download --locale=de_DE

wp config create \
    --dbname="$DB_NAME" \
    --dbuser="$DB_USER" \
    --dbpass="$DB_PASSWORD"

wp core install \
    --url="http://$NAME.local" \
    --title="$NAME" \
    --admin_user="$ADMIN_USER" \
    --admin_password="$ADMIN_PASSWORD" \
    --admin_email="$ADMIN_EMAIL"

echo
echo "? WordPress installiert!"
echo
echo "? URL: http://$NAME.local"
echo "? User: $ADMIN_USER"
echo "? Email: $ADMIN_EMAIL"

if [ "$GENERATED_PASSWORD" = true ]; then
    echo "? Passwort (in .env gespeichert): $ADMIN_PASSWORD"
else
    echo "? Passwort: (von dir gesetzt)"
fi

Schreibe einen Kommentar

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