#!/bin/bash # Help Function EngineHelp() { echo echo "Usage: `basename $0` [OPTION] [ARGUMENT]..." echo echo "OPTION:" echo " `basename $0` [system] [install|remove|purge] [nginx|php|mysql|postfix|--all]" echo echo " `basename $0` [site] [read] [all|active|sitename]" echo " `basename $0` [site] [create] [sitename] [--with-wordpress]" echo " `basename $0` [site] [update] [sitename] [singlesite] [w3total|wpsuper|fastcgi]" echo " `basename $0` [site] [update] [sitename] [multisite] [subdirectory|subdomain] [w3total|wpsuper|fastcgi]" echo " `basename $0` [site] [delete] [sitename] [--database|--webroot|--all]" echo echo " `basename $0` [config] [set|get] [memory|timeout]" echo echo "Exit status:" echo " 0 if OK," echo " 100 sudo privilege required," echo " 101 command failed to execute," } # Make Variables Available For Later Use LOGDIR=/var/log/easyengine MAINLOG=/var/log/easyengine/main.log ERRORLOG=/var/log/easyengine/error.log # Capture Errors OwnError() { echo -e "[ `date` ] \033[31m $@ \e[0m" | tee -ai $ERRORLOG exit 101 } # GET Information Function MYSQLINFO() { # Get The MySQL Username/Password read -p "MySQL Host [localhost]: " MYSQLHOST read -p "Enter The MySQL Username: " MYSQLUSER # Turn Off Echo For Passwords stty -echo read -p "Enter The MySQL Password: " MYSQLPASS stty echo echo read -p "Enter The MySQL Database Name [$DOMAIN]: " WPDBNAME # If Enter Is Pressed, Then Use localhost as MySQL Host if [[ $MYSQLHOST = "" ]] then MYSQLHOST=localhost #echo $MYSQLHOST fi # If Enter Is Pressed, Then Use $DOMAIN As Database Name if [[ $WPDBNAME = "" ]] then WPDBNAME=$DOMAIN #echo $WPDBNAME fi # Create Database mysql -u $MYSQLUSER -p$MYSQLPASS -e "create database \`$WPDBNAME\`" \ || OwnError "Unable To Create $WPDBNAME Database" } WEBUSERINFO() { # Nginx User NGINXUSER=$(grep user /etc/nginx/nginx.conf | cut -d' ' -f2 | cut -d';' -f1) \ || OwnError "Unable To Findout Nginx Username" } NGINXRELOAD() { # Test & Reload Nginx echo -e "\033[34m Reloading Nginx Configuration, Please Wait... \e[0m" nginx -t && service nginx reload || OwnError "Unable To Reload Nginx" } PHPSTART() { # Check PHP5-FPM IS Running service php5-fpm status if [ $? -ne 0 ] then echo -e "\033[34m Restarting PHP5-FPM, Please Wait... \e[0m" service php5-fpm start || OwnError "Unable To Restart PHP5-FPM" fi } # Easy Engine System Settings if [ "$1" = "system" ] then # Easy Engine Install if [ "$2" = "install" ] then if [ "$3" = "nginx" ] then # Install Python Software Properties echo -e "\033[34m Installing Python Software Properties... \e[0m" sudo apt-get -y install python-software-properties \ || OwnError "Unable To Install Python Software Properties" # Add Nginx Launchpad Repository echo -e "\033[34m Adding Brianmercer Nginx Launchpad Repository... \e[0m" sudo add-apt-repository ppa:brianmercer/nginx \ || OwnError "Unable To Add Nginx Launchpad Repository" # Update The APT Cache echo -e "\033[34m Updating APT Cache... \e[0m" sudo apt-get update 2> /tmp/keymissing || OwnError "Unable To Update APT Cache" for key in $(grep "NO_PUBKEY" /tmp/keymissing |sed "s/.*NO_PUBKEY //") do echo -e "\033[34m Processing key: $key \e[0m" gpg --keyserver subkeys.pgp.net --recv $key && sudo gpg --export --armor $key | apt-key add - done # Install Nginx echo -e "\033[34m Installing Nginx... \e[0m" sudo apt-get -y install nginx-custom || OwnError "Unable To Install Nginx" elif [ "$3" = "php" ] then # Install Python Software Properties echo -e "\033[34m Installing Python Software Properties... \e[0m" sudo apt-get -y install python-software-properties \ || OwnError "Unable To Install Python Software Properties" # Add PHP Launchpad Repository echo -e "\033[34m Adding PHP5 Launchpad Repository... \e[0m" sudo add-apt-repository ppa:ondrej/php5 \ || OwnError "Unable To Add PHP5 Launchpad Repository" # Update The APT Cache echo -e "\033[34m Updating APT Cache... \e[0m" sudo apt-get update 2> /tmp/keymissing || OwnError "Unable To Update APT Cache" for key in $(grep "NO_PUBKEY" /tmp/keymissing |sed "s/.*NO_PUBKEY //") do echo -e "\033[34m Processing key: $key \e[0m" gpg --keyserver subkeys.pgp.net --recv $key && sudo gpg --export --armor $key | apt-key add - done # Install PHP5 echo -e "\033[34m Installing PHP5... \e[0m" sudo apt-get -y install php5-common php5-mysql php5-xmlrpc \ php5-cgi php5-curl php5-gd php5-cli php5-fpm php-apc php-pear \ php5-dev php5-imap php5-mcrypt || OwnError "Unable To Install PHP5" elif [ "$3" = "mysql" ] then # Update The APT Cache echo -e "\033[34m Updating APT Cache... \e[0m" sudo apt-get update || OwnError "Unable To Update APT Cache" # Install MySQL echo -e "\033[34m Installing MySQL... \e[0m" sudo apt-get -y install mysql-server mysqltuner \ || OwnError "Unable To Install MySQL" elif [ "$3" = "postfix" ] then # Update The APT Cache echo -e "\033[34m Updating APT Cache... \e[0m" sudo apt-get update || OwnError "Unable To Update APT Cache" # Install Postfix echo -e "\033[34m Installing Postfix... \e[0m" sudo apt-get -y install postfix || OwnError "Unable To Install Postfix" elif [ "$3" = "--all" ] then # Install Python Software Properties echo -e "\033[34m Installing Python Software Properties... \e[0m" sudo apt-get -y install python-software-properties \ || OwnError "Unable To Install Python Software Properties" # Add Nginx Launchpad Repository echo -e "\033[34m Adding Brianmercer Nginx Launchpad Repository... \e[0m" sudo add-apt-repository ppa:brianmercer/nginx \ || OwnError "Unable To Add Nginx Launchpad Repository" # Add PHP Launchpad Repository echo -e "\033[34m Adding PHP5 Launchpad Repository... \e[0m" sudo add-apt-repository ppa:ondrej/php5 \ || OwnError "Unable To Add PHP5 Launchpad Repository" # Update The APT Cache echo -e "\033[34m Updating APT Cache... \e[0m" sudo apt-get update 2> /tmp/keymissing || OwnError "Unable To Update APT Cache" for key in $(grep "NO_PUBKEY" /tmp/keymissing |sed "s/.*NO_PUBKEY //") do echo -e "\033[34m Processing key: $key \e[0m" gpg --keyserver subkeys.pgp.net --recv $key && sudo gpg --export --armor $key | apt-key add - done # Install Nginx PHP5 MySQL Postfix echo -e "\033[34m Installing Nginx PHP5 MySQL Postfix... \e[0m" sudo apt-get -y install nginx-custom php5-common php5-mysql php5-xmlrpc \ php5-cgi php5-curl php5-gd php5-cli php5-fpm php-apc php-pear \ php5-dev php5-imap php5-mcrypt mysql-server mysqltuner postfix \ || OwnError "Unable To Install Nginx PHP5 MySQL Postfix" else EngineHelp fi # Easy Engine Remove elif [ "$2" = "remove" ] then if [ "$3" = "nginx" ] then # Remove Nginx echo -e "\033[34m Removing Nginx... \e[0m" sudo apt-get -y remove nginx || OwnError "Unable To Remove Nginx" elif [ "$3" = "php" ] then # Remove PHP5 echo -e "\033[34m Removing PHP5... \e[0m" sudo apt-get -y remove php5-common php5-mysql php5-xmlrpc \ php5-cgi php5-curl php5-gd php5-cli php5-fpm php-apc php-pear \ php5-dev php5-imap php5-mcrypt || OwnError "Unable To Remove PHP5" elif [ "$3" = "mysql" ] then # Remove MySQL echo -e "\033[34m Removing MySQL... \e[0m" sudo apt-get -y remove mysql-server mysqltuner \ || OwnError "Unable To Remove MySQL" elif [ "$3" = "postfix" ] then # Remove Postfix echo -e "\033[34m Removing Postfix... \e[0m" sudo apt-get -y remove postfix || OwnError "Unable To Remove Postfix" elif [ "$3" = "--all" ] then # Remove All echo -e "\033[34m Removing Nginx PHP5 MySQL Postfix... \e[0m" sudo apt-get -y remove nginx php5-common php5-mysql php5-xmlrpc \ php5-cgi php5-curl php5-gd php5-cli php5-fpm php-apc php-pear \ php5-dev php5-imap php5-mcrypt mysql-server mysqltuner postfix \ || OwnError "Unable To Remove Nginx PHP5 MySQL Postfix" else EngineHelp fi # Easy Engine Purge elif [ "$2" = "purge" ] then if [ "$3" = "nginx" ] then # Purge Nginx echo -e "\033[34m Purge Nginx... \e[0m" sudo apt-get -y remove --purge nginx || OwnError "Unable To Purge Nginx" elif [ "$3" = "php" ] then # Purge PHP5 echo -e "\033[34m Purge PHP5... \e[0m" sudo apt-get -y remove --purge php5-common php5-mysql php5-xmlrpc \ php5-cgi php5-curl php5-gd php5-cli php5-fpm php-apc php-pear \ php5-dev php5-imap php5-mcrypt || OwnError "Unable To Purge PHP5" elif [ "$3" = "mysql" ] then # Purge MySQL echo -e "\033[34m Purge MySQL... \e[0m" sudo apt-get -y remove --purge mysql-server mysqltuner \ || OwnError "Unable To Purge MySQL" elif [ "$3" = "postfix" ] then # Purge Postfix echo -e "\033[34m Purge Postfix... \e[0m" sudo apt-get -y remove --purge postfix || OwnError "Unable To Purge Postfix" elif [ "$3" = "--all" ] then # Purge All echo -e "\033[34m Purge Nginx PHP5 MySQL Postfix... \e[0m" sudo apt-get -y remove --purge nginx php5-common php5-mysql php5-xmlrpc \ php5-cgi php5-curl php5-gd php5-cli php5-fpm php-apc php-pear \ php5-dev php5-imap php5-mcrypt mysql-server mysqltuner postfix \ || OwnError "Unable To Purge Nginx PHP5 MySQL Postfix" else EngineHelp fi # Easy Engine Help else EngineHelp fi # Easy Engine Site Settings elif [ "$1" = "site" ] then # Easy Engine Read if [ "$2" = "read" ] then if [ "$3" = "all" ] then # Display The List Of All Sites echo -e "\033[34m List Of All (sites-available) Websites \e[0m" ls /etc/nginx/sites-available/ \ || OwnError "Unable To Display The List Of Websites" elif [ "$3" = "active" ] then # Display The List Of Active Sites echo -e "\033[34m List Of Active (sites-enabled) Websites \e[0m" ls /etc/nginx/sites-enabled/ \ || OwnError "Unable To Display The List Of Active Websites" elif [ "$3" != "all" ] && [ "$3" != "active" ] && [ -n "$3" ] then # Check The Website Is Exist ls /etc/nginx/sites-available/$3 &> /dev/null \ || OwnError "The $3 Is Not Found In Available Websites List" if [ $? -eq 0 ] then # Display The Specific Site Configuration echo -e "\033[34m Display The $3 Configuration Settings \e[0m" cat /etc/nginx/sites-available/$3 \ || OwnError "Unable To Display The $3 Configuration Settings" fi else EngineHelp fi # Easy Engine Create elif [ "$2" = "create" ] then if [ -n "$3" ] then # Remove http:// & www. DOMAIN=$(echo $3 | sed "s'http://''" | sed "s'www.''") # Creating Site echo -e "\033[34m Creating $DOMAIN, Please Wait... \e[0m" sed "s/example.com/$DOMAIN/g" \ /usr/share/easyengine/nginx/singlesite/basic.conf \ > /etc/nginx/sites-available/$DOMAIN \ || OwnError "Unable To Create Configuration File For $DOMAIN" # Creating Symbolic Link echo -e "\033[34m Creating Symbolic Link \e[0m" ln -s /etc/nginx/sites-available/$DOMAIN /etc/nginx/sites-enabled/ \ || OwnError "Unable To Create Symbolic Link For $DOMAIN" # Creating Htdocs & Logs Directory echo -e "\033[34m Creating htdocs & logs Directory \e[0m" (mkdir -p /var/www/$DOMAIN/htdocs; mkdir -p /var/www/$DOMAIN/logs) \ || OwnError "Unable To Create htdocs & logs Directory" # Creating Symbolic Links For Logs echo -e "\033[34m Creating Symbolic Link For Logs \e[0m" ln -s /var/log/nginx/$DOMAIN.access.log /var/www/$DOMAIN/logs/access.log \ && ln -s /var/log/nginx/$DOMAIN.error.log /var/www/$DOMAIN/logs/error.log \ || OwnError "Unable To Create Symbolic Link For $DOMAIN Logs" if [ "$4" = "--with-wordpress" ] then # Download Latest Wordpress echo -e "\033[34m Downloading WordPress \e[0m" wget -cO /var/www/$DOMAIN/htdocs/latest.tar.gz \ http://wordpress.org/latest.tar.gz # Extracting Wordpress tar --strip-components=1 -zxf /var/www/$DOMAIN/htdocs/latest.tar.gz \ -C /var/www/$DOMAIN/htdocs/ # Removing Wordpress Archive rm /var/www/$DOMAIN/htdocs/latest.tar.gz # Call MYSQLINFO Function For MySQL Values MYSQLINFO # Modify wp-config.php cp -v /var/www/$DOMAIN/htdocs/wp-config-sample.php \ /var/www/$DOMAIN/htdocs/wp-config.php sed -i "s/database_name_here/$WPDBNAME/" \ /var/www/$DOMAIN/htdocs/wp-config.php sed -i "s/username_here/$MYSQLUSER/" \ /var/www/$DOMAIN/htdocs/wp-config.php sed -i "s/password_here/$MYSQLPASS/" \ /var/www/$DOMAIN/htdocs/wp-config.php sed -i "s/localhost/$MYSQLHOST/" \ /var/www/$DOMAIN/htdocs/wp-config.php printf '%s\n' "g/put your unique phrase here/d" \ a "$(curl -L https://api.wordpress.org/secret-key/1.1/salt/)" . w \ | ed -s /var/www/$DOMAIN/htdocs/wp-config.php fi # Call WEBUSERINFO Function For Web User Details WEBUSERINFO # Change Ownership echo -e "\033[34m Changing Ownership \e[0m" #echo $NGINXUSER $DOMAIN chown -R $NGINXUSER:$NGINXUSER /var/www/$DOMAIN/ # Reload Nginx Configuration NGINXRELOAD # Start PHP-FPM If Not Running PHPSTART else EngineHelp fi # Easy Engine Update elif [ "$2" = "update" ] then if [ -n "$3" ] then # Remove http:// & www. DOMAIN=$(echo $3 | sed "s'http://''" | sed "s'www.''") if [ "$4" = "singlesite" ] then if [ "$5" = "w3total" ] then # Taking Backup mv /etc/nginx/sites-available/$DOMAIN \ /etc/nginx/sites-available/$DOMAIN.bak # Updating Site echo -e "\033[34m Updating $DOMAIN For W3TotalCache, Please Wait... \e[0m" sed "s/example.com/$DOMAIN/g" \ /usr/share/easyengine/nginx/singlesite/w3-total-cache.conf \ > /etc/nginx/sites-available/$DOMAIN \ || OwnError "Unable To Update Configuration File For $DOMAIN" # Reload Nginx Configuration NGINXRELOAD elif [ "$5" = "wpsuper" ] then # Taking Backup mv /etc/nginx/sites-available/$DOMAIN \ /etc/nginx/sites-available/$DOMAIN.bak # Updating Site echo -e "\033[34m Updating $DOMAIN For WPSuperCache, Please Wait... \e[0m" sed "s/example.com/$DOMAIN/g" \ /usr/share/easyengine/nginx/singlesite/wp-super-cache.conf \ > /etc/nginx/sites-available/$DOMAIN \ || OwnError "Unable To Update Configuration File For $DOMAIN" # Reload Nginx Configuration NGINXRELOAD elif [ "$5" = "fastcgi" ] then # Taking Backup mv /etc/nginx/sites-available/$DOMAIN \ /etc/nginx/sites-available/$DOMAIN.bak # Updating Site echo -e "\033[34m Updating $DOMAIN For Fastcgi Cache, Please Wait... \e[0m" sed "s/example.com/$DOMAIN/g" \ /usr/share/easyengine/nginx/singlesite/fastcgi-cache.conf \ > /etc/nginx/sites-available/$DOMAIN \ || OwnError "Unable To Update Configuration File For $DOMAIN" # Reload Nginx Configuration NGINXRELOAD else EngineHelp fi elif [ "$4" = "multisite" ] then echo "Under Developments !!" else EngineHelp fi else EngineHelp fi # Easy Engine Delete elif [ "$2" = "delete" ] then if [ -n "$3" ] then # Remove http:// & www. DOMAIN=$(echo $3 | sed "s'http://''" | sed "s'www.''") # Delete Site echo -e "\033[34m Deleting $DOMAIN, Please Wait... \e[0m" rm /etc/nginx/sites-available/$DOMAIN /etc/nginx/sites-enabled/$DOMAIN # Remove Symbolic Links For Logs Files echo -e "\033[34m Remove Symbolic Link For $DOMAIN Logs... \e[0m" rm /var/www/$DOMAIN/logs/{access,error}.log if [ "$4" = "--database" ] then # Get The Database Details MYSQLUSER=$(grep DB_USER /var/www/$DOMAIN/htdocs/wp-config.php \ | cut -d"'" -f4) MYSQLPASS=$(grep DB_PASSWORD /var/www/$DOMAIN/htdocs/wp-config.php \ | cut -d"'" -f4) WPDBNAME=$(grep DB_NAME /var/www/$DOMAIN/htdocs/wp-config.php \ | cut -d"'" -f4) # Remove Database echo -e "\033[34m Removing Database $WPDBNAME... \e[0m" mysql -u $MYSQLUSER -p$MYSQLPASS -e "drop database \`$WPDBNAME\`" \ || OwnError "Unable To Drop $WPDBNAME Database" elif [ "$4" = "--webroot" ] then # Remove Webroot For $DOMAIN echo -e "\033[34m Removing /var/www/$DOMAIN Directory... \e[0m" rm -rf /var/www/$DOMAIN elif [ "$4" = "--all" ] then # Get The Database Details MYSQLUSER=$(grep DB_USER /var/www/$DOMAIN/htdocs/wp-config.php \ | cut -d"'" -f4) MYSQLPASS=$(grep DB_PASSWORD /var/www/$DOMAIN/htdocs/wp-config.php \ | cut -d"'" -f4) WPDBNAME=$(grep DB_NAME /var/www/$DOMAIN/htdocs/wp-config.php \ | cut -d"'" -f4) # Remove Database echo -e "\033[34m Removing Database $WPDBNAME... \e[0m" mysql -u $MYSQLUSER -p$MYSQLPASS -e "drop database \`$WPDBNAME\`" \ || OwnError "Unable To Drop $WPDBNAME Database" # Remove Webroot For $DOMAIN echo -e "\033[34m Removing /var/www/$DOMAIN Directory... \e[0m" rm -rf /var/www/$DOMAIN fi # Reload Nginx Configuration NGINXRELOAD else EngineHelp fi # Easy Engine Help else EngineHelp fi # Easy Engine Config Settings elif [ "$1" = "config" ] then echo "Under Developments !!" # Easy Engine Help else EngineHelp fi