Zabbix 4.2 を Docker Compose でサクッと動かす

# 概要

Zabbix 4.2 をサクッと動かすには、[公式 docker-compose](https://github.com/zabbix/zabbix-docker) を使うのが簡単早いんですが、やってみると下記問題があったため、対処方法をまとめておきます。

+ 日本語表示にするとグラフの日本語部分が豆腐に文字化けする
+ GUIで表示される時刻がラトビア時間になっている
+ 起動後、Zabbix Server 内 Zabbix Agent との通信ができずエラーになる
+ proxy 関連部分のエラーが出続ける
+ frontend が apache 版と nginx 版の両方があるが、片方で十分

# 前提条件
+ docker および docker-compose はインストール済み
+ Zabbix バージョンは 4.2 で確認
+ Zabbix は CentOS + PostgreSQL + NGINX 版を使用

# 手順

### 1. git clone 等で公式 docker-compose 一式をローカルに展開

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

各種 docker-compose ファイル、各コンテナ向け環境定義ファイル（`.env_*`）が必要になります。

### 2. 日本語表示用 Docker Image 作成のための Docker File を作成

```bash
$ cd zabbix-docker
$ vim Dockerfile
```

```Docker:Dockerfile
FROM zabbix/zabbix-web-nginx-pgsql:centos-4.2-latest
RUN yum -y install ipa-pgothic-fonts && \
    cd /usr/share/zabbix/assets/fonts && \
    mv DejaVuSans.ttf DejaVuSans.ttf.org && \
    ln -s /usr/share/fonts/ipa-pgothic/ipagp.ttf DejaVuSans.ttf
```

多少乱暴ですが、標準の DejaVuSans.ttf を「IPA Pゴシック」フォントに置き換えてしまいます。

### 3. Docker-compose ファイルを編集する

不要箇所のコメントアウト、Docker Image 作成など。

```yaml:docker-compose_v3_centos_pgsql_latest.yaml
version: '3.5'
services:
 zabbix-server:
（略）
# ** Zabbix-proxy関連をコメントアウト **
#  zabbix-proxy-sqlite3:
#   image: zabbix/zabbix-proxy-sqlite3:centos-4.2-latest
（略）
#   labels:
#    com.zabbix.description: "Zabbix proxy with SQLite3 database support"
#    com.zabbix.company: "Zabbix SIA"
#    com.zabbix.component: "zabbix-proxy"
#    com.zabbix.dbtype: "sqlite3"
#    com.zabbix.os: "centos"
#
#  zabbix-proxy-mysql:
#   image: zabbix/zabbix-proxy-mysql:centos-4.2-latest
（略）
#   labels:
#    com.zabbix.description: "Zabbix proxy with MySQL database support"
#    com.zabbix.company: "Zabbix SIA"
#    com.zabbix.component: "zabbix-proxy"
#    com.zabbix.dbtype: "mysql"
#    com.zabbix.os: "centos"

# ** Apache版フロントエンドをコメントアウト **
#  zabbix-web-apache-pgsql:
#   image: zabbix/zabbix-web-apache-pgsql:centos-4.2-latest
（略）
#    com.zabbix.dbtype: "pgsql"
#    com.zabbix.os: "centos"

 zabbix-web-nginx-pgsql:
  #image: zabbix/zabbix-web-nginx-pgsql:centos-4.2-latest  ** コメントアウト **
  build: .   # ** 専用Dockerfileを使用するため追記 **
  ports:
   - "80:80"    # ** export port を 80 に変更 **
   - "443:443"  # ** export port を 443 に変更 **
（略）
```

### 4. Zabbix時間を日本時間に変更

Web GUI に表示される時間は、デフォルトでは Zabbix 本社があるラトビア時間が使われるので、日本時間に変更します。WEB用環境設定ファイルである `.env_web` で設定します。

```properties:./env_web
（略）
# PHP_TZ=Europe/Riga
PHP_TZ=Asia/Tokyo
（略）
```

### 5. 起動する

上記で事前準備は完了。起動します。

```bash
$ docker-compose -f docker-compose_v3_centos_pgsql_latest.yaml up
```

### 6. Zabbix Agent との通信エラーを解消する

GUI アクセスすると、Zabbix Agent との通信がエラーになっているはずです。

原因は、デフォルトでは、Zabbix Server のエージェントのインタフェースが `127.0.0.1` となっていて、別コンテナである Zabbix agent と通信できないためです。[^1]

Docker-compose では DNS で名前解決できるので、以下のように、「DNS名」に「zabbix-agent」と入れ、接続方法を「DNS」にすることで解消できます。

![スクリーンショット 2019-06-15 21.50.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/59325/25e1d9ce-af7d-9d9d-e9a8-fb7fe64bf412.png)

### 終わり

以上でエラーなく普通に使えるようになりました。


[^1]: Zabbix Server から `127.0.0.1:10050` に通信しようとするが、Zabbix Server コンテナでは `:10050` を listen していないため、`Connection refused` になる。Zabbix Agent コンテナでは `:10050` を listen してるんだけどね。。