公式リポジトリに習ってZabbix4.4をdocker-composeで建てる

## はじめに

完成形のcomposeファイルを置いておくと何を変えたかわからなくなったり、アップデートについていけないので筆を執りました。k8sやswarmなど流行ってますが、1ノードでインストールだけで使えるcomposeも便利ですね。

　全体的な流れとしては以下になります。

1. 公式の[zabbix/zabbix-docker](https://github.com/zabbix/zabbix-docker)をクローン
2. composeファイル、envファイル、secretファイルの編集
3. composeで起動
4. zabbix-server自体の監視



## バージョン

以下の環境で記事を書いています。OSは勿論なんでもかまいませんが、dockerのバージョンが古いと動かない可能性があります。執筆時点でcomposeファイルのv3.5を使用するため、Docker engineは17.12.0以上となります。

- Ubuntu 18.04
- Docker version 19.03.6
- docker-compose version 1.17.1



確認するコマンド

```
$ docker -v
Docker version 19.03.6, build 369ce74a3c
$ docker-compose -v
docker-compose version 1.17.1, build unknown
```



composeのバージョンとの対応表

https://docs.docker.com/compose/compose-file/



Ubuntuでのdocker-composeインストール

```
$ sudo apt install docker-compose
```



## １．デプロイの準備

本記事では以下の構成で説明してます。

- コンテナ: ubuntu

- データベース: mysql

- WEBサーバ: nginx

  

公式をクローンします。

```
$ git clone https://github.com/zabbix/zabbix-docker
```



使用するファイルを確認していきます。

```
$ cd zabbix-docker/
$ ls -la
```

　

全部は使用しないので使うファイルだけのフォルダを作ります。composeファイル、環境変数用の.env_*ファイル、パスワードなどの機密情報用の.MYSQLファイルです。

```
mkdir my-zabbix
cp ./docker-compose_v3_ubuntu_mysql_latest.yaml ./my-zabbix/docker-compose.yml

cp ./.env_agent ./my-zabbix/
cp ./.env_db_mysql ./my-zabbix/
cp ./.env_java ./my-zabbix/
cp ./.env_srv ./my-zabbix/
cp ./.env_web ./my-zabbix/

cp ./.MYSQL_PASSWORD  ./my-zabbix/
cp ./.MYSQL_ROOT_PASSWORD  ./my-zabbix/
cp ./.MYSQL_USER  ./my-zabbix/
```



## ２．composeファイルの編集

composeファイルの全体を把握します。省略すると執筆時点はこんな構成でした。コメントアウト部分は今回関係ないので削除しても問題ないです。

```
version: '3.5'
services:
 zabbix-server:
 zabbix-proxy-sqlite3:
 zabbix-proxy-mysql:
 zabbix-web-apache-mysql:
 zabbix-web-nginx-mysql:
 zabbix-agent:
 zabbix-java-gateway:
 zabbix-snmptraps:
 mysql-server:
 db_data_mysql:

networks:
secrets:
```



今回はzabbix-proxyを使用しないので以下のサービス以下の記述をすべて削除します。

```
 zabbix-proxy-sqlite3:
  ************************
 zabbix-proxy-mysql:
  ************************
```



db_data_mysqlサービスはBusyBoxコンテナとなっています。BusyBoxとは基本的なUnixコマンドがインストール済みのコンテナイメージです。コンテナ作業中の10徳ナイフ的存在です。おそらくmysqlサーバにデータを流したり、バックアップを取るために入っていますが利用しなければ削除します。

```
 db_data_mysql:
  ***********************
```



WEBサーバがapacheとnginxから選べるようになっています。nginxを利用するため、apacheの方を削除し、nginxのポートを編集します。

```
# 削除
 zabbix-web-apache-mysql:
  *************************
  
# 編集
 zabbix-web-nginx-mysql:
  image: zabbix/zabbix-web-nginx-mysql:ubuntu-4.4-latest
  ports:
   - "80:80"
   - "443:443"
```



docker stack用のオプションが記述されているため削除します。全サービスのdeployディレクティブを削除してください。deployで検索すると楽です。

```
version: '3.5'
services:
 zabbix-server:
  ~
  deploy:
   ************************
```



ヘルスチェック用のオプションが自分の環境では機能しなかったため削除します。コンテナ起動から、アプリケーションの起動が終わるまでの待機時間を指定していますが、検証のため一時的にコメントアウトしました。

```
version: '3.5'
 services:
  zabbix-web-nginx-mysql:
   healthcheck:
    #start_period: 30s
```



MySQLの認証設定を編集します。composeファイルはsecretsディレクティブで以下のファイルを読み込み、機密な設定を取得します。

```
.MYSQL_PASSWORD
.MYSQL_ROOT_PASSWORD
.MYSQL_USER
```



環境変数ファイルを編集します。カスタマイズは各環境にもよりますが以下を編集しました。

```
.env_web
## ブラウザのタブに表示されるタイトルになります。
ZBX_SERVER_NAME=Zabbix compose
## タイムゾーン
PHP_TZ=Asia/Tokyo
```



## ３．デプロイと起動

設定は終わったので起動してみます。必要なイメージは自動でダウンロードされます。

```
$ sudo docker-compose up -d
```



暫く待つとzabbix-web-nginx-mysql_1コンテナのステータスが変わり起動完了したことがわかります。

```
$ sudo docker ps -a
STATUS
Up 43 seconds (healthy)
```



## ４．ログインと自身の監視

WEBダッシュボードへアクセスします。ユーザはAdmin、パスワードはzabbixになります。

```
http://<IP or Domain>
User:Admin
Password:zabbix
```



Adminユーザのパスワード変更を以下のページから行います。

```
Administration >Users >Admin
```



Zabbixサーバ自身の監視先がlocalhostになっているので変更します。更新にはしばらくかかるため、Discovery rulesのCheckを行うと比較的早く更新されます。

```
Configuration >Hosts >Zabbix Server

Agent interfaces >DNS name => zabbix-agent
Agent interfaces >Connect to => DNS
```