Apache2 vhost on web server
This script makes the creation of virtual hosts on Apache2 web server quicker and easier.
The script is meant to be used for production web sites so it expects that
all of the traffic will use HTTPs.
If you need similar script to use on local machine for test purposes please use
https://samiwell.eu/linux/create-apache-2-vhost
#!/bin/bash
# The scipt automates the proccess of creation of virtual hosts on Apache 2 web server
# NOTE:
# 1. The script requires root previleges
# 2. The script allowes .htaccess override by default
# 3. The v-host directory will be dedecated to user and group www-data
# 4. The .htaccess file will redirect to https
# @author Samuil Banti
# @copyright (C) 2017 - Samuil Banti
# @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
# Configurations:
web_dir="/var/www/"
sites_available="/etc/apache2/sites-available/"
sites_enabled="/etc/apache2/sites-enabled"
# Request v-host name
echo "Enter the new virtual host name: "
read virtual_domain_name
# Validate the v-host name
if [ -d "${web_dir}${virtual_domain_name}" ]; then
echo "Directory '${web_dir}${virtual_domain_name already}' exists!"
exit
fi
if [ -f "${sites_available}${virtual_domain_name}.conf" ]; then
echo "File '${sites_available}${virtual_domain_name}' already exists!"
exit
fi
#Create v-host config file
echo "<VirtualHost *:80>" >> "${sites_available}${virtual_domain_name}.conf"
echo "DocumentRoot ${web_dir}${virtual_domain_name}/public" >> "${sites_available}${virtual_domain_name}.conf"
echo "ServerName ${virtual_domain_name}" >> "${sites_available}${virtual_domain_name}.conf"
echo "ServerAlias ${virtual_domain_name}" >> "${sites_available}${virtual_domain_name}.conf"
echo " <Directory />" >> "${sites_available}${virtual_domain_name}.conf"
echo " Options FollowSymLinks" >> "${sites_available}${virtual_domain_name}.conf"
echo " AllowOverride All" >> "${sites_available}${virtual_domain_name}.conf"
echo " </Directory>" >> "${sites_available}${virtual_domain_name}.conf"
echo " <Directory ${web_dir}>" >> "${sites_available}${virtual_domain_name}.conf"
echo " Options Indexes FollowSymLinks MultiViews" >> "${sites_available}${virtual_domain_name}.conf"
echo " AllowOverride All" >> "${sites_available}${virtual_domain_name}.conf"
echo " Order allow,deny" >> "${sites_available}${virtual_domain_name}.conf"
echo " allow from all" >> "${sites_available}${virtual_domain_name}.conf"
echo " </Directory>" >> "${sites_available}${virtual_domain_name}.conf"
echo " LogLevel warn" >> "${sites_available}${virtual_domain_name}.conf"
echo " CustomLog /var/log/apache2/${virtual_domain_name}_access.log combined" >> "${sites_available}${virtual_domain_name}.conf"
echo " ErrorLog /var/log/apache2/${virtual_domain_name}_error.log" >> "${sites_available}${virtual_domain_name}.conf"
echo "</VirtualHost>" >> "${sites_available}${virtual_domain_name}.conf"
ln -s "${sites_available}${virtual_domain_name}.conf" "${sites_enabled}${virtual_domain_name}.conf"
# Create the root directory:
mkdir -m 777 "${web_dir}${virtual_domain_name}"
mkdir -m 777 "${web_dir}${virtual_domain_name}/public"
echo "Hello world" > "${web_dir}${virtual_domain_name}/public/index.php"
# Create .htaccess file
echo "RewriteEngine on" >> "${web_dir}${virtual_domain_name}/public/.htaccess"
echo "RewriteBase /" >> "${web_dir}${virtual_domain_name}/public/.htaccess"
echo "php_flag display_errors on" >> "${web_dir}${virtual_domain_name}/public/.htaccess"
echo "php_value error_reporting 7" >> "${web_dir}${virtual_domain_name}/public/.htaccess"
echo "#if the request is not secure" >> "${web_dir}${virtual_domain_name}/public/.htaccess"
echo "RewriteCond %{HTTPS} off" >> "${web_dir}${virtual_domain_name}/public/.htaccess"
echo "#redirect to the secure version" >> "${web_dir}${virtual_domain_name}/public/.htaccess"
echo "RewriteRule (.*) https://%{HTTP_HOST}/$1 [R=301,L]" >> "${web_dir}${virtual_domain_name}/public/.htaccess"
echo "RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]" >> "${web_dir}${virtual_domain_name}/public/.htaccess"
echo "RewriteRule ^(.*)$ https://%1/$1 [R=301,L]" >> "${web_dir}${virtual_domain_name}/public/.htaccess"
# Enable th virtual host
a2ensite $virtual_domain_name
/etc/init.d/apache2 restart
echo "The script was executed. You may use to get a certificate (sudo certbot --apache)"
exit
Download...