WordPress Installer Bash Script

WordPress Installer Bash Script

#!/bin/bash

# Generate random password
generate_password() {
    openssl rand -base64 12
}

# Ask for site name and domain
read -p "Enter the site name (no spaces): " SITE_NAME

DB_NAME="db_${SITE_NAME}"
DB_USER="${SITE_NAME}_user"
DB_PASS=$(generate_password)
SITE_PATH="/var/www/html/${SITE_NAME}"
VHOST_PATH="/etc/apache2/sites-available/${SITE_NAME}.conf"

# Create site folder
mkdir -p $SITE_PATH

# Download WordPress
wget https://wordpress.org/latest.tar.gz -O /tmp/wordpress.tar.gz
tar -xzf /tmp/wordpress.tar.gz -C $SITE_PATH --strip-components=1

# Set permissions after extraction
chown -R www-data:www-data $SITE_PATH
chmod -R 755 $SITE_PATH

# Create MySQL Database
mysql -e "CREATE DATABASE $DB_NAME;"
mysql -e "CREATE USER '$DB_USER'@'localhost' IDENTIFIED BY '$DB_PASS';"
mysql -e "GRANT ALL PRIVILEGES ON $DB_NAME.* TO '$DB_USER'@'localhost';"
mysql -e "FLUSH PRIVILEGES;"

# Create Virtual Host
cat <<EOF > $VHOST_PATH
<VirtualHost *:80>
    ServerName $SITE_NAME
    DocumentRoot $SITE_PATH

    <Directory $SITE_PATH>
        AllowOverride All
        Require all granted
    </Directory>

    ErrorLog \${APACHE_LOG_DIR}/$SITE_NAME-error.log
    CustomLog \${APACHE_LOG_DIR}/$SITE_NAME-access.log combined
</VirtualHost>
EOF

# Enable Virtual Host
a2ensite ${SITE_NAME}.conf
systemctl reload apache2

echo "Installation completed!"
echo "Database: $DB_NAME"
echo "DB User: $DB_USER"
echo "DB Password: $DB_PASS"
echo "Site Folder: $SITE_PATH"