In meiner lokalen Testumgebung arbeite ich mit einem individuellen Setup auf der Grundlage von Homebrew mit nginx, MySQL und PHP. Für die Erstellung einer neuen WordPress-Website habe ich ein Skript erstellt, das dies automatisiert.

Dieses Skript fragt nach einem Website-Titel und ob ich eine Multisite installieren will. Es erstellt dann eine neue Website unter /Users/matze/Sites mit dem Format wp-<site>.test, wobei <site> der Website-Titel in Kleinbuchstaben mit Zahlen und Bindestrichen ist.

Es erstellt automatisch eine Datenbank mit dem Namen wp_<site> und installiert darin WordPress (hier: mit der Sprache de_DE), fügt ein paar Debugging-Flags zur wp-config.php hinzu und entfernt die Standardplugins Akismet und Hello Dolly.

Wenn gewünscht, aktiviert es auch die Netzwerk-Möglichkeit für die Multisite und fügt einen entsprechenden Eintrag 127.0.0.1 wp-<site>.test in der Datei /etc/hosts hinzu, damit die Website funktioniert.

Zu guter Letzt erstellt es auch einen neuen Eintrag unter ~/.wp-cli/config.local.yml, damit Aktualisierungen via wp @all durchgeführt werden können (oder andere Befehle via wp @local_<site>).

So sieht das Skript dabei aus:

#!/bin/zsh

HTDOCS=/Users/matze/Sites
NGINX_CONFIG_DIR=/opt/homebrew/etc/nginx

echo "Site Title:"
read SITE_TITLE

echo "Multisite? (y/N)"
read IS_MULTISITE
IS_MULTISITE=$(echo "${IS_MULTISITE}" | tr '[:upper:]' '[:lower:]')

URI=$(echo "${SITE_TITLE//([^A-Za-z0-9])/-}" | tr '[:upper:]' '[:lower:]')
DATABASE="wp_${URI//([^A-Za-z0-9])/_}"

if [ -d "${HTDOCS}/wp-${URI}" ]; then
	echo "Directory already exists."
	exit 1
fi

echo "Create database ${DATABASE}"
mysql -u root -proot -e "CREATE DATABASE ${DATABASE}"

mkdir ${HTDOCS}/wp-${URI}
cd ${HTDOCS}/wp-${URI}

wp core download --locale=de_DE
wp config create --dbname=${DATABASE} --dbuser=root --dbpass=root
wp config set WP_DISABLE_FATAL_ERROR_HANDLER true --raw
wp config set WP_DEBUG true --raw
wp config set WP_DEBUG_LOG true --raw
wp config set WP_DEBUG_DISPLAY true --raw
wp config set SCRIPT_DEBUG true --raw
wp config set EPIPHYT_DEBUG true --raw
wp config set DISABLE_WP_CRON false --raw
wp config set QM_DARK_MODE true --raw
wp config set FORCE_SSL_ADMIN false --raw
wp config set FORCE_SSL_LOGIN false --raw
wp config set WP_POST_REVISIONS 10 --raw
wp config set MEDIA_TRASH true --raw
wp config set EMPTY_TRASH_DAYS 10 --raw
wp config set WP_AUTO_UPDATE_CORE false --raw
wp config set DISALLOW_FILE_EDIT true --raw
wp config set CORE_UPGRADE_SKIP_NEW_BUNDLED true --raw
wp config set WP_ENVIRONMENT_TYPE local
wp config set WP_DEVELOPMENT_MODE all
wp core install --url="wp-${URI}.test" --title="${SITE_TITLE}" --admin_name=root --admin_password=root --admin_email=mk-dev@kitt.media
wp plugin delete akismet
wp plugin delete hello.php

if [ "${IS_MULTISITE}" = "y" ]; then
	wp core multisite-install --base="/" --skip-email --title="${SITE_TITLE} Sites" --admin_user=root --admin_email=mk-dev@kitt.media
fi

if [ $? -ne 0 ]; then
	echo "An error occurred. Rollback."
	
	rm -r ${HTDOCS}/wp-${URI}
	mysql -u root -proot -e "DROP DATABASE ${DATABASE}"
	exit 1
fi

cp ${NGINX_CONFIG_DIR}/servers/wp-test.test ${NGINX_CONFIG_DIR}/servers/wp-${URI}.test

sed -i "" "s|wp-test|wp-${URI}|" ${NGINX_CONFIG_DIR}/servers/wp-${URI}.test
echo "Restart nginx"
sudo brew services restart nginx

sed -i "" "s|### CONF|@local_${URI//([^A-Za-z0-9])/_}:\n\tpath: ${HTDOCS}/wp-${URI}\n\n### CONF|" ~/.wp-cli/config.local.yml

echo "127.0.0.1	wp-${URI}.test" | sudo tee -a /etc/hosts

echo "WordPress site created: http://wp-${URI}.test/wp-admin/"
echo "Username: root"
echo "Password: root"

Code-Sprache: Bash (bash)

Wenn du es verwenden möchtest, kannst du die Variable HTDOCS in Zeile 3 anpassen, um den Pfad zu deinen Websites zu ändern, und NGINX_CONFIG_DIR, um den Pfad deiner nginx-Konfiguration anzupassen. Wenn du auch Homebrew verwendest und mit einem Apple-Silicon-Chip ausgerüstet bist, sollte der Pfad derselbe sein. Mit einem Intel-Chip ist der richtige Pfad /usr/local/etc/nginx.

Für jede Website wird die Datei unter ${NGINX_CONFIG_DIR}/servers/wp-test.test kopiert. Die sieht so aus:

server {
	listen 80;
	server_name wp-test.test;

	root /Users/matze/Sites/wp-test;
	index  index.html index.htm index.php;

	location / {
		autoindex on;
		try_files $uri $uri/ /index.php?$args;

		proxy_buffer_size 128k;
		proxy_buffers 4 256k;
		proxy_busy_buffers_size 256k;
	}

	location ~ \.php$ {
		fastcgi_pass 127.0.0.1:9000;
		fastcgi_index index.php;
		fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
		include fastcgi_params;
	}

	if (!-e $request_filename) {
		rewrite /wp-admin$ $scheme://$host$uri/ permanent;
		rewrite ^(/[^/]+)?(/wp-.*) $2 last;
		rewrite ^(/[^/]+)?(/.*\.php)$ $2 last;
	}
}
Code-Sprache: Nginx (nginx)

Wenn du einen anderen Inhalt für HTDOCS angegeben hast, musst du auch hier den root in Zeile 5 entsprechend anpassen. Lass den Rest so, wie er ist, da wp-test durch wp-<site> ersetzt wird.

Auf diese Weise kann ich schnell neue test-Websites für mich oder die WordPress-Projekte meiner Kunden erstellen.

Schreibe einen Kommentar

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

Um auf deiner eigenen Website zu antworten, gib die URL deiner Antwort ein, die einen Link zur Permalink-URL dieses Beitrags enthalten sollte. Deine Antwort wird dann (möglicherweise nach der Moderation) auf dieser Seite erscheinen. Möchtest du deine Antwort aktualisieren oder entfernen? Aktualisiere oder lösche deinen Beitrag und gib die URL deines Beitrags noch einmal ein. (Mehr über die Funktion von Webmentions erfahren)