#!/bin/bash # wp-manager.sh - Gestione istanze WordPress # # Uso: # wp-manager.sh create # wp-manager.sh delete # wp-manager.sh list WEB_ROOT="/var/www/html" APACHE_PORT="13380" DB_ROOT_PASSWORD="root" URL_PREFIX="http://localhost" create_wp() { SITE=$1 DB_NAME=$2 if [ -z "$SITE" ] || [ -z "$DB_NAME" ]; then echo "Uso: wp-manager.sh create " exit 1 fi SITE_DIR="$WEB_ROOT/$SITE" if [ -d "$SITE_DIR" ]; then echo "Errore: la cartella $SITE_DIR esiste già." exit 1 fi echo ">>> Creazione database..." sudo mariadb -u root -p"$DB_ROOT_PASSWORD" -e " DROP DATABASE IF EXISTS $DB_NAME; CREATE DATABASE IF NOT EXISTS $DB_NAME CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; " echo ">>> Download WordPress..." cd /var/www/html if [ -f "latest.tar.gz" ]; then read -p "Il file latest.tar.gz esiste già. Vuoi riscaricarlo? [s/N] " risposta if [ "$risposta" = "s" ] || [ "$risposta" = "S" ]; then sudo rm -f latest.tar.gz sudo wget -q https://wordpress.org/latest.tar.gz fi else sudo wget -q https://wordpress.org/latest.tar.gz fi sudo tar -xzf latest.tar.gz sudo mv wordpress "$SITE" echo ">>> Configurazione wp-config.php..." sudo cp "$SITE/wp-config-sample.php" "$SITE/wp-config.php" sudo sed -i "s/database_name_here/$DB_NAME/" "$SITE/wp-config.php" sudo sed -i "s/username_here/root/" "$SITE/wp-config.php" sudo sed -i "s/password_here/$DB_ROOT_PASSWORD/" "$SITE/wp-config.php" # sostituzioni chiavi salt # Scarica le nuove chiavi NEW_KEYS=$(curl -s https://api.wordpress.org/secret-key/1.1/salt) # Individua la prima e l'ultima riga del blocco da sostituire nel file FIRST_LINE=$(grep -n "define( 'AUTH_KEY'" $SITE/wp-config.php | head -1 | cut -d: -f1) LAST_LINE=$(grep -n "define( 'NONCE_SALT'" $SITE/wp-config.php | head -1 | cut -d: -f1) # Sostituisce il blocco con le nuove chiavi usando sed sudo sed -i "${FIRST_LINE},${LAST_LINE}d" $SITE/wp-config.php sudo sed -i "$((FIRST_LINE - 1))r /dev/stdin" $SITE/wp-config.php <<< "$NEW_KEYS" # === 2) Inserimento delle costanti dopo define( 'WP_DEBUG', false ); === EXTRA_DEFINES="define( 'WP_POST_REVISIONS', 5 );\ndefine( 'WP_AUTO_UPDATE_CORE', false );\ndefine( 'ALLOW_UNFILTERED_UPLOADS', true );" sudo sed -i "/define( 'WP_DEBUG', false );/a ${EXTRA_DEFINES}" $SITE/wp-config.php echo ">>> Permessi..." sudo chown -R www-data:www-data "$SITE" sudo chmod -R 775 "$SITE" sudo find "$SITE" -type d -exec chmod g+s {} \; # echo ">>> Ricarica Apache..." # sudo systemctl reload httpd echo "" echo "=== WordPress installato! ===" echo " Cartella : $SITE_DIR" echo " Database : $DB_NAME" if [ "$APACHE_PORT" = "80" ]; then echo " URL : $URL_PREFIX/$SITE" else echo " URL : $URL_PREFIX:$APACHE_PORT/$SITE" fi } delete_wp() { SITE=$1 DB_NAME=$2 if [ -z "$SITE" ] || [ -z "$DB_NAME" ]; then echo "Uso: wp-manager.sh delete " exit 1 fi SITE_DIR="$WEB_ROOT/$SITE" read -p "Sei sicuro di voler eliminare '$SITE'? (s/N): " CONFIRM if [[ "$CONFIRM" != "s" && "$CONFIRM" != "S" ]]; then echo "Operazione annullata." exit 0 fi echo ">>> Rimozione cartella..." sudo rm -rf "$SITE_DIR" echo ">>> Rimozione database..." sudo mariadb -u root -p"$DB_ROOT_PASSWORD" -e " DROP DATABASE IF EXISTS $DB_NAME; " } list_wp() { echo "=== Istanze WordPress in $WEB_ROOT ===" echo "" FOUND=0 for DIR in "$WEB_ROOT"/*/; do if [ -f "${DIR}wp-config.php" ]; then FOUND=1 NAME=$(basename "$DIR") DB=$(grep "DB_NAME" "${DIR}wp-config.php" | grep -o "'[^']*'" | sed -n '2p' | tr -d "'") echo " [$NAME]" echo " Cartella : $DIR" echo " Database : $DB" if [ "$APACHE_PORT" = "80" ]; then echo " URL : $URL_PREFIX/$NAME" else echo " URL : $URL_PREFIX:$APACHE_PORT/$NAME" fi echo "" fi done if [ $FOUND -eq 0 ]; then echo " Nessuna istanza trovata." fi } case "$1" in create) create_wp "$2" "$3" ;; delete) delete_wp "$2" "$3" ;; list) list_wp ;; *) echo "Uso:" echo " wp-manager.sh create " echo " wp-manager.sh delete " echo " wp-manager.sh list" ;; esac