Zabbix Server を入れてみる(kusanagi 8.0編)
祝 KUSANAGI 8.0 リリース
さて、先週無事にKUSANAGIの新バージョンがリリースされました。
KUSANAGI 8.0では、WordPressだけではなく、LAMP環境を構築することもできます。
また、kusanagi init や kusanagi 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のイメージを指定してください。

上記スクリプトをスタートアップスクリプトとして使用してください。
このとき、以下のようなパラメータを入力します。
| パラメータ | 説明 |
|---|---|
| kusanagiのパスワード | kusanagi ユーザのパスワード |
| DB の rootパスワード | MySQLへ ユーザ root で接続するときのパスワード |
| サイトのドメイン | kusanagi provide で指定する FQDN |
| メールアドレス | 使用しない(後述) |
| DB名 | MySQLデータベースの名前(デフォルトは zabbix) |
| DBユーザ名 | 上記データベースのアクセスに使用するユーザ名 |
| DBパスワード | 上記DBユーザ名のパスワード |

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

スクリプトの解説
今回のスタートアップスクリプトで何を行っているかを解説します。
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アプリケーションをインストールできると思います。これもお試しください。

