Skip to content

Instantly share code, notes, and snippets.

@saniyat
Last active March 4, 2017 19:38
Show Gist options
  • Save saniyat/5656184870da8c28c094 to your computer and use it in GitHub Desktop.
Save saniyat/5656184870da8c28c094 to your computer and use it in GitHub Desktop.
Virtual Host
# Make a file named virtualhost and place it in /usr/local/bin folder.
# Give +x permission to the file.
# use as
# virtualhost sitename.tld relative_path_to/var/www/
# i.e virtualhost d7.san d7
#!/bin/bash
### Set default parameters
action='create'
domain=$1
rootdir=$2
owner=$(who am i | awk '{print $1}')
email='webmaster@localhost'
sitesEnable='/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 [ "$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 $userDir$rootdir ]; then
### create the directory
mkdir $userDir$rootdir
### give permission to root dir
chmod 755 $userDir$rootdir
### write test file in the new domain dir
if ! echo "<?php echo phpinfo(); ?>" > $userDir$rootdir/phpinfo.php
then
echo "ERROR: Not able to write in file "$userDir"/"$rootdir"/phpinfo.php. Please check permissions."
exit;
else
echo "Added content to "$userDir$rootdir"/phpinfo.php."
fi
fi
### create virtual host rules file
if ! echo "
<VirtualHost *:80>
ServerName $domain
DocumentRoot $userDir$rootdir
</VirtualHost>" > $sitesAvailabledomain
then
echo -e 'There is an ERROR create $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 write in /etc/hosts"
exit;
else
echo -e "Host added to /etc/hosts file \n"
fi
if [ "$owner" == "" ]; then
chown -R $(whoami):$(whoami) $userDir$rootdir
else
chown -R $owner:$owner $userDir$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 "$userDir$rootdir
exit;
else
### check whether domain already exists
if ! [ -e $sitesAvailabledomain ]; then
echo -e 'This domain dont exists.\nPlease Try Another one'
exit;
else
### Delete domain in /etc/hosts
newhost=${domain//./\\.}
sed -i "/$newhost/d" /etc/hosts
### 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 $userDir$rootdir ]; then
echo -e 'Delete host root directory ? (s/n)'
read deldir
if [ "$deldir" == 's' -o "$deldir" == 'S' ]; then
### Delete the directory
rm -rf $userDir$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
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment