apache2/create_vhost.sh

3511 lines
100 KiB
Bash
Executable File

#!/usr/bin/env bash
log_file="$(mktemp)"
## ---
## --- Some functions
## ---
usage() {
echo
[ -n "$1" ] && echo -e "Error: $1\n"
cat<<EOF
Usage: ` basename $0` [Options ]
This scripts creates a new file with apache vhost entry. That script acts
intteractively, all needed parameters will be requested if not given as
options on command line.
Options:
-a
Automatic Mode: Script runs with a minimum user requests. If the
command line parameters are sufficient, no user interaction is
requested.
-h
Prints this help.
-C
Don't create "phpinfo"-file. The defaualt is to create
file phpinfo.php.
-l <common-logfile-dir>
If set, logfiles for the new site will go there.
-n <project-name>
If set, project name will be used as name of the websites
base directory. Otherwise <domain>.<tld> or <sub-domain>.<domain>.<tld>
will be used.
-p <path-to-common-fcgi-configuration-directory>
Only used if type is fcgi ("-t FCGID"). If given, a common
existing configuration directory will be used for FCGI configurations.
if not given, a site-specific configuration directory will be
created.
-t <type>
One of "PHP-FPM", "FCGID", "MOD_PHP" or "STATIC".
If not give, the site url will be requested.
-s
Only https connections allowed. Non SSL connections will be redirected
to SSL connection
-S <unix socket for php-fpm>
Only used if type is php-fpm ("-t PHP-FPM").
-q
Don't print summary before starting creation the vhost entry
is set
-u <site-url>
i.e. www.oopen.de
If not give, the site url will be requested.
-V <path-to-apache-vhost-dir>
If set, vhost configuration will be stored there.
-v <php-major-version>
i.e 5.6
If not give, the PHP version will be requested.
EOF
exit 1
}
# - Check if a given array (parameter 2) contains a given string (parameter 1)
# -
containsElement () {
local e
for e in "${@:2}"; do [[ "$e" == "$1" ]] && return 0; done
return 1
}
# - Remove leading/trailling whitespaces
# -
trim() {
local var="$*"
var="${var#"${var%%[![:space:]]*}"}" # remove leading whitespace characters
var="${var%"${var##*[![:space:]]}"}" # remove trailing whitespace characters
echo -n "$var"
}
is_number() {
return $(test ! -z "${1##*[!0-9]*}" > /dev/null 2>&1);
# - also possible
# -
#[[ ! -z "${1##*[!0-9]*}" ]] && return 0 || return 1
#return $([[ ! -z "${1##*[!0-9]*}" ]])
}
echononl(){
echo X\\c > /tmp/shprompt$$
if [ `wc -c /tmp/shprompt$$ | awk '{print $1}'` -eq 1 ]; then
echo "$*\\c" 1>&2
else
echo -e -n "$*" 1>&2
fi
rm /tmp/shprompt$$
}
fatal(){
echo ""
if [ "X$*" != "X" ]; then
echo -e "\t[ \033[31m\033[1mError\033[m ]: $*"
echo ""
fi
echo -e "\t\033[31m\033[1mExiting installation now..\033[m"
echo ""
rm -f $log_file
exit 1
}
info (){
echo ""
echo -e "\t[ \033[32m\033[1mInfo\033[m ]: $*"
echo ""
}
warn (){
echo ""
echo -e "\t[ \033[33m\033[1mWarning\033[m ]: $*"
echo ""
}
error (){
echo ""
echo -e "\t[ \033[31m\033[1mError\033[m ]: $*"
echo ""
}
echo_ok() {
echo -e "\033[85G[ \033[32mok\033[m ]"
## echo -e " [ ok ]"
}
echo_failed(){
echo -e "\033[85G[ \033[1;31mfailed\033[m ]"
## echo -e " [ failed ]"
}
echo_skipped() {
echo -e "\033[85G[ \033[30m\033[1mskipped\033[m ]"
}
## ---
## --- END: functions
## ---
# ---
# - Try to determin some server settings
# ---
_base_webserver_info_needed=false
_pass_apache_base_dir=false
_pass_web_user=false
_pass_server_admin=false
# - Determine the installed different PHP major versions
# -
__major_php_verisons=""
_php_installation_dirs=`find /usr/local -mindepth 1 -maxdepth 1 -type l -name "*php-*" -print | sort`
for dir in $_php_installation_dirs ; do
_major_version="${dir##*-}"
__major_php_verisons="$__major_php_verisons $_major_version"
done
_major_php_verisons=`echo "$__major_php_verisons" | sed 's/^ *//'`
# - Determin IP Addresses
# -
if ifconfig | grep -i -q -E "inet (address|Adresse):" ; then
#__ipv4="`ifconfig | grep -e \"^\s*inet Adresse\" | grep -v \"127.0.0.1\" | awk '{print$2}' | cut -d\":\" -f2 | sort | head -1`"
__ipv4="`ifconfig | grep -E \"^\s*inet [address|Adresse]\" | grep -v \"127.0.0.1\" | awk '{print$2}' | cut -d\":\" -f2 | sort`"
#__ipv6="`ifconfig | grep -e \"^\s*inet6-Adresse\" | awk '{print$2}' | grep -v -e \"^::1/\" | grep -v -e \"^fe80\" | cut -d\"/\" -f1 | sort | head -1`"
__ipv6="`ifconfig | grep -e \"^\s*inet6-Adresse\" | awk '{print$2}' | grep -v -e \"^::1/\" | grep -v -e \"^fe80\" | cut -d\"/\" -f1 | sort`"
else
#__ipv4="`ifconfig | grep -e \"^\s*inet \" | grep -v \"127.0.0.1\" | awk '{print$2}' | sort | head -1`"
__ipv4="`ifconfig | grep -e \"^\s*inet \" | grep -v \"127.0.0.1\" | awk '{print$2}' | sort`"
#__ipv6="`ifconfig | grep -e \"^\s*inet6 \" | awk '{print$2}' | grep -v \"^::1\" | grep -v -e \"^fe80\" | sort | head -1`"
__ipv6="`ifconfig | grep -e \"^\s*inet6 \" | awk '{print$2}' | grep -v \"^::1\" | grep -v -e \"^fe80\" | sort`"
fi
for _ip in $__ipv4 ; do
_ipv4="$_ipv4 $_ip"
done
for _ip in $__ipv6 ; do
_ipv6="$_ipv6 $_ip"
done
## - Trim leading whitespaces
## -
shopt -s extglob
__ipv4="${_ipv4##*( )}"
__ipv6="${_ipv6##*( )}"
shopt -u extglob
# - Determin httpd binary
# -
## - Determin httpd binary
## -
_httpd_binary="$(ps -axu | grep httpd \
| grep -e "^root" \
| grep -v grep \
| grep -v vim \
| grep -v bash \
| awk '{print$11}' | head -1)"
if [ -z "$_httpd_binary" ]; then
_httpd_binary="$(which httpd)"
if [ -z "$_httpd_binary" ]; then
if [ -x "/usr/local/apache2/bin/httpd" ]; then
_httpd_binary="/usr/local/apache2/bin/httpd"
fi
fi
fi
# - Determin websever user/group
# -
web_user="`$_httpd_binary -t -D DUMP_RUN_CFG | grep -i -e "^User" | awk '{print$2}' | cut -d\"=\" -f2 | tr -d '"'`"
web_group="`$_httpd_binary -t -D DUMP_RUN_CFG | grep -i -e "^Group" | awk '{print$2}' | cut -d\"=\" -f2 | tr -d '"'`"
if [ -z "$web_user" -o -z "$web_group" ]; then
_base_webserver_info_needed=true
else
_pass_web_user=true
fi
# - Determin ServerRoot Directory
# -
apache_base_dir=`$_httpd_binary -t -D DUMP_RUN_CFG | grep ServerRoot | awk '{print$2}' | tr -d '"'`
if [ "`realpath /usr/local/apache2`" = "$apache_base_dir" ]; then
apache_base_dir="/usr/local/apache2"
_apache_base_dir_realpath="`realpath $apache_base_dir`"
elif [ -z "$apache_base_dir" ]; then
if [ -d "`realpath /usr/local/apache2`" ];then
apache_base_dir="/usr/local/apache2"
_apache_base_dir_realpath="`realpath $apache_base_dir`"
fi
else
_apache_base_dir_realpath=$apache_base_dir
fi
if [ -z "$apache_base_dir" ];then
_base_webserver_info_needed=true
else
_pass_apache_base_dir=true
fi
# - Determin (default) ServerAdmin E-Mail Address"
# -
if [ -f "${apache_base_dir}/conf/httpd.conf" ]; then
server_admin="`cat ${apache_base_dir}/conf/httpd.conf | grep ServerAdmin | grep -v -e \"^\s*#\" | awk '{print$2}'`"
fi
if [ -z "$server_admin" ];then
_base_webserver_info_needed=true
else
_pass_server_admin=true
fi
# ---
# - Set Default Values
# ----
# - Needed for PHP-FPM environment
# -
_tcp_host=127.0.0.1
_tcp_port=9000
#__CUSTOM_IPV4_LOG=ipv4_requests.log
#__CUSTOM_IPV6_LOG=ipv6_requests.log
__CUSTOM_IP_LOG=ip_requests.log
_suEXEC=false
_auto=""
site_url=""
_type=""
_COMMON_FCGID_CONFIG_PATH=""
major_php_verison=""
_print_summary=true
_https_only=""
_symlink_web_base_dir=""
CREATE_PHPINFO_FILE=true
USE_PROJECT_NAME=false
PROJECT_NAME=""
COMMON_LOGFILE_DIR=""
REDIRECT_LOGFILE_DIR="/var/log/apache2"
PARKED_LOGFILE_DIR="/var/log/apache2"
VHOST_DIR=""
WEBSITES_ROOT_DIR=""
CREATE_SYMLINK_WEB_BASE_DIR=false
# ---
# - Determin timeout value
# ---
if [[ -f "/usr/local/apache2/conf/httpd.conf" ]]; then
_HTTPD_CONF_FILE="/usr/local/apache2/conf/httpd.conf"
elif [[ -f "/etc/apache2/apache2.conf" ]]; then
_HTTPD_CONF_FILE="/etc/apache2/apache2.conf"
else
_HTTPD_CONF_FILE=''
fi
if [[ -f "${_HTTPD_CONF_FILE}" ]] && $(grep -q -i -E "^\s*Timeout\s+" "${_HTTPD_CONF_FILE}") ; then
_TIMEOUT="$(grep -i -E "^\s*timeout\s+" "${_HTTPD_CONF_FILE}"| awk '{print$2}' | head -1)"
else
_TIMEOUT=60
fi
if [[ -f "${_HTTPD_CONF_FILE}" ]] && $(grep -q -i -E "^\s*ProxyTimeout\s+" "${_HTTPD_CONF_FILE}") ; then
PROXY_TIMEOUT="$(grep -i -E "^\s*ProxyTimeout\s+" "${_HTTPD_CONF_FILE}"| awk '{print$2}' | head -1)"
else
PROXY_TIMEOUT=${_TIMEOUT}
fi
# ---
# - END: Determin timeout value
# ---
# ---
# - Read Configuration File (if exists)
# -
# - Note: previously Default Settings will be overwriten
# ---
script_base_dir="$(realpath $(dirname $0))"
conf_file="${script_base_dir}/conf/create_vhost.conf"
echo ""
echononl "\tInclude Configuration file '$conf_file'.."
if [[ ! -f $conf_file ]]; then
echo_skipped
else
source $conf_file > $log_file 2>&1
if [[ $? -eq 0 ]]; then
echo_ok
else
echo_failed
error "$(cat $log_file)"
fi
fi
# ---
# - Read in Commandline arguments
# -
# - Note: previously Settings (also those from configuration file) will be overwriten
# ---
while getopts aChl:n:p:sS:t:u:V:v: opt ; do
case $opt in
a) _auto="auto" ;;
C) CREATE_PHPINFO_FILE="false" ;;
h) usage ;;
l) COMMON_LOGFILE_DIR="$OPTARG"
;;
n) USE_PROJECT_NAME=true
PROJECT_NAME="$OPTARG"
;;
p) if [ -n "$OPTARG" -a -d "$OPTARG" ]; then
_COMMON_FCGID_CONFIG_PATH=$OPTARG
fi
;;
q) _print_summary=false ;;
s) _https_only=true ;;
S) if [ -n "$OPTARG" -a -S "$OPTARG" ]; then
unix_socket=$OPTARG
connection="unix_socket"
_connection_msg="Unix Socket"
fi
;;
t) if [ "$OPTARG" = "PHP-FPM" -o "$OPTARG" = "FCGID" -o "$OPTARG" = "MOD_PHP" ]; then
_type=$OPTARG
fi
;;
u) site_url=$OPTARG ;;
V) VHOST_BASE_DIR="$OPTARG"
;;
v)
for _version in $_major_php_verisons ; do
if [ "$OPTARG" = "$_version" ]; then
major_php_verison=$OPTARG
fi
done
;;
\?) usage
esac
done
echo
echo "_auto..............: $_auto"
echo "site_url...........: $site_url"
echo "_type..............: $_type"
echo "COMMON_LOGFILE_DIR.: $COMMON_LOGFILE_DIR"
echo "PROJECT_NAME.......: $PROJECT_NAME"
echo "fcgi_common_path...: $_COMMON_FCGID_CONFIG_PATH"
echo "unix_socket........: $unix_socket"
echo "major_php_verison..: $major_php_verison"
echo "_print_summary.....: $_print_summary"
echo
## --------------------------------------------------
#clear
echo
echo
echo -e "\033[21G\033[32mCreate PHP configuration on webserver \"`hostname -f`\"..\033[m"
#echo ""
echo ""
echo -e "\033[32m--\033[m"
echo ""
if [ -z "$site_url" ]; then
echo "Insert Site (i.e. www.oopen.de)."
echo ""
echo ""
site_url=
echononl "Site URL: "
read site_url
while [ "X$site_url" = "X" ] ; do
echo -e "\n\t\033[33m\033[1mEingabe erforderlich.\033[m\n"
echononl "Site URL: "
read site_url
done
else
echo "Create Configuration for site \"$site_url\".."
fi
if $USE_PROJECT_NAME && [[ -z "$PROJECT_NAME" ]]; then
echo ""
echo -e "\033[32m--\033[m"
echo ""
echo "Insert Project Name."
echo ""
echo ""
PROJECT_NAME=
echononl "Project Name: "
read PROJECT_NAME
while [[ -z "$(trim $PROJECT_NAME)" ]] ; do
echo -e "\n\t\033[33m\033[1mEingabe erforderlich.\033[m\n"
echononl "Project Name: "
read PROJECT_NAME
done
fi
if [[ "$PROJECT_NAME" = "PARKED" ]] ; then
_type="PARKED"
fi
echo ""
echo -e "\033[32m--\033[m"
echo ""
if [ "$_type" != "PHP-FPM" -a "$_type" != "FCGID" -a "$_type" != "MOD_PHP" -a "$_type" != "STATIC" -a "$_type" != "REDIRECT" -a "$_type" != "PARKED" ];then
echo "Select PHP implementation configure for ?"
echo ""
echo "[1] PHP-FPM (FastCGI Process Manager)"
echo "[2] mod_fcgid (Apache FastCGI implementation)"
echo "[3] mod_php (Apache PHP Module)"
echo "[4] suEXEC (using mod_fcgid)"
echo "[5] static site (No PHP engine enabled)"
echo "[6] only redirect"
echo "[7] parke domain/site"
echo ""
echononl "Your choice: "
while [ "$_type" != "PHP-FPM" -a "$_type" != "FCGID" -a "$_type" != "MOD_PHP" -a "$_type" != "STATIC" -a "$_type" != "REDIRECT" -a "$_type" != "PARKED" ];do
read OPTION
case $OPTION in
1) _type="PHP-FPM"
_type_msg="PHP-FPM (FastCGI Process Manager)"
_new_extension=php-fpm
;;
2) _type="FCGID"
_type_msg="mod_fcgid (Apache FastCGI implementation)"
_new_extension=mod_fcgid
;;
3) _type="MOD_PHP"
_type_msg="mod_php (Apache PHP Module)"
_new_extension=mod_php
;;
4) _type="FCGID"
_suEXEC=true
_type_msg="suEXEC (using mod_fcgid)"
_new_extension=suexec
;;
5) _type="STATIC"
_type_msg="static site (No PHP engine enabled)"
_new_extension=static
;;
6) _type="REDIRECT"
_type_msg="only redirect to another site"
_new_extension=redirect
;;
7) _type="PARKED"
_type_msg="parke domai/site"
_new_extension=parked
;;
*) echo ""
echo -e "\t\033[1;33mFalsche Eingabe ! [ 1 = PHP-FPM ; 2 = mod_fcgid , 3 = mod_php, 4 =suEXEC, 5 = static, 6 = redirect, 7 = parke]\033[m"
echo ""
echononl "Your choice: "
;;
esac
done
else
if [ "$_type" = "PHP-FPM" ];then
_type_msg="PHP-FPM (FastCGI Process Manager)"
_new_extension=php-fpm
elif [ "$_type" = "FCGID" ]; then
if $_suEXEC ; then
_type_msg="suEXEC (using mod_fcgid)"
_new_extension=suexec
else
_type_msg="mod_fcgid (Apache FastCGI implementation)"
_new_extension=mod_fcgid
fi
elif [ "$_type" = "MOD_PHP" ]; then
_type_msg="mod_php (Apache PHP Module)"
_new_extension=mod_php
elif [ "$_type" = "STATIC" ]; then
_type_msg="static site (No PHP engine enabled)"
_new_extension=static
elif [ "$_type" = "REDIRECT" ]; then
_type_msg="only redirect to another site"
_new_extension=redirect
elif [ "$_type" = "PARKED" ]; then
_type_msg="only parke domain/site"
_new_extension=parked
fi
echo "Configure site \"${site_url}\" - \"$_type_msg\""
fi
if $_base_webserver_info_needed ; then
if ! $_pass_apache_base_dir ; then
echo ""
echo ""
echo -e "\033[32m--\033[m"
echo ""
echo "Apache ServerRoot directory."
echo ""
echo ""
apache_base_dir=
while [ "X$apache_base_dir" = "X" ] ; do
echononl "Apache ServerRoot Directory [$_apache_base_dir]: "
read apache_base_dir
if [ "X$apache_base_dir" = "X" ]; then
apache_base_dir=$_apache_base_dir
fi
done
_apache_base_dir_realpath=`realpath $apache_base_dir 2> /dev/null`
if [ ! -d "$_apache_base_dir_realpath" ]; then
fatal "Cannot find directory \"$apache_base_dir\"!"
fi
if [ ! -d "${_apache_base_dir_realpath}/conf/vhosts" ]; then
fatal "Cannot find vhost directory. tried \"${_apache_base_dir_realpath}/conf/vhosts\""
fi
fi
if ! $_pass_server_admin ; then
echo ""
echo ""
echo -e "\033[32m--\033[m"
echo ""
echo "Insert email address for server admin."
echo ""
echo ""
server_admin=
while [ "X$server_admin" = "X" ] ; do
#echo -e "\n\t\033[33m\033[1mEingabe erforderlich!\033[m\n"
echononl "Email Admin [$_server_admin]: "
read server_admin
if [ "X$server_admin" = "X" ]; then
server_admin=$_server_admin
fi
done
fi
if ! $_pass_web_user ; then
echo ""
echo ""
echo -e "\033[32m--\033[m"
echo ""
echo "Insert User/Group for apache daemon (httpd)."
echo ""
echo ""
web_user=
while [ "X$web_user" = "X" ]
do
echononl "apache user [${_web_user}]: "
read web_user
if [ "X$web_user" = "X" ]; then
web_user=$_web_user
fi
done
if [ "$web_user" = "nobody" ]; then
_web_group="nogroup"
else
_web_group=$web_user
fi
while [ "X$web_group" = "X" ]
do
echononl "apache group [$_web_group]: "
read web_group
if [ "X$web_group" = "X" ]; then
web_group=$_web_group
fi
done
fi
fi # if $_base_webserver_info_needed ; then
## - Looking for existent VHost Configuration
## -
#_vhost_config=`grep -l -r -E "(ServerName|ServerAlias)\s+.*$site_url" ${_apache_base_dir_realpath}/conf/vhosts* 2> /dev/null`
_vhost_config=`grep -l -r -E "(ServerName|ServerAlias)\s+$site_url" ${_apache_base_dir_realpath}/conf/vhosts/* 2> /dev/null`
_existing_vhost_config_file=""
if [ -n "$_vhost_config" ]; then
declare -i _count=0
for _config_file in $_vhost_config ; do
if [ -z "$_config_file" ]; then
continue
fi
[[ "$_config_file" =~ /DELETED/ ]] && continue
[[ "$_config_file" =~ /BAK/ ]] && continue
# - Matches i.e vhosts.2018-01-14-0106
# -
[[ "$_config_file" =~ /vhosts\.[0-9]{4}-[0-9]{2}-[0-9]{2}-[0-9]{4}/ ]] && continue
_extension="${_config_file##*.}"
if [ "$_extension" = "swp" ] ; then
continue
fi
if [ "$_extension" = "$_new_extension" ]; then
error "Found configuration file \"$_config_file\".\n\n\t It seems, $_type configuration is already done."
fatal
fi
if [ "$_extension" = "conf" ]; then
_existing_vhost_config_file=`realpath $_config_file`
_new_vhost_config_file=${_config_file}.$_new_extension
_new_vhost=false
break
else
_name="${_config_file%.*}"
if [ "`realpath $_name`" = "$_config_file" ]; then
_existing_vhost_config_file="$_config_file"
_new_vhost_config_file=${_name}.$_new_extension
_new_vhost=false
break
fi
fi
let _count++
done
fi
if [ -z "$_existing_vhost_config_file" ]; then
echo ""
echo ""
echo -e "\033[33m--\033[m"
echo""
echo -e "\033[21G\033[33mNo configuration file found for site \"$site_url\"..\033[m"
echo ""
echo -e "\033[1;33m--\033[m"
echo ""
echo ""
OK=""
echononl "Create a new $_type vhost entry? [yes/no]: "
read OK
while [ "X$OK" != "Xyes" -a "X$OK" != "XYes" -a "X$OK" != "Xno" -a "X$OK" != "XNo" ]; do
echononl "falsche Angabe! [yes/no]: "
read OK
done
[ $OK = "yes" -o $OK = "Yes" ] || fatal Abbruch durch Benutzer
_new_vhost=true
_config_file_found=false
_HOST=`echo $site_url | cut -s -d"." -f 1`
_DOMAIN=`echo $site_url | cut -s -d"." -f 2`
_TDL=`echo $site_url | cut -s -d"." -f 3`
if [ -z "$_TDL" ]; then
_TDL=$_DOMAIN
_DOMAIN=$_HOST
fi
_server_name=$site_url
if [ "$_HOST" = "www" ]; then
_server_alias=${_DOMAIN}.$_TDL
else
_server_alias=""
fi
if [[ -n "$(trim $WEBSITES_ROOT_DIR)" ]]; then
_server_website_root_dir="$WEBSITES_ROOT_DIR"
else
if [ -d "/var/www/html/projekte" ]; then
__server_website_root_dir="/var/www/html/projekte"
elif [ -d "/var/www" ]; then
__server_website_root_dir="/var/www"
fi
fi
echo ""
if [ "$_HOST" = "www" ]; then
echo -e "\033[21G\033[32mCreate vhost configuration \"${_DOMAIN}.${_TDL}.conf.$_new_extension\"\033[m"
else
echo -e "\033[21G\033[32mCreate vhost configuration \"${site_url}.conf.$_new_extension\"\033[m"
fi
echo ""
echo -e "\033[21GInsert needed Information for VHost Configuration.."
echo ""
if [[ "$_type" != "REDIRECT" ]] ; then
if [[ -z "$_server_website_root_dir" ]]; then
echo ""
echo -e "\033[32m--\033[m"
echo ""
echo "Servers root directory for websites (i.e. /var/www).."
echo ""
echo ""
_server_website_root_dir=
while [ "X$_server_website_root_dir" = "X" ] ; do
echononl "Root Directory for websites [$__server_website_root_dir]: "
read _doc_root
if [ "X$_server_website_root_dir" = "X" ]; then
_server_website_root_dir=$__server_website_root_dir
fi
if [ -n "$_server_website_root_dir" -a ! -d "$_server_website_root_dir" ]; then
echo -e "\n\t\033[1;33mDirectory \"$_server_website_root_dir\" does not exist.\n\tTry again..\033[m\n"
_server_website_root_dir=""
fi
done
fi
fi
if [[ "$_type" != "REDIRECT" ]] && [[ "$_type" != "PARKED" ]]; then
if $USE_PROJECT_NAME ; then
__web_base_dir=${_server_website_root_dir}/$PROJECT_NAME
else
if [ "$_HOST" = "www" ]; then
__web_base_dir=${_server_website_root_dir}/${_DOMAIN}.$_TDL
else
__web_base_dir=${_server_website_root_dir}/${site_url}
fi
fi
#_doc_root="$document_root"
echo ""
echo -e "\033[32m--\033[m"
echo ""
echo "Insert Website Base Directory (the directory containing"
echo "the Document Root Directory .."
echo ""
echo ""
_web_base_dir=
while [ "X$_web_base_dir" = "X" ] ; do
echononl "Web Base Directory [$__web_base_dir]: "
read _web_base_dir
if [ "X$_web_base_dir" = "X" ]; then
_web_base_dir=$__web_base_dir
fi
done
__document_root=${_web_base_dir}/htdocs
if $CREATE_SYMLINK_WEB_BASE_DIR ; then
__symlink_web_base_dir=`basename $_web_base_dir | cut -d '.' -f 1`
if [[ "$__symlink_web_base_dir" != "$(basename $_web_base_dir)" ]] ; then
echo ""
echo -e "\033[32m--\033[m"
echo ""
echo "It is possible to create a symlink for \"`basename $_web_base_dir`\". You can do"
echo "that here bygiving a name for the symlink."
echo ""
echo -e "Type \"\033[33mNone\033[m\" if no symlink is wanted."
echo ""
echo ""
echononl "Create Symlink for `basename $_web_base_dir`? [$__symlink_web_base_dir]: "
read _symlink_web_base_dir
if [ "X$_symlink_web_base_dir" = "Xnone" -o "X$_symlink_web_base_dir" = "XNone" ]; then
CREATE_SYMLINK_WEB_BASE_DIR=false
else
CREATE_SYMLINK_WEB_BASE_DIR=true
fi
if [ "X$_symlink_web_base_dir" = "X" ]; then
_symlink_web_base_dir=$__symlink_web_base_dir
fi
if [ "$_symlink_web_base_dir" = "`basename $_web_base_dir`" ]; then
warn "Given name for symlink is equal to `basename $_web_base_dir`.\n\t No symlink will be created.."
CREATE_SYMLINK_WEB_BASE_DIR=false
fi
else
CREATE_SYMLINK_WEB_BASE_DIR=false
fi
fi
echo ""
echo -e "\033[32m--\033[m"
echo ""
echo "Insert Document Root Directory.."
echo ""
echo ""
_doc_root=
while [ "X$_doc_root" = "X" ] ; do
echononl "Document Root Directory [$__document_root]: "
read _doc_root
if [ "X$_doc_root" = "X" ]; then
_doc_root=$__document_root
fi
if [ "`dirname $_doc_root`" != "$_web_base_dir" ]; then
echo -e "\n\t\033[1;33mDocument Root Directory must be a subdirectory of \"$_web_base_dir\".\n\tTry again..\033[m\n"
_doc_root=
fi
done
if $_suEXEC ; then
__log_dir=${_web_base_dir}/logs
elif [[ -n "$(trim $COMMON_LOGFILE_DIR)" ]]; then
__log_dir="$COMMON_LOGFILE_DIR"
else
__log_dir=${_web_base_dir}/logs
fi
if [[ -z "$_log_dir" ]]; then
echo ""
echo ""
echo -e "\033[32m--\033[m"
echo ""
echo "Insert Directory where logfiles should stay.."
echo ""
echo ""
_log_dir=
while [ "X$_log_dir" = "X" ] ; do
echononl "Log Directory [$__log_dir]: "
read _log_dir
if [ "X$_log_dir" = "X" ]; then
_log_dir=$__log_dir
fi
done
fi
if [ "$_HOST" = "www" ]; then
_combined_custom_log="$_log_dir/${_DOMAIN}-access.log"
_error_log="$_log_dir/${_DOMAIN}-error.log"
else
_combined_custom_log="$_log_dir/${site_url}-access.log"
_error_log="$_log_dir/${site_url}-error.log"
fi
_custom_ip_log=""
echo
if [ -n "$__CUSTOM_IP_LOG" ]; then
echo -e "Additional Logfiles - Type \"\033[33mNone\033[m\" if not present"
echononl "\tAdditional Logfile - site independent logging of IP Adresses [${__CUSTOM_IP_LOG}]: "
read _custom_ip_log
if [ "X$_custom_ip_log" = "X" ]; then
_custom_ip_log=$__CUSTOM_IP_LOG
fi
if [ "X$_custom_ip_log" = "XNone" ]; then
_custom_ip_log=""
fi
else
echo "Additional Logfiles - Leave empty if not present"
echononl "\tAdditional Logfile for IPv4 requests: "
read _custom_ip_log
fi
if [ -n "$_custom_ip_log" ]; then
if [ "`dirname $_custom_ip_log`" = "." ]; then
_custom_ip_log=/var/log/apache2/$_custom_ip_log
fi
fi
# _custom_ipv4_log=""
# echo
# if [ -n "$__CUSTOM_IPV4_LOG" ]; then
# echo -e "Additional Logfiles - Type \"\033[33mNone\033[m\" if not present"
# echononl "\tAdditional Logfile for IPv4 requests [${__CUSTOM_IPV4_LOG}]: "
# read _custom_ipv4_log
# if [ "X$_custom_ipv4_log" = "X" ]; then
# _custom_ipv4_log=$__CUSTOM_IPV4_LOG
# fi
# if [ "X$_custom_ipv4_log" = "XNone" ]; then
# _custom_ipv4_log=""
# fi
# else
# echo "Additional Logfiles - Leave empty if not present"
# echononl "\tAdditional Logfile for IPv4 requests: "
# read _custom_ipv4_log
# fi
#
# if [ -n "$_custom_ipv4_log" ]; then
# if [ "`dirname $_custom_ipv4_log`" = "." ]; then
# _custom_ipv4_log=/var/log/apache2/$_custom_ipv4_log
# fi
# fi
#
#
# _custom_ipv6_log=""
# echo ""
# if [ -n "$__CUSTOM_IPV6_LOG" ]; then
# echo -e "Additional Logfiles - Type \"\033[33mNone\033[m\" if not present"
# echononl "\tAdditional Logfile for IPv6 requests [${__CUSTOM_IPV6_LOG}]: "
# read _custom_ipv6_log
# if [ "X$_custom_ipv6_log" = "X" ]; then
# _custom_ipv6_log=$__CUSTOM_IPV6_LOG
# fi
# if [ "X$_custom_ipv6_log" = "XNone" ]; then
# _custom_ipv6_log=""
# fi
# else
# echo "Additional Logfiles - Leave empty if not present"
# echononl "\tAdditional Logfile for IPv6 requests : "
# read _custom_ipv6_log
# fi
#
# if [ -n "$_custom_ipv6_log" ]; then
# #echo "dirname $_custom_ipv6_log: `dirname $_custom_ipv6_log`"
# if [ "`dirname $_custom_ipv6_log`" = "." ]; then
# _custom_ipv6_log=/var/log/apache2/$_custom_ipv6_log
# fi
# fi
else
if [[ "$_type" = "REDIRECT" ]] ; then
echo "Enter URL to which site \"$site_url\" should be redirected."
echo ""
echo "Example:"
echo " www.oopen.de"
echo " www.oopen.de/ordner1/ordner2/"
echo " www.oopen.de/ordner1/ordner2/site.html"
echo ""
echo ""
rewrite_url=
echononl "Redirect URL: "
read rewrite_url
while [ "X$rewrite_url" = "X" ] ; do
echo -e "\n\t\033[33m\033[1mEingabe erforderlich.\033[m\n"
echononl "Redirect URL: "
read rewrite_url
done
_log_dir="$REDIRECT_LOGFILE_DIR"
elif [[ "$_type" = "PARKED" ]]; then
_web_base_dir=${_server_website_root_dir}/PARKED
_doc_root=${_web_base_dir}/htdocs
_log_dir="$PARKED_LOGFILE_DIR"
fi
_combined_custom_log="$_log_dir/${_DOMAIN}-access.log"
_error_log="$_log_dir/${_DOMAIN}-error.log"
if [ -n "$__CUSTOM_IP_LOG" ]; then
_custom_ip_log=/var/log/apache2/$__CUSTOM_IP_LOG
fi
# if [ -n "$__CUSTOM_IPV6_LOG" ]; then
# _custom_ipv6_log=/var/log/apache2/$__CUSTOM_IPV6_LOG
# fi
# if [ -n "$__CUSTOM_IPV4_LOG" ]; then
# _custom_ipv4_log=/var/log/apache2/$__CUSTOM_IPV4_LOG
# fi
fi # if [[ "$_type" != "REDIRECT" ]] && [[ "$_type" != "PARKED" ]] ; then
if [[ -n "$(trim $VHOST_BASE_DIR)" ]]; then
_vhost_base_dir="$VHOST_BASE_DIR"
else
__vhost_base_dir=${apache_base_dir}/conf/vhosts
fi
if [[ -z "$_vhost_base_dir" ]]; then
echo ""
echo ""
echo -e "\033[32m--\033[m"
echo ""
echo "Insert Directory where the vhost configuration file should stay.."
echo ""
echo ""
_vhost_base_dir=
while [ "X$_vhost_base_dir" = "X" ] ; do
echononl "VHost Base Directory [$__vhost_base_dir]: "
read _vhost_base_dir
if [ "X$_vhost_base_dir" = "X" ]; then
_vhost_base_dir=$__vhost_base_dir
fi
if [ ! -d "$_vhost_base_dir" ];then
echo -e "\n\t\033[1;33mDirectory \"${_vhost_base_dir}\" not found! Try again..\033[m\n"
_vhost_base_dir=""
fi
done
fi
if [ "$_HOST" = "www" ]; then
_new_vhost_config_file=${_vhost_base_dir}/${_DOMAIN}.${_TDL}.conf.$_new_extension
else
_new_vhost_config_file=${_vhost_base_dir}/${site_url}.conf.$_new_extension
fi
echo ""
echo ""
echo -e "\033[32m--\033[m"
echo ""
echo "Insert the IP-Addresses where the webserver should listen for that site."
echo ""
echo ""
echo ""
_ipv4=
while [ "X$_ipv4" = "X" ]
do
if [ -z "$__ipv4" ]; then
echononl "IPv4 address: "
read _ipv4
if [ "X$_ipv4" = "X" ]; then
echo -e "\n\t\033[33m\033[1mEingabe erforderlich!\033[m\n"
fi
else
echononl "IPv4 address [$__ipv4]: "
read _ipv4
if [ "X$_ipv4" = "X" ]; then
_ipv4=$__ipv4
fi
fi
done
IPv4_FIRST=`echo $_ipv4 | cut -d " " -f1`
_ipv6=
while [ "X$_ipv6" = "X" ]
do
if [ -z "$__ipv6" ]; then
echononl "IPv6 address: "
read _ipv6
if [ "X$_ipv6" = "X" ]; then
warn "Disable support for IPv6.."
_ipv6="disabled"
#echononl "Must NOT be empty. Insert again: "
fi
else
echononl "IPv6 address [$__ipv6]: "
read _ipv6
if [ "X$_ipv6" = "X" ]; then
_ipv6=$__ipv6
fi
fi
done
if [ "$_ipv6" != "disabled" ]; then
IPv6_FIRST=`echo $_ipv6 | cut -d " " -f1`
else
IPv6_FIRST=""
fi
echo ""
echo ""
echo -e "\033[32m--\033[m"
echo ""
echo "Insert more hostnames (ServerAlias) for this site..."
echo ""
server_aliases=
if [ "$_HOST" = "www" ]; then
while [ "X$server_aliases" = "X" ]; do
echo -e "Type \"\033[33mskip\033[m\" to omit ServerAlias\n"
echononl "More hostnames: [$_server_alias]: "
read server_aliases
if [ "skip" = "$server_aliases" ]; then
server_aliases=
break
fi
if [ "X$server_aliases" = "X" ];then
server_aliases=$_server_alias
fi
done
else
echo -e "Leave empty to omit ServerAlias\n"
echononl "More hostnames: "
read server_aliases
fi
for _alias in $server_aliases ; do
containsElement "$_alias" "${_server_aliases_arr[@]}" && continue
_server_aliases_arr+=("$_alias")
done
echo ""
echo ""
echo -e "\033[33m--\033[m"
echo""
echo -e "\033[21G\033[33mListen on SSL connectons (HTTPS) for \"$site_url\" ?\033[m"
echo ""
echo -e "\033[1;33m--\033[m"
echo ""
echo ""
OK=""
echononl "Enable SSL? [yes]: "
read OK
while [ "X$OK" != "Xyes" -a "X$OK" != "XYes" -a "X$OK" != "Xno" -a "X$OK" != "XNo" -a "X$OK" != "X" ]; do
echononl "falsche Angabe! [yes]: "
read OK
done
if [ "$OK" = "yes" -o "$OK" = "Yes" -o "X$OK" = "X" ]; then
_https=true
else
_https=false
fi
if $_https ; then
_ommit_ssl_chain_file=false
if [ -f "${apache_base_dir}/conf/server-bundle.crt" ]; then
__ssl_cert_file="${apache_base_dir}/conf/server-bundle.crt"
_ommit_ssl_chain_file=true
elif [ -f "${apache_base_dir}/conf/server.crt" ]; then
__ssl_cert_file="${apache_base_dir}/conf/server.crt"
fi
if [ -f "${apache_base_dir}/conf/server.key" ]; then
__ssl_key_file="${apache_base_dir}/conf/server.key"
fi
if ! $_ommit_ssl_chain_file ; then
if [ -f "${apache_base_dir}/conf/server-ca-bundle.crt" ]; then
__ssl_chain_file="${apache_base_dir}/conf/server-ca-bundle.crt"
elif [ -f "${apache_base_dir}/conf/StartSSL_SUB_CLASS2.pem" ]; then
__ssl_chain_file="${apache_base_dir}/conf/StartSSL_SUB_CLASS2.pem"
elif [ -f "${apache_base_dir}/conf/sub.class2.server.ca.pem" ]; then
__ssl_chain_file="${apache_base_dir}/conf/sub.class2.server.ca.pem"
elif [ -f "${apache_base_dir}/conf/SSL123_CA_Bundle_SHA2_root_SHA1.pem" ]; then
__ssl_chain_file="${apache_base_dir}/conf/SSL123_CA_Bundle_SHA2_root_SHA1.pem"
elif [ -f "${apache_base_dir}/conf/SSL123_CA_Bundle.pem" ]; then
__ssl_chain_file="${apache_base_dir}/conf/SSL123_CA_Bundle.pem"
fi
fi
#clear
echo ""
echo -e "\033[21G\033[32mCreate vhost configuration \"${_DOMAIN}.${_TDL}.conf.$_new_extension\"\033[m"
echo ""
echo -e "\033[21GInsert Parameters needed for SSL.."
echo ""
echo -e "\033[1;32m--\033[m"
echo ""
echo -e "Input SSL Key file.."
echo ""
echo ""
_ssl_key_file=
while [ "X$_ssl_key_file" = "X" ] ; do
if [ -z "$__ssl_key_file" ]; then
echononl "SSL Keyfile: "
read _ssl_key_file
if [ "X$_ssl_key_file" = "X" ]; then
echo -e "\n\t\033[33m\033[1mEingabe erforderlich!\033[m\n"
continue
fi
else
echononl "SSL Keyfile [$__ssl_key_file]: "
read _ssl_key_file
if [ "X$_ssl_key_file" = "X" ]; then
_ssl_key_file=$__ssl_key_file
fi
fi
done
echo ""
echo ""
echo -e "\033[1;32m--\033[m"
echo ""
echo -e "Input SSL Certification file.."
echo ""
echo ""
_ssl_cert_file=
while [ "X$_ssl_cert_file" = "X" ] ; do
if [ -z "$__ssl_cert_file" ]; then
echononl "SSL certification file: "
read _ssl_cert_file
if [ "X$_ssl_cert_file" = "X" ]; then
echo -e "\n\t\033[33m\033[1mEingabe erforderlich!\033[m\n"
continue
fi
else
echononl "SSL certification file [$__ssl_cert_file]: "
read _ssl_cert_file
if [ "X$_ssl_cert_file" = "X" ]; then
_ssl_cert_file=$__ssl_cert_file
fi
fi
done
echo ""
echo ""
echo -e "\033[1;32m--\033[m"
echo ""
echo -e "Input SSL Certification Chain file.."
echo ""
echo ""
_ssl_chain_file=
if ! $_ommit_ssl_chain_file ; then
#while [ "X$_ssl_chain_file" = "X" ] ; do
if [ -z "$__ssl_chain_file" ]; then
echononl "SSL Certification Chain file: "
read _ssl_chain_file
if [ "X$_ssl_chain_file" = "X" ]; then
warn "No SSL Certification Chain file given. \"SSLCertificateChainFile\" Directive will be omitted!"
fi
else
echononl "SSL Certification Chain file [$__ssl_chain_file]: "
read _ssl_chain_file
if [ "X$_ssl_chain_file" = "X" ]; then
_ssl_chain_file=$__ssl_chain_file
fi
fi
#done
fi
fi
else
_config_file_found=true
info "Found configuration file \"`basename $_existing_vhost_config_file`\".\n"
echo -e -n "\tReading configurations from that file.."
_vhost_base_dir=`dirname $_existing_vhost_config_file`
declare -i number_errors=0
declare -i number_warnings=0
_server_name=""
_server_name_failed=false
## - Create empty array
## -
_server_aliases_arr=()
_server_alias=""
_doc_root=""
#_new_doc_root=""
_doc_root_failed=false
_combined_custom_log=""
_combined_custom_log_failed=false
_custom_ipv4_log=""
_custom_ipv4_log_failed=false
_custom_ipv6_log=""
_custom_ipv6_log_failed=false
_found_custom_v4_log=false
_found_custom_v6_log=false
_found_custom_log=false
_error_log=""
_error_log_failed=false
_https=false
_ssl_cert_file=""
_ssl_key_file=""
_ssl_chain_file=""
while read line ; do
## - Get ServerName
## -
if echo $line | grep -e "^\s*ServerName" > /dev/null ; then
_server_name_tmp=`echo $line | awk '{print$2}'`
if [ -z "$_server_name" ]; then
_server_name=$_server_name_tmp
elif [ "$_server_name" != "$_server_name_tmp" ]; then
if [ $number_errors -eq 0 ]; then
echo
fi
error "Misconfigured ServerName"
_server_name_failed=true
let number_errors++
fi
continue
fi
## - Get ServerAlias
if echo $line | grep -e "^\s*ServerAlias" > /dev/null ; then
_server_alias_tmp=$(echo $line | sed -e "s/ServerAlias//" | sed "s/^\s*//" | sed "s/\s*$//")
#_server_alias_tmp=`echo $line | awk '{print$2}'`
if [ ${#_server_aliases_arr[@]} -eq 0 ] ; then
for _alias in $_server_alias_tmp ; do
_server_aliases_arr+=("$_alias")
done
else
for _alias in $_server_alias_tmp ; do
containsElement "$_alias" "${_server_aliases_arr[@]}" && continue
_server_aliases_arr+=("$_alias")
done
fi
continue
fi
## - Get DocumentRoot
## -
if echo $line | grep -e "^\s*DocumentRoot" > /dev/null ; then
_doc_root_tmp=`echo $line | awk '{print$2}' | sed 's/"//g' | sed 's/\/$//'`
if [ -z "$_doc_root" ]; then
_doc_root=$_doc_root_tmp
elif [ "$_doc_root" != "$_doc_root_tmp" ]; then
if [ $number_errors -eq 0 ]; then
echo
fi
error "Misconfigured DocumentRoot"
_doc_root_failed=true
let number_errors++
fi
continue
fi
## - Get CustomLog (combined)
## -
if echo $line | grep -e "^\s*CustomLog" | grep "combined"> /dev/null ; then
_combined_custom_log_tmp=`echo $line | awk '{print$2}' | sed 's/"//g' | sed 's/\/$//'`
if [ -z "$_combined_custom_log" ]; then
_combined_custom_log=$_combined_custom_log_tmp
elif [ "$_combined_custom_log" != "$_combined_custom_log_tmp" ]; then
if [ $number_warnings -eq 0 ]; then
echo
fi
warn "Misconfigured CustomLog (combined)"
_combined_custom_log_failed=true
let number_warnings++
fi
continue
fi
## - Get additional CustomLog IPv4 requests
## -
if echo $line | grep -e "^\s*CustomLog" | grep -i "ipv4" > /dev/null ; then
_custom_ipv4_log_tmp=`echo $line | awk '{print$2}' | sed 's/"//g' | sed 's/\/$//'`
if [ -n "$_custom_ipv4_log_tmp" ];then
_found_custom_v4_log=true
if [ -z "$_custom_ipv4_log" ]; then
_custom_ipv4_log=$_custom_ipv4_log_tmp
elif [ "$_custom_ipv4_log" != "$_custom_ipv4_log_tmp" ]; then
if [ $number_warnings -eq 0 ]; then
echo
fi
warn "Misconfigured CustomLog IPv4 requests"
_custom_ipv4_log_failed=true
let number_warnings++
fi
fi
continue
fi
if $_found_custom_v4_log ; then
_custom_ip_log="$(dirname "$_custom_ipv4_log")/ip_request.log"
_found_custom_log=true
fi
if ! $_found_custom_log ; then
## - Get additional CustomLog IPv6 requests
## -
if echo $line | grep -e "^\s*CustomLog" | grep -i "ipv6" > /dev/null ; then
_custom_ipv6_log_tmp=`echo $line | awk '{print$2}' | sed 's/"//g' | sed 's/\/$//'`
if [ -n "$_custom_ipv6_log_tmp" ];then
if [ -z "$_custom_ipv6_log" ]; then
_custom_ipv6_log=$_custom_ipv6_log_tmp
elif [ "$_custom_ipv6_log" != "$_custom_ipv6_log_tmp" ]; then
if [ $number_warnings -eq 0 ]; then
echo
fi
warn "Misconfigured CustomLog IPv6 requests"
_custom_ipv6_log_failed=true
let number_warnings++
fi
fi
continue
fi
if $_found_custom_v6_log ; then
_custom_ip_log="$(dirname "$_custom_ipv6_log")/ip_request.log"
_found_custom_log=true
fi
fi
if ! $_found_custom_log ; then
## - Get additional CustomLog file
## -
if echo $line | grep -e "^\s*CustomLog" | grep -i "base_request" > /dev/null ; then
_custom_ip_log_tmp=`echo $line | awk '{print$2}' | sed 's/"//g' | sed 's/\/$//'`
if [ -n "$_custom_ip_log_tmp" ];then
if [ -z "$_custom_ip_log" ]; then
_custom_ip_log=$_custom_ip_log_tmp
elif [ "$_custom_ip_log" != "$_custom_ip_log_tmp" ]; then
if [ $number_warnings -eq 0 ]; then
echo
fi
warn "Misconfigured CustomLog IP requests"
_custom_ip_log_failed=true
let number_warnings++
fi
fi
continue
fi
fi
## - Get ErrorLog
## -
if echo $line | grep -e "^\s*ErrorLog" > /dev/null ; then
_error_log_tmp=`echo $line | awk '{print$2}' | sed 's/"//g' | sed 's/\/$//'`
if [ -z "$_error_log" ]; then
_error_log=$_error_log_tmp
elif [ "$_error_log" != "$_error_log_tmp" ]; then
if [ $number_warnings -eq 0 ]; then
echo
fi
warn "Misconfigured ErrorLog"
_error_log_failed=true
let number_warnings++
fi
continue
fi
## - HTTPS ?
## -
if echo $line | grep -e "^\s*SSLEngine" > /dev/null ; then
_https=true
continue
fi
## - GET SSLCertificateFile
## -
if echo $line | grep -e "^\s*SSLCertificateFile" > /dev/null ; then
_ssl_cert_file=`echo $line | awk '{print$2}' | sed 's/"//g' | sed 's/\/$//'`
continue
fi
## - GET SSLCertificateKeyFile
## -
if echo $line | grep -e "^\s*SSLCertificateKeyFile" > /dev/null ; then
_ssl_key_file=`echo $line | awk '{print$2}' | sed 's/"//g' | sed 's/\/$//'`
continue
fi
## - GET SSLCertificateChainFile
## -
if echo $line | grep -e "^\s*SSLCertificateChainFile" > /dev/null ; then
_ssl_chain_file=`echo $line | awk '{print$2}' | sed 's/"//g' | sed 's/\/$//'`
continue
fi
## - Get IPv4 Address
## -
if echo $line | grep -e "\s*<VirtualHost" \
| grep 80 \
| grep -e "[0-9]\+\.[0-9]\+\.[0-9]\+\.[0-9]\+" > /dev/null 2>&1 ; then
_ipv4=`echo $line | awk '{print$2}' | cut -d ':' -f 1`
continue
fi
## - Get IPv6 Address
## -
if echo $line | grep -E "\s*<VirtualHost" | grep -E "\[.+\]" > /dev/null 2>&1 ; then
_ipv6="$(echo $line | grep -E "\s*<VirtualHost" | grep -o -E "\[.+\]" | cut -d ']' -f 1 | cut -d '[' -f 2)"
continue
fi
done < $_existing_vhost_config_file
if ! $_server_name_failed ; then
if [ -z "$_server_name" ] ; then
if [ $number_errors -eq 0 ]; then
echo
fi
error "No ServerName found"
let number_errors++
#else
# echo -e "\tServerName = $_server_name"
fi
fi
#if [ ${#_server_aliases_arr[@]} -gt 0 ] ; then
# echo -e "\tServerAlias = ${_server_aliases_arr[@]}"
#fi
if ! $_doc_root_failed ; then
if [ -z "$_doc_root" ]; then
if [ $number_warnings -eq 0 ]; then
echo
fi
warn "No DocumentRoot found"
let number_warnings++
else
_web_base_dir=`dirname $_doc_root`
#echo -e "\tDocumentRoot = $_doc_root"
if [ "`basename $_web_base_dir`" = "htdocs" ]; then
_web_base_dir=`dirname $_web_base_dir`
fi
fi
fi
if ! $_combined_custom_log_failed ; then
_combined_custom_log_dir="`dirname $_combined_custom_log`"
fi
if ! $_error_log_failed ; then
_error_log_dir="`dirname $_error_log`"
fi
if [ "$_error_log_dir" != "$_combined_custom_log_dir" ]; then
if [ $number_warnings -eq 0 ]; then
echo
fi
warn "CustomLog and ErrorLog lives in different directories"
let number_warnings++
else
_log_dir="$_combined_custom_log_dir"
fi
#if [ -n "$_web_base_dir" ];then
# echo -e "\tWeb base dir = $_web_base_dir"
# echo ""
#fi
if [ -z "$_ipv4" ];then
if [ $number_warnings -eq 0 ]; then
echo
fi
warn "Keine IPv4 Adresse gefunden."
let number_warnings++
#else
# echo -e "\tIPv4 = $_ipv4"
fi
if [ -z "$_ipv6" ];then
_ipv6="disabled"
if [ $number_warnings -eq 0 ]; then
echo
fi
warn "Keine IPv6 Adresse gefunden."
let number_warnings++
#else
# echo -e "\tIPv6 = $_ipv6"
# echo ""
fi
if $_https ; then
#echo -e "\tHTTPS = $_https"
if [ -z "$_ssl_cert_file" ]; then
if [ $number_warnings -eq 0 ]; then
echo
fi
warn "No SSLCertificateFile found, but https is on!"
let number_warnings++
#else
# echo -e "\tSSLCertificateFile = $_ssl_cert_file"
fi
if [ -z "$_ssl_key_file" ]; then
if [ $number_warnings -eq 0 ]; then
echo
fi
warn "No SSLCertificateKeyFile found, but https is on!"
let number_warnings++
#else
# echo -e "\tSSLCertificateKeyFile = $_ssl_key_file"
fi
#if [ -z "$_ssl_chain_file" ]; then
# if [ $number_warnings -eq 0 ]; then
# echo
# fi
# warn "No SSLCertificateChainFile found, but https is on!"
# let number_warnings++
#else
# echo -e "\tSSLCertificateChainFile = $_ssl_chain_file"
#fi
fi
if [ $number_warnings -eq 0 -a $number_errors -eq 0 ]; then
echo_ok
else
if [ $number_errors -gt 0 ]; then
#echo_failed
error "$number_warnings Warnings - $number_errors Errors"
fatal
else
info "Reading Parameters finisched with $number_warnings Warnings"
fi
fi
fi
if $_https && [[ -z "$_https_only" ]]; then
echo ""
echo -e "\033[1;32m--\033[m"
echo ""
echo -e "Only listen on SSL connections? Non SSL Connections will be redirected."
echo ""
echo ""
OK=""
echononl "Allow only SSL connections? [yes]: "
read OK
OK=${OK,,}
while [[ "X$OK" != "Xyes" && "X$OK" != "Xno" && "X$OK" != "X" ]]; do
echononl "falsche Angabe! [no]: "
read OK
OK=${OK,,}
done
if [[ "$OK" = "no" ]] ; then
_https_only=false
else
_https_only=true
fi
fi
if [ "$_type" = "FCGID" ]; then
echo ""
echo ""
echo -e "\033[33m--\033[m"
echo""
#echo -e "Use a common (existing) FCGID-configuration?"
#echo ""
#echo -e "\033[1;33m--\033[m"
#echo ""
#echo ""
OK=""
if $_suEXEC ; then
echononl "suEXEC User: "
read suEXEC_user
while [ "X$suEXEC_user" = "X" ]; do
echononl "suEXEC User is mandatory. Try again: "
read suEXEC_user
done
echononl "suEXEC Group [$suEXEC_user]: "
read suEXEC_group
if [ "X$suEXEC_group" = "X" ]; then
suEXEC_group=$suEXEC_user
fi
getent shadow $suEXEC_user > /dev/null
if [ "$?" != "0" ]; then
_suEXEC_passwd_1="X"
_suEXEC_passwd_2="Y"
while [ "$_suEXEC_passwd_1" != "$_suEXEC_passwd_2" ]; do
echononl "Password for User \"$suEXEC_user\": "
read -s _suEXEC_passwd_1
echo
if [ "X$_suEXEC_passwd_1" = "X" ]; then
echo -e "\n\t\033[33m\033[1mPassword is mandatory!\033[m\n"
continue
fi
echononl "Repeat password for User \"$suEXEC_user\": "
read -s _suEXEC_passwd_2
echo
if [ "X$_suEXEC_passwd_2" = "X" ]; then
echo -e "\n\t\033[33m\033[1mPasswordretry is mandatory!\033[m\n"
continue
fi
if [ "$_suEXEC_passwd_1" != "$_suEXEC_passwd_2" ]; then
echo -e "\n\t\033[33m\033[1mSorry, passwords do not match\033[m\n"
else
suEXEC_password=$_suEXEC_passwd_1
fi
done
set_suEXEC_password=true
else
suEXEC_password=false
fi
_COMMON_FCGI_CONFIG=false
else
if [ -n "$_COMMON_FCGID_CONFIG_PATH" -a -d "$_COMMON_FCGID_CONFIG_PATH" ] ; then
if [ "$_auto" = "auto" -o "$_auto" = "full-auto" ]; then
_COMMON_FCGI_CONFIG=true
else
echononl "Use a common (existing) FCGID-configuration? [yes]: "
read OK
while [ "X$OK" != "Xyes" -a "X$OK" != "XYes" -a "X$OK" != "Xno" -a "X$OK" != "XNo" -a "X$OK" != "X" ]; do
echononl "falsche Angabe! [yes/no]: "
read OK
done
if [ "$OK" = "yes" -o "$OK" = "Yes" -o "X$OK" = "X" ]; then
_COMMON_FCGI_CONFIG=true
else
_COMMON_FCGI_CONFIG=false
FCGI_Wrapper="${_web_base_dir}/conf/fcgid .php"
fi
fi
else
echononl "Use a common (existing) FCGID-configuration? [no]: "
read OK
while [ "X$OK" != "Xyes" -a "X$OK" != "XYes" -a "X$OK" != "Xno" -a "X$OK" != "XNo" -a "X$OK" != "X" ]; do
echononl "falsche Angabe! [yes/no]: "
read OK
done
if [ "$OK" = "yes" -o "$OK" = "Yes" ]; then
_COMMON_FCGI_CONFIG=true
else
_COMMON_FCGI_CONFIG=false
FCGI_Wrapper="${_web_base_dir}/conf/fcgid .php"
fi
fi
fi
echo
if $_COMMON_FCGI_CONFIG ; then
if [ -n "$_COMMON_FCGID_CONFIG_PATH" -a -d "$_COMMON_FCGID_CONFIG_PATH" -a "$_auto" = "auto" ]; then
common_fcgi_config_path=$_COMMON_FCGID_CONFIG_PATH
else
common_fcgi_config_path=
if [ -n "$_COMMON_FCGID_CONFIG_PATH" -a -d "$_COMMON_FCGID_CONFIG_PATH" ] ; then
while [ "X$common_fcgi_config_path" = "X" ] ; do
echononl "Path to common FCGIG configuration [$_COMMON_FCGID_CONFIG_PATH]: "
read common_fcgi_config_path
if [ "X$common_fcgi_config_path" = "X" ]; then
common_fcgi_config_path=$_COMMON_FCGID_CONFIG_PATH
fi
done
else
while [ "X$common_fcgi_config_path" = "X" ] ; do
echononl "Path to common FCGIG configuration: "
read common_fcgi_config_path
if [ -n "$common_fcgi_config_path" -a ! -d "$common_fcgi_config_path" ] ; then
echo -e "\n\t\033[1;33mDiectory \"common_fcgi_config_path\" not found! Try again..\033[m\n"
fi
done
fi
fi
FCGI_Wrapper="${common_fcgi_config_path}/conf/fcgid .php"
fi
fi
#if [ "$_type" = "PHP-FPM" ]; then
if [[ "$_type" = "PHP-FPM" ]] || [[ "$_type" = "FCGID" ]]; then
echo ""
echo -e "\033[21G\033[32mCreate vhost configuration \033[m\"`basename $_new_vhost_config_file`\""
echo ""
if [ "$_type" = "FCGID" -a "$_COMMON_FCGI_CONFIG" = "true" ] ; then
echo -e "\033[21G\033[32mUsing FCGID configuration defined in \033[m\"$common_fcgi_config_path\""
#sleep 2
else
if [ "X$major_php_verison" = "X" ]; then
echo -e "\033[21GInsert Parameters needed for PHP Configuration.."
echo ""
echo -e "\033[32m--\033[m"
echo ""
echo "Input PHP major version to use for $site_url (${_major_php_verisons})"
echo ""
echo ""
major_php_verisons=
while [ "X$major_php_verison" = "X" ] ; do
echononl "PHP major version: "
read major_php_verison
if [ "X$major_php_verison" = "X" ]; then
echo -e "\n\t\033[33m\033[1mEingabe erforderlich!\033[m\n"
continue
fi
#if [ ! -d "/usr/local/php-$major_php_verison" -o ! -h "/usr/local/php-$major_php_verison" ];then
if [ ! -d "/usr/local/php-$major_php_verison" ];then
echo -e "\n\t\033[1;33mNo installation for PHP v$major_php_verison found! Try again..\033[m\n"
major_php_verison=""
fi
done
else
echo -e "\033[21G\033[32mUsing PHP Veriosnn \033[m\"$major_php_verison\""
fi
if $_suEXEC ; then
FCGI_Wrapper="${_web_base_dir}/conf/fcgid-${major_php_verison} .php"
fi
fi
elif [[ "$_type" = "MOD_PHP" ]]; then
echo -e "\033[21G\033[32mUsing PHP Version from mod_php at Apache Installation"
fi
if [ "$_type" = "PHP-FPM" ]; then
if [ "$connection" != "unix_socket" -a "$connection" != "tcp_connection" ]; then
echo ""
echo -e "\033[32m--\033[m"
echo ""
echo "Use unix socket or tcp for connection to PHP-FPM ?"
echo ""
echo -e "[1] \033[1mUnix Socket\033[m"
echo "[2] TCP Conection"
echo ""
echononl "Eingabe: "
while [ "$connection" != "unix_socket" -a "$connection" != "tcp_connection" ];do
read _IN
if [[ -z "$_IN" ]] ; then
connection="unix_socket"
_connection_msg="Unix Socket"
else
case $_IN in
1) connection="unix_socket"
_connection_msg="Unix Socket"
;;
2) connection="tcp_connection"
_connection_msg="TCP Conection"
;;
*) echo ""
echo -e "\t\033[1;33mFalsche Eingabe ! [ 1 = Unix Socket ; 2 = TCP Conection ]\033[m"
echo ""
echononl "Eingabe: "
;;
esac
fi
done
fi
if [ "$connection" == "unix_socket" ]; then
# - If unix_socket was not given on the command line
# -
if [ "X$unix_socket" = "X" ] ; then
_unix_socket_tmp_dir=`ls /tmp/php-${major_php_verison}*.sock 2>/dev/null`
if [[ "$(wc -w <<< "$_unix_socket_tmp_dir")" -gt 0 ]]; then
for _socket in ${_unix_socket_tmp_dir} ; do
_unix_socket_arr+=("$_socket")
done
fi
if [[ -d "/run/php" ]]; then
_unix_socket_run_dir="$(ls /run/php/php-${major_php_verison}*.sock 2>/dev/null)"
if [[ "$(wc -w <<< "$_unix_socket_run_dir")" -gt 0 ]]; then
for _socket in ${_unix_socket_run_dir} ; do
_unix_socket_arr+=("$_socket")
done
fi
fi
echo ""
echo -e "\033[32m--\033[m"
echo ""
echo ""
echo "Where to find the unix php-fpm socket.."
if [[ ${#_unix_socket_arr[@]} -gt 0 ]]; then
echo ""
declare -i i=0
declare -i i_default=-1
for _socket in ${_unix_socket_arr[@]} ; do
if [[ $_socket =~ www ]] || [[ ${#_unix_socket_arr[@]} -eq 1 ]] ; then
echo -e "[${i}] \033[1m${_socket}\033[m"
i_default=$i
else
echo "[${i}] ${_socket}"
fi
(( i++ ))
done
_OK=false
echo ""
echononl "Eingabe: "
while ! $_OK ; do
read _IN
if [[ -z "$_IN" ]] && [[ $i_default -gt -1 ]] ; then
_IN=$i_default
fi
if is_number "$_IN" && [[ -n ${_unix_socket_arr[$_IN]} ]]; then
unix_socket="${_unix_socket_arr[$_IN]}"
_OK=true
else
echo ""
echo -e "\tFalsche Eingabe !"
echo ""
echononl "Eingabe: "
fi
done
fi
if [[ ! -S "$unix_socket" ]]; then
echo -e "\n\t\033[1;33mNo Unix Socket found at \"$unix_socket\"!\033[m\n"
unix_socket=""
while [ "X$unix_socket" = "X" ] ; do
echononl "Unix PHP-FPM socket: "
read unix_socket
if [ "X$unix_socket" = "X" ]; then
echo -e "\n\t\033[1;33mUnix Socket is required. Try again..\033[m\n"
continue
fi
if [ ! -S "$unix_socket" ]; then
echo -e "\n\t\033[1;33mNo Unix Socket found at \"$unix_socket\"! Try again..\033[m\n"
unix_socket=""
fi
done
fi
else
echo -e "\033[21G\033[32mUsing Unix Socket \033[m\"$unix_socket\""
fi
tcp_host=127.0.0.1
tcp_port=9000
_proxy_match="^/(.*\.php(/.*)?)\$ unix:$unix_socket|fcgi://$tcp_host:$tcp_port$_doc_root"
_set_handler_fpm="\"proxy:unix:${unix_socket}|fcgi://php/\""
unix_socket_owner="$(stat -c '%U' $unix_socket)"
unix_socket_group="$(stat -c '%G' $unix_socket)"
else
echo ""
echo ""
echo "Insert TCP Host and TCP Port for connection to PHP-FPM.."
echo ""
echo ""
tcp_host=
while [ "X$tcp_host" = "X" ] ; do
echononl "TCP Host [$_tcp_host]: "
read tcp_host
if [ "X$tcp_host" = "X" ]; then
tcp_host=$_tcp_host
fi
done
echo ""
tcp_port=
while [ "X$tcp_port" = "X" ] ; do
echononl "TCP port [$_tcp_port]: "
read tcp_port
if [ "X$tcp_port" = "X" ]; then
tcp_port=$_tcp_port
fi
done
_proxy_match="^/(.*\.php(/.*)?)\$ fcgi://$tcp_host:$tcp_port$_doc_root/\$1"
_set_handler_fpm="\"proxy:fcgi://$tcp_host:$tcp_port\""
fi
fi
if $_print_summary ; then
echo ""
echo ""
echo -e "\033[21G\033[32mCreate environment for site \033[m$site_url\033[32m :\033[m"
echo ""
if [[ -n "$PROJECT_NAME" ]]; then
echo ""
echo -e "Project Name......................: \033[1m$PROJECT_NAME\033[m"
fi
echo ""
echo -e "PHP environment...................: \033[33m\033[1m${_type_msg}\033[m"
if [ "$_type" = "FCGID" ]; then
if [ "$_type" = "FCGID" -a "$_COMMON_FCGI_CONFIG" = "true" ]; then
echo -e "PHP major version.................: Using from common FCGID configuration"
echo " Common FCGID config directory..: $common_fcgi_config_path"
else
echo -e "PHP major version.................: \033[33m\033[1m$major_php_verison\033[m"
fi
echo " FCGIWrapper Entry..............: $FCGI_Wrapper"
fi
if [ "$_type" = "PHP-FPM" ]; then
echo -e "PHP major version.................: \033[33m\033[1m$major_php_verison\033[m"
if [ "$connection" = "unix_socket" ]; then
echo " PHP-FPM using Unix Socket......: $unix_socket"
else
echo " PHP-FPM using TCP Connection...: ${tcp_host}:$tcp_port"
fi
echo " ProxyPassMatch Directive.......: $_proxy_match"
fi
if [ "$_type" = "MOD_PHP" ]; then
echo -e "PHP major version.................: PHP Version from mod_php at Apache Installation"
fi
if $_suEXEC ; then
echo " suEXEC User....................: $suEXEC_user"
echo " suEXEC Group...................: $suEXEC_group"
fi
echo ""
echo "Apache Installationsverzeichnis...: $apache_base_dir ($_apache_base_dir_realpath)"
echo "Apache User.......................: $web_user"
echo "Apache Group......................: $web_group"
echo ""
echo "IPv4 Address......................: $_ipv4"
echo "IPv6 Address......................: $_ipv6"
echo ""
echo "Listen also for HTTPS connections.: $_https"
if $_https ; then
echo " Allow only SSL connections?....: $_https_only"
echo " SSL Key File...................: $_ssl_key_file"
echo " SSL Certificate File...........: $_ssl_cert_file"
if [ -n "$_ssl_chain_file" ]; then
echo " SSL Certificate Chain File.....: $_ssl_chain_file"
else
echo -e " SSL Certificate Chain File.....: [ \033[33m\033[1mNot given!\033[m ]: \"SSLCertificateChainFile\" Directive will be omitted!"
fi
fi
echo ""
echo "Site URL..........................: $site_url"
echo ""
echo "ServerName........................: $_server_name"
echo "ServerAlias(es)...................: ${_server_aliases_arr[@]}"
if [[ "$_type" = "REDIRECT" ]] ; then
echo ""
echo "Redirect site to URL..............: $rewrite_url"
else
echo ""
echo "Base Directory for site...........: $_web_base_dir"
if $CREATE_SYMLINK_WEB_BASE_DIR ; then
echo "Symlink for Base Directory........: `dirname $_web_base_dir`/$_symlink_web_base_dir"
fi
echo "Document Root Directory...........: $_doc_root"
fi
echo ""
echo "Logfile Directory.................: $_log_dir"
echo " CustomLog......................: $_combined_custom_log"
echo " ErrorLog.......................: $_error_log"
if [ -n "$_custom_ip_log" ]; then
echo " Additional Logfile ............: $_custom_ip_log"
fi
# if [ -n "$_custom_ipv4_log" ]; then
# echo " Additional Logfile IPv4........: $_custom_ipv4_log"
# fi
# if [ -n "$_custom_ipv6_log" ]; then
# echo " Additional Logfile IPv6........: $_custom_ipv6_log"
# fi
echo ""
echo "VHost Base Directory..............: $_vhost_base_dir"
echo "VHost configuration file..........: $_new_vhost_config_file"
echo ""
echo ""
echo ""
echononl "Parameters ok? [yes/no]: "
read OK
while [ "X$OK" != "Xyes" -a "X$OK" != "XYes" -a "X$OK" != "Xno" -a "X$OK" != "XNo" ]
do
echononl "Wrong entry! [yes/no]: "
read OK
done
[ $OK = "yes" -o $OK = "Yes" ] || fatal Repeat installation with different parameters
fi
_default_ipv6=false
if [[ -n "${IPv4_FIRST}" ]]; then
_default_ipv4=true
fi
if [[ -n "${IPv6_FIRST}" ]]; then
_default_ipv6=true
fi
_vhost_default_80="<VirtualHost"
_vhost_default_443="<VirtualHost"
if $_default_ipv4 ; then
for __ipv4 in $_ipv4; do
_vhost_default_80="$_vhost_default_80 $__ipv4:80"
_vhost_default_443="$_vhost_default_443 $__ipv4:443"
done
fi
if $_default_ipv6 ; then
for __ipv6 in $_ipv6 ; do
_vhost_default_80="$_vhost_default_80 [${__ipv6}]:80"
_vhost_default_443="$_vhost_default_443 [${__ipv6}]:443"
done
fi
_vhost_default_80="$_vhost_default_80>"
_vhost_default_443="$_vhost_default_443>"
if [[ "$_type" = "REDIRECT" ]] ; then
_failed=false
echo ""
echo ""
echononl "\tErstelle VHost Konfiguration \"`basename $_new_vhost_config_file`\".."
cat <<EOF > ${_new_vhost_config_file}
# --- $site_url
EOF
if [ "$?" != "0" ]; then
_failed=true
fi
for _alias in "${_server_aliases_arr[@]}" ; do
cat <<EOF >> ${_new_vhost_config_file}
# --- $_alias
EOF
if [ "$?" != "0" ]; then
_failed=true
fi
done
cat <<EOF >> ${_new_vhost_config_file}
$_vhost_default_80
ServerAdmin $server_admin
ServerName $_server_name
EOF
if [ "$?" != "0" ]; then
_failed=true
fi
for _alias in "${_server_aliases_arr[@]}" ; do
cat <<EOF >> ${_new_vhost_config_file}
ServerAlias $_alias
EOF
if [ "$?" != "0" ]; then
_failed=true
fi
done
cat <<EOF >> ${_new_vhost_config_file}
RewriteEngine on
RewriteCond %{REQUEST_URI} !^/\.well-known/acme-challenge/
EOF
if $_https_only ; then
cat <<EOF >> ${_new_vhost_config_file}
RewriteRule (.*) https://${rewrite_url} [R=301,L]
EOF
else
cat <<EOF >> ${_new_vhost_config_file}
RewriteRule (.*) http://${rewrite_url} [R=301,L]
EOF
fi
if [ -n "$_custom_ip_log" ]; then
cat <<EOF >> ${_new_vhost_config_file}
CustomLog $_custom_ip_log base_requests
EOF
if [ "$?" != "0" ]; then
_failed=true
fi
fi
cat <<EOF >> ${_new_vhost_config_file}
CustomLog $_combined_custom_log combined
ErrorLog $_error_log
</VirtualHost>
EOF
if $_https ; then
cat <<EOF >> ${_new_vhost_config_file}
$_vhost_default_443
ServerAdmin $server_admin
ServerName $_server_name
EOF
if [ "$?" != "0" ]; then
_failed=true
fi
for _alias in "${_server_aliases_arr[@]}" ; do
cat <<EOF >> ${_new_vhost_config_file}
ServerAlias $_alias
EOF
if [ "$?" != "0" ]; then
_failed=true
fi
done
cat <<EOF >> ${_new_vhost_config_file}
RewriteEngine on
RewriteCond %{REQUEST_URI} !^/\.well-known/acme-challenge/
RewriteRule (.*) https://${rewrite_url} [R=301,L]
SSLEngine on
SSLCertificateFile $_ssl_cert_file
SSLCertificateKeyFile $_ssl_key_file
EOF
if [ "$?" != "0" ]; then
_failed=true
fi
if [ -n "$_custom_ip_log" ]; then
cat <<EOF >> ${_new_vhost_config_file}
CustomLog $_custom_ip_log base_requests
EOF
if [ "$?" != "0" ]; then
_failed=true
fi
fi
cat <<EOF >> ${_new_vhost_config_file}
CustomLog $_combined_custom_log combined
ErrorLog $_error_log
</VirtualHost>
EOF
if [ "$?" != "0" ]; then
_failed=true
fi
fi
if ! $_failed ; then
echo_ok
else
echo_failed
error "Kann Konfiguration für site \"$site_url\" nicht erstellen!"
fatal
fi
_vhost_file_basename="`basename $_new_vhost_config_file`"
_vhost_file_prefix="${_vhost_file_basename%.*}"
if [ -h "${_vhost_base_dir}/$_vhost_file_prefix" ]; then
echononl "\tDelete existing symlink \"${_vhost_base_dir}/$_vhost_file_prefix\".."
rm ${_vhost_base_dir}/$_vhost_file_prefix
if [ "$?" = "0" ];then
echo_ok
else
echo_failed
error "Cannot delete symlink \"${_vhost_base_dir}/$_vhost_file_prefix\""
fatal
fi
elif [ -f "${_vhost_base_dir}/$_vhost_file_prefix" ]; then
echononl "\tMove existing file \"$_vhost_file_prefix\" to \"${_vhost_file_prefix}.mod_php\""
mv ${_vhost_base_dir}/$_vhost_file_prefix ${_vhost_base_dir}/${_vhost_file_prefix}.mod_php
if [ "$?" = "0" ];then
echo_ok
else
echo_failed
error "Cannot move file \"${_vhost_base_dir}/$_vhost_file_prefix\""
fatal
fi
fi
echononl "\tSet symlink \"$_vhost_file_prefix --> $_vhost_file_basename"
ln -s $_vhost_file_basename ${_vhost_base_dir}/$_vhost_file_prefix
if [ "$?" = "0" ];then
echo_ok
else
echo_failed
error "Setting symlink \"${_vhost_base_dir}/$_vhost_file_prefix -> $_vhost_file_basename\" failed."
fatal
fi
_syntax_ok=false
echo ""
echononl "\tCheck Apache Configuration.."
if [ "`apachectl configtest 2>&1`" = "Syntax OK" ]; then
echo_ok
_syntax_ok=true
else
echo_failed
fi
if $_syntax_ok ; then
echononl "\tGraceful restart Apache Webserver.."
apachectl graceful 2> /dev/null
if [ "$?" = "0" ];then
echo_ok
else
echo_failed
error "Graceful restart of Apache Webserver failed!"
fi
fi
rm -f $log_file
echo
exit 0
fi
if $_suEXEC ; then
echo
echo -e "\t---"
echo -e "\t--- Create suEXEC Environment.."
echo -e "\t---"
echo""
getent passwd $suEXEC_user > /dev/null
if [ "$?" = "0" ]; then
echononl "\tUser/Group for suEXEC already exists.."
echo_skipped
_suEXEC_group=`id -gn $suEXEC_user`
if [ "$_suEXEC_group" != "$suEXEC_group" ]; then
warn "Changing suEXEC Group to \"$_suEXEC_group\""
suEXEC_group=$_suEXEC_group
fi
else
#if [ "$suEXEC_user" != "$suEXEC_group" ]; then
echononl "\tAdding Group \"$suEXEC_group\".."
getent group $suEXEC_group > /dev/null
if [ "$?" = "0" ]; then
echo_skipped
else
groupadd $suEXEC_group
if [ "$?" = "0" ]; then
echo_ok
else
echo_failed
error "Cannot create Group \"$suEXEC_group\"."
fatal
fi
fi
#fi
echononl "\tAdding User \"$suEXEC_user\".."
useradd -g $suEXEC_group -d $_web_base_dir -s /bin/bash -m $suEXEC_user
if [ "$?" = "0" ]; then
echo_ok
else
echo_failed
error "Cannot create User \"$suEXEC_user\"."
fatal
fi
fi
echononl "\tSetting Password for user \"$suEXEC_user\".."
if $set_suEXEC_password ; then
echo "${suEXEC_user}:$suEXEC_password" | chpasswd
if [ "$?" = "0" ]; then
echo_ok
else
echo_failed
fi
else
echo_skipped
fi
fi
## - Create needed directories
## -
echo
echo -e "\t---"
echo -e "\t--- Create needed Directories"
echo -e "\t---"
echo""
#echo ""
#echo "`dirname $_web_base_dir`/$_symlink_web_base_dir"
#echo ""
if [[ "X${_symlink_web_base_dir}" != "X" ]]; then
if [ -d "`dirname $_web_base_dir`/$_symlink_web_base_dir" ]; then
echo -e "\tMove `dirname $_web_base_dir`/$_symlink_web_base_dir to"
echononl "\t $(dirname $_web_base_dir)/${_symlink_web_base_dir}.`date +%Y%m%d-%H%M`"
mv `dirname $_web_base_dir`/$_symlink_web_base_dir \
`dirname $_web_base_dir}`/${_symlink_web_base_dir}.`date +%Y%m%d-%H%M`
if [ "$?" = "0" ]; then
echo_ok
else
echo_failed
error "Cannot backup directory $(dirname $_web_base_dir)/${_symlink_web_base_dir}!"
fi
elif [ -f "`dirname $_web_base_dir`/$_symlink_web_base_dir" ]; then
echononl "\tBackup existing file `dirname $_web_base_dir`/$_symlink_web_base_dir"
mv $(dirname $_web_base_dir)/$_symlink_web_base_dir \
$(dirname $_web_base_dir)/$_symlink_web_base_dir.$(date +%Y%m%d-%H%M)
if [ "$?" = "0" ]; then
echo_ok
else
echo_failed
error "Cannot backup file `dirname $_web_base_dir`/`basename $_web_base_dir`!"
fi
fi
fi
echononl "\tCreate Web Base directory \"$_web_base_dir\".."
if [ ! -d "$_web_base_dir" ]; then
mkdir $_web_base_dir
if [ "$?" = "0" ]; then
echo_ok
web_base_directory_already_exists=false
else
echo_failed
error "Cannot create web base directory \"$_web_base_dir\"."
fatal
fi
else
echo_skipped
web_base_directory_already_exists=true
fi
echononl "\tChange owner of Web Base directory \"$_web_base_dir\".."
if $web_base_directory_already_exists ; then
echo_skipped
else
if $_suEXEC ; then
chown -R ${suEXEC_user}:$suEXEC_group $_web_base_dir
elif [[ "$_type" = "PHP-FPM" ]]; then
chown -R ${unix_socket_owner}:${unix_socket_group} $_web_base_dir
else
chown -R ${web_user}:${web_group} $_web_base_dir
fi
if [ "$?" = "0" ]; then
echo_ok
else
echo_failed
error "Cannot change owner of web base directory \"$_web_base_dir\""
fatal
fi
fi
if $CREATE_SYMLINK_WEB_BASE_DIR ; then
echononl "\tCreate Symlink $_symlink_web_base_dir --> `basename $_web_base_dir`"
if [ -h "`dirname $_web_base_dir`/$_symlink_web_base_dir" ]; then
echo_skipped
elif [ -d "`dirname $_web_base_dir`/$_symlink_web_base_dir" ]; then
cp -a `dirname $_web_base_dir`/$_symlink_web_base_dir/*
`dirname $_web_base_dir`/$_symlink_web_base_dir.`date +%Y%m%d-%H%M`
else
ln -s `basename $_web_base_dir` `dirname $_web_base_dir`/$_symlink_web_base_dir
if [ "$?" = "0" ]; then
echo_ok
else
echo_failed
error "Cannot create Symlink $_symlink_web_base_dir -> `basename $_web_base_dir`."
fi
fi
fi
echononl "\tCreate \"DocumentRoot\" directory.."
if [ ! -d "$_doc_root" ]; then
mkdir $_doc_root
if [ "$?" = "0" ]; then
echo_ok
else
echo_failed
error "Cannot create document root directory \"$_doc_root\"."
fatal
fi
else
echo_skipped
fi
echononl "\tChange owner of \"DocumentRoot\" directory.."
if $web_base_directory_already_exists ; then
echo_skipped
else
if $_suEXEC ; then
chown -R ${suEXEC_user}:$suEXEC_group $_doc_root
elif [[ "$_type" = "PHP-FPM" ]]; then
chown -R ${unix_socket_owner}:${unix_socket_group} $_doc_root
else
chown -R ${web_user}:${web_group} $_doc_root
fi
if [ "$?" = "0" ]; then
echo_ok
else
echo_failed
error "Cannot change owner of directory \"$_doc_root\""
fatal
fi
fi
echononl "\tCreate Logfile directory.."
if [ ! -d "$_log_dir" ]; then
mkdir $_log_dir
if [ "$?" = "0" ]; then
echo_ok
#echononl "\tChange owner for Logfile directory.."
#chown -R ${web_user}:${web_group} $_log_dir
#if [ "$?" = "0" ]; then
# echo_ok
#else
# echo_failed
# error "Cannot change owner for directory \"$_log_dir\""
# fatal
#fi
else
echo_failed
error "Cannot create logfile directory \"$_log_dir\"."
fatal
fi
else
echo_skipped
fi
if [ "$_type" = "FCGID" -a "$_COMMON_FCGI_CONFIG" = "false" ]; then
echononl "\tCreate fcgid configuration directory.."
if [ ! -d "${_web_base_dir}/conf" ]; then
mkdir ${_web_base_dir}/conf
if [ "$?" = "0" ]; then
echo_ok
else
echo_failed
error "Cannot create fcgid configuration directory \"${_web_base_dir}/conf\"."
fatal
fi
else
echo_skipped
fi
echononl "\tChange owner of Configuration directory.."
if $_suEXEC ; then
chown -R ${suEXEC_user}:$suEXEC_group ${_web_base_dir}/conf
else
chown -R root:${web_group} ${_web_base_dir}/conf
fi
if [ "$?" = "0" ]; then
echo_ok
else
echo_failed
error "Cannot change owner of directory \"${_web_base_dir}/conf\""
fatal
fi
#if $_suEXEC ; then
# echononl "\tChange owner of Configuration directory.."
# chown -R ${suEXEC_user}:$suEXEC_group ${_web_base_dir}/conf
# if [ "$?" = "0" ]; then
# echo_ok
# else
# echo_failed
# error "Cannot change owner of directory \"${_web_base_dir}/conf\""
# fatal
# fi
#fi
echononl "\tCreate Session directory.."
if [ ! -d "${_web_base_dir}/sessions" ]; then
mkdir ${_web_base_dir}/sessions
if [ "$?" = "0" ]; then
echo_ok
else
echo_failed
error "Cannot create session directory \"${_web_base_dir}/sessions\"."
fatal
fi
else
echo_skipped
fi
echononl "\tChange owner of Session directory.."
if $_suEXEC ; then
chown -R ${suEXEC_user}:$suEXEC_group ${_web_base_dir}/sessions
else
chown -R ${web_user}:${web_group} ${_web_base_dir}/sessions
fi
if [ "$?" = "0" ]; then
echo_ok
else
echo_failed
error "Cannot change owner of directory \"${_web_base_dir}/sessions\""
fatal
fi
echononl "\tCreate TMP directory.."
if [ ! -d "${_web_base_dir}/tmp" ]; then
mkdir ${_web_base_dir}/tmp
if [ "$?" = "0" ]; then
echo_ok
else
echo_failed
error "Cannot create tmp directory \"${_web_base_dir}/tmp\"."
fatal
fi
else
echo_skipped
fi
echononl "\tChange owner of TMP directory.."
if $_suEXEC ; then
chown -R ${suEXEC_user}:$suEXEC_group ${_web_base_dir}/tmp
else
chown -R ${web_user}:${web_group} ${_web_base_dir}/tmp
fi
if [ "$?" = "0" ]; then
echo_ok
else
echo_failed
error "Cannot change owner of directory \"${_web_base_dir}/tmp\""
fatal
fi
## - Create FCGID-Environment
## -
echo
echo
echo -e "\t---"
echo -e "\t--- Create \"$_type\"-Environment"
echo -e "\t---"
echo""
echononl "\tChange into \"fcgid\" configuration directory.."
cd ${_web_base_dir}/conf
if [ "$?" = "0" ]; then
echo_ok
else
echo_failed
error "Cannot change into directory \"${_web_base_dir}/conf\""
fatal
fi
_php_version_link=
for _php_version in $_major_php_verisons ; do
if [ -d /usr/local/php-$_php_version ]; then
if [ -f /usr/local/php-${_php_version}/etc/php.ini ]; then
_php_ini_file=${_web_base_dir}/conf/php.ini-$_php_version
if [ -f "$_php_ini_file" ]; then
echononl "\tSichere existierende Konfiguration"
mv $_php_ini_file ${_php_ini_file}.`date +%Y%m%d-%H%M`
if [ "$?" = 0 ]; then
echo_ok
else
echo_failed
error "Kann bestehende Konfigurationsdatei \"$_new_vhost_config_file.\" nicht sichern!"
fatal
fi
fi
## - Adjust php.ini-$_php_version
## -
cp /usr/local/php-${_php_version}/etc/php.ini $_php_ini_file
chmod 640 $_php_ini_file
if $_suEXEC ; then
chown root:$suEXEC_group $_php_ini_file
else
chown root:$web_group $_php_ini_file
fi
## - Set error_log = ${_web_base_dir}/logs/php_errors.log
## -
_key="error_log"
_val="${_web_base_dir}/logs/php_errors.log"
echononl "\tphp.ini-$_php_version: $_val = $_key"
_retval=""
if grep -e "^\s*${_key}\s*=" $_php_ini_file > /dev/null 2>&1 ; then
#sed -i "0,/^\([ \t]*${_key}[ \t]*=.*\)/ s##;\1\n${_key} = \"${_val}\"#" $_php_ini_file
perl -i -n -p -e "s#^(\s*${_key}\s*=.*)#;\1\n${_key} = ${_val}#" $_php_ini_file
_retval=$?
elif grep -e "^\s*;\s*${_key}\s*=" $_php_ini_file > /dev/null 2>&1 ; then
sed -i "0,/^\([ \t]*;[ \t]*${_key}[ \t]*=.*\)/ s##\1\n${_key} = \"${_val}\"\n#" $_php_ini_file
_retval=$?
fi
if [ -z "$_retval" ]; then
echo_skipped
elif [ "$_retval" = "0" ]; then
echo_ok
else
echo_failed
fi
touch $_val
if $_suEXEC ; then
chown -R ${suEXEC_user}:$suEXEC_group $_val
else
chown -R ${web_user}:${web_group} $_val
fi
## - Set sys_temp_dir = ${_web_base_dir}/tmp
## -
_key="sys_temp_dir"
_val="${_web_base_dir}/tmp"
echononl "\tphp.ini-$_php_version: $_val = $_key"
_retval=""
if grep -e "^\s*${_key}\s*=" $_php_ini_file > /dev/null 2>&1 ; then
perl -i -n -p -e "s#^(\s*${_key}\s*=.*)#;\1\n${_key} = ${_val}#" $_php_ini_file
_retval=$?
elif grep -e "^\s*;\s*${_key}\s*=" $_php_ini_file > /dev/null 2>&1 ; then
sed -i "0,/^\([ \t]*;[ \t]*${_key}[ \t]*=.*\)/ s##\1\n${_key} = \"${_val}\"\n#" $_php_ini_file
_retval=$?
fi
if [ -z "$_retval" ]; then
echo_skipped
elif [ "$_retval" = "0" ]; then
echo_ok
else
echo_failed
fi
## - Set upload_tmp_dir = ${_web_base_dir}/tmp
## -
_key="upload_tmp_dir"
_val="${_web_base_dir}/tmp"
echononl "\tphp.ini-$_php_version: $_val = $_key"
_retval=""
if grep -e "^\s*${_key}\s*=" $_php_ini_file > /dev/null 2>&1 ; then
perl -i -n -p -e "s#^(\s*${_key}\s*=.*)#;\1\n${_key} = ${_val}#" $_php_ini_file
_retval=$?
elif grep -e "^\s*;\s*${_key}\s*=" $_php_ini_file > /dev/null 2>&1 ; then
sed -i "0,/^\([ \t]*;[ \t]*${_key}[ \t]*=.*\)/ s##\1\n${_key} = \"${_val}\"\n#" $_php_ini_file
_retval=$?
fi
if [ -z "$_retval" ]; then
echo_skipped
elif [ "$_retval" = "0" ]; then
echo_ok
else
echo_failed
fi
## - Set session.save_path = ${_web_base_dir}/sessions
## -
_key="session.save_path"
_val="${_web_base_dir}/sessions"
echononl "\tphp.ini-$_php_version: $_val = $_key"
_retval=""
if grep -e "^\s*${_key}\s*=" $_php_ini_file > /dev/null 2>&1 ; then
perl -i -n -p -e "s#^(\s*${_key}\s*=.*)#;\1\n${_key} = ${_val}#" $_php_ini_file
_retval=$?
elif grep -e "^\s*;\s*${_key}\s*=" $_php_ini_file > /dev/null 2>&1 ; then
sed -i "0,/^\([ \t]*;[ \t]*${_key}[ \t]*=.*\)/ s##\1\n${_key} = \"${_val}\"\n#" $_php_ini_file
_retval=$?
fi
if [ -z "$_retval" ]; then
echo_skipped
elif [ "$_retval" = "0" ]; then
echo_ok
else
echo_failed
fi
## - Set soap.wsdl_cache_dir = ${_web_base_dir}/tmp
## -
_key="soap.wsdl_cache_dir"
_val="${_web_base_dir}/tmp"
echononl "\tphp.ini-$_php_version: $_val = $_key"
_retval=""
if grep -e "^\s*${_key}\s*=" $_php_ini_file > /dev/null 2>&1 ; then
perl -i -n -p -e "s#^(\s*${_key}\s*=.*)#;\1\n${_key} = ${_val}#" $_php_ini_file
_retval=$?
elif grep -e "^\s*;\s*${_key}\s*=" $_php_ini_file > /dev/null 2>&1 ; then
sed -i "0,/^\([ \t]*;[ \t]*${_key}[ \t]*=.*\)/ s##\1\n${_key} = \"${_val}\"\n#" $_php_ini_file
_retval=$?
fi
if [ -z "$_retval" ]; then
echo_skipped
elif [ "$_retval" = "0" ]; then
echo_ok
else
echo_failed
fi
## - Set opcache.error_log = ${_web_base_dir}/logs/opcache_errors.log
## -
_key="opcache.error_log"
_val="${_web_base_dir}/logs/opcache_errors.log"
echononl "\tphp.ini-$_php_version: $_val = $_key"
_retval=""
if grep -e "^\s*${_key}\s*=" $_php_ini_file > /dev/null 2>&1 ; then
#sed -i "0,/^\([ \t]*${_key}[ \t]*=.*\)/ s##;\1\n${_key} = \"${_val}\"#" $_php_ini_file
perl -i -n -p -e "s#^(\s*${_key}\s*=.*)#;\1\n${_key} = ${_val}#" $_php_ini_file
_retval=$?
elif grep -e "^\s*;\s*${_key}\s*=" $_php_ini_file > /dev/null 2>&1 ; then
sed -i "0,/^\([ \t]*;[ \t]*${_key}[ \t]*=.*\)/ s##\1\n${_key} = \"${_val}\"\n#" $_php_ini_file
_retval=$?
fi
if [ -z "$_retval" ]; then
echo_skipped
elif [ "$_retval" = "0" ]; then
echo_ok
else
echo_failed
fi
touch $_val
if $_suEXEC ; then
chown -R ${suEXEC_user}:$suEXEC_group $_val
else
chown -R ${web_user}:${web_group} $_val
fi
if [ -f "${_web_base_dir}/conf/fcgid-${_php_version}" ]; then
echononl "\tSichere existierende Scriptdatei .."
mv ${_web_base_dir}/conf/fcgid-${_php_version} \
${_web_base_dir}/conf/fcgid-${_php_version}.`date +%Y%m%d-%H%M`
if [ "$?" = 0 ]; then
echo_ok
else
echo_failed
error "Kann bestehende Scriptdate \"${_web_base_dir}/conf/fcgid-${_php_version}\" nicht sichern!"
fatal
fi
fi
## - Create fcgid-$_php_version
## -
echononl "\tCreate ${_web_base_dir}/conf/fcgid-${_php_version}.."
cat <<EOF > ${_web_base_dir}/conf/fcgid-$_php_version
#!/bin/sh
export PHPRC="${_web_base_dir}/conf/"
export TMPDIR="${_web_base_dir}/tmp"
# PHP child process management (PHP_FCGI_CHILDREN) should
# always be disabled with mod_fcgid, which will only route one
# request at a time to application processes it has spawned;
# thus, any child processes created by PHP will not be used
# effectively. (Additionally, the PHP child processes may not
# be terminated properly.) By default, and with the environment
# variable setting PHP_FCGI_CHILDREN=0, PHP child process
# management is disabled.
PHP_FCGI_CHILDREN=0
export PHP_FCGI_CHILDREN
exec /usr/local/php-${_php_version}/bin/php-cgi
EOF
if [ "$?" = 0 ]; then
echo_ok
else
echo_failed
error "Kann \"${_web_base_dir}/conf/fcgid-${_php_version}\" nicht erstellen!"
fatal
fi
echononl "\tÄndere Zugriffsrechte für \"fcgid-$_php_version\""
chmod 750 ${_web_base_dir}/conf/fcgid-$_php_version
if [ "$?" = 0 ]; then
echo_ok
else
echo_failed
error "Kann Zugriffsrechte für \"fcgid-${_php_version}\" nicht ändern!"
fatal
fi
echononl "\tBesitzer von \"fcgid-$_php_version\".."
if $_suEXEC ; then
chown ${suEXEC_user}:$suEXEC_group $_val ${_web_base_dir}/conf/fcgid-$_php_version
else
chown root:$web_group ${_web_base_dir}/conf/fcgid-$_php_version
fi
chmod 750 ${_web_base_dir}/conf/fcgid-$_php_version
if [ "$?" = 0 ]; then
echo_ok
else
echo_failed
error "Kann Besitzer für \"fcgid-${_php_version}\" nicht wechseln!"
fatal
fi
_php_version_link=$_php_version
echo ""
fi
fi
done
echo ""
if [ -h "${_web_base_dir}/conf/php.ini" ]; then
echononl "\tDelete symlink php.ini --> `basename $(realpath ${_web_base_dir}/conf/php.ini)`"
rm ${_web_base_dir}/conf/php.ini
if [ "$?" = 0 ]; then
echo_ok
else
echo_failed
error "Cannot delete symlink \"${_web_base_dir}/conf/php.ini\""
fatal
fi
fi
echononl "\tSetze Symlink php.ini --> php.ini-$major_php_verison"
ln -s php.ini-$major_php_verison ${_web_base_dir}/conf/php.ini
if [ "$?" = 0 ]; then
echo_ok
else
echo_failed
error "Kann Symlink \"php.ini --> php.ini-$major_php_verison\" nicht setzen!"
fatal
fi
if [ -h "${_web_base_dir}/conf/fcgid" ]; then
echononl "\tDelete symlink fcgid --> `basename $(realpath ${_web_base_dir}/conf/fcgid)`"
rm ${_web_base_dir}/conf/fcgid
if [ "$?" = 0 ]; then
echo_ok
else
echo_failed
error "Cannot delete symlink \"${_web_base_dir}/conf/fcgid\""
fatal
fi
fi
echononl "\tSetze Symlink fcgid --> fcgid-$major_php_verison"
ln -s fcgid-$major_php_verison ${_web_base_dir}/conf/fcgid
if [ "$?" = 0 ]; then
echo_ok
else
echo_failed
error "Kann Symlink \"fcgid --> fcgid-$major_php_verison\" nicht setzen!"
fatal
fi
cat <<EOF > ${_web_base_dir}/conf/changes.php.ini.txt
error_log = "${_web_base_dir}/logs/php_errors.log"
sys_temp_dir = "${_web_base_dir}/tmp"
upload_tmp_dir = "${_web_base_dir}/tmp"
session.save_path = "${_web_base_dir}/sessions"
soap.wsdl_cache_dir = "${_web_base_dir}/tmp"
opcache.error_log = ${_web_base_dir}/logs/opcache_errors.log
EOF
fi
## - Create VHost Configuration
## -
echo
echo
echo -e "\t---"
echo -e "\t--- Create VHost Configuration"
echo -e "\t---"
echo""
_failed=false
echononl "\tErstelle VHost Konfiguration \"`basename $_new_vhost_config_file`\".."
cat <<EOF > ${_new_vhost_config_file}
# --- $site_url
EOF
if [ "$?" != "0" ]; then
_failed=true
fi
for _alias in "${_server_aliases_arr[@]}" ; do
cat <<EOF >> ${_new_vhost_config_file}
# --- $_alias
EOF
if [ "$?" != "0" ]; then
_failed=true
fi
done
#if [ "$_ipv6" != "disabled" ]; then
# cat <<EOF >> ${_new_vhost_config_file}
#
#<VirtualHost $_ipv4:80 [$_ipv6]:80>
#EOF
#else
# cat <<EOF >> ${_new_vhost_config_file}
#
#<VirtualHost $_ipv4:80>
#EOF
#fi
cat <<EOF >> ${_new_vhost_config_file}
$_vhost_default_80
ServerAdmin $server_admin
ServerName $_server_name
EOF
if [ "$?" != "0" ]; then
_failed=true
fi
for _alias in "${_server_aliases_arr[@]}" ; do
cat <<EOF >> ${_new_vhost_config_file}
ServerAlias $_alias
EOF
if [ "$?" != "0" ]; then
_failed=true
fi
done
if $_suEXEC ; then
cat <<EOF >> ${_new_vhost_config_file}
SuexecUserGroup $suEXEC_user $suEXEC_group
EOF
fi
if $_https_only ; then
cat <<EOF >> ${_new_vhost_config_file}
RewriteEngine on
RewriteCond %{HTTPS} !=on
RewriteRule (.*) https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L]
EOF
elif [ "$_type" = "FCGID" ]; then
cat <<EOF >> ${_new_vhost_config_file}
DocumentRoot $_doc_root
<Directory "${_doc_root}">
Require all granted
AllowOverride All
FCGIWrapper $FCGI_Wrapper
<FilesMatch \.php\$>
SetHandler fcgid-script
</FilesMatch>
Options +ExecCGI
</Directory>
EOF
elif [ "$_type" = "PHP-FPM" ]; then
cat <<EOF >> ${_new_vhost_config_file}
#ProxyErrorOverride On
<FilesMatch \\.php\$>
SetHandler $_set_handler_fpm
</FilesMatch>
# Define a matching worker.
# The part that is matched to the SetHandler is the part that
# follows the pipe. If you need to distinguish, "localhost; can
# be anything unique.
#
<Proxy "fcgi://php/">
# Recycle connections to the fastcgi dispatcher (PHP FPM).
#
# Use persistent connections to reduce the constant overhead of setting
# up new connections
#
ProxySet enablereuse=on
# max - the most proxied request per server
#
# max = pm.max_children / max number of servers
# = pm.max_children / (MaxRequestWorkers / ThreadsPerChild)
#
ProxySet max=16
# Forces the module to flush every chunk of data received from the FCGI backend
# as soon as it receives it, without buffering.
#
ProxySet flushpackets=on
# connectiontimeout
#
# Connect timeout in seconds. The number of seconds Apache httpd waits for the
# creation of a connection to the backend to complete. By adding a postfix of ms,
# the timeout can be also set in milliseconds.
#
ProxySet connectiontimeout=5
# timeout
#
# Socket timeout in seconds. The number of seconds Apache httpd waits for data
# sent by / to the backend.
#
#ProxySet timeout=${PROXY_TIMEOUT}
</Proxy>
<IfModule dir_module>
DirectoryIndex index.php index.html index.htm
</IfModule>
DocumentRoot $_doc_root
<Directory "${_doc_root}">
Require all granted
AllowOverride All
</Directory>
EOF
else
cat <<EOF >> ${_new_vhost_config_file}
DocumentRoot $_doc_root
<Directory "${_doc_root}">
AllowOverride All
Require all granted
</Directory>
EOF
fi # if [ "$_type" = "FCGID" ]; then
if [ -n "$_custom_ip_log" ]; then
cat <<EOF >> ${_new_vhost_config_file}
CustomLog $_custom_ip_log base_requests
EOF
fi
cat <<EOF >> ${_new_vhost_config_file}
CustomLog $_combined_custom_log combined
ErrorLog $_error_log
</VirtualHost>
EOF
if [ "$?" != "0" ]; then
_failed=true
fi
if $_https ; then
# if [ "$_ipv6" != "disabled" ]; then
# cat <<EOF >> ${_new_vhost_config_file}
#
#<VirtualHost $_ipv4:443 [$_ipv6]:443>
#EOF
# else
# cat <<EOF >> ${_new_vhost_config_file}
#
#<VirtualHost $_ipv4:443>
#EOF
# fi
cat <<EOF >> ${_new_vhost_config_file}
$_vhost_default_443
ServerAdmin $server_admin
ServerName $_server_name
EOF
if [ "$?" != "0" ]; then
_failed=true
fi
for _alias in "${_server_aliases_arr[@]}" ; do
cat <<EOF >> ${_new_vhost_config_file}
ServerAlias $_alias
EOF
if [ "$?" != "0" ]; then
_failed=true
fi
done
if $_suEXEC ; then
cat <<EOF >> ${_new_vhost_config_file}
SuexecUserGroup $suEXEC_user $suEXEC_group
EOF
fi
if [ "$_type" = "FCGID" ]; then
cat <<EOF >> ${_new_vhost_config_file}
DocumentRoot $_doc_root
<Directory "${_doc_root}">
Require all granted
AllowOverride All
FCGIWrapper $FCGI_Wrapper
<FilesMatch \.php\$>
SetHandler fcgid-script
</FilesMatch>
Options +ExecCGI
</Directory>
EOF
elif [ "$_type" = "PHP-FPM" ]; then
cat <<EOF >> ${_new_vhost_config_file}
#ProxyErrorOverride On
<FilesMatch \\.php\$>
SetHandler $_set_handler_fpm
</FilesMatch>
# Define a matching worker.
# The part that is matched to the SetHandler is the part that
# follows the pipe. If you need to distinguish, "localhost; can
# be anything unique.
#
<Proxy "fcgi://php/">
# Recycle connections to the fastcgi dispatcher (PHP FPM).
#
# Use persistent connections to reduce the constant overhead of setting
# up new connections
#
ProxySet enablereuse=on
# max - the most proxied request per server
#
# max = pm.max_children / max number of servers
# = pm.max_children / (MaxRequestWorkers / ThreadsPerChild)
#
ProxySet max=16
# Forces the module to flush every chunk of data received from the FCGI backend
# as soon as it receives it, without buffering.
#
ProxySet flushpackets=on
# connectiontimeout
#
# Connect timeout in seconds. The number of seconds Apache httpd waits for the
# creation of a connection to the backend to complete. By adding a postfix of ms,
# the timeout can be also set in milliseconds.
#
ProxySet connectiontimeout=5
# timeout
#
# Socket timeout in seconds. The number of seconds Apache httpd waits for data
# sent by / to the backend.
#
ProxySet timeout=30
</Proxy>
<IfModule dir_module>
DirectoryIndex index.php index.html index.htm
</IfModule>
DocumentRoot $_doc_root
<Directory "${_doc_root}">
Require all granted
AllowOverride All
</Directory>
EOF
else
cat <<EOF >> ${_new_vhost_config_file}
DocumentRoot $_doc_root
<Directory "${_doc_root}">
AllowOverride All
Require all granted
</Directory>
EOF
fi # if [ "$_type" = "FCGID" ]
cat <<EOF >> ${_new_vhost_config_file}
SSLEngine on
SSLCertificateFile $_ssl_cert_file
SSLCertificateKeyFile $_ssl_key_file
EOF
if [ -n "$_ssl_chain_file" ]; then
cat <<EOF >> ${_new_vhost_config_file}
SSLCertificateChainFile $_ssl_chain_file
EOF
fi
if [ -n "$_custom_ip_log" ]; then
cat <<EOF >> ${_new_vhost_config_file}
CustomLog $_custom_ip_log base_requests
EOF
fi
cat <<EOF >> ${_new_vhost_config_file}
CustomLog $_combined_custom_log combined
ErrorLog $_error_log
</VirtualHost>
EOF
if [ "$?" != "0" ]; then
_failed=true
fi
fi
if ! $_failed ; then
echo_ok
else
echo_failed
error "Kann fcgid Konfiguration für site \"$site_url\" nicht erstellen!"
fatal
fi
_vhost_file_basename="`basename $_new_vhost_config_file`"
_vhost_file_prefix="${_vhost_file_basename%.*}"
if [ -h "${_vhost_base_dir}/$_vhost_file_prefix" ]; then
echononl "\tDelete existing symlink \"${_vhost_base_dir}/$_vhost_file_prefix\".."
rm ${_vhost_base_dir}/$_vhost_file_prefix
if [ "$?" = "0" ];then
echo_ok
else
echo_failed
error "Cannot delete symlink \"${_vhost_base_dir}/$_vhost_file_prefix\""
fatal
fi
elif [ -f "${_vhost_base_dir}/$_vhost_file_prefix" ]; then
echononl "\tMove existing file \"$_vhost_file_prefix\" to \"${_vhost_file_prefix}.mod_php\""
mv ${_vhost_base_dir}/$_vhost_file_prefix ${_vhost_base_dir}/${_vhost_file_prefix}.mod_php
if [ "$?" = "0" ];then
echo_ok
else
echo_failed
error "Cannot move file \"${_vhost_base_dir}/$_vhost_file_prefix\""
fatal
fi
fi
echononl "\tSet symlink \"$_vhost_file_prefix --> $_vhost_file_basename"
ln -s $_vhost_file_basename ${_vhost_base_dir}/$_vhost_file_prefix
if [ "$?" = "0" ];then
echo_ok
else
echo_failed
error "Setting symlink \"${_vhost_base_dir}/$_vhost_file_prefix -> $_vhost_file_basename\" failed."
fatal
fi
echononl "\tCreate initial \"index.html\" file.."
if [ ! -f "${_doc_root}/index.html" -a ! -r "${_doc_root}/index.php" -a ! -f "${_doc_root}/index.htm" ]; then
cat <<EOF > ${_doc_root}/index.html
<!doctype html>
<html>
<head>
<title>Maintenance / Wartungsarbeiten</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<style type="text/css">
body {
background: #eee;
font: normal normal 16px/140% Arial, Helvetica, Trebuchet MS, Geneva, sans-serif;
word-wrap: break-word;
}
h1 {
font-size: 30px;
font-weight: bold;
line-height: 100%;
}
h2 {
font-size: 18px;
font-weight: bold;
line-height: 100%;
}
.Container {
background: #fff;
width: 825px;
}
.Content {
background: #fff;
font-size: 12px;
height: 400px;
line-height: 16px;
padding: 10px 20px;
}
</style>
<link rel="shortcut icon" href="/favicon.ico" />
</head>
<body>
<div class="Container">
<div class="Logo"></div>
<div class="Content">
<h3>${_server_name}</h3>
<h1>Seite im Aufbau</h1>
<h2>Diese Website wird in Kürze online gehen..</h2>
<p>Bitte versuchen Sie es sp&auml;ter noch einmal.</p>
<p>Vielen Dank f&uuml;r Ihr Verst&auml;ndnis!</p>
<h1>Site under construction</h1>
<h2>This website will go online soon.</h2>
<p>Please try again later.</p>
<p>Thank You very much!</p>
</div><!-- .Content -->
</div><!-- .Container -->
</body>
</html>
EOF
if [ "$?" = "0" ];then
echo_ok
echononl "\tChange ownerchip (${web_user}:${web_group}) of \"index.html\".."
chown ${web_user}:$web_group ${_doc_root}/index.html
if [ "$?" = "0" ];then
echo_ok
else
echo_failed
error "Cannot change ownerchip of file \"index.html\""
fi
else
echo_failed
error "Cannot create file \"index.html\"."
fi
else
echo_skipped
fi
echononl "\tCreate \"phpinfo.php\" file.."
if $CREATE_PHPINFO_FILE && [ "$_type" = "PHP-FPM" -o "$_type" = "FCGID" ]; then
if [ ! -f "${_doc_root}/phpinfo.php" ]; then
cat <<EOF > ${_doc_root}/phpinfo.php
<html>
<head>
<title>PHP Info</title>
</head>
<body>
<?php phpinfo(); ?>
</body>
</html>
EOF
if [ "$?" = "0" ];then
echo_ok
echononl "\tChange ownerchip (${web_user}:${web_group}) of \"phpinfo.php\".."
chown ${web_user}:$web_group ${_doc_root}/phpinfo.php
if [ "$?" = "0" ];then
echo_ok
else
echo_failed
error "Cannot change ownerchip of file \"phpinfo.php\"."
fi
else
echo_failed
error "Cannot create file \"phpinfo.php\"."
fi
else
echo_skipped
fi
else
echo_skipped
fi
_syntax_ok=false
echo ""
echononl "\tCheck Apache Configuration.."
if [ "`apachectl configtest 2>&1`" = "Syntax OK" ]; then
echo_ok
_syntax_ok=true
else
echo_failed
fi
if $_syntax_ok ; then
echononl "\tGraceful restart Apache Webserver.."
apachectl graceful 2> /dev/null
if [ "$?" = "0" ];then
echo_ok
else
echo_failed
error "Graceful restart of Apache Webserver failed!"
fi
fi
rm -f $log_file
echo
echo
exit 0