diff --git a/product-deploy.sh b/product-deploy.sh index 75d4277c501d090d30a9741550823e67ce3013c3..1682b33d0090dfdd9f7040d72d9569c5a5370cb1 100644 --- a/product-deploy.sh +++ b/product-deploy.sh @@ -50,6 +50,7 @@ MYSQL_SERVICE="${SERVICE_PATH}/mysql.service" RABBITMQ="rabbitmq" RABBIT_CENTOS_FILENAME="rabbitmq-server-3.9.16-1.el7.noarch.rpm" ELANG_CENTOS_FILENAME="erlang-23.3.4.11-1.el7.x86_64.rpm" +RABBITMQ_IP="127.0.0.1" RABBITMQ_USER="taxi_mq" RABBITMQ_PASSWORD="admin@2020" RABBITMQ_CONF_PATH="/etc/rabbitmq/" @@ -67,10 +68,16 @@ CDATE=$(date "+%Y-%m-%d") CTIME=$(date "+%H-%M-%S") NACOS="nacos" +NACOS_HOST="127.0.0.1" NACOS_FILENAME="nacos-server-2.1.1.tar.gz" NACOS_SERVICE="${SERVICE_PATH}/${NACOS}.service" NACOS_EXECPATH="${OPT_PATH}/${NACOS}" +# 椤圭洰閮ㄧ讲骞冲彴 +SETUP_PROJECT_PLATFORM="setup-project-manager" +SETUP_PROJECT_PLATFORM_FILENAME="${SETUP_PROJECT_PLATFORM}.tar.gz" +SETUP_PROJECT_PLATFORM_SERVICE="${SERVICE_PATH}/${SETUP_PROJECT_PLATFORM}.service" +SETUP_PROJECT_PLATFORM_EXECPATH="${PUBLISH_PATH}/${SETUP_PROJECT_PLATFORM}" #鍔犻攣 shell_lock() { @@ -87,8 +94,6 @@ writelog() { echo ${LOGINFO} } - - check_cpu() { cpu_info=$(arch) writelog ${cpu_info} @@ -119,10 +124,9 @@ setup_java() { echo "export JRE_HOME=$JAVA_HOME/jre" >>/etc/profile echo "export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib" >>/etc/profile echo "export PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin" >>/etc/profile - source /etc/profile #浣块厤缃珛鍗崇敓鏁� #妫€鏌ava瀹夎鍜岄厤缃� cd $BASEDIR - writelog "setup java finish!" + writelog "JAVA 鐜杞欢瀹夎瀹屾垚" } setup_redis() { @@ -161,7 +165,7 @@ WantedBy=multi-user.target systemctl daemon-reload systemctl start redis - writelog "setup redis finish" + writelog "REDIS鐜杞欢瀹夎瀹屾垚锛�" } setup_mysql() { @@ -188,7 +192,7 @@ socket=/tmp/mysql.sock port = ${MYSQL_PORT} sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES symbolic-links=0 -max_connections=400 +max_connections=800 innodb_file_per_table=1 #琛ㄥ悕瀛樺偍鍦ㄧ鐩樻槸灏忓啓鐨勶紝浣嗘槸姣旇緝鐨勬椂鍊欐槸涓嶅尯鍒嗗ぇ灏忓啓 lower_case_table_names=1 @@ -269,16 +273,12 @@ setup_rabbitmq() { rabbitmqctl set_user_tags ${RABBITMQ_USER} administrator # 璁剧疆鐢ㄦ埛瑙掕壊,鍒嗛厤鎿嶄綔鏉冮檺 rabbitmqctl set_permissions -p / ${RABBITMQ_USER} ".*" ".*" ".*" # 涓虹敤鎴锋坊鍔犺祫婧愭潈闄�(鎺堜簣璁块棶铏氭嫙鏈烘牴鑺傜偣鐨勬墍鏈夋潈闄�) - - } setup_nginx() { writelog "setup nginx" - writelog "stop and remove nginx" systemctl stop nginx - writelog "centos nginx clear" yum remove nginx writelog "nginx depend install" yum -y install pcre-devel openssl openssl-devel gd-devel gcc gcc-c++ @@ -295,7 +295,7 @@ setup_nginx() { make make install - cp -a ${BASEDIR}/release/conf/${NGINX}.conf ${NGINX_CONF} + /bin/cp -arf ${BASEDIR}/release/conf/${NGINX}.conf ${NGINX_CONF} echo "[Unit] Description=${NGINX} @@ -322,6 +322,21 @@ setup_nginx() { } + +setup_font() { + writelog "瀛椾綋瀹夎..." + yum install -y fontconfig mkfontscale + + tar -zvxf $BASEDIR/soft/font/Fonts.tar.gz -C /usr/share/fonts + + chmod -R 755 /usr/share/fonts/Fonts + mkfontscale + mkfontdir + fc-cache -f -v + writelog "瀛椾綋瀹夎瀹屾垚" + +} + clear_deploy() { PROJECT_NAME=$1 SERVICE=$2 @@ -331,11 +346,12 @@ clear_deploy() { rm -rf ${EXECPATH} rm -f ${NGINX_CONF_PATH}/${PROJECT_NAME}.conf - mkdir -p ${EXECPATH} + if [ ! -d ${EXECPATH} ]; then + mkdir -p ${EXECPATH} + chmod -R 755 $EXECPATH + fi } - - init_setup() { writelog "linux install and update" @@ -343,18 +359,32 @@ init_setup() { yum install -y gcc yum install -y socat - } init_deploy() { - writelog "init_deploy..." - mkdir -p ${PUBLISH_PATH} - chmod -R 755 $PUBLISH_PATH + writelog "鍒涘缓鏂囦欢鐩綍..." + + if [ ! -d ${OPT_PATH} ]; then + mkdir -p ${OPT_PATH} + chmod -R 755 $OPT_PATH + fi - mkdir -p /mortals/app/data - mkdir -p /mortals/app/logs - chmod -R 755 /mortals - writelog "init_deploy finish" + if [ ! -d ${PUBLISH_PATH} ]; then + mkdir -p ${PUBLISH_PATH} + chmod -R 755 $PUBLISH_PATH + fi + + if [ ! -d "/mortals/app/data" ]; then + mkdir -p /mortals/app/data + chmod -R 755 /mortals + fi + + if [ ! -d "/mortals/app/logs" ]; then + mkdir -p /mortals/app/logs + chmod -R 755 /mortals + fi + + writelog "鍒涘缓鏂囦欢鐩綍瀹屾垚" } @@ -380,6 +410,50 @@ build_service() { } +build_nginx_mysql_stream() { + # upstream upstreams_mysql { + # server 192.168.106.7:3306 max_fails=3 fail_timeout=30s; + # } + # server { + # listen 1208; + # proxy_connect_timeout 5s; + # proxy_timeout 30s; + # proxy_pass 192.168.10.151:3306; #闇€瑕佷唬鐞嗙殑绔彛 + # proxy_pass 192.168.106.7:3306 max_fails=5 fail_timeout=30s; + # } + SERVICE=$1 + echo " server {" >${SERVICE} + echo " listen 3306;" >>${SERVICE} + echo " proxy_connect_timeout 10s;" >>${SERVICE} + echo " proxy_timeout 30s;" >>${SERVICE} + echo " proxy_pass ${MYSQL_HOST}:${MYSQL_PORT};" >>${SERVICE} + echo " }" >>${SERVICE} + writelog "mysql tcp浠g悊鍒涘缓瀹屾垚" + +} + +build_nginx_redis_stream() { + # upstream upstreams_mysql { + # server 192.168.106.7:3306 max_fails=3 fail_timeout=30s; + # } + # server { + # listen 1208; + # proxy_connect_timeout 5s; + # proxy_timeout 30s; + # proxy_pass 192.168.10.151:3306; #闇€瑕佷唬鐞嗙殑绔彛 + # proxy_pass 192.168.106.7:3306 max_fails=5 fail_timeout=30s; + # } + SERVICE=$1 + echo " server {" >${SERVICE} + echo " listen ${REDIS_HOST};" >>${SERVICE} + echo " proxy_connect_timeout 10s;" >>${SERVICE} + echo " proxy_timeout 30s;" >>${SERVICE} + echo " proxy_pass ${REDIS_HOST}:${REDIS_HOST};" >>${SERVICE} + echo " }" >>${SERVICE} + writelog "mysql tcp浠g悊鍒涘缓瀹屾垚" + +} + start_service_and_nginx() { PROJECT_NAME=$1 systemctl enable ${PROJECT_NAME} @@ -394,16 +468,31 @@ start_service_and_nginx() { } nacos_deploy() { - writelog "${NACOS}_deploy..." + writelog "寮€濮嬪畨瑁匩ACOS" + #writelog "鍒ゆ柇褰撳墠NACOS 鐨処P鏄惁宸茬粡淇敼锛屽鏋滀慨鏀逛簡锛屽垯閲嶆柊鐢熸垚閰嶇疆鏂囦欢 IP:$NACOS_HOST" + #writelog "鍒ゆ柇褰撳墠mysql 鐨処P鏄惁宸茬粡淇敼锛屽鏋滀慨鏀逛簡锛屽垯閲嶆柊鐢熸垚閰嶇疆鏂囦欢 IP:$MYSQL_HOST" + if [ "$MYSQL_HOST" != "127.0.0.1" ]; then + writelog "鍒ゆ柇褰撳墠mysql 鐨処P宸茬粡淇敼锛屽垯閲嶆柊鐢熸垚閰嶇疆鏂囦欢 IP:$MYSQL_HOST" + build_nginx_mysql_stream $NGINX_CONF_PATH/mysql_stream.stream + #todo 娣诲姞nginx 閽堝褰撳墠ip鐨剆ql stream浠g悊 + fi + #鏌ョ湅杩涚▼鏄惁瀛樺湪锛屽鏋滃瓨鍦� 鍒欎笉瀹夎 + project_status=$(systemctl status "${NACOS}" | grep Active | awk '{print $2}') + if [ -n "$project_status" ]; then + echo "NACOS椤圭洰宸茬粡瀹夎,鐘舵€�: $project_status" + return + fi + rm -rf ${NACOS_SERVICE} rm -rf ${NACOS_EXECPATH} mkdir -p ${NACOS_EXECPATH} - writelog "tar -zvxf $BASEDIR/release/nacos/${NACOS_FILENAME} -C ${NACOS_EXECPATH} --strip-components 3" - tar -zvxf $BASEDIR/release/nacos/${NACOS_FILENAME} -C ${NACOS_EXECPATH} --strip-components 3 - writelog "${NACOS}_deploy init db..." - writelog " mysql -h${MYSQL_HOST} -P${MYSQL_PORT} -u${MYSQL_USER} -p${MYSQL_PASSWORD} <${NACOS_EXECPATH}/db/nacos.sql" - mysql -h${MYSQL_HOST} -P${MYSQL_PORT} -u${MYSQL_USER} -p${MYSQL_PASSWORD} <${NACOS_EXECPATH}/db/nacos.sql + writelog "tar -zvxf $BASEDIR/release/nacos/${NACOS_FILENAME} -C ${NACOS_EXECPATH} --strip-components 1" + tar -zvxf $BASEDIR/release/nacos/${NACOS_FILENAME} -C ${NACOS_EXECPATH} --strip-components 1 + writelog "NACOS 瀵煎叆鏁版嵁搴撲腑..." + writelog " mysql -h${MYSQL_HOST} -P${MYSQL_PORT} -u${MYSQL_USER} -p${MYSQL_PASSWORD} <./db/nacos.sql" + mysql -h${MYSQL_HOST} -P${MYSQL_PORT} -u${MYSQL_USER} -p${MYSQL_PASSWORD} <./db/nacos.sql + writelog "鍒涘缓NACOS鍚姩鏈嶅姟..." echo "" >$NACOS_SERVICE echo "[Unit]" >>$NACOS_SERVICE echo "Description=nacos" >>$NACOS_SERVICE @@ -418,24 +507,60 @@ nacos_deploy() { echo "" >>$NACOS_SERVICE echo "[Install]" >>$NACOS_SERVICE echo "WantedBy=multi-user.target" >>$NACOS_SERVICE - writelog "NACOS_SERVICE鍒涘缓瀹屾垚!" - systemctl enable ${NACOS} + chmod -R 755 $NACOS_EXECPATH + systemctl enable $NACOS_SERVICE systemctl daemon-reload systemctl stop ${NACOS} && systemctl start ${NACOS} - project_status=$(systemctl status "${PROJECT_NAME}" | grep Active | awk '{print $2}') + writelog "NACOS_SERVICE鍒涘缓鍚姩瀹屾垚!" + project_status=$(systemctl status "${NACOS}" | grep Active | awk '{print $2}') jcpid=$(ps -ef | grep -v "grep" | grep "${NACOS} " | awk '{print $2}') writelog "${NACOS}鏈嶅姟鍚姩!pid is ${jcpid},status is ${project_status}" } +setup_project_deploy() { + writelog "寮€濮嬪畨瑁呴」鐩儴缃插钩鍙�" + #writelog "鍒ゆ柇褰撳墠NACOS 鐨処P鏄惁宸茬粡淇敼锛屽鏋滀慨鏀逛簡锛屽垯閲嶆柊鐢熸垚閰嶇疆鏂囦欢 IP:$NACOS_HOST" + + if [ "$MYSQL_HOST" != "127.0.0.1" ]; then + writelog "鍒ゆ柇褰撳墠mysql 鐨処P宸茬粡淇敼锛屽垯閲嶆柊鐢熸垚閰嶇疆鏂囦欢 IP:$MYSQL_HOST" + build_nginx_mysql_stream $NGINX_CONF_PATH/mysql_stream.stream + fi + + project_status=$(systemctl status "${SETUP_PROJECT_PLATFORM}" | grep Active | awk '{print $2}') + if [ -n "$project_status" ]; then + writelog "宸ョ▼宸茬粡瀹夎,鐘舵€�: $project_status" + return + fi + + clear_deploy ${SETUP_PROJECT_PLATFORM} ${SETUP_PROJECT_PLATFORM_SERVICE} ${SETUP_PROJECT_PLATFORM_EXECPATH} + writelog "椤圭洰瀹夎骞冲彴娓呯悊瀹屾垚" + writelog "椤圭洰瀹夎骞冲彴閮ㄧ讲涓�..." + tar -zvxf ${BASEDIR}/release/${SETUP_PROJECT_PLATFORM}/${SETUP_PROJECT_PLATFORM_FILENAME} -C ${PUBLISH_PATH} + + writelog "椤圭洰瀹夎骞冲彴瀵煎叆鏁版嵁搴撲腑..." + writelog " mysql -h${MYSQL_HOST} -P${MYSQL_PORT} -u${MYSQL_USER} -p${MYSQL_PASSWORD} <./db/setup.sql" + mysql -h${MYSQL_HOST} -P${MYSQL_PORT} -u${MYSQL_USER} -p${MYSQL_PASSWORD} <./db/setup.sql + writelog "椤圭洰瀹夎骞冲彴瀵煎叆鏁版嵁搴撳畬鎴愶紒" + writelog "鍒涘缓椤圭洰鍚姩鏈嶅姟..." + build_service ${SETUP_PROJECT_PLATFORM} ${SETUP_PROJECT_PLATFORM_SERVICE} ${SETUP_PROJECT_PLATFORM_EXECPATH} + chmod -R 755 $PUBLISH_PATH + systemctl enable $SETUP_PROJECT_PLATFORM + systemctl daemon-reload + systemctl stop ${SETUP_PROJECT_PLATFORM} && systemctl start ${SETUP_PROJECT_PLATFORM} + writelog "瀹夎骞冲彴鏈嶅姟鍒涘缓鍚姩瀹屾垚!" + project_status=$(systemctl status "${SETUP_PROJECT_PLATFORM}" | grep Active | awk '{print $2}') + jcpid=$(ps -ef | grep -v "grep" | grep "${SETUP_PROJECT_PLATFORM} " | awk '{print $2}') + writelog "瀹夎骞冲彴鏈嶅姟鍚姩!pid is ${jcpid},status is ${project_status}" +} rollback() { - echo "鍔熻兘鏈疄鐜帮紒" + writelog "鍔熻兘鏈疄鐜帮紒" } back_menu() { - echo "鍔熻兘鏈疄鐜帮紒" + writelog "鍔熻兘鏈疄鐜帮紒" } program_deploy() { @@ -444,13 +569,14 @@ program_deploy() { setup_mysql setup_nginx setup_redis + setup_font setup_rabbitmq writelog "system setup finish" } project_deploy() { - init_deploy #鍒濆鍖栨枃浠剁洰褰曢儴鍒� - nacos_deploy #nacos閮ㄧ讲 + init_deploy #鍒濆鍖栨枃浠剁洰褰曢儴鍒� + nacos_deploy #nacos閮ㄧ讲 setup_project_deploy #椤圭洰閮ㄧ讲骞冲彴 } @@ -468,6 +594,10 @@ function menu() { #鏄剧ず鑿滃崟 4.redis杩炴帴閰嶇疆 + 5.rabbitmq杩炴帴閰嶇疆 + + 6.nacos杩炴帴閰嶇疆 + 0.閫€鍑� @@ -491,7 +621,9 @@ function submenu() { #鏄剧ず瀛愯彍鍗� 5.nginx瀹夎 - 6.鍏ㄩ儴瀹夎 + 6.瀛椾綋瀹夎 + + 7.鍏ㄩ儴瀹夎 9.鏇存柊Linux绯荤粺 @@ -502,7 +634,6 @@ function submenu() { #鏄剧ず瀛愯彍鍗� eof } - function num() { #閫夐」 read -p "璇疯緭鍏ユ偍闇€瑕佹搷浣滅殑椤圭洰: " number case $number in @@ -513,8 +644,17 @@ function num() { #閫夐」 done ;; 2) - project_deploy - ;; + project_deploy + ;; + 3) + mysql_config + ;; + 4) + redis_config + ;; + 5) + rabbitmq_config + ;; 5) rollback ;; @@ -530,21 +670,29 @@ function subnum() { #閫夐」 read -p "璇疯緭鍏ユ偍闇€瑕佸畨瑁呯殑鐜杞欢: " number case $number in 1) + #Java setup_java ;; 2) + #mysql setup_mysql ;; 3) + #redis setup_redis ;; 4) + #rabbitmq setup_rabbitmq ;; 5) + #nginx setup_nginx ;; 6) + setup_font + ;; + 7) program_deploy ;; 9) @@ -560,13 +708,110 @@ function subnum() { #閫夐」 esac } +function mysql_config() { #mysql閰嶇疆 + while true; do + read -p "榛樿$MYSQL_HOST锛岃杈撳叆鏁版嵁搴撹繛鎺p: " ip_address + #绌虹櫧杈撳叆锛岄粯璁p + if [ "$ip_address" = "" ]; then + ip_address=$MYSQL_HOST + break + fi + check_ip $ip_address + [ $? -eq 0 ] && break + done + + while true; do + read -p "榛樿绔彛鍙�$MYSQL_PORT锛岃杈撳叆鏁版嵁搴撹繛鎺ョ鍙�: " port + if [ "$port" = "" ]; then + port=$MYSQL_PORT + break + fi + if [[ $port -gt 1025 && $port -lt 65534 ]]; then + break + fi + done + # read -p "榛樿鐢ㄦ埛$MYSQL_USER锛岃杈撳叆鏁版嵁搴撶敤鎴�: " db_user + #read -p "榛樿瀵嗙爜$MYSQL_PASSWORD锛岃杈撳叆鏁版嵁搴撳瘑鐮�: " db_password + + #楠岃瘉port + MYSQL_HOST=$ip_address + MYSQL_PORT=$port + #MYSQL_USER=$db_user + #MYSQL_PASSWORD=$db_password + echo "鏈湴鏁版嵁搴撹繛鎺ュ凡缁忎慨鏀逛负:$MYSQL_HOST $MYSQL_PORT $MYSQL_USER $MYSQL_PASSWORD" +} + +function redis_config() { #redis閰嶇疆 闈炴湰鏈篿p 娣诲姞nginx 浠g悊锛屼唬鐞嗙殑ip涓鸿緭鍏ョ殑ip + while true; do + read -p "榛樿$REDIS_HOST锛岃杈撳叆redis杩炴帴ip: " ip_address + if [ "$ip_address" = "" ]; then + ip_address=$REDIS_HOST + break + fi + check_ip $ip_address + [ $? -eq 0 ] && break + done + + while true; do + read -p "榛樿绔彛鍙�$REDIS_PORT锛岃杈撳叆redis杩炴帴绔彛: " port + if [ "$port" = "" ]; then + port=$REDIS_PORT + break + fi + if [[ $port -gt 1025 && $port -lt 65534 ]]; then + writelog "杈撳叆鐨勭鍙e彿: $port" + break + fi + done + REDIS_HOST=$ip_address + REDIS_PORT=$port + #read -p "榛樿瀵嗙爜$REDIS_PASSWORD锛岃杈撳叆redis瀵嗙爜: " db_password + writelog "鏈湴redis杩炴帴宸茬粡淇敼涓�:$REDIS_HOST $REDIS_PORT" +} + +function rabbitmq_config() { #rabbitmq閰嶇疆 + + while true; do + read -p "榛樿$RABBITMQ_IP锛岃杈撳叆rabbitmq杩炴帴ip: " ip_address + check_ip $ip_address + [ $? -eq 0 ] && break + done + + writelog "鏈湴rabbitmq杩炴帴ip宸茬粡淇敼涓�:$RABBITMQ_IP " +} + +function check_ip() { + local IP=$1 + echo $IP + VALID_CHECK=$(echo $IP | awk -F. '$1<=255&&$2<=255&&$3<=255&&$4<=255{print "yes"}') + if echo $IP | grep -E "^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$" >/dev/null; then + if [ $VALID_CHECK == "yes" ]; then + # echo "IP $IP available!" + return 0 + else + # echo "IP $IP not available!" + return 1 + fi + else + #echo "IP format error!" + return 1 + fi +} #涓诲嚱鏁� main() { if [ -f ${LOCK_FILE} ]; then - echo "Deploy is running" && exit + writelog "Deploy is running" && exit fi + #鍒ゆ柇鏄惁鍒濆瀹夎锛屽鏋滄槸锛屽垯瑙e帇褰撳墠鏂囦欢鍖呭埌褰撳墠鐩綍涓� + if [ ! -d "./soft" ]; then + writelog "鏂囦欢澶逛笉瀛樺湪 瑙e帇" + tar -xvf ./publish.tar + else + writelog "鏂囦欢澶瑰瓨鍦�" + fi + #鑾峰彇鍙傛暟 while getopts h:P:u:p opt; do case $opt in @@ -587,7 +832,7 @@ main() { MYSQL_PASSWORD=$OPTARG ;; ?) - echo "$opt is an invalid option" + writelog "$opt is an invalid option" ;; esac done