Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/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 "<?php echo phpinfo(); ?>" > $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 "
- <VirtualHost *:80>
- ServerAdmin $email
- ServerName $domain
- ServerAlias $domain
- DocumentRoot $rootDir
- <Directory />
- AllowOverride All
- </Directory>
- <Directory $rootDir>
- Options Indexes FollowSymLinks MultiViews
- AllowOverride all
- Require all granted
- </Directory>
- ErrorLog /var/log/apache2/$domain-error.log
- LogLevel error
- CustomLog /var/log/apache2/$domain-access.log combined
- </VirtualHost>" > $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" >> /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
Advertisement
Add Comment
Please, Sign In to add comment