Skip to content

Instantly share code, notes, and snippets.

@cnicodeme
Last active December 11, 2015 22:58
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save cnicodeme/4673532 to your computer and use it in GitHub Desktop.
Save cnicodeme/4673532 to your computer and use it in GitHub Desktop.
This scripts aims to create everything needed to have an environment for any Apache websites : Folder, Logs, VirtualHost and FTP Access
#!/bin/bash
#
# --------------------------------------------------------------------
# This is a free shell script under GNU GPL version 3.0 or above
# Copyright (C) 2005 ReFlectiv project.
# Feedback/comment/suggestions : http://www.reflectiv.net/
# -------------------------------------------------------------------------
#
# This scripts aims to create everything needed to have an environment
# for any Apache websites : Folder, Logs, VirtualHost and FTP Access
#
# First of all, we check if the user is root
if [[ $EUID -ne 0 ]]; then
echo "This script must be run as root"
exit 1
fi
while true; do
read -e -p "Primary domain (like www.domain.tld) ? " primary_domain
if [[ "$primary_domain" != "" ]]; then
break
fi
done
read -e -p "Aliases, space separated (like \"domain.tld www1.domain.tld www2.domain.tld\") ? " alias_domains
read -e -p "Absolute base path? [/srv/www/] : " base_path
if [[ "$base_path" == "" ]]; then
base_path="/srv/www/"
fi
count_dot_occurrences=$(echo "$primary_domain" | grep -b -o "\." | wc -l)
if [[ "$count_dot_occurrences" == "1" ]]; then
default_folder_name=$primary_domain
default_subfolder_name="www"
else
first_dot_pos=$(awk -v a="$primary_domain" -v b="." 'BEGIN{print index(a,b)}')
default_folder_name=${primary_domain:$first_dot_pos}
default_subfolder_name=${primary_domain:0:($first_dot_pos-1)}
fi
read -e -p "Website root folder name? [$default_folder_name] : " folder_name
if [[ "$folder_name" == "" ]]; then
folder_name="$default_folder_name"
fi
read -e -p "Website sub folder name? [$default_subfolder_name] : " subfolder_name
if [[ "$subfolder_name" == "" ]]; then
subfolder_name="$default_subfolder_name"
fi
read -e -p "VirtualHost file name? [$default_folder_name] : " vhost_name
if [[ "$vhost_name" == "" ]]; then
vhost_name="$default_folder_name"
fi
echo "<VirtualHost *:80>" > /tmp/vhost_$vhost_name
if [[ "$alias_domains" != "" ]]; then
first_space_pos=$(awk -v a="$alias_domains" -v b=" " 'BEGIN{print index(a,b)}')
first_alias=""
rest_aliases=""
if [[ "$first_space_pos" == "0" ]]; then
first_alias=$alias_domains
else
first_alias=${alias_domains:0:($first_space_pos-1)}
rest_aliases=${alias_domains:$first_space_pos}
fi
echo " ServerName $first_alias" >> /tmp/vhost_$vhost_name
if [[ "$rest_aliases" != "" ]]; then
echo " ServerAlias $rest_aliases" >> /tmp/vhost_$vhost_name
fi
echo " Redirect / http://$primary_domain/" >> /tmp/vhost_$vhost_name
echo "</VirtualHost>" >> /tmp/vhost_$vhost_name
echo "" >> /tmp/vhost_$vhost_name
echo "<VirtualHost *:80>" >> /tmp/vhost_$vhost_name
fi
echo " ServerName $primary_domain" >> /tmp/vhost_$vhost_name
echo " DocumentRoot "$base_path$folder_name/$subfolder_name"" >> /tmp/vhost_$vhost_name
echo "" >> /tmp/vhost_$vhost_name
echo " <Directory \"$base_path$folder_name/$subfolder_name\">" >> /tmp/vhost_$vhost_name
echo " Options Includes FollowSymLinks" >> /tmp/vhost_$vhost_name
echo " AllowOverride All" >> /tmp/vhost_$vhost_name
echo " Order allow,deny" >> /tmp/vhost_$vhost_name
echo " Allow from all" >> /tmp/vhost_$vhost_name
echo " </Directory>" >> /tmp/vhost_$vhost_name
echo "" >> /tmp/vhost_$vhost_name
echo " ErrorLog $base_path$folder_name/logs/$folder_name.error.log" >> /tmp/vhost_$vhost_name
echo " LogLevel warn" >> /tmp/vhost_$vhost_name
echo " CustomLog $base_path$folder_name/logs/$folder_name.access.log combined" >> /tmp/vhost_$vhost_name
echo " ServerSignature Off" >> /tmp/vhost_$vhost_name
echo "</VirtualHost>" >> /tmp/vhost_$vhost_name
# Creating folders
mkdir -p $base_path$folder_name/$subfolder_name
chown -R www-data:www-data $base_path$folder_name/$subfolder_name
mkdir $base_path$folder_name/logs
chown -R www-data:www-data $base_path$folder_name/logs
cat /tmp/vhost_$vhost_name >> /etc/apache2/sites-available/$vhost_name
rm -f /tmp/vhost_$vhost_name
# Create a FTP user ?
read -e -p "Create a related FTP user? [Y/n] : " create_ftpuser
if [[ ("$create_ftpuser" == "y" || "$create_ftpuser" == "Y" || "$create_ftpuser" == "") ]]; then
second_dot_pos=$(awk -v a="$default_folder_name" -v b="." 'BEGIN{print index(a,b)}')
default_ftpuser_name=${default_folder_name:0:($second_dot_pos-1)}
read -e -p "FTP username? [$default_ftpuser_name] : " ftpuser_name
if [[ "$ftpuser_name" == "" ]]; then
ftpuser_name="$default_ftpuser_name"
fi
while true; do
read -e -p "FTP password for $ftpuser_name ? " ftpuser_password
if [[ "$ftpuser_password" != "" ]]; then
break
fi
done
read -e -p "FTP home directory? [$base_path$folder_name] : " ftpuser_homedir
if [[ "$ftpuser_homedir" == "" ]]; then
ftpuser_homedir="$base_path$folder_name"
fi
echo "INSERT INTO proftpd.ftpuser (userid, passwd, homedir) VALUES ('$ftpuser_name', ENCRYPT('$ftpuser_password'), '$ftpuser_homedir');" > /tmp/ftpuser.sql
echo "Please indicate your MySQL root password"
mysql -u root -p < /tmp/ftpuser.sql
rm -f /tmp/ftpuser.sql
fi
# Enabling the virtualhost
read -e -p "Enable this virtualhost? [Y/n] : " enable_vhost
if [[ ("$enable_vhost" == "y" || "$enable_vhost" == "Y" || "$enable_vhost" == "") ]]; then
a2ensite $vhost_name
fi
# Reload Apache
read -e -p "Reload Apache (force-reload)? [Y/n] : " reload_apache
if [[ ("$reload_apache" == "y" || "$reload_apache" == "Y" || "$reload_apache" == "") ]]; then
/etc/init.d/apache2 force-reload
fi
exit 0;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment