Zabbix Server 6.4 Shell脚本

#!/bin/bash
#Zabbix6.4.0 shell script
#2023-03-17
#Zabbix-6.4.0服务器搭建
#OS: CentOs 7.x
#Version 1.0
function chk_base() {
clear
echo "###########################################################"
echo "# Centos 7 部署 Zabbix 6.4.0                              #"
echo "###########################################################"
for i in `seq -w 3 -1 0`
do
  echo -ne "$i 秒\b\b\b\b"
  sleep 1
done
MYVER=`cat /etc/redhat-release |awk '{print $4}'| awk -F [.] '{print $1}'`
#expr 1 + $MYVER &>/dev/null
if [ $MYVER -ne 7 ];then
   echo "请在 7 版本的系统里面运行该脚本............................"
   exit
fi
if [ $UID -ne 0 ]; then
   echo "请用 root 用户运行该脚本..................................."
   exit
fi
echo "网络检测中................................................."
sleep 1
#检测有无外网
ping -c 1 114.114.114.114 > /dev/null 2>&1
if [ $? -eq 0 ];then
  echo "网络正常,程序将继续运行..................................."
  sleep 1
else
  echo "正在进行第二次网络检测,请稍候............................."
  sleep 1
  curl www.baidu.com >/dev/null 2>&1
  if [ $? -ne 0 ]; then
     echo "检测到网络连接有异常,请检查您的网络设置..................."
     exit
   else
     echo "网络正常,程序将继续运行..................................."
     sleep 1
   fi
fi

##关闭防火墙
systemctl stop firewalld >/dev/null 2>&1
systemctl disable firewalld >/dev/null 2>&1
setenforce 0
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
echo "-----------------------------------------------------------"
echo "开始部署LNMP .............................................."
yum install epel-release net-tools wget vim lrzsz -y >/tmp/yl1.log 2>&1
}

function mysql_ins() {

############# yum 安装 mariadb 10.6.12 ###############
## zabbix 6.4 对数据库有要求的
# Must be at least (10.05.00)
## 创建 mariadb 的 repo 文件
cat << EOF > /etc/yum.repos.d/Mariadb.repo
[mariadb]
name = MariaDB
baseurl = https://mirror.mariadb.org/yum/10.6.12/centos74-amd64/
gpgkey= https://mirror.mariadb.org/yum/RPM-GPG-KEY-MariaDB
gpgcheck=1
enabled=1
skip_if_unavailable = 1
EOF
yum clean all >/tmp/yum10.log 2>&1
yum makecache >/tmp/yum11.log 2>&1
PSMYSQL0=`ps -ef |grep mariadbd |grep -v grep | wc -l`
if [ $PSMYSQL0 -ge 1 ]; then
   echo "mysql或者mariadb 已运行,不需要再安装。"
   echo ''
   sleep 1
else
   #yum 安装
   yum install mariadb mariadb-server mariadb-devel -y >/tmp/mariadbins.log 2>&1
    #启动mariadb
    systemctl start mariadb >/tmp/mariadb1.log 2>&1
    systemctl enable mariadb >/tmp/mariadb2.log 2>&1
    PSMYSQL1=`ps -ef |grep mariadbd |grep -v grep | wc -l`
    if [ $PSMYSQL1 -lt 1 ]; then
       echo 'mariadb 启动有问题,请检查。'
       exit
    else
       mysqladmin -u root password Dui3621
 netstat -luntp|grep mariadbd|awk '{ for(i=1; i<=8; i++) {printf "%s ",$i} ;print ""}'
     echo -e "\033[31m mariadb 部署完成,程序将继续运行。\033[0m "
     sleep 1
   fi
   echo "-----------------------------------------------------------"
   sleep 1
fi
}

################# yum 安装 PHP7.4 ########################
function php_ins() {
PSPHP0=`ps -ef |grep php-fpm |grep -v grep | wc -l`
if [ $PSPHP0 -ge 1 ]; then
   echo "php 已运行,不需要再安装。"
   sleep 1
else
   yum -y remove php* >/tmp/php_remove.log 2>&1
   yum install epel-release -y >/tmp/epel.log 2>&1
rpm -Uvh http://rpms.remirepo.net/enterprise/remi-release-7.rpm >/tmp/repo_update2.log 2>&1
yum install php74 php74-php php74-php-devel php74-php-mysqlnd php74-php-opcache php74-php-mbstring php74-php-bcmath php74-php-gd php74-php-xml php74-php-fpm -y >/tmp/php.log 2>&1
  sed -i '/max_execution_time/s/30/300/g' /etc/opt/remi/php74/php.ini
  sed -i '/max_input_time/s/60/300/g' /etc/opt/remi/php74/php.ini
  sed -i '/post_max_size/s/8M/16M/g' /etc/opt/remi/php74/php.ini
 sed -i 's/\;always_populate_raw_post_data = On/always_populate_raw_post_data = On/g' /etc/opt/remi/php74/php.ini
sed -i 's/\;date.timezone.*/date.timezone \= PRC/g' /etc/opt/remi/php74/php.ini
  systemctl start php74-php-fpm >/tmp/php1.log 2>&1
  systemctl enable php74-php-fpm >/tmp/php2.log 2>&1
  #判断php-fpm 是否正常启动
  PSPHP1=`ps -ef |grep php-fpm |grep -v grep | wc -l`
    if [ $PSPHP1 -lt 1 ]; then
       echo 'php-fpm 启动有问题,请检查。'
       exit
    else
 netstat -luntp|grep php-fpm|awk '{ for(i=1; i<=8; i++) {printf "%s ",$i} ;print ""}'
      ln -s /opt/remi/php74/root/usr/bin/php /usr/bin/php
      echo -e "\033[31m php 部署完成,程序将继续运行。\033[0m "
      sleep 1
   fi
echo '-----------------------------------------------------------'
sleep 1
fi
}
############# yum 安装 nginx ####################
function nginx_ins() {
PSNGINX0=`netstat -luntp |grep nginx|wc -l`
if [ $PSNGINX0 -ge 1 ]; then
  echo "nginx 已运行,不需要再安装。"
  sleep 1
else
  yum install nginx -y >/tmp/nginxins.log 2>&1
  cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.bak
cat << EOF >/etc/nginx/nginx.conf
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;
include /usr/share/nginx/modules/*.conf;
events {
  worker_connections 1024;
}
http {
 log_format main '\$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;
 sendfile on;
 tcp_nopush on;
 tcp_nodelay on;
 keepalive_timeout 65;
 types_hash_max_size 2048;
 include /etc/nginx/mime.types;
 default_type application/octet-stream;
 include /etc/nginx/conf.d/*.conf;
 server_tokens off;
 gzip on;
 server {
 listen 80;
 server_name localhost;
 include /etc/nginx/default.d/*.conf;
 location / {
     root /usr/share/nginx/html;
     index      index.php index.html index.htm;
 }
     error_page 404 /404.html;
 location = /40x.html {
 root /usr/share/nginx/html;
 }
 error_page 500 502 503 504 /50x.html;
 location = /50x.html {
 root /usr/share/nginx/html;
 }
 location ~ \.php$ {
 root /usr/share/nginx/html;
 fastcgi_pass 127.0.0.1:9000;
 fastcgi_index index.php;
 fastcgi_param SCRIPT_FILENAME \$document_root\$fastcgi_script_name;
 include fastcgi_params;
 }
 }
}
EOF
   systemctl start nginx >/tmp/nginx1.log 2>&1
   systemctl enable nginx >/tmp/nginx2.log 2>&1
    #判断nginx 是否正常启动
    PSNGINX1=`netstat -luntp |grep nginx|wc -l`
    if [ $PSNGINX1 -lt 1 ]; then
      echo 'nginx 启动有问题,请检查。'
      exit
    else
 netstat -luntp|grep nginx|awk '{ for(i=1; i<=8; i++) {printf "%s ",$i} ;print ""}'
 echo -e "\033[31m nginx 部署完成,程序将继续运行。\033[0m "
     sleep 1
    fi
echo "-----------------------------------------------------------"
echo ' '
fi
}
################# zabbix 6.4.0 源码安装 ############
function zab_ins() {
echo "开始安装zabbix 6.4.0 ......................................"
IPADD=`ifconfig |grep "inet"|head -1|awk '{print $2}'`
#安装Zabbix的一些依赖包
ZAB=`ps -ef |grep zabbix_server |grep -v grep | wc -l`
if [ $ZAB -ge 1 ]; then
   echo 'Zabbix 已运行,不需要再安装。'
   echo ''
   date
   echo '+++++++++++++++++++++++++++++++++++++++++++++'
   sleep 1
else
 echo "开始安装zabbix 6.4.0 依赖包................................"
 yum install gcc gcc-c++ curl-devel net-snmp-devel libevent-devel fping -y >/tmp/yl2.log 2>&1
 #判断/opt/下面是否有zabbix6.4.0的源码包
 if [ ! -f "/opt/zabbix-6.4.0.tar.gz" ];then
    echo "zabbix6.4.0 源码包不存在,将在网上下载....................."
    echo ''
    sleep 1
    cd /opt
 wget -q https://cdn.zabbix.com/zabbix/sources/stable/6.4/zabbix-6.4.0.tar.gz
    if [ $? -ne 0 ]; then
       echo ''
       echo "下载有问题,请检查........................................."
       exit
   else
       echo "zabbix-6.4.0 下载完成......................................"
   fi
fi
 sleep 1
 echo "开始源码编译安装zabbix-6.4.0 .............................."
 #源码安装zabbix-6.4.0
 mkdir -p /www/zabbix
 cd /opt
 tar zxf zabbix-6.4.0.tar.gz
 cd zabbix-6.4.0/
 export CFLAGS="-std=gnu99"
 ./configure --prefix=/usr/local/zabbix --enable-server --enable-agent --with-mysql --with-net-snmp --with-libcurl >/tmp/zabybl.log 2>&1

if [ $? -ne 0 ]; then
   echo "Zabbix 6.4.0 预编译错误,日志文件 /tmp/zabybl.log"
   exit
fi
make >/tmp/zabmake.log 2>&1
if [ $? -ne 0 ]; then
   echo "Zabbix 6.4.0 编译错误,日志文件 /tmp/zabmake.log"
   exit
fi
make install >/tmp/zabins.log 2>&1
cd /opt/zabbix-6.4.0/ui
#cd /opt/zabbix-4.x.0/frontends/php #zabbix 4.x 的版本
cp -ra ./* /www/zabbix
chown -R nginx.nginx /www/zabbix
#创建zabbix数据库
echo "正在创建 zabbix 数据库....................................."
 MYSQL_CMD='mysql -uroot -pDfsc123321 -e'
 $MYSQL_CMD 'create database zabbix character set utf8 collate utf8_bin;' >/tmp/zab_create_dak.log 2>&1
 $MYSQL_CMD 'grant all on zabbix.* to zabbix@"localhost" identified by "winD5688";' >/tmp/zabuser.log 2>&1
 $MYSQL_CMD 'flush privileges;' >/tmp/zabflush.log 2>&1
 sleep 1
#导入zabbix的数据架构(zabbix6有5个sql文件)
echo "导入zabbix的数据架构......................................."
cd /opt/zabbix-6.4.0/database/mysql
mysql -uzabbix -pwinD8908 zabbix < schema.sql >/tmp/zab_schema.log 2>&1
mysql -uzabbix -pwinD8908 zabbix < images.sql >/tmp/zab_images.log 2>&1
mysql -uzabbix -pwinD8908 zabbix < data.sql >/tmp/zab_data.log 2>&1
mysql -uzabbix -pwinD8908 zabbix < double.sql >/tmp/zab_data.log 2>&1
mysql -uzabbix -pwinD8908 zabbix < history_pk_prepare.sql >/tmp/zab_data.log 2>&1
 echo "导入完成..................................................."
 sleep 2
 echo "修改配置文件..............................................."
#这个配置文件,就是图形界面安装zabbix填写的连接mysql的信息
cat << EOF > /www/zabbix/conf/zabbix.conf.php
<?php
// Zabbix GUI configuration file.
global \$DB;
\$DB['TYPE'] = 'MYSQL';
\$DB['SERVER'] = 'localhost';
\$DB['PORT'] = '3306';
\$DB['DATABASE'] = 'zabbix';
\$DB['USER'] = 'zabbix';
\$DB['PASSWORD'] = 'winD5688';
// Schema name. Used for IBM DB2 and PostgreSQL.
\$DB['SCHEMA'] = '';
\$ZBX_SERVER = 'localhost';
\$ZBX_SERVER_PORT = '10051';
\$ZBX_SERVER_NAME = 'IDC监控平台';
\$IMAGE_FORMAT_DEFAULT = IMAGE_FORMAT_PNG;
EOF
 sed -i 's/\# DBPort=/DBPort=3306/g' /usr/local/zabbix/etc/zabbix_server.conf
sed -i 's/\# DBPassword=/DBPassword=winD8908/g' /usr/local/zabbix/etc/zabbix_server.conf
 sed -i 's/\# DBHost=localhost/DBHost=localhost/g' /usr/local/zabbix/etc/zabbix_server.conf
chown -R nginx.nginx /www/zabbix
##zabbix 启动时候不能以root运行,只能以zabbix用户启动。
useradd -s /sbin/nologin zabbix
ln -s /usr/local/zabbix/sbin/* /usr/local/bin/
## php-fpm 以nginx 用户启动
sed -i 's#user = apache#user = nginx#g' /etc/opt/remi/php74/php-fpm.d/www.conf
sed -i 's#group = apache#group = nginx#g' /etc/opt/remi/php74/php-fpm.d/www.conf
systemctl restart php74-php-fpm >/tmp/php_restart.log 2>&1
## 修改nginx.conf 的配置文件,root 改为 zabbix 网站代码目录
sed -i 's#/usr/share/nginx/html#/www/zabbix#g' /etc/nginx/nginx.conf
## 修改zabbix中文字体
cd /www/zabbix/assets/fonts
mv DejaVuSans.ttf DejaVuSans.ttf.bak
wget -q http://106.12.88.74/softdown/font/simfang.ttf
if [ $? -eq 0 ]; then
   mv simfang.ttf DejaVuSans.ttf
   chown -R nginx:nginx DejaVuSans.ttf
else
   echo 'zabbix 中文字体未下载成功,请手动下载。....................'
fi
nginx -s reload >/tmp/nginx_reload.log 2>&1
##修改配置文件
touch /var/log/zabbix_server.log
chown -R zabbix:zabbix /var/log/zabbix_server.log
sed -i 's/# CacheSize=32M/CacheSize=256M/g' /usr/local/zabbix/etc/zabbix_server.conf
 sed -i 's/# CacheUpdateFrequency=10/CacheUpdateFrequency=30/g' /usr/local/zabbix/etc/zabbix_server.conf
 sed -i 's#LogFile=/tmp/zabbix_server.log#LogFile=/var/log/zabbix_server.log#g' /usr/local/zabbix/etc/zabbix_server.conf
#配置systemd启动 zabbix_server
cat <<EOF > /etc/systemd/system/zabbix-server.service
[Unit]
Description=Zabbix Server
After=syslog.target network.target network-online.target
Wants=network.target network-online.target
[Service]
Type=simple
User=root
ExecStart=/usr/local/zabbix/sbin/zabbix_server -c /usr/local/zabbix/etc/zabbix_server.conf
RemainAfterExit=yes
PIDFile=/var/run/zabbix/zabbix_server.pid
[Install]
WantedBy=multi-user.target
EOF
############配置systemd zabbix_agent
cat <<EOF > /etc/systemd/system/zabbix-agent.service
[Unit]
Description=Zabbix Agent
After=syslog.target network.target network-online.target
Wants=network.target network-online.target
[Service]
Type=simple
User=root
ExecStart=/usr/local/zabbix/sbin/zabbix_agentd -c /usr/local/zabbix/etc/zabbix_agentd.conf
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
EOF
##加入开机启动并启动
systemctl daemon-reload
systemctl enable zabbix-agent --now >/tmp/zabclient_start.log 2>&1
systemctl enable zabbix-server --now >/tmp/zabserver_start.log 2>&1
#--now 就是把原来的 enable之后start命令给合并到一起了
#systemctl中关于--now参数的解释:
#当和enable一起使用的时候,设置为开机启动,然后启动服务
#当和disable一起使用的时候,取消开机启动,关闭服务
#只有当disable或者enable操作成功了之后,关闭或启动服务的操作才会发生。
if [ $? -ne 0 ]; then
   echo "zabbix_server 启动有问题,请检查/tmp/zabserver_start.log 。"
   sleep 2
   exit
fi
sleep 2
echo "修改配置文件完成 .........................................."
echo -e "\033[31m zabbix 6.4.0 全部安装完成。\033[0m "
netstat -luntp|grep zabbix|awk '{ for(i=1; i<=8; i++) {printf "%s ",$i} ;print ""}'
echo -e "Zabbix 登录地址:http://$IPADD \n默认用户名: Admin 密码为:zabbix"
fi
}
START_TIME=`date +%s`
chk_base
mysql_ins
php_ins
nginx_ins
zab_ins
date
END_TIME=`date +%s`
#程序总花费的时间,计算出来是秒为单位的。
TOTAL_TIME=`expr $(($END_TIME-$START_TIME))`
#程序总花费的时间 对 3600 取模,得到小时数
TOTAL_H=`expr $TOTAL_TIME / 3600`
#程序总花费的时间对3600取余,再对 60 取模,得到 分钟数
TOTAL_M=`expr $TOTAL_TIME % 3600 / 60`
##程序总花费的时间对3600取余,再对 60 取余,得到 秒数
TOTAL_S=`expr $TOTAL_TIME % 3600 % 60`
echo "程序总耗时: $TOTAL_H 小时 $TOTAL_M 分 $TOTAL_S 秒 。"
#############################################################