From 478fbf42ef8abd953a7f6687d5fee4c28fd9862f Mon Sep 17 00:00:00 2001 From: Chris Koeritz Date: Thu, 26 Oct 2017 20:49:19 -0400 Subject: [PATCH] add domain fixes, prototype for apache site adder add_domain updated with more workingness; now actually modifies the configuration files and also seems to work properly. apache site adder is intended to create a new config file for an apache2 website, using some peculiar rules for our storage on a vm that mimics serverpilot storage paths. --- scripts/system/add_apache_site.sh | 117 ++++++++++++++++++++++++++++++ scripts/system/add_domain.sh | 22 +++--- 2 files changed, 126 insertions(+), 13 deletions(-) create mode 100644 scripts/system/add_apache_site.sh diff --git a/scripts/system/add_apache_site.sh b/scripts/system/add_apache_site.sh new file mode 100644 index 00000000..558b418d --- /dev/null +++ b/scripts/system/add_apache_site.sh @@ -0,0 +1,117 @@ +#!/bin/bash + +# creates a new apache website for a specified domain. + +# some convenient defaults for our current usage. + +BASEPATH="/var/www" +SHADOWPATH="/srv/users/serverpilot/apps" +STORAGESUFFIX="/public" + +# this function writes out the new configuration file for the site. +function write_apache_config() +{ + local appname="$1"; shift + local sitename="$1"; shift + local site_config="/etc/apache2/sites-available/${sitename}.conf" + + # check if config file already exists and bail if so. + if [ -f "$site_config" ]; then + echo "The apache configuration file already exists at:" + echo " $site_config" + echo "Please remove this file before proceeding, if it is junk. For example:" + echo " sudo rm $site_config" + exit 1 + fi + + echo "Creating a new apache2 site for $sitename with config file:" + echo " $site_config" + + local fullpath="${BASEPATH}/${appname}${STORAGESUFFIX}" + + # make the storage directory if it's not already present. + if [ ! -d "$fullpath" ]; then + mkdir -p "$fullpath" + if [ $? -ne 0 ]; then + echo "Failed to create the storage directory for $appname in" + echo "the folder: $fullpath" + exit 1 + fi + fi + +echo " + + ServerName ${sitename} +# ServerAlias ${sitename} *.${sitename} + DocumentRoot ${fullpath} + ErrorLog ${APACHE_LOG_DIR}/${sitename}-error.log + CustomLog ${APACHE_LOG_DIR}/${sitename}-access.log combined + Include /etc/apache2/conf-library/basic-options.conf + Include /etc/apache2/conf-library/rewrite-enabling.conf + +" +#fix +# >"$site_config" + +} + +function enable_site() +{ + local sitename="$1"; shift + local site_config="/etc/apache2/sites-available/${sitename}.conf" + + a2ensite "$(basename $site_config)" + if [ $? -ne 0 ]; then + echo "There was a problem enabling the apache config file in:" + echo " $site_config" + echo "Please consult the apache error logs for more details." + exit 1 + fi +} + +function restart_apache() +{ + service apache2 restart + if [ $? -ne 0 ]; then + echo "There was a problem restarting the apache2 service." + echo "Please consult the apache error logs for more details." + exit 1 + fi +} + +# main body of script. + +if (( $EUID != 0 )); then + echo "This script must be run as root or sudo." + exit 1 +fi + +appname="$1"; shift +site="$1"; shift + +if [ -z "$appname" -o -z "$site" ]; then + echo "This script needs to know (1) the appname (application name) for the new" + echo "site and (2) the DNS name for the apache virtual host." + echo "The appname should work as a file-system compatible folder name." + exit 1 +fi + +# make sure there is a symbolic link from the shadow path (that mimics the serverpilot +# storage set up) to the real storage directory. +if [ ! -l "$SHADOWPATH" ]; then + ln -s "$BASEPATH" "$SHADOWPATH" +#hmmm: should we be okay with it if it's a real dir, and assume people are happy? +# this wouldn't work too well if we go plunk down the new thing in /var/www, +# if they are expecting this tool to totally meld with serverpilot. + if [ $? -ne 0 ]; then + echo "The shadow path for mimicking serverpilot could not be created." + echo "Is there a real directory present for this already?" + echo "Path in question is: $SHADOWPATH" + exit 1 + fi +fi + +write_apache_config "$appname" "$site" +enable_site "$site" +restart_apache + diff --git a/scripts/system/add_domain.sh b/scripts/system/add_domain.sh index 00cf6de0..0dabaf2e 100644 --- a/scripts/system/add_domain.sh +++ b/scripts/system/add_domain.sh @@ -52,13 +52,12 @@ function write_new_domain_file() IN NS ${MAIN_NAME_SERVER}. IN MX 10 ${MAIL_SERVER}. -${domain}. IN A ${IP_ADDRESS} +${domain_name}. IN A ${IP_ADDRESS} IN HINFO \"linux server\" \"${DISTRO}\" -" -#fix -# >"$domain_file" +" >"$domain_file" } +# hooks up a new config file into bind's list of zones. function add_zone_for_new_domain() { local domain_name="$1"; shift @@ -68,18 +67,17 @@ function add_zone_for_new_domain() echo "adding a new domain configured by ${domain_file} into" echo "the named.conf.local configuration file." -# need to write the reference to the new conf file in the zone list. - -echo " + # append the reference to the new conf file in the zone list. + echo " zone \"${domain_name}\" in { file \"${domain_file}\"; type master; allow-query { any; }; }; -" -#fix -#>> /etc/bind9/named.conf.local +//////////////////////////////////////////////////////////////////////////// + +" >> /etc/bind/named.conf.local } # adds a new subdomain under a containing domain. @@ -115,9 +113,7 @@ function add_new_subdomain() echo " ${subdomain}.${containing_domain}. IN A ${IP_ADDRESS} IN HINFO \"linux server\" \"${DISTRO}\" -" -#fix -#>> /etc/bind/${containing_domain}.conf +" >> /etc/bind/${containing_domain}.conf } -- 2.34.1