#!/bin/bash####################################基础信息######################################system: centos7###########################################################################################################################环境配置####################################mkdir -p /work/{packages,config}####################################通用变量####################################PathPackage=/work/packagespathConfig=/work/configPrefixNginx=/usr/local/nginxPrefixMysql=/usr/local/mysqlPrefixRedis=/usr/local/redisprefixJava=/usr/local/javaprefixPhp=/usr/local/phpprefixDocker=/etc/dockerPATHUSER=/usr/local/SystemPath=/etc/systemd/systemuserSystemPath=/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