ZabbixServerのインストールをShellでいい塩梅に半自動化する

なんかZabbixのお勉強をしないといけなくなってEC2で構築しようとしたけれども何回もやるのかったるいのでShellスクリプトでコマンドコピペしなくても動くようにしました。

zabbix.shとかいう名前つけてファイル保存してから権限つけて

./zabbix.shとしてあげればZabbixServerとWeb-UI入れてくれます。なんかtime-scaleがうまく動かないのと細かいパラメータは調整いるけど、かなり楽にはなって試行錯誤しやすくなりました。

事前にEIPを取ってRoute53に登録してやればEC2+RDS(PostgreSQL)構成もしくはEC2単体構成で動かすことができます。【AWS構成】

もしくは静的外部アドレスとってCloudDNSを登録してあげればGCE+CloudSQL(PostgreSQL)構成もしくはGCE単体で動かすこともできます。【GCP構成】

Azureと普通のUbuntuの場合は試していないけど必要なパッケージ入れてあげれば動くと思います。たぶん

動くは動くけど、なんかtime-scaledbはうまく機能していない(´;ω;`)

バージョンは切替できるので、それで試してみるとうまく動くかな。それとパラメータあまりいじくっていないのでそのあたりは細かく設定する必要あり。

ちなみに、一々コピペしてコマンド貼り付けなくてよいのでかなり楽になったかな


◆Shellスクリプト

#!/bin/bash
HOST_NAME=zabbix-srv
POSTGRE_VER=timescaledb-2-2.12.2-postgresql-15=2.12.2~ubuntu22.04
#POSTGRE_VER=timescaledb-2-postgresql-15
DB_VERSION=15
DATABASE=zabbix
MASTER_USER=postgres
DB_USER=zabbix
DB_PASSWORD=zabbix
PHP_FPM=php8.2-fpm
PG_SQL=php8.2-pgsql 
PHP_VERSION=8.2
SERVER_NAME=zabbix.example.com
SITE_URL=https://zabbix.example.com/
DOCUMENT_ROOT=/var/www/html
ADMIN_MAIL=yourmail@example.com
ZABBIX_DL_URL=https://repo.zabbix.com/zabbix/6.0/ubuntu/pool/main/z/zabbix-release/zabbix-release_6.0-4+ubuntu22.04_all.deb
ZABBIX_PKG=zabbix-release_6.0-4+ubuntu22.04_all.deb

sudo hostnamectl set-hostname ${HOST_NAME}


# ---------------------------------------------
# 1.postgreSQLインストール RDS使う場合はnとする必要あり
# ---------------------------------------------
read -p "## Do you want to install postgress? (y/n) [y]: " -e -i "y" pgResponseinput
if [ "$pgResponseinput" == "y" ] || [ "$pgResponseinput" == "Y" ]; then
    echo "# install postgres process..."
    sudo apt install -y software-properties-common gnupg postgresql-common apt-transport-https lsb-release wget
    sudo /usr/share/postgresql-common/pgdg/apt.postgresql.org.sh
    echo "deb https://packagecloud.io/timescale/timescaledb/ubuntu/ $(lsb_release -c -s) main" | sudo tee /etc/apt/sources.list.d/timescaledb.list
    wget --quiet -O - https://packagecloud.io/timescale/timescaledb/gpgkey | sudo apt-key add -
    sudo apt update
    sudo apt install -y ${POSTGRE_VER}
    #localhost Listenの有効化
    sudo sed -i "/#listen_addresses/a listen_addresses = 'localhost'" /etc/postgresql/${DB_VERSION}/main/postgresql.conf
    #timescaleDBの有効化
    sudo sed -i "/#shared_preload/a shared_preload_libraries = 'timescaledb'" /etc/postgresql/${DB_VERSION}/main/postgresql.conf
    sudo systemctl restart postgresql
    echo "# Install Postgres done!"
fi


# ---------------------------------------------
# 2.PHPインストール
# ---------------------------------------------
read -p "## Do you want to install php? (y/n) [y]: " -e -i "y" pgResponseinput
if [ "$pgResponseinput" == "y" ] || [ "$pgResponseinput" == "Y" ]; then
    echo "# install php process..."
    sudo apt install software-properties-common
    sudo add-apt-repository ppa:ondrej/php
    sudo apt update
    sudo apt -y install ${PHP_FPM} ${PG_SQL}
    # post_max_sizeの変更
    sudo sed -i 's/^post_max_size = .*/post_max_size = 16M/' /etc/php/${PHP_VERSION}/fpm/php.ini
    # max_execution_timeの変更
    sudo sed -i 's/^max_execution_time = .*/max_execution_time = 300/' /etc/php/${PHP_VERSION}/fpm/php.ini
    # max_input_timeの変更
    sudo sed -i 's/^max_input_time = .*/max_input_time = 300/' /etc/php/${PHP_VERSION}/fpm/php.ini
    # Timezone変更
    sudo sed -i 's/;date.timezone =/date.timezone = "Asia\/Tokyo"/g' /etc/php/${PHP_VERSION}/fpm/php.ini
    echo "# Install php done!"
fi


# ---------------------------------------------
# 3.Apacheインストール
# ---------------------------------------------
read -p "## Do you want to install Apache2? (y/n) [y]: " -e -i "y" apacheResponseinput
if [ "$apacheResponseinput" == "y" ] || [ "$apacheResponseinput" == "Y" ]; then
    echo "# install apache process..."
    sudo add-apt-repository ppa:ondrej/apache2
    sudo apt-get update
    sudo apt-get install -y apache2 libapache2-mod-php
    sudo cp /etc/apache2/conf-enabled/security.conf /etc/apache2/conf-enabled/security.conf.org
    # ---------------------------------------------
    # security.conf設定
    # ---------------------------------------------
    sudo tee /etc/apache2/conf-enabled/security.conf <<_EOF_
# バージョン情報の隠蔽
ServerTokens Prod
Header unset "X-Powered-By"
# httpoxy 対策
RequestHeader unset Proxy
# クリックジャッキング対策
Header append X-Frame-Options SAMEORIGIN
# XSS対策
Header set X-XSS-Protection "1; mode=block"
Header set X-Content-Type-Options nosniff
# XST対策
TraceEnable Off
_EOF_
    sudo sed -i 's#DirectoryIndex index.html index.cgi index.pl index.php index.xhtml index.htm#DirectoryIndex index.php index.html index.htm#' /etc/apache2/mods-enabled/dir.conf
    sudo sed -i 's#Options Indexes FollowSymLinks#Options FollowSymLinks#' /etc/apache2/apache2.conf
    sudo a2enmod headers
    sudo a2enmod proxy_fcgi setenvif
    sudo a2enconf${PHP_FPM}
    sudo systemctl restart ${PHP_FPM} apache2
    echo "# Install Apache2 done!"
fi


# ---------------------------------------------
# 4.Zabbixインストール
# ---------------------------------------------
read -p "## Do you want to install Zabbix? (y/n) [y]: " -e -i "y" zabbixResponseinput
if [ "$zabbixResponseinput" == "y" ] || [ "$zabbixResponseinput" == "Y" ]; then
    echo "# install zabbix process..."
    wget ${ZABBIX_DL_URL}
    sudo dpkg -i ${ZABBIX_PKG}
    sudo apt update
    sudo apt install -y zabbix-server-pgsql zabbix-frontend-php zabbix-apache-conf zabbix-sql-scripts zabbix-agent
    echo "# Install Zabbix done!"
fi
# ---------------------------------------------
# ローカルホストDB使用の場合、外部DB使用の場合はn選択
# ---------------------------------------------
read -p "## Do you want to Setting localDataBase? (y/n) [y]: " -e -i "y" localDBResponseinput
if [ "$localDBResponseinput" == "y" ] || [ "$localDBResponseinput" == "Y" ]; then
    echo "# please password input ${DB_PASSWORD} "
    sudo -u postgres createuser --pwprompt ${DB_USER}
    sudo -u postgres createdb -O ${DB_USER} ${DATABASE}
    echo "# Install Postgres done!"
    echo "# Setting zabbix database process..."
    sudo zcat /usr/share/zabbix-sql-scripts/postgresql/server.sql.gz | sudo -u zabbix psql zabbix
    sudo sed -i 's/# DBPassword=/DBPassword='"${DB_PASSWORD}"'/' /etc/zabbix/zabbix_server.conf
    sudo echo "CREATE EXTENSION IF NOT EXISTS timescaledb CASCADE;" | sudo -u postgres psql zabbix
    sudo cat /usr/share/zabbix-sql-scripts/postgresql/timescaledb.sql | sudo -u zabbix psql zabbix
    echo "# Settings zabbix database done!..."
fi
# ---------------------------------------------
# ローカルホスト以外にDBをインストールする場合の設定
# ---------------------------------------------
echo "## RemoteDatabase Setting start"
read -p "## Do you want to use RemoteDatabase? (y/n) [y]: " -e -i "n" remoteDBResponseinput
if [ "$remoteDBResponseinput" == "y" ] || [ "$remoteDBResponseinput" == "Y" ]; then
    #
    # RDSエンドポイントの設定
    #
    read -p "Enter Remotedatabase host info: " ENDPOINT
    # 入力が空欄の場合は終了
    if [ -z "$ENDPOINT" ]; then
        echo "Endpoint cannot be empty. Exiting..."
        exit 1
    fi
    #
    # Postgreクライアントインストール
    #
    sudo apt install -y software-properties-common gnupg postgresql-common apt-transport-https lsb-release wget
    sudo /usr/share/postgresql-common/pgdg/apt.postgresql.org.sh
    echo "deb https://packagecloud.io/timescale/timescaledb/ubuntu/ $(lsb_release -c -s) main" | sudo tee /etc/apt/sources.list.d/timescaledb.list
    wget --quiet -O - https://packagecloud.io/timescale/timescaledb/gpgkey | sudo apt-key add -
    sudo apt update
    sudo apt install -y postgresql-client
    #
    # リモートにZabbix用DB作成(timescaleDBは課題)
    # 
    echo "# please password input RemoteDatabase password !"
    psql --host=${ENDPOINT} --port=5432 --username=${MASTER_USER} <<_EOF
\set ON_ERROR_STOP on

-- ロールの作成
CREATE ROLE ${DB_USER} WITH PASSWORD '${DB_PASSWORD}' LOGIN;

-- ロールへの権限付与
GRANT ${DB_USER} TO ${MASTER_USER};

-- データベースの作成
CREATE DATABASE ${DATABASE} OWNER ${DB_USER};
_EOF

    # ZabbixDB設定
    echo "# please password input ${DB_PASSWORD} "
    sudo zcat /usr/share/zabbix-sql-scripts/postgresql/server.sql.gz  | \
    psql -h ${ENDPOINT} -U ${DB_USER} -d ${DATABASE} -p 5432
    sudo sed -i 's/# DBHost=localhost/DBHost='"${ENDPOINT}"'/' /etc/zabbix/zabbix_server.conf
    sudo sed -i 's/# DBPassword=/DBPassword='"${DB_PASSWORD}"'/' /etc/zabbix/zabbix_server.conf
fi


# ---------------------------------------------
# 5.SSL設定 Let'sEncrypt使用しない場合はn
# ---------------------------------------------
read -p "## Do you want to install Let's Encrypt? (y/n) [y]: " -e -i "y" sslResponseinput
if [ "$sslResponseinput" == "y" ] || [ "$sslResponseinput" == "Y" ]; then
    echo "# install Let's Encrypt process..."
    sudo apt -y install certbot
    sudo certbot certonly --webroot -w /var/www/html -d ${SERVER_NAME} --agree-tos --email ${ADMIN_MAIL} --non-interactive
    sudo sed -i 's#ServerAdmin webmaster@localhost#ServerAdmin '"${ADMIN_MAIL}"'#' /etc/apache2/sites-available/default-ssl.conf
    sudo sed -i 's#/etc/ssl/certs/ssl-cert-snakeoil.pem#/etc/letsencrypt/live/'"${SERVER_NAME}"'/cert.pem#' /etc/apache2/sites-available/default-ssl.conf
    sudo sed -i 's#/etc/ssl/private/ssl-cert-snakeoil.key#/etc/letsencrypt/live/'"${SERVER_NAME}"'/privkey.pem#' /etc/apache2/sites-available/default-ssl.conf
    sudo sed -i 's|#SSLCertificateChainFile /etc/apache2/ssl.crt/server-ca.crt|SSLCertificateChainFile /etc/letsencrypt/live/'"${SERVER_NAME}"'/chain.pem|' /etc/apache2/sites-available/default-ssl.conf
    echo "# Install Let'sEncrypt done!"
fi


# ---------------------------------------------
# 6.バーチャルホスト設定
# ---------------------------------------------
read -p "## Do you want to Setting Vitualhost? (y/n) [y]: " -e -i "y" vhostResponseinput
if [ "$vhostResponseinput" == "y" ] || [ "$vhostResponseinput" == "Y" ]; then
    echo "# Vitualhost setting process..."
    sudo tee /etc/apache2/sites-available/${SERVER_NAME}.conf <<_EOF_

    ServerName any
    
        Require all denied
    


    ServerAdmin ${ADMIN_MAIL}
    ServerName ${SERVER_NAME}
    Redirect permanent / ${SITE_URL}
    ErrorLog \${APACHE_LOG_DIR}/error.log
    CustomLog \${APACHE_LOG_DIR}/access.log combined


    Header set Strict-Transport-Security "max-age=31536000"

_EOF_
    sudo a2ensite default-ssl
    sudo a2ensite ${SERVER_NAME}
    sudo a2enmod ssl
    sudo a2enmod rewrite
    sudo a2enmod headers
    sudo rm /var/www/html/index.html
    sudo a2dissite 000-default
    sudo systemctl restart apache2
    echo "# Vitualhost setting done!"
fi


#
# 7.グラフ文字化解消
#
sudo apt install -y fonts-ipafont-gothic
sudo update-alternatives --install /usr/share/zabbix/assets/fonts/graphfont.ttf zabbix-frontend-font /usr/share/fonts/opentype/ipafont-gothic/ipagp.ttf 20
sudo update-alternatives --config zabbix-frontend-font

sudo systemctl enable zabbix-server zabbix-agent
sudo systemctl restart zabbix-server zabbix-agent ${PHP_FPM} apache2

echo "### Zabbix Setting Done!"


コメント

このブログの人気の投稿

証券外務員1種勉強(計算式暗記用メモ)

GASでGoogleDriveのサブフォルダとファイル一覧を出力する

マクロ経済学(IS-LM分析)