#!/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"