#!/bin/bash ### Set Language TEXTDOMAIN=virtualhost ### Set default parameters action=$1 domain=$2 rootDir=$3 owner=$(who am i | awk '{print $1}') apacheUser=$(ps -ef | egrep '(httpd|apache2|apache)' | grep -v root | head -n1 | awk '{print $1}') email='webmaster@localhost' sitesEnabled='/etc/apache2/sites-enabled/' sitesAvailable='/etc/apache2/sites-available/' userDir='/var/www/' sitesAvailabledomain=$sitesAvailable$domain.conf ### don't modify from here unless you know what you are doing #### if [ "$(whoami)" != 'root' ]; then echo $"You have no permission to run $0 as non-root user. Use sudo" exit 1; fi if [ "$action" != 'create' ] && [ "$action" != 'delete' ] then echo $"You need to prompt for action (create or delete) -- Lower-case only" exit 1; fi while [ "$domain" == "" ] do echo -e $"Please provide domain. e.g.dev,staging" read domain done if [ "$rootDir" == "" ]; then rootDir=${domain//./} fi ### if root dir starts with '/', don't use /var/www as default starting point if [[ "$rootDir" =~ ^/ ]]; then userDir='' fi rootDir=$userDir$rootDir if [ "$action" == 'create' ] then ### check if domain already exists if [ -e $sitesAvailabledomain ]; then echo -e $"This domain already exists.\nPlease Try Another one" exit; fi ### check if directory exists or not if ! [ -d $rootDir ]; then ### create the directory mkdir $rootDir ### give permission to root dir chmod 755 $rootDir ### write test file in the new domain dir if ! echo "" > $rootDir/phpinfo.php then echo $"ERROR: Not able to write in file $rootDir/phpinfo.php. Please check permissions" exit; else echo $"Added content to $rootDir/phpinfo.php" fi fi ### create virtual host rules file if ! echo " ServerAdmin $email ServerName $domain ServerAlias $domain DocumentRoot $rootDir AllowOverride All Options Indexes FollowSymLinks MultiViews AllowOverride all Require all granted ErrorLog /var/log/apache2/$domain-error.log LogLevel error CustomLog /var/log/apache2/$domain-access.log combined " > $sitesAvailabledomain then echo -e $"There is an ERROR creating $domain file" exit; else echo -e $"\nNew Virtual Host Created\n" fi ### Add domain in /etc/hosts if ! echo "127.0.0.1 $domain" >> /etc/hosts then echo $"ERROR: Not able to write in /etc/hosts" exit; else echo -e $"Host added to /etc/hosts file \n" fi ### Add domain in /mnt/c/Windows/System32/drivers/etc/hosts (Windows Subsytem for Linux) if [ -e /mnt/c/Windows/System32/drivers/etc/hosts ] then if ! echo -e "\r127.0.0.1 $domain\r::1 $domain" >> /mnt/c/Windows/System32/drivers/etc/hosts then echo $"ERROR: Not able to write in /mnt/c/Windows/System32/drivers/etc/hosts (Hint: Try running Bash as administrator)" else echo -e $"Host added to /mnt/c/Windows/System32/drivers/etc/hosts file \n" fi fi if [ "$owner" == "" ]; then iam=$(whoami) if [ "$iam" == "root" ]; then chown -R $apacheUser:$apacheUser $rootDir else chown -R $iam:$iam $rootDir fi else chown -R $owner:$owner $rootDir fi ### enable website a2ensite $domain ### restart Apache /etc/init.d/apache2 reload ### show the finished message echo -e $"Complete! \nYou now have a new Virtual Host \nYour new host is: http://$domain \nAnd its located at $rootDir" exit; else ### check whether domain already exists if ! [ -e $sitesAvailabledomain ]; then echo -e $"This domain does not exist.\nPlease try another one" exit; else ### Delete domain in /etc/hosts newhost=${domain//./\\.} sed -i "/$newhost/d" /etc/hosts ### Delete domain in /mnt/c/Windows/System32/drivers/etc/hosts (Windows Subsytem for Linux) if [ -e /mnt/c/Windows/System32/drivers/etc/hosts ] then newhost=${domain//./\\.} sed -i "/$newhost/d" /mnt/c/Windows/System32/drivers/etc/hosts fi ### disable website a2dissite $domain ### restart Apache /etc/init.d/apache2 reload ### Delete virtual host rules files rm $sitesAvailabledomain fi ### check if directory exists or not if [ -d $rootDir ]; then echo -e $"Delete host root directory ? (y/n)" read deldir if [ "$deldir" == 'y' -o "$deldir" == 'Y' ]; then ### Delete the directory rm -rf $rootDir echo -e $"Directory deleted" else echo -e $"Host directory conserved" fi else echo -e $"Host directory not found. Ignored" fi ### show the finished message echo -e $"Complete!\nYou just removed Virtual Host $domain" exit 0; fi