Last active
December 11, 2015 22:58
-
-
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
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/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