日本人にやさしそうなMIRACLE ZBXをdocker-composeでまとめた

# やり方だけまとめると
1. 構成ファイルをとってくる（←中身は [構成ファイルの中身](#構成ファイルの中身) 参照）
1. ビルド＆起動する
1. firewall設定する（←すでにやってあれば不要）

```
# git clone https://github.com/bashaway/miraclezbx
# cd miraclezbx ; docker-compose up -d
# firewall-cmd --add-masquerade --zone=public --permanent ; firewall-cmd --reload
```
で、環境がつくれる。

あとは、[初回ログインとセットアップ](#初回ログインとセットアップ) を参照


# はじめに
cactiのバージョンアップに伴い、自作プラグインの動作が怪しくなってきた。
ので、zabbixに乗り換えようかと思い、公式dockerとか他の方の記事とかで、どれがいいのか調べてみました。
なんか公式dockerは日本人にやさしくないようだったので、日本人にやさしそうな MIRACLE ZBX をつかってみました。

MIRACLE ZBX
https://www.miraclelinux.com/product-service/zabbix/oss/download

> サイバートラストのZabbix互換パッケージは、OSSコミュニティで公開されているソースコードにサイバートラスト独自の機能追加、バグ修正を行い、各OS用にパッケージング、テストをしています。

だそうです。日本語Remix的に利用させていただきます。
インストールマニュアルも日本語になっていて、これに沿って進めれば何も考えずに日本語環境でタイムゾーンも日本になってました。
なので、再利用可能なように手順をまとめて自分用にdocker-compose化しました。


# 対象機器および環境

## 検証環境
* CentOS8(8.1.1911)
* Docker(19.03.5)
* MIRACLE ZBX (4.0)
* MariaDB(10.4.12) <- 公式のlatestイメージ利用

今回はzabbixサーバのみです。エージェントはありません。


# 事前準備

CentOS と Docker と Docker Compose が無ければ、以下の記事のとおりに準備しておく。
[ESXi6.7にCentOS8を最小構成で構築](https://qiita.com/bashaway/items/ed9997629d5b02cfca05) 
[CentOS8にDockerをインストール。名前解決できなかったのが解消した。](https://qiita.com/bashaway/items/4001c0ad5a6f21957986)


# 作業内容

## firewall のポリシー追加

```
firewall-cmd --add-masquerade   --zone=public --permanent
firewall-cmd --reload
```

## 構成ファイルの準備

docker-compose.yml はじめファイル一式は [GitHub](https://github.com/bashaway/miraclezbx) にあるものを使います。


```
# git clone https://github.com/bashaway/miraclezbx
```
デフォルトの設定から変更する場合は、docker-compose.ymlを直接修正します。
修正なしでよければ、次の手順 [コンテナをつくる](#コンテナをつくる) までスキップしてOKです。

### 構成ファイルの中身

膨大な量でもないので、 `git clone` で引っ張ってくる各ファイルを説明します。

各ファイルは以下の配置です。

```sh
# tree miraclezbx --charset=C
miraclezbx
|-- README.md
|-- docker-compose.yml
|-- zbx_db
|   |-- Dockerfile
|   `-- zabbix.cnf
`-- zbx_sv
    |-- Dockerfile
    `-- docker-entrypoint.sh
```

docker-compose.yml で DBのアカウント、データベースなどの初期設定や、各コンテナのポートバインド、タイムゾーン設定などします。
必要であれば修正してください。

```yml:miraclezbx/docker-compose.yml
version: '3'

services:
  zbx_db:
    build: ./zbx_db
    container_name: zbx_db
    hostname: zbx_db
    environment:
      MARIADB_DATABASE: zabbix
      MARIADB_USER: zabbix
      MARIADB_PASSWORD: zbxpwd
      MARIADB_ROOT_PASSWORD: rootpwd
      TZ: 'Asia/Tokyo'
    networks:
      zbx_nw:
    ports:
      - "3306:3306"

  zbx_sv:
    build: ./zbx_sv
    container_name: zbx_sv
    hostname: zbxa_sv
    restart: always
    networks:
      zbx_nw:
    ports:
      - 80:80
      - 10051:10051
      - 161:161/udp
      - 162:162/udp
    links:
      - zbx_db
    cap_add:
      - SYS_ADMIN
    security_opt:
      - seccomp:unconfined
    volumes:
      - /sys/fs/cgroup:/sys/fs/cgroup:ro
    environment:
      TZ: 'Asia/Tokyo'
    depends_on:
      - zbx_db

networks:
  zbx_nw:
    driver: bridge
    driver_opts:
      com.docker.network.bridge.enable_ip_masquerade: "true"
      com.docker.network.bridge.host_binding_ipv4: "0.0.0.0"
      com.docker.network.bridge.name: "br_zbx_nw"
```

### データベースサーバ（のコンテナ）

データベースには MariaDB の公式イメージを利用します。
インストールマニュアルでデータベースのパラメータが指定されているので、それを入れています。

```docker:miraclezbx/zbx_db/Dockerfile
FROM mariadb/server:latest
COPY zabbix.cnf /etc/mysql/mysql.conf.d
```

インストールマニュアルのまんまの設定ファイルを準備

```:miraclezbx/zbx_db/zabbix.cnf
[mysqld]
character-set-server=utf8
skip-character-set-client-handshake
innodb_file_per_table
innodb_log_buffer_size=16M
innodb_buffer_pool_size=1024M
innodb_log_file_size=256M
innodb_log_files_in_group=2
key_buffer_size=200M
max_allowed_packet=16MB
```

### zabbixサーバ 兼 webサーバ（のコンテナ）

zabbixをインストールすると、docディレクトリに .sql が置かれ、それを流し込んでデータベースの初期化をします。
初回起動時のみ、流し込みを行うため、以下の記事のようにヘルパースクリプトを利用しています。
[dockerで初回起動時のみ特定の処理を行うヘルパースクリプト（docker-entrypoint.sh）](https://qiita.com/bashaway/items/e6279ba432d18c2d4299)

docker-compose.yml でデータベースのアカウント情報やホスト名などを修正した場合には、以下の２ファイルも修正が必要です。

```docker:miraclezbx/zbx_sv/Dockerfile
FROM centos:centos8
RUN ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime ; \
    dnf -y update ; dnf -y install epel-release rsyslog logrotate cronie ; \
    dnf -y install http://ftp.miraclelinux.com/zbx/4.0/miracle-zbx-release-4.0-2.noarch.rpm ;\
    rpm --import http://ftp.miraclelinux.com/zbx/RPM-GPG-KEY-MIRACLE ; \
    dnf -y install miracle-zbx-server-mysql miracle-zbx-web miracle-zbx-web-mysql miracle-zbx-web-japanese php-ldap ;\
    sed -i 's/^#//' /etc/httpd/conf.d/zabbix.conf ; \
    echo 'DBPassword=zbxpwd' >> /etc/zabbix/zabbix_server.conf ;\
    echo 'DBHost=zbx_db' >> /etc/zabbix/zabbix_server.conf ;\
    systemctl enable httpd ;\
    systemctl enable zabbix-server
COPY docker-entrypoint.sh /usr/local/bin/
RUN ln -s usr/local/bin/docker-entrypoint.sh /
ENTRYPOINT ["docker-entrypoint.sh"]
CMD [ "/usr/sbin/init" ]
```

ヘルパースクリプトが以下
docker-compose.ymlでデータベースを先に起動するけど、起動完了までまたないと流し込みでエラーになってしまう。
なので、応答があるまで `sleep 1` で待ちます。
その後、データベースはあっても、テーブルが無ければ、初期化の .sql を流し込む。ということをしています。

```sh:miraclezbx/zbx_sv/docker-entrypoint.sh
#!/bin/sh

until mysqladmin -uzabbix -pzbxpwd -h zbx_db  ping ; do
  sleep 1
done

if [ "`mysql -uzabbix -pzbxpwd  -h zbx_db zabbix  -e 'show tables'`" = "" ]  ; then
  zcat /usr/share/doc/miracle-zbx-server-mysql/create.sql.gz  | mysql -uzabbix -pzbxpwd zabbix -h zbx_db
fi

exec "$@"
```

## コンテナをつくる
構成ファイルが準備できたらビルドして起動させる。

```sh
# docker-compose build
（～省略～）

# docker-compose up -d
Creating network "miraclezbx_zbx_nw" with driver "bridge"
Creating zbx_db ... done
Creating zbx_sv ... done
```

## 初回ログインとセットアップ
初回起動してすぐは sql 流し込みが走るので、10秒くらいまってから http でアクセスします。
アクセス先は http://アドレス or ホスト名/zabbix です。

Next Step で進めていく
[![Screenshot from Gyazo](https://gyazo.com/d9951888095fb6b2b5e9fdda170fa6e6/raw)](https://gyazo.com/d9951888095fb6b2b5e9fdda170fa6e6)

データベース情報はパラメータ変更していなければ、これ。（Passwordは `zbxpwd` ）
[![Screenshot from Gyazo](https://gyazo.com/67da1d0501a7b50d5036ad3c6cb5c6f8/raw)](https://gyazo.com/67da1d0501a7b50d5036ad3c6cb5c6f8)

ZBXサーバ情報はパラメータ変更していなければ、これ。
[![Screenshot from Gyazo](https://gyazo.com/38c8154da943d142e0d701e4fed1a97f/raw)](https://gyazo.com/38c8154da943d142e0d701e4fed1a97f)

こうなるはず
[![Screenshot from Gyazo](https://gyazo.com/68299cb963c398129a923b30dc5cb591/raw)](https://gyazo.com/68299cb963c398129a923b30dc5cb591)

あとは Fishish をクリック
[![Screenshot from Gyazo](https://gyazo.com/7d81dac01ed308c2c31edbf4145e7e1a/raw)](https://gyazo.com/7d81dac01ed308c2c31edbf4145e7e1a)

初期アカウントは以下のもの
Username：Admin
Password：zabbix
[![Screenshot from Gyazo](https://gyazo.com/e5dad608878444f09a813a7b61d36702/raw)](https://gyazo.com/e5dad608878444f09a813a7b61d36702)

これだけで日本語環境がつかえる。
[![Screenshot from Gyazo](https://gyazo.com/f534a5024a819ea80c547398046037ca/raw)](https://gyazo.com/f534a5024a819ea80c547398046037ca)


# さいごに
さて、プラグインの作り方を勉強しなきゃ。


# 出典
https://www.miraclelinux.com/support/docs/zbx/c3b23g/view
http://docs.docker.jp/compose/startup-order.html
https://github.com/docker-library/mariadb/blob/master/docker-entrypoint.sh