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