From 3ef82a908a10979d9a4d14e0674902c85b14a99e Mon Sep 17 00:00:00 2001
From: mikka <miklos.martin@gmail.com>
Date: Sun, 2 Sep 2012 15:43:20 +0200
Subject: [PATCH] nginx and php-fpm plugins

---
 plugins/nginx/nginx.plugin.zsh     | 195 +++++++++++++++++++++++++++++
 plugins/nginx/templates/plain_php  |  27 ++++
 plugins/nginx/templates/symfony2   |  27 ++++
 plugins/php-fpm/php-fpm.plugin.zsh |  75 +++++++++++
 plugins/php-fpm/templates/pool     |  11 ++
 5 files changed, 335 insertions(+)
 create mode 100644 plugins/nginx/nginx.plugin.zsh
 create mode 100644 plugins/nginx/templates/plain_php
 create mode 100644 plugins/nginx/templates/symfony2
 create mode 100644 plugins/php-fpm/php-fpm.plugin.zsh
 create mode 100644 plugins/php-fpm/templates/pool

diff --git a/plugins/nginx/nginx.plugin.zsh b/plugins/nginx/nginx.plugin.zsh
new file mode 100644
index 000000000..6dd90c6d5
--- /dev/null
+++ b/plugins/nginx/nginx.plugin.zsh
@@ -0,0 +1,195 @@
+: ${NGINX_DIR:=/etc/nginx}
+: ${NGINX_VHOST_TEMPLATE:=$ZSH/plugins/nginx/templates/symfony2}
+
+if [ $use_sudo -eq 1 ]; then
+    sudo="sudo"
+else
+    sudo=""
+fi
+
+# nginx basic completition
+
+_nginx_get_en_command_list () {
+    ls -a $NGINX_DIR/sites-available | awk '/^[a-z][a-z.-]+$/ { print $1 }'
+}
+
+_nginx_get_dis_command_list () {
+    ls -a $NGINX_DIR/sites-enabled | awk '/^[a-z][a-z.-]+$/ { print $1 }'
+}
+
+_nginx_en () {
+   compadd `_nginx_get_en_command_list`
+}
+
+_nginx_dis () {
+   compadd `_nginx_get_dis_command_list`
+}
+
+# Enabling a site
+en () {
+    if [ ! $1 ]; then
+        echo "\033[337;41m\nThe name of the vhost is required!\n\033[0m";
+        return
+    fi
+    
+    if [ ! -e $NGINX_DIR/sites-available/$1 ]; then
+        echo "\033[31m$1\033[0m doesn't exist";
+        return
+    fi
+
+    if [ ! -e $NGINX_DIR/sites-enabled/$1 ]; then
+  	    $sudo ln -s $NGINX_DIR/sites-available/$1 $NGINX_DIR/sites-enabled/$1;
+	    if [ -e /etc/nginx/sites-enabled/$1 ]; then
+        	echo "\033[32m$1\033[0m successfully enabled";
+        else
+            echo "An error occured during the enabling of \033[31m$1\033[0m";
+        fi
+    else
+        echo "\033[31m$1\033[0m is already enabled";
+    fi
+}
+compdef _nginx_en en
+
+# Disabling a site
+dis () {
+    if [ ! $1 ]; then
+        echo "\033[337;41m\nThe name of the vhost is required!\n\033[0m";
+        return
+    fi
+
+    if [ ! -e $NGINX_DIR/sites-enabled/$1 ]; then
+        echo "\033[31m$1\033[0m doesn't exist";
+    else
+	    $sudo rm -f $NGINX_DIR/sites-enabled/$1;
+	    if [ ! -e $NGINX_DIR/sites-enabled/$1 ]; then
+        	echo "\033[32m$1\033[0m successfully disabled";
+        else
+            echo "An error occured during the disabling of \033[31m$1\033[0m";
+        fi
+    fi
+}
+compdef _nginx_dis dis
+
+# Completition of vhost
+_nginx_get_possible_vhost_list () {
+    ls -a $HOME/www | awk '/^[^.][a-z0-9._]+$/ { print $1 }'
+}
+
+_nginx_vhost () {
+   compadd `_nginx_get_possible_vhost_list`
+}
+
+# Parsing arguments
+vhost () {
+    user=$USER;
+    template=$NGINX_VHOST_TEMPLATE
+    tpl="non_existing_template"
+    enable=1
+    write_hosts=0
+    args=""
+
+    while getopts ":lu:t:nwh" option
+    do
+      case $option in
+        l ) ls $NGINX_DIR/sites-enabled; return ;;
+        u ) user=$OPTARG; args="$args -u $OPTARG" ;;
+        t ) tpl=$OPTARG; args="$args -t $OPTARG" ;;
+        n ) enable=0; args="$args -n" ;;
+        w ) write_hosts=1; args="$args -w" ;;
+        h ) _vhost_usage; return ;;
+      esac
+    done
+    
+    vhost=${@: -1}
+    vhostNotGiven=0
+    
+    if [ ! $vhost ]; then
+        vhostNotGiven=1
+    else
+        if [ $(echo $args | grep -o $vhost) ]; then
+            vhostNotGiven=1
+        fi
+    fi
+    
+    if [ $vhostNotGiven -eq 1 ]; then
+        echo "\033[337;41m\nThe name of the vhost is required!\n\033[0m"
+        return
+    fi
+    
+    if [ -e $ZSH/plugins/nginx/templates/$tpl ]; then
+        template=$ZSH/plugins/nginx/templates/$tpl
+    elif [ -e $tpl ]; then
+        template=$tpl
+    fi
+        
+    _vhost_generate $vhost $user
+    
+    if [ $enable -eq 1 ]; then
+        en $vhost
+    fi
+    
+    if [ $write_hosts -eq 1 ]; then
+        _write_hosts $vhost
+    fi
+}
+compdef _nginx_vhost vhost
+
+_vhost_usage () {
+    echo "Usage: vhost [options] [vhost_name]"
+    echo
+    echo "Options"
+    echo "  -l   Lists enabled vhosts"
+    echo "  -u   Sets the user - defaults to the current user ($USER)"
+    echo "  -t   Sets the template"
+    echo "  -n   Does not enable the generated vhost"
+    echo "  -w   Write the vhost to the /etc/hosts file pointing to 127.0.0.1 (writes it at the end of the first line actually)"
+    echo "  -h   Get this help message"
+    return
+}
+
+# Generate config file
+_vhost_generate () {
+    user=$(cat /etc/passwd | grep $2 | awk -F : '{print $1 }')
+    
+    if [ ! $user ]; then
+      echo "User \033[31m$2\033[0m doesn't have an account on \033[33m$HOST\033[0m"
+      return
+    fi
+
+    echo "Generating \033[32m$1\033[0m vhost for \033[33m$user\033[0m user"
+        
+    user_id=$(cat /etc/passwd | grep $2 | awk -F : '{print $3 }')
+    pool_port=1$user_id
+    
+    conf=$(sed -e 's/{vhost}/'$1'/g' -e 's/{user}/'$user'/g' -e 's/{pool_port}/'$pool_port'/g' $template )
+    
+    echo $conf > $1.tmp
+    $sudo mv $1.tmp $NGINX_DIR/sites-available/$1
+    
+    if [ -e $NGINX_DIR/sites-available/$1 ]; then
+        echo "\033[32m$1\033[0m vhost has been successfully created"
+    else
+        echo "An error occured during the creating of \033[31m$1\033[0m vhost"
+    fi
+}
+
+# Write the /etc/hosts file
+_write_hosts () {
+    temp=$HOME/hosts.temp
+    exec < /etc/hosts
+	while read line
+	do
+		if [ -e $temp ]; then
+			echo "$line" >> $temp;
+		else
+			echo "$line $1" > $temp;		
+		fi
+	done
+	
+	$sudo mv $temp /etc/hosts;
+	
+	"\033[32m$1\033[0m vhost has been successfully written in /etc/hosts"
+}
+
+alias ngt="$sudo nginx -t"
+alias ngr="$sudo service nginx restart"
diff --git a/plugins/nginx/templates/plain_php b/plugins/nginx/templates/plain_php
new file mode 100644
index 000000000..f7995f5d5
--- /dev/null
+++ b/plugins/nginx/templates/plain_php
@@ -0,0 +1,27 @@
+server {
+    root /home/{user}/www/{vhost};
+    index index.php;
+
+    server_name {vhost};
+
+    error_log /var/log/nginx/{vhost}.error.log;
+    access_log /var/log/nginx/{vhost}.access.log;
+
+    location / {
+        try_files $uri $uri/ $uri/index.php;
+    }
+
+    location ~ \.php$ {
+        include fastcgi_params;
+        fastcgi_index index.php;
+        fastcgi_pass   127.0.0.1:{pool_port};
+        fastcgi_split_path_info ^(.+\.php)(/.*)$;
+
+        fastcgi_param  SCRIPT_FILENAME    $document_root$fastcgi_script_name;
+        fastcgi_param  HTTPS              off;
+    }
+
+    location ~ /\.ht {
+        deny all;
+    }
+}
diff --git a/plugins/nginx/templates/symfony2 b/plugins/nginx/templates/symfony2
new file mode 100644
index 000000000..4d5754ca1
--- /dev/null
+++ b/plugins/nginx/templates/symfony2
@@ -0,0 +1,27 @@
+server {
+    root /home/{user}/www/{vhost}/web;
+    index app_dev.php;
+
+    server_name {vhost};
+    client_max_body_size 10M;
+    
+    error_log /var/log/nginx/{vhost}.error.log;
+	access_log /var/log/nginx/{vhost}.access.log;
+    
+    location / {
+        try_files $uri $uri/ /app_dev.php;
+    }
+
+    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:{pool_port}
+    location ~ ^/(app|app_dev|check)\.php(/|$) {
+        fastcgi_pass   127.0.0.1:{pool_port};
+        fastcgi_split_path_info ^(.+\.php)(/.*)$;
+        include fastcgi_params;
+        fastcgi_param  SCRIPT_FILENAME    $document_root$fastcgi_script_name;
+        fastcgi_param  HTTPS              off;
+    }
+
+    location ~ /\.ht {
+        deny all;
+    }
+}
diff --git a/plugins/php-fpm/php-fpm.plugin.zsh b/plugins/php-fpm/php-fpm.plugin.zsh
new file mode 100644
index 000000000..3c095058a
--- /dev/null
+++ b/plugins/php-fpm/php-fpm.plugin.zsh
@@ -0,0 +1,75 @@
+: ${FPM_DIR:=/etc/php5/fpm}
+
+if [ $use_sudo -eq 1 ]; then
+    sudo="sudo"
+else
+    sudo=""
+fi
+
+_fpm_get_possible_pool_list () {
+    cat /etc/passwd | awk -F : '{print $1 }'
+}
+
+_fpm_pool () {
+    compadd `_fpm_get_possible_pool_list`
+    
+}
+
+pool () {
+    while getopts ":lh" option
+    do
+      case $option in
+        l ) ls $FPM_DIR/pool.d; return ;;
+        h ) _pool_usage; return ;;
+       * ) _pool_usage; return ;; # Default.
+      esac
+    done
+    
+    if [ ! $1 ]; then
+      user=$USER
+    else
+      user=$1
+    fi
+    
+    _pool_generate $user
+}
+compdef _fpm_pool pool
+
+_pool_usage () {
+    echo "Usage: pool [options] [user]"
+    echo
+    echo "Options"
+    echo "  -l   Lists fpm pools"
+    echo "  -h   Get this help message"
+    return
+}
+
+_pool_generate () {
+    user=$(cat /etc/passwd | grep $1 | awk -F : '{print $1 }')
+    
+    if [ ! $user ]; then
+      echo "User \033[31m$1\033[0m doesn't have an account on \033[33m$HOST\033[0m"
+      return
+    fi
+
+    group=$(groups $user | cut -d " " -f 3)
+    
+    echo "Generating pool for \033[33m$user\033[0m user with \033[33m$group\033[0m group"
+        
+    user_id=$(cat /etc/passwd | grep $1 | awk -F : '{print $3 }')
+    pool_port=1$user_id
+    : ${FPM_POOL_TEMPLATE:=$ZSH/plugins/php-fpm/templates/pool}
+    
+    conf=$(sed -e 's/{user}/'$user'/g' -e 's/{group}/'$group'/g' -e 's/{pool_port}/'$pool_port'/g' $FPM_POOL_TEMPLATE )
+    
+    echo $conf > $user.conf
+    $sudo mv $user.conf $FPM_DIR/pool.d/$user.conf
+    
+    if [ -e $FPM_DIR/pool.d/$user.conf ]; then
+        echo "Pool for \033[32m$user\033[0m user has been successfully created"
+    else
+        echo "An error occured during the creating of pool for \033[31m$user\033[0m user"
+    fi
+}
+
+alias fpmr="$sudo service php5-fpm restart"
diff --git a/plugins/php-fpm/templates/pool b/plugins/php-fpm/templates/pool
new file mode 100644
index 000000000..80f6693e0
--- /dev/null
+++ b/plugins/php-fpm/templates/pool
@@ -0,0 +1,11 @@
+[{user}]
+user = {user}
+group = {group}
+
+listen = 127.0.0.1:{pool_port}
+
+pm = dynamic
+pm.max_children = 10
+pm.min_spare_servers = 1
+pm.max_spare_servers = 3
+pm.max_requests = 100
-- 
2.21.0