說明:
前后端分離的vue項目控硼,為了解決跨域問題掏导,需要部署到java web項目的resources/static目錄下抗蠢,打包流程:vue打包 >> copy resources >> java打包 >> 上傳服務器 >> 環(huán)境預處理 >> 執(zhí)行 >> 跟蹤鼠锈。
網(wǎng)上查看了大量資料界赔,每一步都是坑婶希,需要做這個的龙考,具有很好的參考價值箱硕。
1筋现、將以下腳本命名為deploy.sh唐础,放在web項目和api項目所在目錄的公共父級(方便找到路徑),并配置相關參數(shù)
2矾飞、執(zhí)行
chmod +x deploy.sh
./deploy.sh
腳本內(nèi)容:
#!/bin/bash
# by labi3285
readonly name='???'
readonly version='0.0.1'
readonly web_path='/???'
readonly web_name='???'
readonly api_env_path='/???'
readonly web_env_path='/???/index'
readonly api_path='/???'
readonly api_jar_name='???.jar'
readonly serve_name='root'
readonly serve_port='8080'
readonly serve_passowrd='???'
readonly serve_host='???.???.???.???'
readonly serve_path="/???"
# 初始化
cd $(dirname $0)
_work_path=$(pwd) # 取到腳本目錄
_web_path="${_work_path}${web_path}"
_web_dist_path="${_web_path}/dist"
_api_path="${_work_path}${api_path}"
_api_static_path="${_api_path}/src/main/resources/static"
_api_jar_file="${_api_path}/build/libs/${api_jar_name}"
_serve_project_path="${serve_path}/${name}"
_serve_project_jar_file="${_serve_project_path}/${version}.jar"
_serve_project_log_file="${_serve_project_path}/${version}.log"
_serve_project_start_sh="${_serve_project_path}/start.sh"
# def 遠程服務器操作
auto_ssh(){
__host=$1
__name=$2
__password=$3
__todo=$4
/usr/bin/expect <<EOD
set timeout 86400
spawn ssh ${__name}@${__host} ${__todo}
expect {
"*yes/no*" {send "yes\r"; exp_continue}
"*password:" {send "$__password\r"; exp_continue}
"*Password:" {send "$__password\r"}
}
EOD
}
# def 上傳遠程服務器
auto_scp() {
__host=$1
__name=$2
__password=$3
__src=$4
__dest=$5
/usr/bin/expect <<EOD
set timeout 86400
spawn scp ${__src} ${__name}@${__host}:${__dest}
expect {
"*yes/no*" {send "yes\r"; exp_continue}
"*password:" {send "$__password\r"; exp_continue}
"*Password:" {send "$__password\r"}
}
EOD
}
# 打包 vue
echo -e "\033[32m vue 打包 \033[0m"
cd ${_web_path}
npm run build
# 復制vue架包到java
echo -e "\033[32m 復制vue架包到java \033[0m"
cp -a "${_web_dist_path}/static" ${_api_static_path}
cp -a "${_web_dist_path}/index.html" ${_api_static_path}
# 打包 api
echo -e "\033[32m java 打包 \033[0m"
cd ${_api_path}
gradle bootJar
# 上傳服務器
echo -e "\033[32m vue 上傳服務器 \033[0m"
auto_ssh ${serve_host} ${serve_name} ${serve_passowrd} "mkdir -p ${_serve_project_path}"
auto_scp ${serve_host} ${serve_name} ${serve_passowrd} ${_api_jar_file} ${_serve_project_jar_file}
# 配置服務腳本
echo -e "\033[32m 配置服務腳本 \033[0m"
touch .service_start_cache.sh
echo "#!/bin/bash" > .service_start_cache.sh
echo "kill -9 \$(netstat -nlp | grep :${serve_port} | awk '{ print \$7 }' | awk -F\"/\" '{ print \$1 }')" >> .service_start_cache.sh
echo "nohup java -jar ${_serve_project_jar_file} >> ${_serve_project_log_file} &" >> .service_start_cache.sh
echo "tail ${_serve_project_log_file}" >> .service_start_cache.sh
auto_scp ${serve_host} ${serve_name} ${serve_passowrd} .service_start_cache.sh ${_serve_project_start_sh}
# 啟動服務
echo -e "\033[32m 啟動服務 \033[0m"
auto_ssh ${serve_host} ${serve_name} ${serve_passowrd} "chmod +x ${_serve_project_start_sh}"
auto_ssh ${serve_host} ${serve_name} ${serve_passowrd} "${_serve_project_start_sh}"
# OK!!
echo -e "\033[32m 完成 \033[0m"
echo -e "\033[32m 上傳jar路徑:${_serve_project_jar_file} \033[0m"
echo -e "\033[32m log路徑:${_serve_project_jar_file} \033[0m"
echo -e "\033[32m start腳本路徑:${_serve_project_start_sh} \033[0m"
echo -e "\033[32m api測試地址:${serve_host}:${serve_port}${api_env_path} \033[0m"
echo -e "\033[32m web測試地址:${serve_host}:${serve_port}${web_env_path} \033[0m"