Linux环境下部署java项目上线

项目环境

jdk1.8

docker容器

ntp服务器

nginx服务器

postgresql数据库

redis缓存

profile项目运行指令配置

jdk文件夹下镜像和脚本-setup.sh

#!/bin/bash
echo '检查java运行环境'
if grep -q "JAVA_HOME" /etc/profile ;then
	echo "系统已配置java环境变量"
	jv=`$JAVA_HOME/bin/java -version 2>&1`
	if echo "$jv" | grep -q "1.8" then
		echo "版本匹配,跳过安装"
		exit 0
	else
		echo "但与安装包中的环境不一致,跳过安装,请检查/ect/profile文件!"
		exit 0
	fi
fi
echo "未配置JAVA运行环境,开始安装"
echo "卸载系统自带的JAVA环境"
NAMES=`rpm -qa|grep jdk| grep -E '1.4|1.5|1.6|1.7|1.8' | awk '{print $1}' `;
for proc in $NAMES
do
	rpm -e --nodeps $proc
done
echo "释放JDK"
tar zxf jdk-8uz31-linux-x64.tar.gz
if[!-d /usr/java/jdk1.6]; then
	mkdir -p /usr/java/jdk1.6
fi
echo "清理安装文件"
rm -rf jdk1.9.0_231
echo "配置/etc/profile文件"
echo "export JAVA_HOME=/usr/java/jdk.18">>/ect/profile
echo "export JRE_HOME=\$JAVA_HOME/jre">>/etc/profile
echo "export CLASSPATH=.:\JAVA_HOME/lib/dt.jar:\$JAVA_HOME/lib/tools.jar:\$CLASSPATH">>/etc/profile
echo "export PATH=.:\$JAVA_HOME/bin;\$JRE_HOME/bin:\$PATH">>/etc/profile
echo 'JAVA运行环境安装完成'

安装docker镜像 setup.sh

#!/bin/bash
echo "卸载旧版本"
yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine
echo "开始安装"
su -c "rpm -Uvh ./*.rpm --nodeps --force"
#配置内网数据库,互联网安装时不需要
filePath="/etc/docker/daemon.json"
if[! -f "$filePath"] ;then 
	mkidr -p /etc/docker
	touch $filePath
fi
echo "{\"insecure-registries\" :[\"192.168.0.183:5000\"]}">$filePath
echo "启动并添加系统服务"
su -c "systemctl start docker.service"
su -c "systemctl enable docker.service"

nginx的配置 nginx.conf

user nginx;
worker_processes 1;

error_Log /dev/null;
#error_log /var/log/nginx/error.log warn;
pid /var/run/nginx/pid;
events{
	worker_connections 1024;	
}
http{
	server{
		listen 80;
		#listen 443 ssl;
		$ssl_certificate ss/webserver.crt;#服务器证书
		#ssl_certificate_key ssl/webserver.pem;#服务器秘钥
		#ssl_client_certificate ssl/RootCA.crt; #客户端签名根证书
		#单向认证开启listen 443 ssl、ssl_certificate、ssl_certificate_key,双向认证全打开

		location /{
			root /etc/nginx/html/Advanced-EI;
			try_files $uri $uri/ /index.html;
			index index.html;
		}
		location /back-stage{
			alias /etc/nginx/html/back-stage/;
			try_files $uri $ur/  /index.html;
			index index.html;
		}
		location ^~/prod-api/captchaImage{
			proxy_pass http://7.7.15.200:8012/captchaImage;
			add_header Content-Type "text/plain;charset=utf-8";
			add_header 'Access-Control-Allow-Origin' '*';
			add_header 'Access-Control-Allow-Methods''GET','POST';
		}
		location ^~/prod-api/ {
			proxy_pass http://7.7.15.200:8012/;
			add_header Content-Type "text/plain;charset=utf-8";
			add_header 'Access-Control-Allow-Origin''*';
			add_header 'Access-Control-Allow-Credentials' 'true';
			add_header 'Access-Control-Allow-Methods''GET','POST';
		}
	}
	upstream tomcat{
		server 7.7.15.149:8449;
		server 7.7.15.150:8449;
		server 7.7.15.200:8012;
	}

	include /etc/nginx/mime.types;
	default_type application/octet-stream;
	log_format min '$remote_addr-$remote_user [$time_local] "request"'
					'#status $body_bytes_sent "http_referer"'
					'”$http_user_agent“ “$http_x_forwarded_for”';
	#access_log /var/log/nginx/access.log main;
	acccess_log /dev/null;
	sendfile on;
	#tcp_mopush on;
	client_max_body_size 100m;
	keepalive_timeout 65;
	#gzip on;
	include /etc/nginx/conf.d/*.conf;
}

nginx.sh

#!/bin/bash
echo "装载镜像"
docker load <./nginx1.19.tar
#创建根目录
mkdir -p /sdzw/nginx
#拷贝配置文件
#配置文件每次发布需要单独修改
echo "拷贝配置文件,注意及时修改集群相关配置"
cp -rf ./nginx.conf /sdzw/nginx/
echo "创建容器"
docker run --name nginx -d -p 443:443 -p 80:80\
-v /sdzw/nginx/nginx.conf: /etc/nginx/nginx.conf:ro\
-v /sdzw/nginx/ssl:/etc/nginx/ssl\
-v /szw/webapp/front-end:/etc/nginx/html\
--restart=always nginx:1.19
sleep 3
docker ps

ntp文件夹

ntp-4.2.8p14-1.x86_64.rpm

postgresql文件夹 setup.sh

#!/bin/bash
echo "装载镜像"
docker load <./postgres12.tar
docker tag 0f10374e5170 postgres
#创建容器
#数据文件目录/sdzw/data/pgsql
#-e POSTGRES_PASSWORD=pshdhx 初始超管密码
#-e POSTGRES_DB=ibdp 初始化数据库
echo "创建容器"
echo "初始化数据库ibdp"
docker run --name postgres -p 5432:5432\
-v /sdzw/data/pgsql:/var/lib/postgresql/data --privileged=true\
-e POSTGRES_PASSWORD=pshdhx -e POSTGRES_DB=ibdp\
--restart=always -postgres
sleep 3
docker ps

profile文件夹 

log.cron

log.cron
59 23 *** root /bin/sh /sdzw/logs/logClearing.sh

logClearing.sh

#!/bin/sh
#清理tomcat日志
#cp /sdzw/logs/catalina_logs/catalina.out /sdzw/logs/catalina_logs/catalina_$(date+%Y%m%d).out
#cat /dev/null > /sdzw/logs/catalina_logs/catalina.out
#清理日志
cp /sdzw/logs/catalina_logs/middle.log /sdzw/logs/catalina_logs/middleware_$(date+%Y%m%d).log
#清理目录下所有超过30天的文件
find /sdzw/logs/** -mtime +30 -name "*.log" -exec rm -rf{} \;

service.middleware

#!/bin/sh
#chkconfig:2345 75 15
#description: middleware
### BEGIN INIT INFO
#Provides middleware
#Required-Start:$all
#Required-Stop:$all
#Default-Start: 2 3 4 5
#Default-Stop: 0 1 6 
#Short-Description: middleware

source /etc/profile
#app name 为了确保脚本通用
APP_NAME= middleware
SERVICE_DIR=/sdzw/webapp/$App_NAME
SERVICE_NAME=middleware
APP_JAR=$SERVICE_NAME\.jar
#启动APP的时候,将进程的pid保存在这里,方便以后杀死进程用
APP_PID=$SERVICE_NAME\pid
cd $SERVICE_DIR
case "$1" in
	start)
		#/dev/null 就不会有nohup.out文件了。
		nohup $JAVA_HOME/bin/java $JAVA_OPTS -Xms512m -Xmx4096m -jar $SERVICE_DIR/$APP_JAR>>/sdzw/logs/catalina_logs/$SERVICE_NAME\.log &
		#将pid写入文件
		echo $!>$SERVICE_DIR/$APP_PID
		echo "====start $SERVICE_NAME"
		tail -f /sdzw/logs/catalina_logs/$SERVICE_NAME\.log
		;;
	stop)
		kill `cat $APP_PID`
		#删除掉pid文件
		rm -f $SERVICE_DIR/$APP_PID
		#查看是不是杀死进程了
		sleep 5
			#获取进程号 ,复制号两边不能留空格
			pid=`ps -ef | grep -w $SERVICE_NAME | grep -v grep | awk '{print $2}'`
		#判断相等两边要留空格
		if["$pid" == ""];then
			echo "===kill successfully"
		else
			echo "====kill fail and try to kill -9"
			echo "==== the pid is $pid"
			kill -9 $pid
		fi
		echo "stop finished"
		;;
	*)
		echo "please user start or stop 参数"
		;;
esac
exit 0

redis文件夹 setup.sh

#! /bin/bash
echo "装载镜像"
docker load <./redis5.0.7.tar
docker tag dcf9ec9265e0 redis
echo "创建配置目录"
mkdir /sdzw/redis
cp ./profile/redis.conf /sdzw/redis/
#创建容器
#--appendonlu yes 开启持久化
#持久化文件目录 /sdzw/data/redis/
#--requirepass 'pshdhx!@#' 初始化密码
echo "创建容器"
docker run -d -p 6379:6379 --name redis\
-v /sdzw/redis/redis.conf:/etc/redis/redis.conf\
-v /sdzw/data/redis:/data --pricileged= true\
	--restar=always redis redis-server /etc/redis/redis.conf --appendonly yes --requirepass 'pshdhx!@#'
sleep 3
docker ps

install.sh

#!/bin/bash
#添加可执行权限
chmod + x./rootssh_key/*
chmod + x./ssh_key/*
chmod + x./1.jdk1.8/*
chmod + x./2.docker/*
chmod + x./3.nginx/*
chmod + x./postgresql/*
chmod + x./redis/*
chmod + x./profile/*
mkdir /sdzw/logs/{catalina_logs,app_logs} -pv
mkdir /sdzw/webapp/middle -pv
chmod -R 777/sdzw/logs/
#关闭文件共享
systemctl stop smb.service
systemctl disable smb.service
#停止httpd服务包
systemctl stop httpd.service
systemctl distable httpd.service
#配置ssh服务
#sh ./openssh/ssh_config.sh
#升级ntp
rpm -ivh --nomd5 --nodeps --force ./ntp/ntp-4.2.8p12-1.x86_64.rpm
安装jdk
cd ./1.jdk1.8
sh setup.sh
#安装docker
cd ../2.docker
sh setup.sh
#安装nginx
cd ../3.nginx
sh setup.sh
#安装ps数据库
cd ../postgresql
sh setup.sh
#安装redis数据库
cd ../redis
sh setup.sh
cd ../
#配置定时任务脚本
cp -rf ./profile/log.cron /etc/cron.d/
cp -rf ./profile/logClearing.sh /sdzw/logs/
echo "添加定时任务"
chmod 0600 /etc/cron.d/*
/sbin/service crond restart
echo "注册系统服务"
cp -af ./profile/serivce.middleware /etc/init.d/middleware
chkconfig --add middleware
echo "开放防火墙端口"
firewall-cmd --zone=public --add-port=8088/tcp --permanent
firewall-cmd --zone=public --add-port=8448/tcp --permanent
firewall-cmd --zone=public --add-port=8449/tcp --permanent
firewall-cmd --zone=public --add-port=6379/tcp --permanent
firewall-cmd --zone=public --add-port=5432/tcp --permanent
firewall-cmd --zone=public --add-port=8012/tcp --permanent
firewwall-cmd --reload

部署步骤:

1、把上述文件夹拖入linux文件夹下;

2、给install.sh脚本赋权限,chmod 777 ./install.sh ,运行 ;如果报错,那么单独运行每个文件夹下的脚本;

3、上述容器和镜像文件安装成功后,把后台文件的jar包middleware放入到 创建好的/sdzw/webapp/middleware下;

4、把前端文件打包的两个文件夹放倒/sdzw/webapp/front-end/【Advance-EI和back-stage】

5、前端文件夹要和nginx.conf中的配置信息对应好

6、后端文件jar包要和profile文件夹下srvice.middleware对应好

7、docker ps 知道nginx对应的端口号,停止后重启,外加自己所需端口号的防火墙

8、docker stop 端口号 docker start 端口号 

firewall-cmd --zone=public --add-port=8012/tcp --permanent
firewwall-cmd --reload

9、开启后台程序

因为已经在service.middleware中配置过命令了,所以不使用java jar middleware.jar了,直接使用service middleware start运行后台程序;成功开启后访问7.7.15.200就可以访问到自己的项目了;

猜你喜欢

转载自blog.csdn.net/pshdhx/article/details/108124485