|
#!/bin/bash
|
|
# This script is used to create virtual hosts.
|
|
# This script assumes the following:
|
|
# 1) This is a Debian/Ubuntu OS and Bash 4.x or higher is installed
|
|
# 2) The Apache defaults are in place but they can be changed in the script
|
|
# Base dir is /var/www
|
|
# Log dir is /var/log/apache2
|
|
# Apache user is www-data
|
|
# 3) Git is installed
|
|
# 4) ACL is installed
|
|
# 5) There is a git user and
|
|
# 6) There is a /home/git/repositories directory
|
|
# But #2-6 can be changed in the script
|
|
# This uses the a2ensite command which is usually only available on
|
|
# Debian/Ubuntu systems.
|
|
|
|
# NOTE! Change the <your domain> in the third prompt to your domain
|
|
|
|
# Set up the default parameters
|
|
read -e -p "Enter the web home directory:" -i "/var/www" homedir
|
|
read -e -p "Enter the git repository base directory:" -i "/home/git/repositories" gitdir
|
|
read -e -p "Enter the domain name for the server:" -i "<your domain>" sn
|
|
read -e -p "Enter the Project name:" -i "" proj
|
|
|
|
if [ -z "$proj" ]; then
|
|
echo "Project name cannot be blank!"
|
|
exit
|
|
fi
|
|
|
|
|
|
# Create the web directory and a index.php test file
|
|
cd $homedir
|
|
mkdir $proj
|
|
cd $homedir/$proj
|
|
mkdir "public_html"
|
|
|
|
# Set the owner and change permissions
|
|
chown -R www-data:www-data $homedir/$proj/
|
|
chmod -R '750' $homedir/$proj/public_html
|
|
|
|
# Setup the permissions so git can write to website
|
|
setfacl -Rm d:u:www-data:rwx,u:git:rwx $homedir/$proj
|
|
|
|
# Create the git directory and a bare git repository
|
|
cd $gitdir
|
|
mkdir $proj.git
|
|
cd $gitdir/$proj.git
|
|
git init --bare
|
|
cat >hooks/post-receive <<EOF
|
|
#!/bin/bash
|
|
GIT_WORK_TREE=$homedir/$proj/public_html git checkout -f
|
|
EOF
|
|
|
|
chmod ug+x hooks/post-receive
|
|
|
|
chown -R git:git $gitdir/$proj.git
|
|
|
|
# Create a directory for your apache errors log
|
|
mkdir /var/log/apache2/$proj/
|
|
|
|
# Creation the file with VirtualHost configuration in /etc/apache2/site-available/
|
|
echo "<VirtualHost *:80>
|
|
ServerAdmin webadmin@localhost
|
|
ServerName $proj.$sn
|
|
ServerAlias www.$proj.$sn
|
|
|
|
DocumentRoot $homedir/$proj/public_html/
|
|
<Directory />
|
|
Options FollowSymLinks
|
|
AllowOverride None
|
|
</Directory>
|
|
<Directory $homedir/$proj/public_html/>
|
|
Options Indexes FollowSymLinks MultiViews
|
|
AllowOverride None
|
|
Order allow,deny
|
|
allow from all
|
|
</Directory>
|
|
|
|
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
|
|
|
|
<Directory "'/usr/lib/cgi-bin'">
|
|
AllowOverride None
|
|
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
|
|
Order allow,deny
|
|
Allow from all
|
|
</Directory>
|
|
|
|
ErrorLog /var/log/apache2/$proj/error.log
|
|
|
|
# Possible values include: debug, info, notice, warn, error, crit,
|
|
# alert, emerg.
|
|
LogLevel warn
|
|
|
|
CustomLog /var/log/apache2/$proj/access.log combined
|
|
|
|
Alias /doc/ "'/usr/share/doc/'"
|
|
|
|
<Directory "'/usr/share/doc/'">
|
|
Options Indexes MultiViews FollowSymLinks
|
|
AllowOverride None
|
|
Order deny,allow
|
|
Deny from all
|
|
Allow from 127.0.0.0/255.0.0.0 ::1/128
|
|
</Directory>
|
|
|
|
</VirtualHost>" > /etc/apache2/sites-available/$proj
|
|
|
|
# Add the host to the hosts file
|
|
echo 127.0.0.1 $proj.$sn >> /etc/hosts
|
|
|
|
# Enable the site
|
|
a2ensite $proj
|
|
|
|
# Reload Apache2
|
|
service apache2 reload
|