本次安装环境
操作系统版本 | CentOS 7.8 |
Nginx版本 | 1.20 |
Mysql版本 | 8.0.30 |
PHP版本 | 7.2 |
Zabbix版本 | 6.0.1 |
详细环境需求可以参考官网文档:Zabbix官网-安装要求
一键部署脚本
#!/bin/bash
#如果脚本退出码非0则执行这个函数
set -eo pipefail
trap "on_ERR;" ERR
on_ERR() {
local ret=$? cmd="$BASH_COMMAND" f="${BASH_SOURCE:--}" lino="${BASH_LINENO[0]}"
printf >&2 "ERROR: %s:%s: \033[7m%s\033[0m exit with code %s.\n" "$f" "$lino" "$cmd" "$ret"
exit 24
}
printf "\n"
echo "本脚本可重复执行,是否执行脚本? 按任意键继续, 按Ctrl+C退出"
read
echo -e "\033[32m 关闭系统防火墙 \033[0m"
echo '--------------------------------------------------------------------------------'
systemctl stop firewalld
systemctl disable firewalld
setenforce 0 || :
sed -i 's/^SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
printf "\n"
printf "\n"
echo -e "\033[32m 开始部署 Mysql8.0.30 \033[0m"
echo '--------------------------------------------------------------------------------'
sleep 3
cd /usr/local/src/
if [ ! -f mysql-8.0.30-1.el7.x86_64.rpm-bundle.tar ]; then
wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.30-1.el7.x86_64.rpm-bundle.tar
fi
tar -xvf mysql-8.0.30-1.el7.x86_64.rpm-bundle.tar
rpm -ivh mysql-community-* --force --nodeps
mkdir -p /data/mysql
chown mysql:mysql /data/mysql
cat > /etc/my.cnf << EOF
[mysqld]
datadir=/data/mysql
socket=/var/lib/mysql/mysql.sock
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
character-set-server=utf8mb4
collation-server=utf8mb4_general_ci
port=3306
lower_case_table_names=1
max_connections=500
EOF
yum install libaio -y
systemctl enable mysqld
systemctl start mysqld
#修改YUM 源
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak
wget -cO /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
#安装密码生成工具
yum install -y expect
#获取默认密码
MYSQL_PASSWD=`cat /var/log/mysqld.log | grep password |awk '{print $13}'`
update_passwd (){
set -e
trap "on_ERR;" ERR
cat > ~/.my.cnf << EOF
[mysql]
user=root
password='$MYSQL_PASSWD'
EOF
#生成新密码,并删除密码中的双引号和单引号
NEW_PASSWD=`mkpasswd -l 18 -d 2 -c 3 -C 4 -s 5 | sed $'s/[\'\"]//g'`
#修改root密码
mysql --connect-expired-password -e "alter user 'root'@'localhost' identified by '$NEW_PASSWD'; flush privileges;"
cat > ~/.my.cnf << EOF
[mysql]
user=root
password='$NEW_PASSWD'
EOF
}
if [ ! -f ~/.my.cnf ];
then
update_passwd
fi
if [ $(sed -n '3p' ~/.my.cnf |awk -F '=' '{print $2}' |sed "s/'//"g) == "$MYSQL_PASSWD" ];
then
update_passwd
fi
#由于MySQL8.0 有密码验证组件,若希望设置简单的密码,需要修改服务验证条件
# 1、密码检查等级,0/LOW、1/MEDIUM、2/STRONG # 2、密码的最短长度 # 3、密码至少要包含的小写字母个数和大写字母个数
mysql -e "set global validate_password.policy=0; set global validate_password.length=6; set global validate_password.mixed_case_count=0;"
#创建zabbix库(这里zabbix对库的编码格式有需求)
ZABBIX_DB=`mysql -e "show databases;" | grep -w zabbix || :`
if [ -z "$ZABBIX_DB" ]
then
mysql -e "create database zabbix character set utf8 collate utf8_bin;"
else
echo "zabbinx 数据库已存在"
fi
#创建用户(指定使用的身份验证插件)
MYSQL_ZABBIX_USER=`mysql -e "SELECT EXISTS(SELECT 1 FROM mysql.user WHERE user = 'zabbix');" |sed -n '2p'`
if [ "$MYSQL_ZABBIX_USER" == 0 ]
then
mysql -e "create user 'zabbix'@'localhost' identified with mysql_native_password by 'Zabbix@123';"
else
echo "zabbinx 用户已存在"
fi
#给'zabbix'@'localhost' 这个用户,授予所有操作权限
mysql -e "grant all privileges on zabbix.* to 'zabbix'@'localhost'; flush privileges;"
printf "\n"
printf "\n"
echo -e "\033[32m 开始部署 Hginx-1.20.0 \033[0m"
echo '--------------------------------------------------------------------------------'
sleep 3
rpm -Uvh http://nginx.org/packages/centos/7/x86_64/RPMS/nginx-1.20.0-1.el7.ngx.x86_64.rpm --force
mkdir -p /data/web
mv /etc/nginx/conf.d/default.conf /etc/nginx/conf.d/default.conf.bak
sed -i '30i server { \
listen 80; \
server_name localhost; \
root /data/web; \
location / { \
index index.php index.html index.htm; \
} \
location ~ \.php$ { \
fastcgi_pass 127.0.0.1:9000; \
fastcgi_index index.php; \
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; \
include fastcgi_params; \
} \
}' /etc/nginx/nginx.conf
systemctl enable nginx
systemctl start nginx
NGINX_PROT=`netstat -lntp |grep -w 80 || :`
if [ -z "$NGINX_PROT" ];
then
echo "端口未监听,请查看nginx服务状态和日志"
exit 2
fi
printf "\n"
printf "\n"
echo -e "\033[32m 开始部署php7及其它依赖软件 \033[0m"
echo '--------------------------------------------------------------------------------'
sleep 3
yum -y install epel-release
trap - ERR
timeout 30 rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm --force
if [ $? != 0 ]
then
rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm --force
fi
trap ERR
yum clean all
yum makecache
printf "\n"
echo -e '\033[34m
如果下载比较慢,可以先下载安装后再执行部署脚本
https://gitee.com/hejianzhao/source/raw/master/php72w.tar.gz
tar xf php72w.tar.gz
#解压后,执行下面命令安装,注意安装顺序,别乱改
yum -y install gcc gcc-c++ libargon2 -y
rpm -Uvh php72w-cli-7.2.34-1.w7.x86_64.rpm \
php72w-common-7.2.34-1.w7.x86_64.rpm \
php72w-fpm-7.2.34-1.w7.x86_64.rpm \
php72w-cli-7.2.34-1.w7.x86_64.rpm \
php72w-gd-7.2.34-1.w7.x86_64.rpm \
php72w-mbstring-7.2.34-1.w7.x86_64.rpm \
php72w-bcmath-7.2.34-1.w7.x86_64.rpm \
php72w-xml-7.2.34-1.w7.x86_64.rpm \
php72w-ldap-7.2.34-1.w7.x86_64.rpm \
php72w-pdo-7.2.34-1.w7.x86_64.rpm \
php72w-mysqlnd-7.2.34-1.w7.x86_64.rpm \033[0m'
sleep 3
yum -y install gcc gcc-c++ libargon2 php72w-cli php72w-fpm php72w-gd php72w-mbstring php72w-bcmath php72w-xml php72w-ldap php72w-mysqlnd
sed -i 's/max_execution_time = 30/max_execution_time = 300/' /etc/php.ini
sed -i 's/max_input_time = 60/max_input_time = 300/' /etc/php.ini
sed -i 's/post_max_size = 8M/post_max_size = 16M/' /etc/php.ini
#创建php测试页面
echo '<?php
phpinfo();
?>' > /data/web/index.php
#启动php
systemctl enable php-fpm
systemctl start php-fpm
PHP_PORT=`netstat -lntp |grep -w 9000 || :`
if [ -z "$PHP_PORT" ]; then
echo "端口未监听"
exit 3
fi
if [ $(curl -s -o /dev/null -w "%{http_code}" http://127.0.0.1) == 200 ] ;
then
:
else
echo "访问nginx 状态码非200"
fi
printf "\n"
printf "\n"
echo -e "\033[32m 开始部署zabbix-server \033[0m"
echo '--------------------------------------------------------------------------------'
sleep 3
#创建用户
ZABBIX_USER=`getent passwd zabbix || :`
if [ -z "$ZABBIX_USER" ]
then
groupadd zabbix
useradd -g zabbix -M -s /sbin/nologin zabbix
else
echo "zabbinx 用户已存在"
fi
cd /usr/local/src
if [ ! -f zabbix-6.0.1.tar.gz ]; then
wget https://cdn.zabbix.com/zabbix/sources/stable/6.0/zabbix-6.0.1.tar.gz
fi
tar -xf zabbix-6.0.1.tar.gz
cd zabbix-6.0.1/
#安装依赖
yum -y install mysql-devel pcre-devel openssl-devel zlib-devel \
libxml2-devel net-snmp-devel net-snmp libssh2-devel OpenIPMI-devel \
libevent-devel openldap-devel libcurl-devel
#编译安装
./configure --sysconfdir=/etc/zabbix --enable-server --with-mysql \
--with-net-snmp --with-libxml2 --with-ssh2 --with-openipmi --with-zlib \
--with-libpthread --with-libevent --with-openssl --with-ldap \
--with-libcurl --with-libpcre
make clean
make install
#修改配置文件
sed -i 's/# ListenPort=10051/ListenPort=10051/' /etc/zabbix/zabbix_server.conf
sed -i 's/# DBHost=localhost/DBHost=localhost/' /etc/zabbix/zabbix_server.conf
sed -i 's/# DBPassword=/DBPassword=Zabbix@123/' /etc/zabbix/zabbix_server.conf
#向数据库中导入zabbix的库表及数据,-f表示强制导入,会覆盖原有的数据
mysql -uzabbix -pZabbix@123 -f zabbix < /usr/local/src/zabbix-6.0.1/database/mysql/schema.sql >/dev/null 2>&1
mysql -uzabbix -pZabbix@123 -f zabbix < /usr/local/src/zabbix-6.0.1/database/mysql/images.sql >/dev/null 2>&1
mysql -uzabbix -pZabbix@123 -f zabbix < /usr/local/src/zabbix-6.0.1/database/mysql/data.sql >/dev/null 2>&1
\cp -rp /usr/local/src/zabbix-6.0.1/ui/* /data/web/
cat > /usr/lib/systemd/system/zabbix-server.service << EOF
[Unit]
Description=Zabbix Server with MySQL DB
After=syslog.target network.target mysqld.service
[Service]
Type=simple
ExecStart=/usr/local/sbin/zabbix_server -f
User=zabbix
[Install]
WantedBy=multi-user.target
EOF
#重新加载system文件
systemctl daemon-reload
systemctl enable zabbix-server
systemctl start zabbix-server
\cp /data/web/conf/zabbix.conf.php.example /data/web/conf/zabbix.conf.php
chown zabbix:zabbix /data/web/conf/zabbix.conf.php
sed -i "/PASSWORD/s/.*/\$DB['PASSWORD'] = 'Zabbix@123';/" /data/web/conf/zabbix.conf.php
printf "%-60s\n" "*********************************************************"
printf "%-60s\n" "* 部署已完成 *"
printf "%-60s\n" "* 浏览器输入 IP 访问 *"
printf "%-60s\n" "* Admin用户默认密码: zabbix *"
printf "%-60s\n" "* Mysql zabbix用户密码: Zabbix@123 *"
printf "%-60s\n" "* Mysql root密码和免密登录配置文件在: ~/.my.cnf *"
printf "%-60s\n" "*********************************************************"