linux通过nginx部署jar包

  • Post author:
  • Post category:linux



目录


1、打开防火墙端口


2、打包jar包并放置至指定路径


3、复制indolent.properties和build.sh文件


4、运行build.sh


5、nginx接口转发


1、打开防火墙端口

打开该jar包运行时所使用的端口,注意改端口不可以和已经部署的项目冲突,不然启动不成功(端口占用)

防火墙操作:
	// 开启53端口
	firewall-cmd --add-port=53/tcp --permanent --zone=public
	// 重载配置
	firewall-cmd --reload
	// 查看端口
	firewall-cmd --list-port
	#查看防火墙状态
 	systemctl status firewalld
 	# 开启
 	sudo service firewalld start
 	# 重启
 	sudo service firewalld restart
	# 关闭
 	sudo service firewalld stop

2、打包jar包并放置至指定路径

3、复制indolent.properties和build.sh文件

indolent.properties:

#虚拟机参数,注释掉默认为-Xms1024m -Xmx2048m
VMparam=-Xms256m -Xmx256m 
#nacos配置,如果没有nacos则注释掉
envparam=--spring.cloud.nacos.config.server-addr=xxx.xxx.x.xxx:8848 --spring.cloud.nacos.config.namespace=xxxxxxxxxxxxxxx --godata.debug=true --spring.config.location=classpath:/bootstrap.properties

build.sh:

#! /bin/sh
#**********************************************************
#* Author        : aliceblue
#* Email         : pryoyi@gmail.com
#* Last modified : 2020-3-17 09:14:42
#* Filename      : build
#* Description   : 
#* *******************************************************
 
 
script_abs=$(readlink -f "$0")
script_dir=$(dirname $script_abs)

targetProp=$script_dir/"indolent.properties"

file_ele=("backup.sh" "restart.sh" "shutdown.sh" "showlog.sh" "startup.sh")
log_location=$script_dir/"log"
backup_location=$script_dir/"backup"
jar_name=
VM_param="-Xms1024m -Xmx1024m"
env_param=





flag=''

# 判断是否覆盖
function is_override() {
    echo -n "是否覆盖之前的执行脚本(y/n):"
    while IFS= read -r -s -n1 char
    do
        # 如果读入的字符为空,则退出 while 循环
        if [ -z $char ]
        then
            echo
            break
        fi
        # 如果输入的是退格或删除键,则移除一个字符
        if [[ $char == $'\x08' || $char == $'\x7f' ]]
        then
            [[ -n $flag ]] && flag=${flag:0:${#flag}-1}
            printf '\b \b'
        else
            flag+=$char
            printf $char
        fi
    done
}



# 获取properties预设的值
function get_prop(){
    grep "${1}" $targetProp | grep '^[^#]' | cut -d'=' -f 2- | sed 's/\r//'
}

# 构建脚本
function build_shell() {

	# 构建文件夹
	echo "开始构建......"
	rm -rf $script_dir/autoScript
	mkdir -p $script_dir/autoScript
	if [[ ! -d $log_location ]]
	then
		mkdir $log_location
	fi
	if [[ ! -d $backup_location ]]
	then
		mkdir $backup_location
	fi
	
	# 构建startup.sh
	rm -rf $script_dir/autoScript/startup.sh && touch $script_dir/autoScript/startup.sh
	echo "jarName=$jar_name" >> $script_dir/autoScript/startup.sh
	echo "var=\`date +%Y%m%d\`" >> $script_dir/autoScript/startup.sh
	echo "nohup java -jar $VM_param $script_dir/\$jarName $env_param >$log_location/log-\$var.out 2>&1 &" >> $script_dir/autoScript/startup.sh
	echo "last_log_name=\$(ls -lt $log_location | grep log-20 | head -n 1 | awk '{print \$9}')" >> $script_dir/autoScript/startup.sh
	echo "if [[ -f "\"$log_location/\$last_log_name\"" ]];then" >> $script_dir/autoScript/startup.sh
	echo "    tail -f -n 200 $log_location/\$last_log_name" >> $script_dir/autoScript/startup.sh
	echo "else" >> $script_dir/autoScript/startup.sh
	echo "    echo \"不存在日志文件\"" >> $script_dir/autoScript/startup.sh
	echo "fi" >> $script_dir/autoScript/startup.sh
	echo "startup.sh......"
	
	# 构建shutdown.sh
	rm -rf $script_dir/autoScript/shutdown.sh && touch $script_dir/autoScript/shutdown.sh
	echo "jarName=$jar_name" >> $script_dir/autoScript/shutdown.sh
	echo "PID=\`ps -ef|grep \$jarName |grep -v grep|awk '{print \$2}' \`" >> $script_dir/autoScript/shutdown.sh
	echo "if [ -n \"\$PID\" ]; then" >> $script_dir/autoScript/shutdown.sh
	echo "    kill -9 \$PID" >> $script_dir/autoScript/shutdown.sh
	echo "    echo \"结束\$PID进程\"" >> $script_dir/autoScript/shutdown.sh
	echo "else" >> $script_dir/autoScript/shutdown.sh
	echo "    echo \"\$jarName未启动\"" >> $script_dir/autoScript/shutdown.sh
	echo "fi" >> $script_dir/autoScript/shutdown.sh
	echo "shutdown.sh......"
	
	# 构建restart.sh
	rm -rf $script_dir/autoScript/restart.sh && touch $script_dir/autoScript/restart.sh
	echo "jarName=$jar_name" >> $script_dir/autoScript/restart.sh
	echo "PID=\`ps -ef|grep \$jarName |grep -v grep|awk '{print \$2}' \`" >> $script_dir/autoScript/restart.sh
	echo "if [ -n \"\$PID\" ]; then" >> $script_dir/autoScript/restart.sh
	echo "    kill -9 \$PID" >> $script_dir/autoScript/restart.sh
	echo "    echo \"结束\$PID进程\"" >> $script_dir/autoScript/restart.sh
	echo "fi" >> $script_dir/autoScript/restart.sh
	echo "var=\`date +%Y%m%d\`" >> $script_dir/autoScript/restart.sh
	echo "nohup java -jar $VM_param $script_dir/\$jarName $env_param >$log_location/log-\$var.out 2>&1 &" >> $script_dir/autoScript/restart.sh
	echo "restart.sh......"
	
	# 构建backup.sh
	rm -rf $script_dir/autoScript/backup.sh && touch $script_dir/autoScript/backup.sh
	echo "jarName=$jar_name" >> $script_dir/autoScript/backup.sh
	echo "times=\`date +%s\`" >> $script_dir/autoScript/backup.sh
	echo "oldJarName=\$times-\$jarName" >> $script_dir/autoScript/backup.sh
	echo "if [[ -f "\"$script_dir/\$jarName\"" ]];then" >> $script_dir/autoScript/backup.sh
	echo "    cp $script_dir/\$jarName $backup_location/\$oldJarName" >> $script_dir/autoScript/backup.sh
	echo "fi" >> $script_dir/autoScript/backup.sh
	echo "backup.sh......"
	
	# 构建showlog.sh
	rm -rf $script_dir/autoScript/showlog.sh && touch $script_dir/autoScript/showlog.sh
	echo "line_num=200" >> $script_dir/autoScript/showlog.sh
	echo "if [ -n "\"\$1\"" ];then" >> $script_dir/autoScript/showlog.sh
	echo "	line_num=\${1}" >> $script_dir/autoScript/showlog.sh
	echo "fi" >> $script_dir/autoScript/showlog.sh
	echo "last_log_name=\$(ls -lt $log_location | grep log-20 | head -n 1 | awk '{print \$9}')" >> $script_dir/autoScript/showlog.sh
	echo "if [[ -f "\"$log_location/\$last_log_name\"" ]];then" >> $script_dir/autoScript/showlog.sh
	echo "    tail -f -n \$line_num $log_location/\$last_log_name" >> $script_dir/autoScript/showlog.sh
	echo "else" >> $script_dir/autoScript/showlog.sh
	echo "    echo \"不存在日志文件\"" >> $script_dir/autoScript/showlog.sh
	echo "fi" >> $script_dir/autoScript/showlog.sh
	echo "showlog.sh......"
	
	
	echo
	echo "构建完成!"
}

function init() {
	# 获取初始化参数
	if [[ ! -z $(get_prop jarName) ]]
	then
		jar_name=$(get_prop jarName)
	fi
	if [[ ! -z $(get_prop VMparam) ]]
	then
		VM_param=$(get_prop VMparam)
	fi
	if [[ ! -z $(get_prop envparam) ]]
	then
		env_param=$(get_prop envparam) 
	fi
	if [[ ! -z $(get_prop logLocation) ]]
	then
		log_location=$(get_prop logLocation)
	fi
	if [[ ! -z $(get_prop backupLocation) ]]
	then
		backup_location=$(get_prop backupLocation)
	fi

	# 获取jar
	if [ -z "$jar_name" ]
	then

		jar_count=0
		for filename in `ls`
		do
			if [ "jar" == "${filename##*.}" ]
			then
				let jar_count++
				jar_name=$filename
			fi
		done

		if [ $jar_count -eq 1 ]
		then
			echo "识别到jar包"
			echo
		elif [ $jar_count -eq 0 ]
		then
			echo "未识别到jar包,生成失败"
			exit
		else
			echo "识别到多个jar,jar必须唯一...."
			exit
		fi

	fi
	
	# 输出参数
	echo "jar:"$jar_name
	echo "虚拟机参数:"$VM_param
	echo "日志输出位置:"$log_location
	echo "jar包备份位置:"$backup_location
	echo
	
	build_shell
}




# 是否是首次生成,是否覆盖
if [[ -d $script_dir/'autoScript' ]]
then
	is_override
	
    #判断输入
    if [ $flag == "y" ]
    then
		rm -rf $script_dir/autoScript && mkdir $script_dir/autoScript
		echo "重新生成脚本中......"
		echo
		init
    else
        echo '====执行被取消===='
		exit
    fi

else	#首次生成,直接初始化并创建
	init
fi


4、运行build.sh

命令为:sh build.sh

执行命令后文文件夹会多出一个文件夹autoScript

启动命令:sh autoScript/startup.sh

重启命令:sh autoScript/restart.sh

停止命令:sh autoScript/shutdown.sh

显示日志:sh autoScript/showlog.sh

本分jar包:sh autoScript/backup.sh

5、nginx接口转发

配置/xxx/nginx/conf 中的nginx.conf,参考如下:

location /api/fwq/ {


client_max_body_size    100m;

proxy_pass http://192.168.2.179:19021/api/fwq/;

proxy_cookie_path /api/fwq/ /api/fwq/;

proxy_set_header Host $host:$server_port;

proxy_set_header X-Real-IP $remote_addr;

proxy_set_header REMOTE-HOST $remote_addr;

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

}



版权声明:本文为Cooker0514原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。