#!/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 秒 。" #############################################################