KUSANAGI for Vagrantで Zabbix 4.0を動かしてみる

祝Zabbix4.0リリース

さて、無事Zabbix4.0が10/1(現地時間)にリリースされましたね。10/2に @kuryuu タンが世界最速のリリース記念! Zabbix 4.0 体験会をやってましたね。さすが @kuryuu タン、リリースノートの和訳もバッチリです。

ということで、KUSANAGIでもZabbix4.0入れていきたいと思うんですけどね。最近触ってなかったので、KUSANAGI for Vagrantでやってみようかと思います。手動だと2時間で終わったのに、Vagrantファイルに書くと4時間くらい掛かったという大変さですが、皆様のお役に立てればと思います。

KUSANAGI for Vagrantとは

KUSANAGI for Vagrantは、Hashicorp製の仮想機械を構築するためのソフトウェアVagrant上でKUSANAGIを動かすモノです。Vagrantは、Windows10などではVirtualBoxという仮想マシンへインストールできたりしますが、LinuxではKVMに入れたりも出来ますね。

今回は、Windows上のVirtualBoxとVagrantを使います。KUSANAGI for Vagrantの手順に従い、Windows用のVirtualBoxとVagrantを入れましょう。

Vagrantの実行

では、Vagrantファイルの用意をします。みなさん、WSL(Windows Subsystem for Linux)はインストールされていると思いますので、WSLから操作します。え?WSL入れてない?Windows StoreでUbuntuで検索して、インストールして、起動して、ユーザ名とパスワードを入力するだけで大丈夫ですよ。

さて、WSL(Ubuntu)を起動して、以下のコマンドを入力してください。

mkdir -p /mnt/c/Users/ユーザ名/Vagrant/kusanagi
cd /mnt/c/Users/ユーザ名/Vagrant/kusanagi
vagrant init yuya_tajima/kusanagi

これで、Vagrantの設定及び、Vagrantファイルのテンプレートが作成されます。
Vagrantファイルの内容を、viなどで以下のように変更します。

# -*- mode: ruby -*-
# vi: set ft=ruby :

# All Vagrant configuration is done below. The "2" in Vagrant.configure
# configures the configuration version (we support older styles for
# backwards compatibility). Please don't change it unless you know what
# you're doing.
Vagrant.configure("2") do |config|
  # The most common configuration options are documented and commented below.
  # For a complete reference, please see the online documentation at
  # https://docs.vagrantup.com.

  # Every Vagrant development environment requires a box. You can search for
  # boxes at https://vagrantcloud.com/search.
  config.vm.box = "yuya_tajima/kusanagi"

  # Disable automatic box update checking. If you disable this, then
  # boxes will only be checked for updates when the user runs
  # `vagrant box outdated`. This is not recommended.
  # config.vm.box_check_update = false

  # Create a forwarded port mapping which allows access to a specific port
  # within the machine from a port on the host machine. In the example below,
  # accessing "localhost:8080" will access port 80 on the guest machine.
  # NOTE: This will enable public access to the opened port
  # config.vm.network "forwarded_port", guest: 80, host: 8080
  config.vm.network "forwarded_port", guest: 22, host: 10022, id: "ssh"

  # Create a forwarded port mapping which allows access to a specific port
  # within the machine from a port on the host machine and only allow access
  # via 127.0.0.1 to disable public access
  # config.vm.network "forwarded_port", guest: 80, host: 8080, host_ip: "127.0.0.1"

  # Create a private network, which allows host-only access to the machine
  # using a specific IP.
  # config.vm.network "private_network", ip: "192.168.33.10"
  config.vm.network "private_network", ip: "192.168.33.10"

  # Create a public network, which generally matched to bridged network.
  # Bridged networks make the machine appear as another physical device on
  # your network.
  # config.vm.network "public_network"

  # Share an additional folder to the guest VM. The first argument is
  # the path on the host to the actual folder. The second argument is
  # the path on the guest to mount the folder. And the optional third
  # argument is a set of non-required options.
  # config.vm.synced_folder "../data", "/vagrant_data"

  # Provider-specific configuration so you can fine-tune various
  # backing providers for Vagrant. These expose provider-specific options.
  # Example for VirtualBox:
  #
  config.vm.provider "virtualbox" do |vb|
    # Display the VirtualBox GUI when booting the machine
    # vb.gui = true

    # Customize the amount of memory on the VM:
    vb.memory = "4096"
  end
  #
  # View the documentation for the provider you are using for more
  # information on available options.

  # Enable provisioning with a shell script. Additional provisioners such as
  # Puppet, Chef, Ansible, Salt, and Docker are also available. Please see the
  # documentation for more information about their specific syntax and use.
  # config.vm.provision "shell", inline: <<-SHELL
  #   apt-get update
  #   apt-get install -y apache2
  # SHELL
  config.vm.provision "shell", inline: <<-SHELL
    export TERM=xterm

    export KUSANAGI_PASSWORD=`mkpasswd -l 20`
    export DBROOTPASS=`mkpasswd -s 0 -l 20`

    export SITE_DOMAIN=zabbix.localdomain

    export DBNAME=`mkpasswd -s 0 -l 10`
    export DBUSER=`mkpasswd -s 0 -l 10`
    export DBPASS=`mkpasswd -s 0 -l 20`
    export EMAILOPTION=--no-email

    sudo yum install -y https://repo.zabbix.com/zabbix/4.0/rhel/7/x86_64/zabbix-release-4.0-1.el7.noarch.rpm
    sudo yum clean all
    echo yum update
    sudo yum -y --enablerepo=remi,remi-php56 update  2>&1 > /dev/null
    yes 1 | sudo kusanagi init --tz tokyo --lang en --keyboard en --passwd $KUSANAGI_PASSWORD --no-phrase --dbrootpass "$DBROOTPASS" --php7 --nginx
    sudo kusanagi provision --lamp --fqdn $SITE_DOMAIN $EMAILOPTION --dbname $DBNAME --dbuser $DBUSER --dbpass "$DBPASS" zabbix

    sudo 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-4*/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) | sudo tee -a /etc/php7-fpm.d/www.conf

    sudo cp -pr /usr/share/zabbix/* /home/kusanagi/zabbix/DocumentRoot/
    grep -v -e DATABASE -e USER -e PASSWORD  /usr/share/zabbix/conf/zabbix.conf.php.example |
      sudo tee /etc/zabbix/web/zabbix.conf.php
    (echo "\\\$DB\['DATABASE'] = '$DBNAME'\;"
     echo "\\\$DB\['USER'] = '$DBUSER'\;"
     echo "\\\$DB\['PASSWORD'] = '$DBPASS'\;") | sudo tee -a /etc/zabbix/web/zabbix.conf.php
    #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 | sudo tee /etc/zabbix/web/zabbix.conf.php
    (echo DBName=$DBNAME
     echo DBUser=$DBUSER
     echo DBPassword=$DBPASS ) | sudo tee -a /etc/zabbix/zabbix_server.conf

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

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

    echo "KUSANAGI password: $KUSANAGI_PASSWORD"

    sudo reboot
  SHELL
end

上記のファイルで変更すべきは以下の部分です。

  • config.vm.network “forwarded_port”, guest: 22, host: 10022, id: “ssh”
    sshのポートフォワードを行う設定になります。10022の部分は任意の使用していないポートを指定してください。
  • config.vm.network “private_network”, ip: “192.168.33.10”
    内部的なネットワークIPアドレスになります。任意の使用していないローカルIPアドレスを指定してください。
  • SITE_DOMAIN=zabbix.localdomain
    作成するZabbixサーバのホスト名となります。このホスト名を使用してZabbixサーバにアクセスする必要があります。

必要なパスワード、DBの設定などはmkpasswdコマンドを使用してランダム生成するようにしています。

その後、以下のコマンドを打って、ややしばらくお待ち下さい。

vagrant up

初回はVagrantのイメージのダウンロードを行うため、しばらく時間がかかります。
また、yum update や kusanagi initで、サーバ暗号鍵やLet’s Encryptで使用するcertbotの更新のため数十分かかります。

終了時に、以下のメッセージが出力されますが、これが自動生成されたkusanagiユーザのパスワードになりますので、コピーしておいてください。

    default: KUSANAGI password: Yxh4qtxygKfwe!6asiwk

Zabbixサーバへのwebアクセス

作成したサーバにアクセスするには、hostsファイルを編集する必要があります。
Windowsボタンを右クリックして、Windows Powershell(管理者用)を起動します。

ここで、以下のコマンドを実行してhostsファイルをメモ帳で開きます。

PS C:\WINDOWS\system32> .\notepad.exe .\drivers\etc\hosts

以下のエントリを末尾に追加してください。ここで指定するIPアドレスとホスト名は、Vagrantファイルに指定したものと同じものにしてください。

192.168.33.10       zabbix.localdomain

ブラウザで、http://zabbix.localdomain/ にアクセスすると以下の画面が表示されると思います。

デフォルトのユーザ「Admin」、パスワード「zabbix」を入力してログインしてください。

 

ZabbixサーバへのSSHアクセス

sshでアクセスするためには、sshの設定が必要です。以下のコマンドを実行し、~/.ssh/configの内容を変更してください。

$ mkdir ~/.ssh
$ chmod 700 ~/.ssh
$ vagrant.exe ssh-config | tee ~/.ssh/config
Host default
  HostName 127.0.0.1
  User vagrant
  Port 10022
  UserKnownHostsFile /dev/null
  StrictHostKeyChecking no
  PasswordAuthentication no
  IdentityFile C:/Users/ユーザ名/.vagrant.d/boxes/yuya_tajima-VAGRANTSLASH-kusanagi/0.1/virtualbox/vagrant_private_key
  IdentitiesOnly yes
  LogLevel FATAL
$ chmod 600 ~/.ssh/config
$ cp /mnt/c/Users/ユーザ名/.vagrant.d/boxes/yuya_tajima-VAGRANTSLASH-kusanagi/0.1/virtualbox/vagrant_private_key ~/.ssh/kusanagi_private_key
$ vi ~/.ssh/config
$ cat ~/.ssh/config
Host default
  HostName 127.0.0.1
  User vagrant
  Port 10022
  UserKnownHostsFile /dev/null
  StrictHostKeyChecking no
  PasswordAuthentication no
  IdentityFile /home/ユーザ名/.ssh/kusanagi_private_key
  IdentitiesOnly yes
  LogLevel FATAL

ここで、以下のコマンドを打つことで、作成したZabbixサーバにVagrantユーザで接続できます。

$ ssh default
Last login: Wed Oct  3 12:03:27 2018 from gateway

     __ ____  _______ ___    _   _____   __________
    / //_/ / / / ___//   |  / | / /   | / ____/  _/
   / ,< / / / /\__ \/ /| | /  |/ / /| |/ / __ / /
  / /| / /_/ /___/ / ___ |/ /|  / ___ / /_/ // /
 /_/ |_\____//____/_/  |_/_/ |_/_/  |_\____/___/

    Version 8.4.0-3, Powered by Prime Strategy.

[vagrant@kusanagi71 ~]$

rootになるには、sudo -i などを使用してください。

最後に

これで、KUSANAGI for VagrantでZabbix Server4.0のインストールは完了です。あとは、新機能を思う存分楽しみましょう。
また、Vagrantファイルのスクリプトを参考にすれば、他のクラウド環境で動作するKUSANAGIでも同様に構築できます。応用して楽しいZabbixライフを送りましょう。

Follow me!

Leave a Reply

Previous article

変顔認証とJOJO立ち認証

Next article

Gutenbergを使ってみる