#!/bin/bash
####################################基础信息####################################
#
#system: centos7
#
#
#
#
#
#
#
################################################################################
####################################环境配置####################################
mkdir -p /work/{packages,config}
####################################通用变量####################################
PathPackage=/work/packages
pathConfig=/work/config
PrefixNginx=/usr/local/nginx
PrefixMysql=/usr/local/mysql
PrefixRedis=/usr/local/redis
prefixJava=/usr/local/java
prefixPhp=/usr/local/php
prefixDocker=/etc/docker
PATHUSER=/usr/local/
SystemPath=/etc/systemd/system
userSystemPath=/usr/lib/systemd/system
####################################脚本插件####################################
#~~~~~~~~~~~~~~~~~文字颜色~~~~~~~~~~~~~~~~~#
function info(){
# 32 绿色字
ARGE=${1:-'没有传参'}
echo -e "\033[1;32mINFO: $ARGE\033[0m"
}
function warnning(){
# 33 黄色字
ARGE=${1:-'没有传参'}
echo -e "\033[1;33mWARN: $ARGE\033[0m"
}
function error(){
# 31 红色字
ARGE=${1:-'没有传参'}
echo -e "\033[1;5;41;37mERROR: $ARGE\033[0m"
}
#~~~~~~~~~~~~~~~~~判断服务状态~~~~~~~~~~~~~~~~~#
#"1.nginx 2.php 3.mysql 4.redis 5.java"
#"6.zabbix-agent2 7.dockre 8.lnmp 9.all 10.exit"
function server_status(){
STATUS=0
if [ -f $number ];then
warnning "$servername 已安装"
STATUS=1
fi
}
####################################功能模块####################################
function install_nginx(){
number=/usr/local/nginx/sbin/nginx
servername=nginx
server_status
if [ ! $STATUS == 1 ];then
info "1. 基础环境"
useradd -r -s /sbin/nologin -M www &>/dev/null ##创建nginx用户
yum install -y gcc gcc-c++ glibc glibc-devel pcre pcre-devel zlib zlib-devel openssl openssl-devel >/dev/null
info "2. 下载...跳过"
# wget -O https://nginx.org/download/nginx-1.22.0.tar.gz &>/dev/null
info "3. 解压"
cd $PathPackage
tar -xf $PathPackage/nginx-1.22.0.tar.gz
info "4. 编译安装nginx...请耐心等待" #echo $?查看是否出错
cd $PathPackage/nginx-1.22.0
./configure --prefix=$PrefixNginx --user=www --with-http_stub_status_module --with-http_ssl_module &>/dev/null
make &>/dev/null && make install &>/dev/null
info "5. 设置systemd管理"
ln -s $PrefixNginx/sbin/* /sbin/
cp $pathConfig/nginx/nginx.service $userSystemPath
info "6. 配置nginx"
\cp -f $pathConfig/nginx/nginx.conf $PrefixNginx/conf/
mkdir -p $PrefixNginx/conf/vhost/ && \cp -f $pathConfig/nginx/default.conf /usr/local/nginx/conf/vhost/
info "7. 启动nginx"
systemctl enable --now nginx
fi
}
function install_zabiix_agent(){
number=/sbin/zabbix_agent2
servername=zabbix_agent2
server_status
if [ ! $STATUS == 1 ];then
if [ !`ss -antl |grep 10050` ];then
info "1.获取zabbix源"
rpm -Uvh https://repo.zabbix.com/zabbix/5.0/rhel/7/x86_64/zabbix-release-5.0-1.el7.noarch.rpm &>/dev/null
sed -i 's#http://repo.zabbix.com#https://mirrors.aliyun.com/zabbix#g' /etc/yum.repos.d/zabbix.repo
sed -i 's/enabled=0/enabled=1/' /etc/yum.repos.d/zabbix.repo
info "2.安装zabbix-agent2"
yum -y install zabbix-agent2 &>/dev/null
info "3.启动zabbix-agent2"
systemcel enabled --now zabbix-agent2 &>/dev/null
fi
fi
}
function install_mysql(){
number=/usr/local/mysql/bin/mysql
servername=mysql
server_status
if [ ! $STATUS == 1 ];then
info "1. 解决依赖"
yum -y remove `rpm -qa | grep mariadb` &>/dev/null
yum install -y libaio-* &>/dev/null
info "2. 创建mysql用户"
if [ ! `cat /etc/passwd |grep 'mysql'` ];then
useradd -M -s /sbin/nologin -r mysql
fi
info "3. 解压,安装,设置MySQL目录权限"
tar -xf $PathPackage/mysql-5.7.36-linux-glibc2.12-x86_64.tar.gz -C $PATHUSER
mv $PATHUSER/mysql-5.7.36-linux-glibc2.12-x86_64/ $PrefixMysql
chown -R mysql.mysql $PrefixMysql
# 4. 设置systemd管理"
ln -s $PrefixMysql/bin/* /bin/
echo 'export PATH=/usr/local/mysql/bin:$PATH' >> /etc/profile && source /etc/profile
cd && touch mysqld.service && chmod 644 mysqld.service
cp $pathConfig/mysql/mysqld.service $SystemPath/mysqld.service
cd /usr/lib/tmpfiles.d && touch mysql.conf && chmod 644 mysql.conf
echo 'd /usr/local/mysql/data 0750 mysql mysql -' > /usr/lib/tmpfiles.d/mysql.conf
info "5. 配置服务器启动选项,初始化数据目录"
cp $pathConfig/mysql/my.cnf /etc/my.cnf
mkdir -p /data/mysql/mysql3306/{data,logs,tmp}
chown -R mysql:mysql /data/mysql/
info "6. 初始化MySQL"
cd $PrefixMysql
./bin/mysqld --defaults-file=/etc/my.cnf --initialize &>/dev/null
warnning "----请及时修改密码,密码:【SET PASSWORD = PASSWORD('lnmp@123');】"
grep "temporary password" /data/mysql/mysql3306/data/error.log
info "7. 启动mysql"
systemctl enable --now mysqld
fi
}
function install_redis(){
number=/usr/local/redis/bin/redis-cli
servername=redis
server_status
if [ ! $STATUS == 1 ];then
# 安装redis
info "1. 创建redis用户"
if [ ! `cat /etc/passwd |grep 'redis'` ];then
useradd -M -s /sbin/nologin -r redis
fi
info "2. 解压redis安装包..."
tar -xf $PathPackage/redis-5.0.14.tar.gz -C $PATHUSER
mv $PATHUSER/redis-5.0.14 $PrefixRedis
cd $PrefixRedis
info "3. 解决依赖"
yum -y install gcc gcc-c++ &>/dev/null
info "4. 安装redis..."
make &>/dev/null && make install PREFIX=$PrefixRedis &>/dev/null
info "5. 设置systemd管理"
cp $PrefixRedis/src/redis-server $PATHUSER
cp $PrefixRedis/src/redis-cli $PATHUSER
\cp -f $pathConfig/redis/redis.service $SystemPath/redis.service
info "6. 配置启动redis..."
\cp -f $pathConfig/redis/redis.conf $PrefixRedis &>/dev/null
systemctl enable --now redis
fi
}
function install_jdk(){
number=/usr/local/java/jre/bin/java
servername=java
server_status
if [ ! $STATUS == 1 ];then
info "1.环境配置"
#1.1新建一个自定义目录用于存放下载或挂载
mkdir /data/jdk
info "2.解压"
#2.1将软件包上传服务器并解压
cd $PathPackage
tar -xf jdk-8u91-linux-x64.tar.gz
info "3.移动解压后的文件夹" #(jdk1.8.0_91)到usr目录下并重命名(/usr/java)
mv jdk1.8.0_91/ $prefixJava
info "4.配置环境变量" #(vim /etc/profile)
# cp $pathConfig/java/java.sh /etc/profile.d/
echo -e "export JAVA_HOME=/usr/local/java\nexport PATH=$PATH:$JAVA_HOME/bin\nexport CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar\nexport JRE_HOME=$JAVA_HOME/jre" >> /etc/profile
info "5.重新生效环境变量"
# warnning "5.手动输入-生效" #2.4重新生效环境变量配置文件
source /etc/profile
# warnning "source /etc/profile.d/java.sh"
fi
}
function install_php(){
number=$prefixPhp/etc/php.ini
servername=php
server_status
if [ ! $STATUS == 1 ];then
info "1. 解决依赖"
yum -y install libxslt-devel bxml2 libxml2-devel openssl openssl-devel curl-devel libjpeg-devel libpng-devel freetype-devel libmcrypt-devel libzip-devel pcre-devel &>/dev/null
info "2. 创建www用户"
if [ ! `cat /etc/passwd |grep 'www'` ];then
useradd -M -s /sbin/nologin -r www
fi
info "3. 解压安装包"
cd $PathPackage && tar -xf php-7.3.30.tar.gz
info "4. 正在安装PHP..."
cd $PathPackage/php-7.3.30
./configure --prefix=$prefixPhp --enable-fpm --with-fpm-user=www --with-fpm-group=www --with-curl --with-freetype-dir --with-gd --with-gettext --with-iconv-dir --with-libdir=lib64 --with-libxml-dir --with-mysqli --with-pdo-mysql --with-openssl --with-pcre-regex --with-pdo-sqlite --with-pear --with-png-dir --with-xmlrpc --with-xsl --with-zlib --enable-bcmath --enable-libxml --enable-inline-optimization --enable-mbregex --enable-mbstring --enable-opcache --enable-pcntl --enable-shmop --enable-soap --enable-sockets --enable-sysvsem --enable-xml >&/dev/null
info "5. 正在编译php7...请耐心等待"
make -j 5 &>/dev/null && make install &>/dev/null
info "6. 设置命令路径优化"
ln -s $prefixPhp/sbin/php-fpm /usr/sbin/
ln -s $prefixPhp/bin/* /bin/
cp $prefixPhp/etc/{php-fpm.conf.default,php-fpm.conf}
cp $prefixPhp/etc/php-fpm.d/{www.conf.default,www.conf}
info "7. 配置php7"
cp sapi/fpm/php-fpm.service $userSystemPath
cp $PathPackage/php-7.3.30/php.ini-production $prefixPhp/etc/php.ini
sed -i 's#;date.timezone =#date.timezone = Asia/Shanghai#' $prefixPhp/etc/php.ini
sed -i 's#max_execution_time = .*#max_execution_time = 300#' $prefixPhp/etc/php.ini
sed -i 's#post_max_size =.*#post_max_size = 32M#' $prefixPhp/etc/php.ini
sed -i 's#max_input_time = .*#max_input_time = 300#' $prefixPhp/etc/php.ini
info "8. 启动php-fpm"
systemctl enable --now php-fpm &>/dev/null
fi
}
function install_docker(){
number=/bin/docker
servername=docker
server_status
if [ ! $STATUS == 1 ];then
info "1.卸载部分已安装docker软件"
yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine &>/dev/null
info "2.安装yum-config-manager和yum-utils"
yum install -y yum-utils &>/dev/null
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo &>/dev/null
sed -i 's/download.docker.com/mirrors.aliyun.com\/docker-ce/g' /etc/yum.repos.d/docker-ce.repo
info "3.安装20.10版本Docker"
yum -y install docker-ce-20.10.8-3.el7 docker-ce-cli-20.10.8-3.el7 containerd.io &>/dev/null
info "4.配置加速源"
[ ! -d /etc/docker ] && mkdir /etc/docker && touch /etc/docker/daemon.json
echo -e "{\n\"registry-mirrors\": [\n\t\"https://hub-mirror.c.163.com\",\n\t\"https://mirror.baidubce.com\"\n ]\n}" >> /etc/docker/daemon.json
info "5.安装Docker-Compose"
curl -L https://download.fastgit.org/docker/compose/releases/download/1.27.4/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose &>/dev/null
chmod +x /usr/local/bin/docker-compose
info "6.启动docker"
systemctl enable --now docker &>/dev/null
fi
}
function install_lnmp(){
install_nginx
install_redis
install_mysql
install_php
}
function install_all(){
install_nginx
install_redis
install_mysql
install_jdk
install_zabiix_agent
install_docker
install_php
}
function mian (){
info "请选择你要安装的程序 default:lnmp"
info "1.nginx 2.php 3.mysql 4.redis 5.java"
info "6.zabbix-agent2 7.dockre 8.lnmp 9.all 10.exit"
read -p "请选择 1-10 " DFT
case $DFT in
1)
install_nginx
;;
2)
install_php
;;
3)
install_mysql
;;
4)
install_redis
;;
5)
install_jdk
;;
6)
install_zabiix_agent
;;
7)
install_docker
;;
8)
install_lnmp
;;
9)
install_all
;;
10)
exit
;;
*)
install_lnmp
esac
}
mian