Shell腳本一鍵自動部署項目

                                                                           Shell腳本一鍵自動部署項目

#!/bin/bash
#定義根目錄、代碼倉庫、項目域名信息
read -p '請輸入項目名稱[中文名稱]:'  Chinese_Project_Name
read -p '請輸入項目目錄[eg:/home/wwwroot]:'  webroot
read -p '請輸入代碼倉庫[eg:git格式]:'  git_address
read -p '請輸入項目域名[eg:www.test.com]:'  project_domain_name

#顯示剛纔輸入的根目錄、代碼倉庫、項目域名信息
echo -e "\033[32m您輸入的\033[0m \033[41;30m項目目錄\033[0m \033[32m是:\033[0m\033[45;30m$webroot\033[0m"
echo -e "\033[32m您輸入的\033[0m \033[41;30m代碼倉庫\033[0m \033[32m是:\033[0m\033[45;30m$git_address\033[0m"
echo -e "\033[32m您輸入的\033[0m \033[41;30m項目域名\033[0m \033[32m是:\033[0m\033[45;30m$project_domain_name\033[0m"

#確認根目錄、代碼倉庫、項目域名是否正確,只有正確才執行後續步驟,否則退出
read -r -p "Are You Sure? [Y/n] " input
case $input in
    [yY][eE][sS]|[yY])
		echo -e  "\033[33mYes\033[0m"
		;;
    [nN][oO]|[nN])
		echo -e  "\033[31mNo\033[0m"
		exit 1
       	;;
    *)
		echo -e  "\033[46mInvalid input!!!\033[0m"
		exit 1
		;;
esac

#項目名稱、拉取develop分支代碼、授權www權限
#由git地址截取項目名稱[:/.]即以':'、'/'、'.'爲分隔符
project_name=`echo  $git_address  |   awk  -F  '[:/.]'    '{ print  $6}'`
cd  $webroot

if [ ! -d  $project_name ]
then
   git  clone   -b  develop  $git_address
   chown  -R   www.www   $project_name
else
   echo -e "\033[41;30m$project_name 已經存在!\033[0m"
fi


#定義配置文件所在的目錄
configure_directory="/usr/local/nginx/conf/vhost"
cd $configure_directory

#定義配置VUE框架函數
Configure_VUE_frame()
{
cat >  ${project_domain_name}.conf << EOF
server
    {
        listen 80;
        server_name ${project_domain_name};
        index index.html index.htm;
        root  ${webroot}/${project_name}/dist;

	location / {
    	    try_files \$uri \$uri/ /index.html =404;
	}

	location ~ .*\.(js|css)?$
        {
            expires      12h;
        }

        location ~ /.well-known {
            allow all;
        }

        location ~ /\.
        {
            deny all;
        }

        error_log  /home/wwwlogs/${project_domain_name}.error.log;
    }
EOF
}



#定義配置Laravel框架函數
Configure_Laravel_frame()
{
cat >  ${project_domain_name}.conf << EOF
server {
    listen 80;
    server_name ${project_domain_name};
    index index.html index.htm index.php default.html default.htm default.php;
    root   ${webroot}/${project_name}/public;

    location / {
         try_files \$uri \$uri/ /index.php\$is_args\$args;
    }

    location ~ \.php/?.*$ {
        try_files \$uri /index.php =404;
        fastcgi_pass  unix:/tmp/php-cgi.sock;
        fastcgi_index  index.php;
        fastcgi_param   SCRIPT_FILENAME   \$document_root\$fastcgi_script_name;
        include fastcgi_params;
    }

   location ~ /\.ht {
        deny all;
    }
   error_log  /home/wwwlogs/${project_domain_name}.error.log;
}
EOF
}



#定義配置ThinkPHP框架函數
Configure_ThinkPHP_frame()
{
cat >  ${project_domain_name}.conf << EOF
server
    {
        listen 80;
        #listen [::]:8090;
      	server_name  ${project_domain_name};
        index index.html index.htm index.php default.html default.htm default.php;
        root  ${webroot}/${project_name};

        include other.conf;
        #error_page   404   /404.html;

        # Deny access to PHP files in specific directory
        #location ~ /(wp-content|uploads|wp-includes|images)/.*\.php$ { deny all; }

        include enable-php5.5-pathinfo.conf;
	#include enable-php-pathinfo.conf;

	location ~  \.php$
	{
    		set \$path_info "";
    		set \$real_script_name \$fastcgi_script_name;
        #如果地址與引號內的正則表達式匹配
    		if (\$fastcgi_script_name ~ "^(.+?\.php)(/.+)$") {
        #將文件地址賦值給變量 \$real_script_name
    		set \$real_script_name \$1;
        #將文件地址後的參數賦值給變量 \$path_info
    		set \$path_info \$2;
    		}

        #配置fastcgi的一些參數
    	fastcgi_param SCRIPT_FILENAME \$document_root\$real_script_name;
    	fastcgi_param SCRIPT_NAME \$real_script_name;
    	fastcgi_param PATH_INFO \$path_info;
	}

	if (!-e \$request_filename)
	{
	#地址作爲將參數rewrite到index.php上。
	rewrite ^/(.*)$ /index.php/\$1;
	#rewrite ^/([a-zA-Z0-9_]+)/(.*)$  /\$1/index.php/\$2;
	#若是子目錄則使用下面這句,將subdir改成目錄名稱即可。
	#rewrite ^/(.*)$ /gc2_new_wap/index.php?\$1;
	}

        location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
        {
            expires      30d;
        }

        location ~ .*\.(js|css)?$
        {
            expires      12h;
        }

        location ~ /.well-known {
            allow all;
        }

        location ~ /\.
        {
            deny all;
        }

        error_log  /home/wwwlogs/${project_domain_name}.error.log;
    }
EOF
}



#選擇需要安裝的框架
#cat  << EOF
echo -e "\033[33m*******************************\033[0m"
echo -e "\033[33mThe following is optional!!!\033[0m"
echo -e "\033[33m******************************\033[0m"
echo -e "\033[33m      1) VUE\033[0m"
echo -e "\033[33m      2) Laravel\033[0m"
echo -e "\033[33m      3) ThinkPHP\033[0m"
echo -e "\033[33m      4) Exit\033[0m"
echo -e "\033[33m*******************************\033[0m"
#EOF

read -p "Please enter your chioce:" option
case $option in
1)
  Configure_VUE_frame
  ;;
2)
  Configure_Laravel_frame
  ;;
3)
  Configure_ThinkPHP_frame
  ;;
*)
  echo "Option is inviald."
esac



Create_database()
{
echo -e "\033[33m*******************************\033[0m"
echo -e "\033[33mThe following is optional!!!\033[0m"
echo -e "\033[33m******************************\033[0m"
echo -e "\033[33m  1) 47.99.102.6\033[0m"
echo -e "\033[33m  2) 120.26.106.212\033[0m"
echo -e "\033[33m  3) 112.124.48.228\033[0m"
echo -e "\033[33m  4) 47.111.179.201\033[0m"
echo -e "\033[33m*******************************\033[0m"

#連接指定數據庫的管理員賬號
read -p  "請輸入需要連接的數據庫IP[RDS數據庫不適用]:"  Host
read -p  "請輸入數據庫用戶名[root]:"  User
read -p  "請輸入數據庫密碼:"  Password

#創建數據庫名稱、數據庫賬號、數據庫密碼
read -p  "請輸入需要創建的數據庫名稱:" database_name
read -p  "請輸入需要創建的數據庫賬號:" database_account
read -p  "請輸入需要創建的數據庫密碼:" database_passwd


#顯示需要創建的數據庫名稱、數據庫賬號、數據庫密碼信息
echo -e "\033[32m請輸入需要創建的\033[0m \033[41;30m數據庫名稱\033[0m \033[32m是:\033[0m\033[45;30m$database_name\033[0m"
echo -e "\033[32m請輸入需要創建的\033[0m \033[41;30m數據庫賬號\033[0m \033[32m是:\033[0m\033[45;30m$database_account\033[0m"
echo -e "\033[32m請輸入需要創建的\033[0m \033[41;30m數據庫密碼\033[0m \033[32m是:\033[0m\033[45;30m$database_passwd\033[0m"

#確認數據庫名稱、數據庫名稱、數據庫名稱信息,只有正確才執行後續步驟,否則退出
read -r -p "Are You Sure? [Y/n] " input
case $input in
    [yY][eE][sS]|[yY])
                echo -e  "\033[33mYes\033[0m"
                ;;
    [nN][oO]|[nN])
                echo -e  "\033[31mNo\033[0m"
                ;;
    *)
                echo -e  "\033[46mInvalid input!!!\033[0m"
                ;;
esac

#創建數據庫、授權sql語句
exec_sql_command="create  database ${database_name}; grant all  on  ${database_name}.*  to  ${database_account}@'%'  identified by '${database_passwd}'; flush privileges;"
mysql -h$Host -u$User -p$Password  -e "${exec_sql_command}"
}

#是否創建數據庫
read -r -p "Create database or not? [Y/n] " input
case $input in
    [yY][eE][sS]|[yY])
                Create_database
                ;;
    [nN][oO]|[nN])
                echo -e  "\033[31mNo\033[0m"
                exit 1
        ;;
    *)
                echo -e  "\033[46mInvalid input!!!\033[0m"
                exit 1
                ;;
esac


#彙總所有相關信息,輸出到指定文檔中
echo "#########################################${Chinese_Project_Name}##############################################"   >> /home/yangq/all_project_information.txt
echo -e "\033[32m${Chinese_Project_Name}的\033[0m \033[41;30m項目目錄\033[0m \033[32m是:\033[0m\033[45;30m$webroot\033[0m"  >> /home/yangq/all_project_information.txt
echo -e "\033[32m${Chinese_Project_Name}的\033[0m \033[41;30m代碼倉庫\033[0m \033[32m是:\033[0m\033[45;30m$git_address\033[0m" >> /home/yangq/all_project_information.txt
echo -e "\033[32m${Chinese_Project_Name}的\033[0m \033[41;30m項目域名\033[0m \033[32m是:\033[0m\033[45;30m$project_domain_name\033[0m" >> /home/yangq/all_project_information.txt
echo -e "\033[32m${Chinese_Project_Name}的\033[0m \033[41;30m配置文件\033[0m \033[32m是:\033[0m\033[45;30m${configure_directory}/${project_domain_name}.conf\033[0m" >> /home/yangq/all_project_information.txt
echo -e "\033[32m${Chinese_Project_Name}的\033[0m \033[41;30m數據庫名稱\033[0m \033[32m是:\033[0m\033[45;30m$database_name\033[0m" >> /home/yangq/all_project_information.txt
echo -e "\033[32m${Chinese_Project_Name}的\033[0m \033[41;30m數據庫賬號\033[0m \033[32m是:\033[0m\033[45;30m$database_account\033[0m" >> /home/yangq/all_project_information.txt
echo -e "\033[32m${Chinese_Project_Name}的\033[0m \033[41;30m數據庫密碼\033[0m \033[32m是:\033[0m\033[45;30m$database_passwd\033[0m" >> /home/yangq/all_project_information.txt
echo "##############################################################################################################"  >> /home/yangq/all_project_information.txt
echo ""  >> /home/yangq/all_project_information.txt

 

 
發佈了23 篇原創文章 · 獲贊 16 · 訪問量 7772
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章