WordPress-Websites mit WP-CLI per Skript erstellen
Veröffentlicht: – Kommentar hinterlassen Letzte Aktualisierung:
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.