环境部署(jar、nginx、redis、mysql57)

每次项目部署到内网服务器时,都需要自己手动操作解压tar包、创建目录等等,所以自己写了一个脚本,直接一键部署。如果是公网环境则直接用docker最简单,就不需要传包啥的到服务器。
我用的环境包网盘地址:链接:https://pan.baidu.com/s/1ZeWYw4rAwu4RpO-_i6bRWA
提取码:2001
–来自百度网盘超级会员V4的分享

脚本如下

1.将提供的目录都copy到虚拟机上的某个目录下

2.移动到copy的工作目录下,在目录下执行 chmod +x 1.sh,然后 ./1.sh运行即可自动安装环境

3.脚本执行结束后,手动刷新全局变量,不然会导致当前shell无法使用java、mysql命令,因为更改只会影响到当前运行脚本的 Shell 进程以及它所创建的任何子进程,所以执行. /etc/profile. /etc/profile.d/lamp.sh

#!/bin/bash

#工作目录,即上传的文件所属目录
workDir=`pwd`

#脚本产生日志的目录
LOG_DIR="/tmp"

#依赖目录路径 写成你上传到服务器上的依赖目录
RELY_ON_DIR="/tmp/environment/rely_on"

#jar包全路径(包含文件名) 写成你上传到服务器上的jar包路径
JDK_DIR="/tmp/environment/jdk-8u221-linux-x64.tar.gz"

#redis包全路径 写成你上传到服务器上的redis包路径
REDIS_DIR="/tmp/environment/redis-7.0.15.tar.gz"
#redis密码 ,如果为空则不设置密码
REDIS_PWD="123456"

#Nginx包全路径(包含文件名) 写成你上传到服务器上的Nginx包路径
NGINX_DIR="/tmp/environment/nginx-1.18.0.tar.gz"

#mysql
#安装到哪个目录
SRC_DIR=/usr/local/src
#安装包路径全路径(包含文件名) 写成你上传到服务器上的mysql包路径
MYSQL='/tmp/environment/mysql-5.7.43-linux-glibc2.12-x86_64.tar.gz'
#数据库密码
MYSQL_ROOT_PASSWORD=123456


# 检查防火墙状态
firewall_status=$(systemctl is-active firewalld)

if [ "$firewall_status" = "active" ]; then
    echo "防火墙已启用,无需操作。"
else
    # 启用防火墙
    echo "防火墙未启用,正在启用..."
    systemctl start firewalld
    systemctl enable firewalld
    echo "防火墙已成功启用。"
fi


if [ ! -d "jdk" ]; then
	echo "====依赖安装开始===="
	rpm -Uvh $RELY_ON_DIR/*.rpm --nodeps --force
	echo "====依赖安装完成===="
else
    echo "依赖包目录 $RELY_ON_DIR 不存在"
fi



# 检查压缩包是否存在
if [ -f "$JDK_DIR" ]; then
	echo "===================="
	echo "======JDK安装========="
	echo "===================="
	{
		if [ ! -d "jdk" ]; then
		    mkdir jdk
		fi
		
		if [ ! -d "/usr/local/jdk" ]; then
		    mkdir  /usr/local/jdk/
		fi
		
		tar -zxvf $JDK_DIR -C jdk/
		mv jdk/$(tar tf $JDK_DIR | head -n 1)* /usr/local/jdk/
		rm -rf jdk
		
		#添加环境变量
		echo "JAVA_HOME=/usr/local/jdk" >> /etc/profile
		echo "PATH=\$JAVA_HOME/bin:\$PATH" >> /etc/profile
		#刷新
		source /etc/profile
		
		cd $workDir
	} 2>&1 >> $LOG_DIR/jdk_install.log
	
	#查看版本,安装成功会显示版本号
	echo "java版本号"
	java -version
	echo "===================="
	echo "======JDK安装完成========="
	echo "===================="
else
    echo "jdk压缩包 $JDK_DIR 不存在"
fi


# 检查压缩包是否存在
if [ -f "$REDIS_DIR" ]; then
	echo "===================="
	echo "======redis安装========="
	echo "===================="
	{
		if [ ! -d "/usr/local/redis" ]; then
	    mkdir  /usr/local/redis
		fi
		tar -zxvf $REDIS_DIR -C /usr/local/
		mv /usr/local/$(tar tf $REDIS_DIR | head -n 1)* /usr/local/redis
		rm -rf /usr/local/$(tar tf $REDIS_DIR | head -n 1)
		cd /usr/local/redis
		make > /dev/null 2>&1
        make install > /dev/null 2>&1
		
		#让redis后台运行
		sed -i 's/daemonize no/daemonize yes/g' /usr/local/redis/redis.conf
		
		#修改端口号(可以不修改)
		#sed -i 's/port 6379/port 指定端口/g' /usr/local/redis/redis.conf
		#可以设置redis密码,文件中默认是注释的,所以我们直接追加也行
		# 检查redisPwd是否为空
		if [ -n "$REDIS_PWD" ]; then
		    echo "requirepass \"$REDIS_PWD\"" >> /usr/local/redis/redis.conf
		    echo "密码已添加到redis.conf文件中。"
		else
		    echo "redisPwd变量为空,未添加密码到redis.conf文件。"
		fi
		
		#设置redis可以被远程访问,如果不注释则redis只能本机访问
		sed -i -e 's/^bind 127.0.0.1/#bind 127.0.0.1/' /usr/local/redis/redis.conf
		echo 'protected-mode "no"' >> ../redis.conf
		
		#开启防火墙指定端口
		firewall-cmd --zone=public --add-port=6379/tcp --permanent
		firewall-cmd --reload
		
		#运行redis 指定配置文件,在后台运行,如果没改端口号则默认6379
		cd /usr/local/redis/src
		
		#添加到服务
		echo "[Unit]" > /etc/systemd/system/redis.service
		echo "Description=redis-server" >> /etc/systemd/system/redis.service
		echo "After=network.target" >> /etc/systemd/system/redis.service
		echo "" >> /etc/systemd/system/redis.service
		echo "[Service]" >> /etc/systemd/system/redis.service
		echo "Type=forking" >> /etc/systemd/system/redis.service
		echo "ExecStart= /usr/local/bin/redis-server /usr/local/redis/redis.conf" >> /etc/systemd/system/redis.service
		echo "PrivateTmp=true" >> /etc/systemd/system/redis.service
		echo "" >> /etc/systemd/system/redis.service
		echo "[Install]" >> /etc/systemd/system/redis.service
		echo "WantedBy=multi-user.target" >> /etc/systemd/system/redis.service
		
		systemctl daemon-reload
		systemctl start redis
		#开机自启动
		systemctl enable redis
		
		#全局使用 
		echo 'PATH=/usr/local/bin/:$PATH' >> /etc/profile.d/lamp.sh
		.  /etc/profile.d/lamp.sh
		
		cd $workDir
	} 2>&1 >> $LOG_DIR/redis_install.log
	
	echo "redis版本号:"
	redis-server --version
	echo "===================="
	echo "======redis安装完成========="
	echo "===================="
else
    echo "redis压缩包 $REDIS_DIR 不存在"
fi



# 检查压缩包是否存在
if [ -f "$NGINX_DIR" ]; then
	echo "===================="
	echo "======nginx安装开始========="
	echo "===================="
	
	{
		if [ ! -d "nginx" ]; then
		    mkdir nginx
		fi
		
		if [ ! -d "/usr/local/nginx" ]; then
		    mkdir  /usr/local/nginx/
		fi
		
		#编译nginx
		tar -zxvf $NGINX_DIR -C nginx/
		mv nginx/$(tar tf $NGINX_DIR | head -n 1)* /usr/local/nginx/
		rm -rf nginx
		cd /usr/local/nginx
		./configure --prefix=/usr/local/nginx
		make > /dev/null 2>&1
        make install > /dev/null 2>&1
		cd /usr/local/nginx/sbin/
		mkdir -p /usr/local/nginx/logs
		
		#放行80端口
		sudo firewall-cmd --zone=public --add-port=80/tcp --permanent
		
		#重新加载防火墙
		sudo firewall-cmd --reload
		
		#添加到服务
		echo "[Unit]" > /etc/systemd/system/nginx.service
		echo "Description=nginx-server" >> /etc/systemd/system/nginx.service
		echo "After=network.target" >> /etc/systemd/system/nginx.service
		echo "" >> /etc/systemd/system/nginx.service
		echo "[Service]" >> /etc/systemd/system/nginx.service
		echo "Type=forking" >> /etc/systemd/system/nginx.service
		echo "ExecStart= /usr/local/nginx/sbin/nginx" >> /etc/systemd/system/nginx.service
		echo "ExecReload= /usr/local/nginx/sbin/nginx" >> /etc/systemd/system/nginx.service
		echo "ExecStop= /usr/local/nginx/sbin/nginx" >> /etc/systemd/system/nginx.service
		echo "PrivateTmp=true" >> /etc/systemd/system/nginx.service
		echo "" >> /etc/systemd/system/nginx.service
		echo "[Install]" >> /etc/systemd/system/nginx.service
		echo "WantedBy=multi-user.target" >> /etc/systemd/system/nginx.service
		
		systemctl daemon-reload
		systemctl start nginx
		#开机自启动
		systemctl enable nginx
		
		#全局使用 
		echo 'PATH=/usr/local/nginx/sbin/:$PATH' >> /etc/profile.d/lamp.sh
		.  /etc/profile.d/lamp.sh
		
		cd $workDir
	} 2>&1 >> $LOG_DIR/nginx_install.log
	
	echo "nginx版本号:"
	nginx -v
	
	echo "===================="
	echo "======nginx安装结束========="
	echo "===================="
else
    echo "nginx压缩包 $NGINX_DIR 不存在"
fi


# 检查压缩包是否存在
if [ -f "$MYSQL" ]; then
	echo "===================="
	echo "======mysql安装开始========="
	echo "===================="
	
	if [ ! -e ${MYSQL} ];then
		echo "数据库压缩包不存在"
		exit
	fi
	tar xf ${MYSQL} -C /usr/local/
	if [ -e /usr/local/mysql ];then
		echo "数据库已存在,安装失败"
		exit
	fi
	{
		cd ${SRC_DIR}
		
		# 检查MYSQL变量是否包含斜杠
		if [[ $MYSQL == *"/"* ]]; then
		    # 如果包含斜杠,则提取出最后一个斜杠后面的值
		    FILENAME=$(basename $MYSQL)
		else
		    # 如果不包含斜杠,则直接使用MYSQL变量的值
		    FILENAME=$MYSQL
		fi
		
		# 使用sed命令提取最后一个数字之前的部分
		MYSQL_DIR=$(echo $FILENAME | sed -nr 's/^(.*[0-9]).*/\1/p')
		
		ln -s  /usr/local/${MYSQL_DIR} /usr/local/mysql
		chown -R  root.root /usr/local/mysql/
		id mysql &> /dev/null || { useradd -s /sbin/nologin -r  mysql ; echo "创建mysql用户"; }
		yum  -y -q install numactl-libs   libaio &> /dev/null
		echo 'PATH=/usr/local/mysql/bin/:$PATH' > /etc/profile.d/lamp.sh
		.  /etc/profile.d/lamp.sh
		cat > /etc/my.cnf <<-EOF
		[mysqld]
		server-id=1
		datadir=/data/mysql
		socket=/data/mysql/mysql.sock                                                                                                   
		log-error=/data/mysql/mysql.log
		pid-file=/data/mysql/mysql.pid
		[client]
		socket=/data/mysql/mysql.sock
		EOF
		[ -d /data ] || mkdir /data
		mysqld --initialize --user=mysql --datadir=/data/mysql
		cp /usr/local/mysql/support-files/mysql.server  /etc/init.d/mysqld
		chkconfig --add mysqld
		chkconfig mysqld on
		service mysqld start
		[ $? -ne 0 ] && { echo "数据库启动失败,退出!";exit; }
		MYSQL_OLDPASSWORD=`awk '/A temporary password/{print $NF}' /data/mysql/mysql.log`
		mysqladmin  -uroot -p$MYSQL_OLDPASSWORD password $MYSQL_ROOT_PASSWORD &>/dev/null
		
		# 更新MySQL用户的Host字段,使其允许远程连接
		mysql -uroot -p"$MYSQL_ROOT_PASSWORD" -e "use mysql; update user set Host='%' where User='root'; flush privileges;"
		
		# 开启防火墙指定端口
		firewall-cmd --zone=public --add-port=3306/tcp --permanent
		firewall-cmd --reload
		
		cd $workDir
	} 2>&1 >> $LOG_DIR/mysql_install.log
	
	echo "===================="
	echo "======mysql安装结束========="
	echo "===================="
else
    echo "mysql压缩包 $MYSQL 不存在"
fi

#重启防火墙,记录新的防火墙规则
systemctl restart firewalld
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值