Zabbix Server を入れてみる(kusanagi 8.0編)

祝 KUSANAGI 8.0 リリース

さて、先週無事にKUSANAGIの新バージョンがリリースされました。
KUSANAGI 8.0では、WordPressだけではなく、LAMP環境を構築することもできます。
また、kusanagi initkusanagi provision コマンドで、オプション指定でパラメータを選択することが可能です。
ということで、LAMPアプリケーションの例として、以前行ったZabbix Server 3.0 をKUSANAGI 8.0で入れてみましょう。

Zabbix 3.0 インストール

KUSANAGI 8.0では、以下のようにすればKUSANAGIでLAMP環境を構築できます。

# kusanagi init --tz tokyo --lang en --keyboard en --passwd passw0rd --no-phrase --dbrootpass dbpassw0rd --php7 --nginx 
# kusanagi provision --lamp --fqdn zabbix.example.com --email mail@example.com --dbname zabbix --dbuser zabbix --dbpass zabbix zabbix

また、KUSANAGI8.0では、Zabbix社公式リポジトリを使用してZabbix3.0 agent が入るので、以下のように zabbix server をインストールするだけです。

yum --enablerepo=remi,remi-php56 install -y zabbix-server-mysql zabbix-web-mysql zabbix-agent zabbix-web-japanese 

あとは、以前の手順と同様に、NGINX、PHP7、Zabbixの設定を行えば、Zabbix serverの設定が完了します。

さくらのクラウドのスクリプトで入れてみる

以前、「KUSANAGI for さくらのクラウド」でconcrete5を簡単に利用できるスタートアップスクリプトの紹介という記事を見つけましたが、さくらのクラウドではスタートアップスクリプトを使用して、初期設定を行うことができます。
今回このスクリプト機能を使用して、上記のZabbix serverのインストールを一撃!で行いたいと思います。

用意したスクリプトは以下の通りです。このスクリプトは、先ほどの記事のconcrete5 用のスクリプトを基に作成しています。
このスクリプトを、さくらのクラウドのスクリプトとして登録してください。

#!/bin/bash
  
# @sacloud-once
  
# @sacloud-desc KUSANAGI zabbix server。
# @sacloud-desc サーバ作成後、ドメインの設定を行いアクセスしてください
# @sacloud-desc http://サイトのドメイン/
# @sacloud-desc (このスクリプトは、KUSANAGIでのみ動作します)

# @sacloud-password required shellarg maxlen=100 kusanagi_password "kusanagiのパスワード"
# @sacloud-password required shellarg maxlen=100 dbrootpass "DBのrootパスワード"
# @sacloud-text required shellarg maxlen=100 site_fqdn "サイトのドメイン"
# @sacloud-text shellarg maxlen=100 admin_email "メールアドレス"
# @sacloud-text required shellarg maxlen=100 default="zabbix" dbname "DB名"
# @sacloud-text required shellarg maxlen=100 dbuser "DBユーザ名"
# @sacloud-password required shellarg maxlen=100 dbpass "DBパスワード"

TERM=xterm

KUSANAGI_PASSWORD=@@@kusanagi_password@@@
DBROOTPASS=@@@dbrootpass@@@

SITE_DOMAIN=@@@site_fqdn@@@
ADMIN_EMAIL=@@@admin_email@@@

DBNAME=@@@dbname@@@
DBUSER=@@@dbuser@@@
DBPASS=@@@dbpass@@@

#---------START OF firewall---------#
systemctl start firewalld.service
firewall-cmd --zone=public --add-service=http --permanent
firewall-cmd --zone=public --add-service=https --permanent
firewall-cmd --zone=public --add-port=10051/tcp --permanent
systemctl restart firewalld.service
systemctl enable firewalld.service
#---------END OF firewall---------#

#---------START OF KUSANAGI---------#
yum -y --enablerepo=remi,remi-php56 update
sleep 30

# kusanagi init
EMAILOPTION=--no-email
#[ -n "$ADMIN_EMAIL" ] && EMAILOPTION="--email $ADMIN_EMAIL"
kusanagi init --tz tokyo --lang en --keyboard en --passwd $KUSANAGI_PASSWORD --no-phrase --dbrootpass $DBROOTPASS --php7 --nginx
kusanagi provision --lamp --fqdn $SITE_DOMAIN $EMAILOPTION --dbname $DBNAME --dbuser $DBUSER --dbpass "$DBPASS" zabbix

#---------END OF KUSANAGI---------#

#---------START OF Zabbix---------#

yum --enablerepo=remi,remi-php56 install -y zabbix-server-mysql zabbix-web-mysql zabbix-agent zabbix-web-japanese 
sleep 1

echo "alter database $DBNAME character set utf8 collate utf8_bin;"| mysql -uroot -p$DBROOTPASS $DBNAME
SQLFILE=$(ls -t /usr/share/doc/zabbix-server-mysql-3*/create.sql.gz | head -1)
zcat $SQLFILE | mysql -uroot -p$DBROOTPASS $DBNAME

(echo php_value[max_execution_time]  = 300
 echo php_value[max_input_time]  = 300
 echo php_value[date.timezone]  = Asia/Tokyo) >> /etc/php7-fpm.d/www.conf

cp -pr /usr/share/zabbix/* /home/kusanagi/zabbix/DocumentRoot/

sed -e "s/\(DB\['DATABASE'\]\s\+=\s\).*;/\\1 '$DBNAME';/" \
    -e "s/\(DB\['USER'\]\s\+=\s\).*;/\\1 '$DBUSER';/" \
    -e "s/\(DB\['PASSWORD'\]\s\+=\s\).*;/\\1 '$DBPASS';/" \
    /usr/share/zabbix/conf/zabbix.conf.php.example > /etc/zabbix/web/zabbix.conf.php
(echo DBName=$DBNAME
 echo DBUser=$DBUSER
 echo DBPassword=$DBPASS ) >> /etc/zabbix/zabbix_server.conf

chown -R httpd:www /home/kusanagi/zabbix/DocumentRoot/ /etc/zabbix/web
chown :www /var/lib/php/*

systemctl start zabbix-server zabbix-agent
systemctl enable zabbix-server zabbix-agent

#---------END OF KUSANAGI---------#

sh -c 'sleep 60; reboot' &

exit 0

さくらのクラウドでサーバ作成時に、アーカイブからKUSANAGI7.8のイメージを指定してください。

zabbix_sakura
上記スクリプトをスタートアップスクリプトとして使用してください。

このとき、以下のようなパラメータを入力します。

パラメータ 説明
kusanagiのパスワード kusanagi ユーザのパスワード
DB の rootパスワード MySQLへ ユーザ root で接続するときのパスワード
サイトのドメイン kusanagi provide で指定する FQDN
メールアドレス 使用しない(後述)
DB名 MySQLデータベースの名前(デフォルトは zabbix)
DBユーザ名 上記データベースのアクセスに使用するユーザ名
DBパスワード 上記DBユーザ名のパスワード

zabbix_sakura_script

作成してしばらく(性能にもよりますが10~15分ほど)待つと、zabbix server 3.0 がデプロイされた状態でインスタンスが起動します。
起動したサーバのIPアドレスをDNS登録するか、hostsファイルに書いて、指定したドメイン名にブラウザでアクセスしましょう。

zabbix

スクリプトの解説

今回のスタートアップスクリプトで何を行っているかを解説します。

yum update

yum コマンドでパッケージを最新版にします。ここで、KUSANAGI 8.0、Zabbix 3.0へのアップデートが行われます。
sleep を入れているのは、Zabbix 3.0にしている弊害で、最初のKUSANAGI 8.0へのアップデート完了後にzabbix 3.0 へのアップデートが行われるため、少し待っています。

yum -y --enablerepo=remi,remi-php56 update
sleep 30

firewalld 設定

firewalld を起動し、有効化しています。
http、httpsのポート(80、443)とともに、zabbix server用のポート(10051)を開放しています。

kusanagi 設定

kusanagi init および kusanagi provision で、zabbix用のLAMP環境を作成しています。
いくつかのパラメータは決め打ちになります。
また、本来ここでLet’s Encrypt SSL証明書を発行できるのですが、この時点でIPアドレスが確定しておらず、DNSへの登録もできないことから、ここではSSL証明書発行を行っていません。
DNS登録を終えたら、以下のコマンドを使用して Let’s EncryptのSSL証明書を発行してください。

# kusanagi ssl --email メールアドレス

zabbix インストール・設定

zabbix server のパッケージをインストールし、以下のように設定を自動的に追加しています。

  • DBへのテーブル情報や初期テンプレートの展開
  • PHP7 の設定追加
  • zabbix_server.conf への設定変更
  • /home/kusanagi/zabbix/DocumentRoot へ、Zabbix Web Server用のPHPファイルをコピー
  • ファイル権限の変更
  • zabbix serverの起動、有効化

今回は、以前行ったZabbix Server 3.0 とは異なり、DocumentRoot にPHPファイルをコピーしています。

reboot

最後に reboot します。
ここで注意しないといけないのが、このスクリプトを一度だけ起動するために @sacloud-once と指定しているのですが、exit 0で終了しないと終了しないと再起動のたびに読み込まれます。
そのため、スクリプト中で単に reboot するとスクリプトが終了したとみなされず、無限に再起動することになってしまいます。
これを回避するために、以下のようにバックグラウンド処理でrebootを行う必要があります。

sh -c 'sleep 60; reboot' &

exit 0

さいごに

これで、Zabbix Server 3.0 を簡単インストールすることができますね。
このスクリプトは、さくらのクラウド用ですが、当然ほかのクラウドにも流用可能ですので、お試しください。
また、このスクリプトを基にして、色々なLAMPアプリケーションをインストールできると思います。これもお試しください。

Follow me!

Leave a Reply