#!/bin/bash # @author: Seb Dangerfield # http://www.sebdangerfield.me.uk/?p=513 # Created: 11/08/2011 # Modified: 07/01/2012 # Modified: 17/05/2012 # Modify the following to match your system NGINX_CONFIG='/etc/nginx/sites-available' NGINX_SITES_ENABLED='/etc/nginx/sites-enabled' PHP_INI_DIR='/etc/php5/fpm/pool.d' WEB_SERVER_GROUP='www-data' NGINX_INIT='/etc/init.d/nginx' PHP_FPM_INIT='/etc/init.d/php5-fpm' # --------------END SED=`which sed` CURRENT_DIR=`dirname $0` if [ -z $1 ]; then echo "No domain name given" exit 1 fi DOMAIN=$1 # check the domain is valid! PATTERN="^(([a-zA-Z]|[a-zA-Z][-a-zA-Z0-9]*[a-zA-Z0-9])\.)+([A-Za-z]|[A-Za-z][-A-Za-z0-9]*[A-Za-z0-9])$"; if [[ "$DOMAIN" =~ $PATTERN ]]; then DOMAIN=`echo $DOMAIN | tr '[A-Z]' '[a-z]'` echo "Creating hosting for:" $DOMAIN else echo "invalid domain name" exit 1 fi # Create a new user! echo "Please specify the username for this site?" read USERNAME HOME_DIR=$USERNAME adduser $USERNAME # ------- # CentOS: # If you're using CentOS you will need to uncomment the next 3 lines! # ------- #echo "Please enter a password for the user: $USERNAME" #read -s PASS #echo $PASS | passwd --stdin $USERNAME echo "Would you like to change to web root directory (y/n)?" read CHANGEROOT if [ $CHANGEROOT == "y" ]; then echo "Enter the new web root dir (after the public_html/)" read DIR PUBLIC_HTML_DIR='/public_html/'$DIR else PUBLIC_HTML_DIR='/public_html' fi # Now we need to copy the virtual host template CONFIG=$NGINX_CONFIG/$DOMAIN.conf cp $CURRENT_DIR/nginx.vhost.conf.template $CONFIG $SED -i "s/@@HOSTNAME@@/$DOMAIN/g" $CONFIG $SED -i "s#@@PATH@@#\/home\/"$USERNAME$PUBLIC_HTML_DIR"#g" $CONFIG $SED -i "s/@@LOG_PATH@@/\/home\/$USERNAME\/_logs/g" $CONFIG #Modified by Yong: instead of create pid file in /var/run/php-fpm/”$USERNAME”_fpm.sock, #just put it in /var/run/”$USERNAME”_fpm.sock or other place that is not ephemeral by design, #otherwise it will cause fpm startup problem ([ERROR] bind() for address #‘/var/run/php-fpm/**_fpm.sock’ failed: No such file or directory) every time the server reboots. #mkdir -p /var/run/php-fpm/ $SED -i "s#@@SOCKET@@#/var/run/"$USERNAME"_fpm.sock#g" $CONFIG echo "How many FPM servers would you like by default:" read FPM_SERVERS echo "Min number of FPM servers would you like:" read MIN_SERVERS echo "Max number of FPM servers would you like:" read MAX_SERVERS # Now we need to create a new php fpm pool config FPMCONF="$PHP_INI_DIR/$DOMAIN.pool.conf" cp $CURRENT_DIR/pool.conf.template $FPMCONF $SED -i "s/@@USER@@/$USERNAME/g" $FPMCONF $SED -i "s/@@HOME_DIR@@/\/home\/$USERNAME/g" $FPMCONF $SED -i "s/@@START_SERVERS@@/$FPM_SERVERS/g" $FPMCONF $SED -i "s/@@MIN_SERVERS@@/$MIN_SERVERS/g" $FPMCONF $SED -i "s/@@MAX_SERVERS@@/$MAX_SERVERS/g" $FPMCONF MAX_CHILDS=$((MAX_SERVERS+START_SERVERS)) $SED -i "s/@@MAX_CHILDS@@/$MAX_CHILDS/g" $FPMCONF usermod -aG $USERNAME $WEB_SERVER_GROUP chmod g+rx /home/$HOME_DIR chmod 600 $CONFIG ln -s $CONFIG $NGINX_SITES_ENABLED/$DOMAIN.conf # set file perms and create required dirs! mkdir -p /home/$HOME_DIR$PUBLIC_HTML_DIR mkdir /home/$HOME_DIR/_logs mkdir /home/$HOME_DIR/_sessions chmod 750 /home/$HOME_DIR -R chmod 700 /home/$HOME_DIR/_sessions chmod 770 /home/$HOME_DIR/_logs chmod 750 /home/$HOME_DIR$PUBLIC_HTML_DIR chown $USERNAME:$USERNAME /home/$HOME_DIR/ -R $NGINX_INIT reload $PHP_FPM_INIT restart echo -e "\nSite Created for $DOMAIN with PHP support"