一键部署mysql,node前端服务,redis,MongoDB副本集,maven,jdk,nginx环境

本文安装包无法上传,可以找对应的安装包放在对应的目录下,有什么建议可以提一下

#!/bin/bash
#存放服务目录
Pwd="/data/program"
#存放软件包目录
App="/data/deploy" 
Usr="/usr/local"

if [ ! -d $Pwd ]
then
mkdir -p $Pwd 
fi

SELECT(){
echo 
cat <<EOF
        DATE : `date +%Y-%m-%d-%T`
        ==========================================
        请选择对应数字的服务安装
        ==========================================
        **      1)maven                  **
        **     2)nginx                  **
        **      3)redis                  **
        **      4)mongo                  **
        **      5)mysql                  **
	**	6)node		         **
        ==========================================
EOF
}
#基础环境配置
Maven(){
#安装jdk   
    yum -y install vim lrzsz wget net-tools
    if [ ! -d "$Usr/jdk1.8.0_171" ];then
       tar -zxvf $App/jdk-8u171-linux-x64.tar.gz -C $Usr

       if [ ! -d "$Usr/jdk" ];then 
          mv $Usr/jdk1.8.0_171  $Usr/jdk
       fi
    fi
#安装maven
    if [ ! -d "$Usr/apache-maven-3.6.3" ];then
       tar -zxvf $App/apache-maven-3.6.3-bin.tar.gz -C $Usr
       if [ ! -d "$Usr/maven" ];then
          mv $Usr/apache-maven-3.6.3 $Usr/maven
          rm -rf /usr/local/maven/conf/settings.xml
          cp $App/settings.xml /usr/local/maven/conf
       fi
    fi
    

#导入环境变量
    cat << zhou >> /etc/profile
    #java env
    JAVA_HOME=/usr/local/jdk
    JAVA_BIN=/usr/local/jdk
    PATH=\$JAVA_HOME/bin:\$PATH
    CLASSPATH=\$JAVA_HOME/lib/dt.jar:\$JAVA_HOME/lib/tools.jar
    export JAVA_HOME JAVA_BIN PATH CLASSPATH
    export LD_LIBRARY_PATH=\$LD_LIBRARY_PATH:/usr/lib
    #maven env
    export MVN_HOME=/usr/local/maven
    export PATH=\$PATH:\$JAVA_HOME/bin:\$MVN_HOME/bin
zhou
    soucre /etc/profile
    echo -e '\033[32m----------------------------------环境已配置成功---------------------\033[0m'
    sleep 3s
#继续选择部署
    echo "继续选择需要安装的服务 不安装则exit退出 "
    SELECT
    read -p "Please choose [1-6]:" num
} 
#nginx安装
Nginx(){
    echo "nginx 部署 "
    #安装nginx的依赖包
    if [ ! -d "$Usr/pcre-8.35" ];then
        tar -xvf $App/pcre-8.35.tar.gz -C $Usr
        if [ ! -d "$Usr/pcre" ];then
           mv $Usr/pcre-8.35 $Usr/pcre
        fi
    fi
    
    yum -y install make zlib zlib-devel gcc-c++ libtool openssl openssl-devel

    cd $Usr/pcre
    if ./configure 1>/dev/null
    then
                if  make && make install 1>/dev/null
                then
                        echo "pcre 安装成功"
                else
                        echo "pcre 安装失败"
                        exit 1
                fi
    else
        echo "make fail" 
        exit 1
    fi

    sleep 3s

    if [ ! -d "$Pwd/nginx-1.14.2" ];then	
       tar -xvf $App/nginx-1.14.2.tar.gz -C $Pwd
    fi
    cd $Pwd/nginx-1.14.2
    #编译nginx
    if ./configure --prefix=/data/program/nginx --with-http_stub_status_module --with-http_ssl_module --with-pcre=/usr/local/pcre 1>/dev/null
    then
                if make && make install 1>/dev/null
                then
                                echo "nginx 安装成功"
                else
                                echo "nginx 安装失败" 
                                exit
                fi
    else
        echo "configure fail"
        exit 1
    fi


    sleep 3s

    #修改配置文件
   
    cat << zhou > /data/program/nginx/conf/nginx.conf

    #user  nobody;
    worker_processes  2;

    error_log  logs/error.log;
    #error_log  logs/error.log  notice;
    #error_log  logs/error.log  info;

    #pid        logs/nginx.pid;


    events {
        worker_connections  65535;
    }


    http {
        include       mime.types;
        default_type  application/octet-stream;

        log_format logstash_json '{ "@timestamp": "\$time_iso8601", '
                                   '"remote_addr": "\$remote_addr", '
                                   '"host": "\$host", '
                                   '"remote_user": "\$remote_user", '
                                   '"body_bytes_sent": "\$body_bytes_sent", '
                                   '"request_time": "\$request_time", '
                                   '"upstream_response_time": "\$upstream_response_time", '
                                   '"hostname": "\$hostname", '
                                   '"status": "\$status", '
                                   '"upstream_addr": "\$upstream_addr", '
                                   '"request_uri": "\$request_uri", '
                                   '"request_method": "\$request_method", '
                                   '"http_referrer": "\$http_referer", '
                                   '"body_bytes_sent":"\$body_bytes_sent", '
                                   '"http_x_forwarded_for": "\$http_x_forwarded_for", '
                                   '"http_user_agent": "\$http_user_agent" } ';

        access_log  logs/access.log  logstash_json;

        sendfile        on;
        #tcp_nopush     on;

        #keepalive_timeout  120;
        keepalive_timeout  65;
        proxy_read_timeout 600;

        client_max_body_size 80m;
        #client_max_body_size 100m; 

        include /data/program/nginx/conf.d/*.conf;
        gzip  on;
        gzip_min_length 1k;
        gzip_buffers 4 16k;
        gzip_comp_level 2;
        gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript;
        gzip_vary off;
        gzip_disable "MSIE [1-6]\.";
    }
zhou
         echo -e  '\033[32m 需要加反向代理的配置文件,已放在家目录下
         _________________________________________________________________
         _________________________________________________________________\033[0m'
         sleep 3s


#配置项目转发配置
mkdir -p $Pwd/nginx/conf.d
cp /data/deploy/*.conf $Pwd/nginx/conf.d
#启动nginx
.$Pwd/nginx/sbin/nginx
#继续安装服务
         echo "继续选择需要安装的服务 不安装则exit退出"
         SELECT
         read -p "Please choose [1-6]:" num
}

#redis的安装
Redis(){
    #安装redis的依赖环境
        yum -y install cpp make gcc glibc-devel glibc-common glibc-kernheaders glibc binutils
        
        #解压
        if [ ! -d "$Pwd/redis-5.0.2" ];then
                tar -xvf $App/redis-5.0.2.tar.gz -C $Pwd
                cd $Pwd/redis-5.0.2/src
                make
        fi
        
	
        sed -i 's/daemonize no/daemonize yes/g' $Pwd/redis-5.0.2/redis.conf
	sed -i 's/# requirepass foobared/requirepass Yet@9LJB6Gl#DQl9*jXTFYY5h6#xP$VQ/g' $Pwd/redis-5.0.2/redis.conf
        cd $Pwd/redis-5.0.2/src
	./redis-server ../redis.conf
        ./redis-cli ping &> /dev/null
        if [ $? -eq 0 ]
        then
        echo "redis is up "
        else
        echo "redis is down "
        fi
#继续安装
         echo "继续选择需要安装的服务 不安装则exit退出"
         SELECT
         read -p "Please choose [1-6]:" num       
}


#MongoDB副本集的安装
Mongo(){
    echo "mongodb 数据库的安装"
#!/bin/bash
#一键式部署mongodb  replica set 集群
#多机版的副本集集群!
#存放服务目录


Usr="/usr/local"
Ip="192.168.142.101"
passwd="wxb"
#多机部署,可以就是分开部署master和slave
#arbiter裁决服务器是不会存储数据的可以随便部署在任意一台服务器中
#准备环境
yum -y install wget >/dev/null

#下载非交互式远程连接工具
yum -y install sshpass >/dev/null

sshpass -p "$passwd" scp /$Pwd/mongodb-linux-x86_64-3.4.4.tgz  root@$Ip:$Pwd


sshpass -p "$passwd" ssh -o StrictHostKeyChecking=no root@$Ip "cd $Pwd && tar -xvf mongodb-linux-x86_64-3.4.4.tgz  -C $Pwd >/dev/null"
sshpass -p "$passwd" ssh -o StrictHostKeyChecking=no root@$Ip "mv $Pwd/mongodb-linux-x86_64-3.4.4.tgz/ $Pwd/mongo"
#导入环境变量
sshpass -p "$passwd" ssh -o StrictHostKeyChecking=no root@$Ip "cat << wxb >>/etc/profile
export MONGODB_HOME=/data/program/mongo 
export PATH=\$MONGODB_HOME/bin:\$PATH
wxb"
#完成后执行一下刷新即可source /etc/profile



#创建master数据存放目录
mkdir -p $Pwd/{mongo_data,mongo_log,mongo_pid}
#创建 slave的存放目录
sshpass -p "$passwd" ssh -o StrictHostKeyChecking=no root@$Ip " mkdir -p $Pwd/{mongo_data,mongo_log,mongo_pid}"
#创建 arbiter的存放目录
sshpass -p "$passwd" ssh -o StrictHostKeyChecking=no root@$Ip "mkdir -p $Pwd/{mongo_arbiter_data,mongo_arbiter_log,mongo_arbiter_pid}"


# 11 服务器配置master服务

#创建master的配置文件
echo '
#master.conf
#数据目录
dbpath=$Pwd/mongo_data
#日志目录
logpath=$Pwd/mongo_log/master.log
#pid文件
pidfilepath=$Pwd/mongo_pid/master.pid

#节点之间用于验证文件,内容必须保持一致,权限600,仅Replica Set 模式有效
#keyFile=$Pwd/mongo/testKeyFile.file
#数据库分目录存放
directoryperdb=true
#日志追加式存放
logappend=true
#replica set的名字
replSet=testdb
#绑定的IP
bind_ip=0.0.0.0
#指定的端口
port=27017
#是否开启认证
#auth=true
#设置oplog的大小(MB)
oplogSize=100
#守护进程(后台运行)
fork=true
#不预先分配存储
#noprealloc=true
#最大连接数,默认2000
#maxConns=4000' > $Pwd/mongo/mongodb.conf



##配置 “slave”
sshpass -p "$passwd" ssh -o StrictHostKeyChecking=no root@$Ip "echo '
#slave.conf
#数据目录
dbpath=$Pwd/mongo_data
#日志目录
logpath=$Pwd/mongo_log/slave.log
#pid文件
pidfilepath=$Pwd/mongo_pid/slave.pid

#节点之间用于验证文件,内容必须保持一致,权限600,仅Replica Set 模式有效
#keyFile=$Pwd/mongo/testKeyFile.file

#数据库分目录存放
directoryperdb=true
#日志追加式存放
logappend=true
#replica set的名字
replSet=testdb
#绑定的IP
bind_ip=0.0.0.0
#指定slave的端口,单机部署的话端口不能一样
port=27017
#是否开启认证
#auth=true
#设置oplog的大小(MB)
oplogSize=100
#守护进程(后台运行)
fork=true
#不预先分配存储
#noprealloc=true
#最大连接数,默认2000
#maxConns=4000' > $Pwd/mongo/mongodb-slave.conf"


##配置裁决arbiter

#创建arbiter的配置文件
sshpass -p "$passwd" ssh -o StrictHostKeyChecking=no root@$Ip "echo '
#arbiter.conf
#数据目录
dbpath=$Pwd/mongo_arbiter_data
#日志目录
logpath=$Pwd/mongo_arbiter_log/arbiter.log
#pid文件
pidfilepath=$Pwd/mongo_arbiter_pid/arbiter.pid

#节点之间用于验证文件,内容必须保持一致,权限600,仅Replica Set 模式有效
#keyFile=$Pwd/mongo/arbiter_testKeyFile.file

#数据库分目录存放
directoryperdb=true
#日志追加式存放
logappend=true
#replica set的名字
replSet=testdb
#绑定的IP
bind_ip=0.0.0.0
#指定slave的端口,单机部署的话端口不能一样
port=27018
#是否开启认证
#auth=true
#设置oplog的大小(MB)
oplogSize=100
#守护进程(后台运行)
fork=true
#不预先分配存储
#noprealloc=true
#最大连接数,默认2000
#maxConns=4000' > $Pwd/mongo/mongodb-arbiter.conf"



#启动服务
echo "启动master,slave,arbiter,服务"
$Pwd/mongo/bin/mongod -f ../mongodb-master.conf >/dev/null

sshpass -p "$passwd" ssh -o StrictHostKeyChecking=no root@$Ip "$Pwd/mongo/bin/mongod -f ../mongodb-slave.conf >/dev/null"

sshpass -p "$passwd" ssh -o StrictHostKeyChecking=no root@$Ip "$Pwd/mongo/bin/mongod -f ../mongodb-arbiter.conf >/dev/null"


sleep 2


#开始配置replica set 副本集
echo "现在配置replica set 副本集"

Mongodb='$Pwd/mongo/bin/mongo'
$Mongodb <<EOF
use admin
cfg={
        "_id" : "testdb",
        "members" : [
                {
                        "_id" : 0,
                        "host" : "192.168.142.100:27017",
                        "priority" : 2
                },
                {
                        "_id" : 1,
                        "host" : "192.168.142.101:27017",
                        "priority" : 1
                },
                {
                        "_id" : 2,
                        "host" : "192.168.142.101:27018",
                        "arbiterOnly" : true
                }
        ]
}
rs.initiate(cfg)
rs.status()
exit;
EOF 
sleep 2
echo ”到此mongodb-replica set 部署完毕,如此就不会引发mongodb的路由回旋“

#部署认证的复制
cp /data/deploy/testKeyFile.file $Pwd/mongo/testKeyFile.file
sshpass -p "$passwd" scp /data/deploy/testKeyFile.file  root@$Ip:$Pwd/mongo
sshpass -p "$passwd" ssh -o StrictHostKeyChecking=no root@$Ip "cp $Pwd/mongo/testKeyFile.file $Pwd/mongo/arbiter_testKeyFile.file >/dev/null"
sshpass -p "$passwd" ssh -o StrictHostKeyChecking=no root@$Ip "cd $Pwd/mongo && chmod 600 *.file "
#创建用户
$Mongodb <<EOF
use admin
db.createUser({user:"wcb",pwd:"123456789",roles:[{role:"root",db:"wcb-core"}]})
exit;
EOF 
sleep 2
#开启密码验证和keyfile验证
sed -i 's/#auth=true/auth=true/g' $pwd/mongo/mongodb.conf && sed -i 's/#keyFile=$Pwd/mongo/testKeyFile.file/keyFile=$Pwd/mongo/testKeyFile.file/g' $pwd/mongo/mongodb.conf
sshpass -p "$passwd" ssh -o StrictHostKeyChecking=no root@$Ip "sed -i 's/#auth=true/auth=true/g' $Pwd/mongo/mongodb-slave.conf && sed -i 's/#keyFile=$Pwd/mongo/testKeyFile.file/keyFile=$Pwd/mongo/testKeyFile.file/g' $pwd/mongo/mongodb-slave.conf"
sshpass -p "$passwd" ssh -o StrictHostKeyChecking=no root@$Ip "sed -i 's/#auth=true/auth=true/g' $Pwd/mongo/mongodb-arbiter.conf && sed -i 's/#keyFile=$Pwd/mongo/testKeyFile.file/keyFile=$Pwd/mongo/testKeyFile.file/g' $pwd/mongo/mongodb-arbiter.conf"

#重启mongo
echo "启动master,slave,arbiter,服务"
$Pwd/mongo/bin/mongod -f ../mongodb-master.conf --shutdown >/dev/null

sshpass -p "$passwd" ssh -o StrictHostKeyChecking=no root@$Ip "$Pwd/mongo/bin/mongod -f ../mongodb-slave.conf --shutdown>/dev/null"

sshpass -p "$passwd" ssh -o StrictHostKeyChecking=no root@$Ip "$Pwd/mongo/bin/mongod -f ../mongodb-arbiter.conf --shutdown >/dev/null"
sleep 5

$Pwd/mongo/bin/mongod -f ../mongodb-master.conf  >/dev/null

sshpass -p "$passwd" ssh -o StrictHostKeyChecking=no root@$Ip "$Pwd/mongo/bin/mongod -f ../mongodb-slave.conf >/dev/null"

sshpass -p "$passwd" ssh -o StrictHostKeyChecking=no root@$Ip "$Pwd/mongo/bin/mongod -f ../mongodb-arbiter.conf  >/dev/null"
}

#mysql的安装
Mysql(){
        echo " MySQL 5.7.10 数据库的安装 " 
        
        #解压
        if [ ! -d "$Pwd/mysql-5.7.10-linux-glibc2.5-x86_64" ];then
                tar -xvf $App/mysql-5.7.10-linux-glibc2.5-x86_64.tar.gz -C $Pwd
        fi
        #修改文件名
        if [ ! -d "$Pwd/mysql" ];then
                mv $Pwd/mysql-5.7.10-linux-glibc2.5-x86_64 $Pwd/mysql
        fi
        #创建数据存储目录
        if [ ! -d "$Pwd/mysql/data" ];then
                mkdir -p $Pwd/mysql/data
        fi

        groupadd mysql
        useradd -r -g mysql mysql
        chown -R mysql:mysql $Pwd/mysql/
        chown -R mysql:mysql $Pwd/mysql/data/
        chown -R mysql $Pwd/mysql/
        chown -R mysql $Pwd/mysql/data/
        chmod -R 755 $Pwd/mysql/
        yum -y install libaio


        sleep 3s



        echo " " > /etc/my.cnf
        #导入配置文件
        cat << wxb > /etc/my.cnf
        [client]
        no-beep
        socket = $Pwd/mysql/mysql.sock
        # pipe
        # socket=0.0
        port=3306
        [mysql]
        default-character-set=utf8
        [mysqld]
        basedir= $Pwd/mysql
        datadir= $Pwd/mysql/data
        port=3306
        pid-file= $Pwd/mysql/mysqld.pid
        skip-grant-tables
        skip-name-resolve
        socket =  $Pwd/mysql/mysql.sock
        character-set-server=utf8
        default-storage-engine=INNODB   
        explicit_defaults_for_timestamp = true
        # Server Id.
        server-id=1
        max_connections=2000
        query_cache_size=0
        table_open_cache=2000
        tmp_table_size=246M
        thread_cache_size=300
        #限定用于每个数据库线程的栈大小。默认设置足以满足大多数应用
        thread_stack = 192k
        key_buffer_size=512M
        read_buffer_size=4M
        read_rnd_buffer_size=32M
        innodb_data_home_dir =  $Pwd/mysql/data
        innodb_flush_log_at_trx_commit=0
        innodb_log_buffer_size=16M
        innodb_buffer_pool_size=256M
        innodb_log_file_size=128M
        innodb_thread_concurrency=128
        innodb_autoextend_increment=1000
        innodb_buffer_pool_instances=8
        innodb_concurrency_tickets=5000
        innodb_old_blocks_time=1000
        innodb_open_files=300
        innodb_stats_on_metadata=0 
        innodb_file_per_table=1
        innodb_checksum_algorithm=0
        back_log=80
        flush_time=0
        join_buffer_size=128M
        max_allowed_packet=1024M
        max_connect_errors=2000
        open_files_limit=4161
        query_cache_type=0
        sort_buffer_size=32M
        table_definition_cache=1400
        binlog_row_event_max_size=8K
        sync_master_info=10000
        sync_relay_log=10000
        sync_relay_log_info=10000
        #批量插入数据缓存大小,可以有效提高插入效率,默认为8M
        bulk_insert_buffer_size = 64M
        interactive_timeout = 120
        wait_timeout = 120
        log-bin-trust-function-creators=1
        sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

        #
        # include all files from the config directory
        #
        !includedir /etc/my.cnf.d

wxb
#编译数据库
        cd $Pwd/mysql/bin/
        ./mysqld --user=mysql --basedir=$Pwd/mysql --datadir=$Pwd/mysql/data --initialize
        cp $Pwd/mysql/support-files/mysql.server /etc/init.d/mysqld

        if [ ! -x "/etc/init.d/mysqld" ];then
                chmod 755 /etc/init.d/mysqld
        fi
        cd /etc/init.d
        ./mysqld start
 #跳过密码 修改密码 
 cd $Pwd/mysql/bin
./mysql -uroot -p  <<EOF
UPDATE mysql.user SET authentication_string = PASSWORD('NEW_USER_PASSWORD')WHERE User = 'root' AND Host = 'localhost';
flush privileges;
quit
EOF
sed -i 's/skip-grant-tables/#skip-grant-tables/g' /etc/my.cnf
./etc/init.d/msyqld restart
 #授权用户 初始化数据库
./mysql -uroot -pNEW_USER_PASSWORD  <<EOF
grant all privileges on *.* to root@'%' identified by 'NEW_USER_PASSWORD';
flush privileges;
source /data/deploy/authority.sql;      
quit
EOF


        echo -e '\033[32m Mysql安装成功 需要修改配置文件后启动,以及启动后需进入数据库修改密码
        ————————————————————————————————————————————————————————————————————————————
        ————————————————————————————————————————————————————————————————————————————\033[0m'
        sleep 3s
#继续安装服务
        echo "继续选择需要安装的服务 不安装则exit退出"
        SELECT
        read -p "Please choose [1-6]:" num 


}
#node安装
Node(){
echo " node 的安装 "
#nvm 的 安装
if [ ! -d "/root/.nvm" ];then
curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.34.0/install.sh | bash
cat << wxb >>/root/.bashrc
export NVM_DIR="\$HOME/.nvm"
[ -s "\$NVM_DIR/nvm.sh" ] && \. "\$NVM_DIR/nvm.sh"  # This loads nvm
[ -s "\$NVM_DIR/bash_completion" ] && \. "\$NVM_DIR/bash_completion"  # This loads nvm bash_completion
wxb
source /root/.bashrc
fi
#node 的安装
if [ ! -d "/root/.nvm/versions/node" ];then
NVM_NODEJS_ORG_MIRROR=https://npm.taobao.org/mirrors/node
nvm install 8.11.4
fi
#pm2 的安装                     
if [ ! -d "/root/.pm2"  ];then
npm config set registry https://registry.npm.taobao.org
npm install -g pm2
fi
#继续安装服务
         echo "继续选择需要安装的服务 不安装则exit退出"
         SELECT
         read -p "Please choose [1-6]:" num 

}

SELECT
read -p "Please choose [1-6]:" num
case $num in
1)
Maven
;;
2)
Nginx
;;
3)
Redis
;;
4)
Mongo
;;
5)
Mysql
;;
6)
Node
;;
*)
clear
exit
;;
esac

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值