|
#!/usr/bin/env bash |
|
|
|
SITE_NAME=${1:-localhost} |
|
ADMIN_EMAIL="admin@$SITE_NAME" |
|
SITE_ALIAS="www.$SITE_NAME" |
|
PORT="8080" |
|
MODULES_PATH="/etc/httpd/modules" |
|
CONF_PATH="/etc/httpd/conf" |
|
ROOT_PATH="$PWD" |
|
DOC_DIRECTORY=${2:-test} |
|
DOC_PATH="$ROOT_PATH/$DOC_DIRECTORY" |
|
|
|
# Hosts file for adding the domain |
|
ETC_HOSTS="/etc/hosts" |
|
# localhost IP |
|
DEFAULT_IP="127.0.0.1" |
|
|
|
VERBOSE=true |
|
|
|
function remove_from_hosts() { |
|
local HOSTNAME=$1 |
|
local HOST_REGEX="\(\s\+\)${HOSTNAME}\s*$" |
|
local HOST_LINE="$(grep -e "${HOST_REGEX}" ${ETC_HOSTS})" |
|
if [ -n "${HOST_LINE}" ]; then |
|
[ ${VERBOSE} == true ] && echo "${HOSTNAME} Found in your ${ETC_HOSTS}, Removing now..." |
|
sudo sed -i -e "s/${HOST_REGEX}/\1/g" -e "/^[^#][0-9\.]\+\s\+$/d" ${ETC_HOSTS} |
|
else |
|
[ ${VERBOSE} == true ] && echo "${HOSTNAME} was not found in your ${ETC_HOSTS}"; |
|
fi |
|
} |
|
|
|
function add_to_hosts() { |
|
local HOSTNAME=$1 |
|
local IP=${2:-${DEFAULT_IP}} |
|
|
|
local HOST_REGEX="\(\s\+\)${HOSTNAME}\s*$" |
|
local HOST_LINE="$(grep -e "${HOST_REGEX}" ${ETC_HOSTS})" |
|
|
|
if [ -n "${HOST_LINE}" ]; then |
|
[ ${VERBOSE} == true ] && echo "${HOSTNAME} already exists : ${HOST_LINE}" |
|
else |
|
[ ${VERBOSE} == true ] && echo "Adding ${HOSTNAME} to your ${ETC_HOSTS}"; |
|
echo -e "${IP}\t${HOSTNAME}" | sudo tee -a ${ETC_HOSTS} |
|
[ ${VERBOSE} == true ] && echo -e "${HOSTNAME} was added succesfully \n ${HOST_LINE}"; |
|
sudo nscd -i hosts |
|
fi |
|
} |
|
|
|
APACHECONF=$(cat <<- EOF |
|
|
|
ServerAdmin ${ADMIN_EMAIL} |
|
ServerName ${SITE_NAME} |
|
Listen ${PORT} |
|
PidFile /tmp/httpd.pid |
|
|
|
LoadModule authn_file_module ${MODULES_PATH}/mod_authn_file.so |
|
LoadModule authn_core_module ${MODULES_PATH}/mod_authn_core.so |
|
LoadModule authz_host_module ${MODULES_PATH}/mod_authz_host.so |
|
LoadModule authz_groupfile_module ${MODULES_PATH}/mod_authz_groupfile.so |
|
LoadModule authz_user_module ${MODULES_PATH}/mod_authz_user.so |
|
LoadModule authz_core_module ${MODULES_PATH}/mod_authz_core.so |
|
LoadModule access_compat_module ${MODULES_PATH}/mod_access_compat.so |
|
LoadModule auth_basic_module ${MODULES_PATH}/mod_auth_basic.so |
|
LoadModule reqtimeout_module ${MODULES_PATH}/mod_reqtimeout.so |
|
LoadModule include_module ${MODULES_PATH}/mod_include.so |
|
LoadModule filter_module ${MODULES_PATH}/mod_filter.so |
|
LoadModule mime_module ${MODULES_PATH}/mod_mime.so |
|
LoadModule log_config_module ${MODULES_PATH}/mod_log_config.so |
|
LoadModule env_module ${MODULES_PATH}/mod_env.so |
|
LoadModule headers_module ${MODULES_PATH}/mod_headers.so |
|
LoadModule setenvif_module ${MODULES_PATH}/mod_setenvif.so |
|
LoadModule version_module ${MODULES_PATH}/mod_version.so |
|
LoadModule slotmem_shm_module ${MODULES_PATH}/mod_slotmem_shm.so |
|
LoadModule mpm_prefork_module ${MODULES_PATH}/mod_mpm_prefork.so |
|
LoadModule unixd_module ${MODULES_PATH}/mod_unixd.so |
|
LoadModule status_module ${MODULES_PATH}/mod_status.so |
|
LoadModule autoindex_module ${MODULES_PATH}/mod_autoindex.so |
|
LoadModule negotiation_module ${MODULES_PATH}/mod_negotiation.so |
|
LoadModule dir_module ${MODULES_PATH}/mod_dir.so |
|
LoadModule userdir_module ${MODULES_PATH}/mod_userdir.so |
|
LoadModule alias_module ${MODULES_PATH}/mod_alias.so |
|
LoadModule rewrite_module ${MODULES_PATH}/mod_rewrite.so |
|
LoadModule php7_module ${MODULES_PATH}/libphp7.so |
|
|
|
|
|
TypesConfig ${CONF_PATH}/mime.types |
|
AddType application/x-compress .Z |
|
AddType application/x-gzip .gz .tgz |
|
|
|
LogLevel info |
|
ErrorLog "|/bin/sh -c 'cat'" |
|
LogFormat "%h %l %u %t \"%r\" %>s %b" common |
|
CustomLog "|/bin/sh -c 'cat'" common |
|
|
|
DocumentRoot ${DOC_PATH} |
|
|
|
<Directory ${DOC_PATH}> |
|
Options Indexes FollowSymLinks |
|
AllowOverride All |
|
Order Allow,Deny |
|
Allow from All |
|
Require all granted |
|
</Directory> |
|
|
|
AddHandler php7-script php |
|
AddType application/x-httpd-php .php |
|
DirectoryIndex index.html index.php |
|
|
|
<FilesMatch "\.php$"> |
|
SetHandler application/x-httpd-php |
|
</FilesMatch> |
|
<FilesMatch "\.phps$"> |
|
SetHandler application/x-httpd-php-source |
|
</FilesMatch> |
|
EOF |
|
) |
|
|
|
echo "$APACHECONF" > /tmp/httpd.conf |
|
|
|
function cleanup(){ |
|
echo -en "\n*** Exiting ***\n" |
|
remove_from_hosts "$SITE_NAME" |
|
exit $? |
|
} |
|
|
|
sudo iptables -t nat -A OUTPUT -o lo -p tcp --dport 80 -j REDIRECT --to-port "$PORT" |
|
if [ "$SITE_NAME" != "localhost" ]; then |
|
add_to_hosts "$SITE_NAME" |
|
trap cleanup SIGINT |
|
trap cleanup SIGTERM |
|
fi |
|
apachectl -d "$ROOT_PATH" -f /tmp/httpd.conf -e info -DFOREGROUND |
|
if [ "$SITE_NAME" != "localhost" ]; then |
|
cleanup |
|
fi |