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