【bash】Zabbixを一瞬で構築するスクリプト

# はじめに
Zabbixの構築を自動化し、かつDBに設定するパスワードを対話式に設定出来たら便利だな～と思い作成しました。

# 環境

OS:RHEL 9.2
Zabbix:6.0LTS
DB:MariaDB

上記の条件で構築を行います。

almalinuxやrockylinuxでもメジャーバージョンが9であれば可能です。

# 要件
- Zabbix構築の自動化
- DBに扱うパスワードは対話式で決定
- パスワードポリシーは8文字以上、大文字小文字の英数字を使用
- ポリシーに当てはまらない場合は入力し直し

# スクリプト本文

```bash
#!/bin/bash

# ZabbixのリポジトリURLとコンフィグのパス
ZABBIX_URL="https://repo.zabbix.com/zabbix/6.0/rhel/9/x86_64/zabbix-release-6.0-4.el9.noarch.rpm"
ZABBIX_CONF="/etc/zabbix/zabbix_server.conf"

# MariaDBのインストール
dnf install -y mariadb-server

# MariaDBの起動と自動起動設定
systemctl start mariadb
systemctl enable mariadb

# Zabbixのリポジトリを追加
rpm -Uvh "${ZABBIX_URL}"
dnf clean all

# Zabbix関連パッケージのインストール
dnf install -y zabbix-server-mysql zabbix-web-mysql zabbix-apache-conf zabbix-sql-scripts zabbix-selinux-policy zabbix-agent zabbix-web-japanese

# MariaDBへのログインパスワードの指定、ポリシーに当てはまらなければ再入力
while true; 
do
    echo "MariaDBのログインパスワードを指定してください: "
    read -s db_password
    if [[  ${#db_password} -ge 8 && "${db_password}" =~ [A-Z] && "${db_password}" =~ [a-z] && "${db_password}" =~ [0-9] ]]; then
        read -p "入力した内容が正しければ処理を続行しますが、よろしいですか？ (y/n): " confirm
        case $confirm in
            [Yy]* )  
                echo "後続の処理を実行します"
                break;;
            [Nn]* ) 
                echo "パスワードの入力をやり直します";;
            * ) 
                echo "エラー: yかnを入力してください";;
        esac
    else
        echo "エラー: パスワードは8文字以上で、英数字大文字小文字を含む必要があります"
    fi
done



# Zabbixのデータベースとユーザーの作成
mysql -uroot <<EOF
create database zabbix character set utf8mb4 collate utf8mb4_bin;
create user zabbix@localhost identified by '${db_password}';
grant all privileges on zabbix.* to zabbix@localhost;
set global log_bin_trust_function_creators = 1;
EOF

# Zabbixのセットアップスクリプトの実行
zcat /usr/share/zabbix-sql-scripts/mysql/server.sql.gz | mysql --default-character-set=utf8mb4 -uzabbix -p"${db_password}" zabbix


mysql -uroot <<EOF
set global log_bin_trust_function_creators = 0;
EOF

# zabbix_server.confの設定値書き換え
sed -i "s/# DBPassword=/DBPassword=${db_password}/g" "${ZABBIX_CONF}" > /dev/null


# Zabbix ServerとAgent、Apache、PHP-FPMの再起動と自動起動設定
systemctl restart zabbix-server zabbix-agent httpd php-fpm
systemctl enable zabbix-server zabbix-agent httpd php-fpm

# firewalldの設定
firewall-cmd --add-service=http --zone=public --permanent
firewall-cmd --add-port=10051/tcp --zone=public --permanent
firewall-cmd --reload

echo "Zabbixのセットアップが完了しました。"

```


# 実行結果

```shell-session
  zabbix-web-japanese-6.0.28-release1.el9.noarch
  zabbix-web-mysql-6.0.28-release1.el9.noarch

完了しました!
MariaDBのログインパスワードを指定してください:
入力した内容が正しければ処理を続行しますが、よろしいですか？ (y/n): y
後続の処理を実行します
Created symlink /etc/systemd/system/multi-user.target.wants/zabbix-server.service → /usr/lib/systemd/system/zabbix-server.service.
Created symlink /etc/systemd/system/multi-user.target.wants/zabbix-agent.service → /usr/lib/systemd/system/zabbix-agent.service.
Created symlink /etc/systemd/system/multi-user.target.wants/httpd.service → /usr/lib/systemd/system/httpd.service.
Created symlink /etc/systemd/system/multi-user.target.wants/php-fpm.service → /usr/lib/systemd/system/php-fpm.service.
success
success
success
Zabbixのセットアップが完了しました。
```

こんな感じですぐ終わります。

http://IPアドレス/zabbix/
にアクセスして確認してみましょう。
※IPは自身の環境に置き換えてください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3600322/667d3966-a52d-3b34-a507-0a5619053e7b.png)

あとは画面に沿って進めていけば構築完了です。