# wiki **Repository Path**: Liu_K_ai/wiki ## Basic Information - **Project Name**: wiki - **Description**: 毕设开发中的关键说明以及注意事项 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2021-10-30 - **Last Updated**: 2022-01-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## 目录结构 application.name
  --application.name-api
  --application.name-server
  --application.name-po
  --deploy.sh(需要打成jar包发布需要添加)
  --.gitignore
  --pom.xml ## 云效构建规范 构建命令:mvn -B clean package -Dmaven.test.skip=true -Dautoconfig.skip
构建物上传的打包路径:
* application.name-server/target/application.name.jar * deploy.sh 部署脚本: > ${APP_NAME} ${SERVER_NAME} 是阿里云效流水线中配置的两个变量(项目名,服务名)(eg:cloud-demo,cloud-demo-server) ```shell mkdir -p /home/admin/cloud-demo tar zxvf /home/admin/app/package.tgz -C /home/admin/cloud-demo/ sh /home/admin/cloud-demo/deploy.sh restart ${APP_NAME} ${SERVER_NAME} ``` ## deploy.sh > 使用随机端口部署 目前能够成功部署到nacos中,一次部署两个服务,此文件必须位于项目根目录 ```shell #!/bin/bash echo '--------------------【begin】---------------------' export PROG_NAME=$(echo PROG_NAME | base64 -d) export APP_NAME=$(echo APP_NAME | base64 -d) export SERVER_NAME=$(echo SERVER_NAME | base64 -d) export ACTION=$(echo ACTION | base64 -d) export APP_START_TIMEOUT=$(echo APP_START_TIMEOUT | base64 -d) export SERVER_PORT1=$(echo SERVER_PORT1 | base64 -d) export SERVER_PORT2=$(echo SERVER_PORT2 | base64 -d) export HEALTH_CHECK_URL1=$(echo HEALTH_CHECK_URL1 | base64 -d) export HEALTH_CHECK_URL2=$(echo HEALTH_CHECK_URL2 | base64 -d) export HEALTH_CHECK_FILE_DIR=$(echo HEALTH_CHECK_FILE_DIR | base64 -d) export APP_HOME=$(echo JAR_NAME | base64 -d) export JAR_NAME=$(echo JAR_NAME | base64 -d) export JAVA_OUT1=$(echo JAVA_OUT1 | base64 -d) export JAVA_OUT2=$(echo JAVA_OUT2 | base64 -d) SERVER_PORT1=0 SERVER_PORT2=0 #判断当前端口是否被占用,没被占用返回0,反之1 function Listening { TCPListeningnum=`netstat -an | grep ":$1 " | awk '$1 == "tcp" && $NF == "LISTEN" {print $0}' | wc -l` UDPListeningnum=`netstat -an | grep ":$1 " | awk '$1 == "udp" && $NF == "0.0.0.0:*" {print $0}' | wc -l` (( Listeningnum = TCPListeningnum + UDPListeningnum )) if [ $Listeningnum == 0 ]; then echo "0" else echo "1" fi } #指定区间随机数 function random_range { shuf -i $1-$2 -n1 } #得到随机端口 function get_random_port1 { echo -e '\n\n\n------------------------------------------------' templ=0 while [ $SERVER_PORT1 == 0 ]; do temp1=`random_range $1 $2` if [ `Listening $temp1` == 0 ] ; then SERVER_PORT1=$temp1 fi done echo -e "随机端口号:\t$SERVER_PORT1" echo -e '------------------------------------------------\n\n\n' } #得到随机端口 function get_random_port2 { echo -e '\n\n\n------------------------------------------------' templ=0 while [ $SERVER_PORT2 == 0 ]; do temp1=`random_range $1 $2` if [ `Listening $temp1` == 0 ] ; then SERVER_PORT2=$temp1 fi done echo -e "随机端口号:\t$SERVER_PORT2" echo -e '------------------------------------------------\n\n\n' } get_random_port1 55555 60000; #这里指定了1~10000区间,从中任取一个未占用端口号 get_random_port2 60001 65535; #这里指定了1~10000区间,从中任取一个未占用端口号 PROG_NAME=$0 echo "PROG_NAME:${PROG_NAME}" ACTION=$1 # 修改APP_NAME为云效上的应用名(application.name) APP_NAME=$2 #######需要修改 #APP_NAME=cloud-demo #######需要修改 SERVER_NAME=$3 #######需要修改 #SERVER_NAME=cloud-demo-server #######需要修改 APP_START_TIMEOUT=20 # 等待应用启动的时间 HEALTH_CHECK_URL1=http://127.0.0.1:${SERVER_PORT1}/actuator/health # 应用健康检查URL HEALTH_CHECK_URL2=http://127.0.0.1:${SERVER_PORT2}/actuator/health # 应用健康检查URL HEALTH_CHECK_FILE_DIR=/home/admin/status # 脚本会在这个目录下生成nginx-status文件 APP_HOME=/home/admin/${APP_NAME}/${SERVER_NAME}/target # 从package.tgz中解压出来的jar包放到这个目录下 JAR_NAME=${APP_HOME}/${APP_NAME}.jar # jar包的名字 JAVA_OUT1=${APP_HOME}/logs/start1.log #应用的启动日志 JAVA_OUT2=${APP_HOME}/logs/start2.log #应用的启动日志 # 创建出相关目录 mkdir -p ${HEALTH_CHECK_FILE_DIR} mkdir -p ${APP_HOME} mkdir -p ${APP_HOME}/logs echo -e '\n\n\n------------------------------------------------' echo -e "service-name:\t${APP_NAME}" echo -e "健康检查地址:\t${HEALTH_CHECK_URL1} | ${HEALTH_CHECK_URL2}" echo -e "jar包的路径:\t${JAR_NAME}" echo -e "应用的启动日志路径:\t${JAVA_OUT1} | ${JAVA_OUT2}" echo -e '------------------------------------------------\n\n\n' usage() { echo "Usage: $PROG_NAME {start|stop|restart}" exit 2 #执行restart } health_check1() { exptime=0 echo -e '\n\n\n--------------------[健康检查1]---------------------' echo -e "checking\t${HEALTH_CHECK_URL1}" while true do status_code=`/usr/bin/curl -L -o /dev/null --connect-timeout 5 -s -w %{http_code} ${HEALTH_CHECK_URL1}` echo -e "健康检查状态码\t${status_code}" if [ "$?" != "0" ]; then echo -n -e "\rapplication not started" else echo "code is $status_code" if [ "$status_code" == "200" ];then break fi fi sleep 1 ((exptime++)) echo -e "\rWait app to pass health check: $exptime..." if [ $exptime -gt ${APP_START_TIMEOUT} ]; then echo 'app start failed' exit 1 fi done echo -e "健康检查 ${HEALTH_CHECK_URL1} 成功" echo -e '------------------------------------------------\n\n\n' } health_check2() { exptime=0 echo -e '\n\n\n--------------------[健康检查2]---------------------' echo -e "checking\t${HEALTH_CHECK_URL2}" while true do status_code=`/usr/bin/curl -L -o /dev/null --connect-timeout 5 -s -w %{http_code} ${HEALTH_CHECK_URL2}` echo -e "健康检查状态码\t${status_code}" if [ "$?" != "0" ]; then echo -n -e "\rapplication not started" else echo "code is $status_code" if [ "$status_code" == "200" ];then break fi fi sleep 1 ((exptime++)) echo -e "\rWait app to pass health check: $exptime..." if [ $exptime -gt ${APP_START_TIMEOUT} ]; then echo 'app start failed' exit 1 fi done echo -e "健康检查 ${HEALTH_CHECK_URL2} 成功" echo -e '------------------------------------------------\n\n\n' } start_application1() { echo -e '\n\n\n---------------------[启动应用1]--------------------' echo -e "正在启动Java程序" echo -e "APP_HOME:\t${APP_HOME}" echo -e "SERVER_NAME:\t${SERVER_NAME}" echo -e "jar包的名字:\t${JAR_NAME}" echo -e "程序启动的端口:\t${SERVER_PORT1}" # nohup java -jar ${JAR_NAME} --server.port=${SERVER_PORT1} > ${JAVA_OUT1} 2>&1 & nohup java -Dserver.port=${SERVER_PORT1} -jar ${JAR_NAME} > ${JAVA_OUT1} 2>&1 & echo "Java程序启动完成" echo -e '------------------------------------------------\n\n\n' } start_application2() { echo -e '\n\n\n---------------------[启动应用2]--------------------' echo -e "正在启动Java程序" echo -e "APP_HOME:\t${APP_HOME}" echo -e "SERVER_NAME:\t${SERVER_NAME}" echo -e "jar包的名字:\t${JAR_NAME}" echo -e "程序启动的端口:\t${SERVER_PORT2}" nohup nohup java -Dserver.port=${SERVER_PORT2} -jar ${JAR_NAME} > ${JAVA_OUT2} 2>&1 & echo "Java程序启动完成" echo -e '------------------------------------------------\n\n\n' } stop_application() { echo -e '\n\n\n---------------------[停止应用]---------------------' checkjavapid=`ps -ef | grep java | grep ${APP_NAME} | grep -v grep |grep -v 'deploy.sh'| awk '{print$2}'` echo "checkjavapid${checkjavapid}" if [[ ! $checkjavapid ]];then echo -e "\r此应用未运行" echo -e '------------------------------------------------\n\n\n' return fi echo "停止已存在的应用" times=60 for e in $(seq 60) do sleep 1 COSTTIME=$(($times - $e )) checkjavapid=`ps -ef | grep java | grep ${APP_NAME} | grep -v grep |grep -v 'deploy.sh'| awk '{print$2}'` if [[ $checkjavapid ]];then kill -9 $checkjavapid echo -e "\r -- stopping java lasts `expr $COSTTIME` seconds." else echo -e "\rJava程序已经被关闭" break; fi done echo "停止完毕" echo -e "------------------------------------------------\n\n\n" } start() { start_application1 health_check1 start_application2 health_check2 echo '---------------------【end】----------------------' } stop() { stop_application } case "$ACTION" in start) echo "<<>>" start ;; stop) echo "<<>>" stop ;; restart) echo "<<>>" stop start ;; *) echo "<<>>" usage ;; esac ``` ## redis搭建集群: ```shell redis-cli -c -a liukaibrysj --cluster create 1.14.47.196:6379 1.14.47.196:6380 1.14.47.196:6381 1.14.47.196:6382 1.14.47.196:6383 1.14.47.196:6384 --cluster-replicas 1 redis-cli -c -a 1234 --cluster create 172.20.0.2:6379 172.20.0.3:6380 172.20.0.4:6381 172.20.0.5:6382 172.20.0.6:6383 172.20.0.7:6384 --cluster-replicas 1 docker create --name redis-node1 --net host -v /data/redis-data/node1:/data redis:5.0.5 --cluster-enabled yes --cluster-config-file nodes-node-1.conf --port 6379 docker create --name redis-node2 --net host -v /data/redis-data/node2:/data redis:5.0.5 --cluster-enabled yes --cluster-config-file nodes-node-2.conf --port 6380 docker create --name redis-node3 --net host -v /data/redis-data/node3:/data redis:5.0.5 --cluster-enabled yes --cluster-config-file nodes-node-3.conf --port 6381 docker create --name redis-node4 --net host -v /data/redis-data/node4:/data redis:5.0.5 --cluster-enabled yes --cluster-config-file nodes-node-4.conf --port 6382 docker create --name redis-node5 --net host -v /data/redis-data/node5:/data redis:5.0.5 --cluster-enabled yes --cluster-config-file nodes-node-5.conf --port 6383 docker create --name redis-node6 --net host -v /data/redis-data/node6:/data redis:5.0.5 --cluster-enabled yes --cluster-config-file nodes-node-6.conf --port 6384 redis-cli --cluster create 1.14.47.196:6379 1.14.47.196:6380 1.14.47.196:6381 1.14.47.196:6382 1.14.47.196:6383 1.14.47.196:6384 --cluster-replicas 1 redis-cli --cluster create 127.0.0.1:6379 127.0.0.1:6380 127.0.0.1:6381 127.0.0.1:6382 127.0.0.1:6383 127.0.0.1:6384 --cluster-replicas 1 ```