Created
September 16, 2016 19:29
-
-
Save Nks/6cc6457a33e5851da35b083b1b490afe to your computer and use it in GitHub Desktop.
Automatically creating new virtual hosts for nginx with support of the php-fpm
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
# @author: Seb Dangerfield | |
# http://www.sebdangerfield.me.uk/?p=513 | |
# Created: 11/08/2011 | |
# Modified: 07/01/2012 | |
# Modified: 27/11/2012 | |
# @author Zhdanov Vladislav | |
# https://github.com/nks | |
# Modified 16/09/2016 | |
# Modify the following to match your system | |
NGINX_CONFIG='/etc/nginx/sites-available' | |
NGINX_SITES_ENABLED='/etc/nginx/sites-enabled' | |
NGINX_LISTEN_IP_PORT='192.168.0.100:80' | |
PHP_INI_DIR='/etc/php-fpm.d' | |
WEB_SERVER_GROUP='nginx' | |
NGINX_INIT='service nginx' | |
PHP_FPM_INIT='service php-fpm' | |
MOUNT_DIR='/mnt/websites/' | |
# --------------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-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]*[a-zA-Z0-9])\.)*([A-Za-z0-9]|[A-Za-z0-9][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 | |
if [ -z $USERNAME ]; then | |
echo "Username required" | |
exit 1 | |
fi | |
getent passwd $USERNAME > /dev/null 2>&1 | |
USERNAME_EXISTS=$?; | |
echo $USERNAME_EXISTS | |
if [ $USERNAME_EXISTS -eq 0 ]; then | |
echo "User already exists." | |
else | |
echo "The user does not exist. Creating..." | |
adduser $USERNAME | |
echo "Please enter a password for the user: $USERNAME" | |
read -s PASS | |
echo $PASS | passwd --stdin $USERNAME | |
fi | |
echo "Would you like to change to web root directory (y/n)?" | |
read CHANGEROOT | |
if [ [$CHANGEROOT == "y"] ]; then | |
read -e -p "Enter the new web root dir (after the public_html/)" DIR | |
PUBLIC_HTML_DIR='/public_html/'$DIR | |
else | |
PUBLIC_HTML_DIR='/public_html' | |
fi | |
read -e -p "Listen IP for the nginx: " -i $NGINX_LISTEN_IP_PORT NGINX_LISTEN_IP_PORT | |
# Now we need to copy the virtual host template | |
CONFIG=$NGINX_CONFIG/$DOMAIN.conf | |
cp $NGINX_CONFIG/nginx.vhost.conf.template $CONFIG | |
$SED -i "s/@@LISTEN_IP_PORT@@/$NGINX_LISTEN_IP_PORT/g" $CONFIG | |
$SED -i "s/@@HOSTNAME@@/$DOMAIN/g" $CONFIG | |
$SED -i "s#@@PATH@@#\/home\/"$USERNAME"\/web\/"$DOMAIN$PUBLIC_HTML_DIR"#g" $CONFIG | |
$SED -i "s/@@LOG_PATH@@/\/home\/"$USERNAME"\/web\/"$DOMAIN"\/logs/g" $CONFIG | |
$SED -i "s#@@SOCKET@@#/var/run/php5-"$DOMAIN".sock#g" $CONFIG | |
read -e -p "How many FPM servers would you like by default:" -i 5 FPM_SERVERS | |
if [ -z $FPM_SERVERS ]; then | |
echo "Using default 5" | |
FPM_SERVERS=5 | |
fi | |
read -e -p "Min number of FPM servers would you like:" -i 5 MIN_SERVERS | |
if [ -z $MIN_SERVERS ]; then | |
echo "Using default 5" | |
MIN_SERVERS=5 | |
fi | |
read -e -p "Max number of FPM servers would you like:" -i 15 MAX_SERVERS | |
if [ -z $MAX_SERVERS ]; then | |
echo "Using default 15" | |
MAX_SERVERS=15 | |
fi | |
# Now we need to create a new php fpm pool config | |
FPMCONF="$PHP_INI_DIR/$DOMAIN.pool.conf" | |
cp $PHP_INI_DIR/pool.conf.template $FPMCONF | |
$SED -i "s/@@DOMAIN@@/$DOMAIN/g" $FPMCONF | |
$SED -i "s/@@USER@@/$USERNAME/g" $FPMCONF | |
$SED -i "s/@@HOME_DIR@@/$(echo /home/"$USERNAME"/web/"$DOMAIN$PUBLIC_HTML_DIR" | sed -e 's/\\/\\\\/g; s/\//\\\//g; s/&/\\\&/g')/g" $FPMCONF | |
$SED -i "s/@@MOUNT_DIR@@/$(echo $MOUNT_DIR$HOME_DIR"/web/"$DOMAIN$PUBLIC_HTML_DIR | sed -e 's/\\/\\\\/g; s/\//\\\//g; s/&/\\\&/g')/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/web | |
mkdir -p $MOUNT_DIR$HOME_DIR/web/$DOMAIN/$PUBLIC_HTML_DIR | |
#mkdir -p /home/$HOME_DIR$PUBLIC_HTML_DIR | |
ln -s $MOUNT_DIR$HOME_DIR/web/$DOMAIN /home/$HOME_DIR/web/ | |
chown -R $USERNAME:$USERNAME $MOUNT_DIR$HOME_DIR | |
mkdir /home/$HOME_DIR/web/$DOMAIN/logs | |
chmod 750 /home/$HOME_DIR -R | |
chmod 770 /home/$HOME_DIR/web/$DOMAIN/logs | |
chmod 750 /home/$HOME_DIR/web/$DOMAIN/$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" |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
server { | |
listen @@LISTEN_IP_PORT@@; | |
server_name @@HOSTNAME@@; | |
root "@@PATH@@"; | |
index index.php index.html; | |
client_max_body_size 200m; | |
access_log @@LOG_PATH@@/access.log; | |
error_log @@LOG_PATH@@/error.log; | |
if ($http_user_agent ~* (Baiduspider|webalta|nikto|wkito|pikto|scan|acunetix|morfeus|webcollage|youdao) ) { | |
return 401; | |
} | |
if ($http_user_agent ~* (HTTrack|clshttp|archiver|loader|email|harvest|extract|grab|miner) ) { | |
return 401; | |
} | |
location / { | |
try_files $uri $uri/ /index.php$uri?$args; | |
} | |
location ~ "^(.+\.php)($|/)" { | |
fastcgi_split_path_info ^(.+\.php)(.*)$; | |
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; | |
fastcgi_param SCRIPT_NAME $fastcgi_script_name; | |
fastcgi_param PATH_INFO $fastcgi_path_info; | |
fastcgi_param SERVER_NAME $host; | |
if ($uri !~ "^/uploads/") { | |
fastcgi_pass unix:@@SOCKET@@; | |
} | |
include fastcgi_params; | |
} | |
location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ { | |
expires max; | |
log_not_found off; | |
access_log off; | |
} | |
location ~* \.(html|htm)$ { | |
expires 30m; | |
} | |
location ~* /\.(ht|git|svn) { | |
deny all; | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
[@@DOMAIN@@] | |
listen = /var/run/php5-@@DOMAIN@@.sock | |
listen.allowed_clients = 127.0.0.1 | |
user = @@USER@@ | |
group = @@USER@@ | |
listen.owner = @@USER@@ | |
listen.group = @@USER@@ | |
;rlimit_core = unlimited | |
pm = dynamic | |
pm.max_children = @@MAX_CHILDS@@ | |
pm.start_servers = @@START_SERVERS@@ | |
pm.min_spare_servers = @@MIN_SERVERS@@ | |
pm.max_spare_servers = @@MAX_SERVERS@@ | |
env[HOSTNAME] = $HOSTNAME | |
env[PATH] = /usr/local/bin:/usr/bin:/bin | |
env[TMP] = /tmp | |
env[TMPDIR] = /tmp | |
env[TEMP] = /tmp | |
php_admin_value[session.save_path] = "/dev/shm" | |
php_admin_value[open_basedir] = "@@HOME_DIR@@:@@MOUNT_DIR@@:/usr/share/pear:/usr/share/php:/tmp:/dev/shm" |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
How to use
create_host_php.sh
everywhere where you wantnginx.vhost.conf.template
to/etc/nginx/sites-available/
pool.conf.template
to/etc/php-fpm.d/
create_host_php.sh
variables