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
.envIntegration- 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
.envDatei 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
.envgespeichert - 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
.envsolltechmod 600haben- 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