[comment]: # ({e62e1497-e62e1497})
# 5 コンテナでのインストール

[comment]: # ({/e62e1497-e62e1497})

[comment]: # ({5f71f243-a3ac452e})
### 概要

このページでは、Docker または Docker Compose を使用して Zabbix をデプロイする方法について説明します。

[Docker Compose](#docker-compose) は、Zabbix をデプロイする最も手早い方法です。
設定ファイルを読み込み、完全な Zabbix 環境を構成するすべてのコンテナを、正しい順序で自動的に起動します。

[Docker（手動デプロイ）](#docker-manual-deployment) では、各コンポーネントを段階的にデプロイすることで、同じ結果を実現します。

[comment]: # ({/5f71f243-a3ac452e})

[comment]: # ({b13b686a-fba82ded})
### 前提条件

開始する前に、Docker (1.12.0 以降) がシステムにインストールされていることを確認してください。
インストールされていない場合は、[Docker installation guide](https://docs.docker.com/engine/install/) に従ってください。
Docker Compose を使用したデプロイでは、Docker Compose (2.24.0 以降) も必要です。

一部の Zabbix コンポーネントでは、Docker を実行しているホストで特定のポートを開放しておく必要があります (例: Zabbix サーバー用の 10051/TCP、SNMP トラップ用の 162/UDP)。
Zabbix コンポーネントで使用されるポートの一覧については、[Requirements](/manual/installation/requirements#default-port-numbers) を参照してください。
Zabbix サーバーとエージェントでは、各コンテナで `ZBX_LISTENPORT` 環境変数を設定することで、デフォルトのポートを変更できます。

[comment]: # ({/b13b686a-fba82ded})

[comment]: # ({6c7779eb-f9acea87})
### 利用可能な Docker イメージ

Zabbix は各 Zabbix コンポーネントごとに Docker イメージを提供しており、すべて [Docker Hub](https://hub.docker.com/u/zabbix) で公開されています。  
各イメージは、そのコンポーネントを実行するコンテナーを作成するために使用されます。

|Zabbix component|Docker image|
|--|--------|
|エージェント|[zabbix/zabbix-agent](https://hub.docker.com/r/zabbix/zabbix-agent/)|
|Agent 2|[zabbix/zabbix-agent2](https://hub.docker.com/r/zabbix/zabbix-agent2)|
|サーバー (MySQL)|[zabbix/zabbix-server-mysql](https://hub.docker.com/r/zabbix/zabbix-server-mysql/)|
|サーバー (PostgreSQL)|[zabbix/zabbix-server-pgsql](https://hub.docker.com/r/zabbix/zabbix-server-pgsql/)|
|Webインターフェース (Apache + MySQL)|[zabbix/zabbix-web-apache-mysql](https://hub.docker.com/r/zabbix/zabbix-web-apache-mysql/)|
|Webインターフェース (Apache + PostgreSQL)|[zabbix/zabbix-web-apache-pgsql](https://hub.docker.com/r/zabbix/zabbix-web-apache-pgsql/)|
|Webインターフェース (Nginx + MySQL)|[zabbix/zabbix-web-nginx-mysql](https://hub.docker.com/r/zabbix/zabbix-web-nginx-mysql/)|
|Webインターフェース (Nginx + PostgreSQL)|[zabbix/zabbix-web-nginx-pgsql](https://hub.docker.com/r/zabbix/zabbix-web-nginx-pgsql/)|
|プロキシ (SQLite3)|[zabbix/zabbix-proxy-sqlite3](https://hub.docker.com/r/zabbix/zabbix-proxy-sqlite3/)|
|プロキシ (MySQL)|[zabbix/zabbix-proxy-mysql](https://hub.docker.com/r/zabbix/zabbix-proxy-mysql/)|
|Javaゲートウェイ|[zabbix/zabbix-java-gateway](https://hub.docker.com/r/zabbix/zabbix-java-gateway/)|
|Web service|[zabbix/zabbix-web-service](https://hub.docker.com/r/zabbix/zabbix-web-service)|
|SNMP traps|[zabbix/zabbix-snmptraps](https://hub.docker.com/r/zabbix/zabbix-snmptraps/)|

::: noteclassic
[SNMP traps](/manual/config/items/itemtypes/snmptrap) を使用するには、SNMP traps コンテナーが Zabbix サーバーまたはプロキシ コンテナーとボリュームを共有している必要があります（Docker Hub の [このイメージの使用方法](https://hub.docker.com/r/zabbix/zabbix-snmptraps#how-to-use-this-image) と、以下の [例](#deploy-zabbix-server-postgresql-with-snmp-traps) を参照してください）。
:::

Docker Hub 上のすべての Zabbix コンポーネントイメージは、[サポート対象のオペレーティングシステム](#image-tags) の最新のメジャーバージョンをベースにしています。  
これらのイメージは、基盤となる OS イメージが更新されると自動的に再ビルドされます。

[comment]: # ({/6c7779eb-f9acea87})

[comment]: # ({a7a01d95-e498c2aa})
#### イメージタグ

各イメージは、ベースOSとZabbixバージョンを選択するためのタグをサポートしています:

```default
zabbix/<image>:<os>-<version>
```

サポートされる `<os>` の値:

-   `alpine` - Alpine Linux
-   `ubuntu` - Ubuntu
-   `centos` - CentOS Stream
-   `ol` - Oracle Linux
-   `ltsc2022` - Windows 11 LTSC 2022 (Zabbix エージェントのみ)

サポートされる `<version>` の値:

-   `latest` - Alpine Linux 上の最新の安定版Zabbix
-   `<os>-latest` - 選択したOS上の最新の安定版Zabbix
-   `<os>-trunk` - 選択したOS上の最新の開発版（nightly）ビルド
-   `<os>-X.X-latest` - 選択したOS上の、特定のZabbixメジャーバージョンにおける最新のマイナーリリース
-   `<os>-X.X.*` - 選択したOS上の特定のZabbixマイナーリリース

例:

```bash
# Alpine Linux 上の最新の安定版 Zabbix プロキシ (SQLite3):
docker pull zabbix/zabbix-proxy-sqlite3:latest

# Ubuntu 上の最新の安定版 Zabbix プロキシ (SQLite3):
docker pull zabbix/zabbix-proxy-sqlite3:ubuntu-latest

# Ubuntu 上の Zabbix サーバー (MySQL) の最新開発版（nightly）ビルド:
docker pull zabbix/zabbix-server-mysql:ubuntu-trunk

# Alpine Linux 上の Zabbix サーバー (MySQL) の最新 7.0 マイナーリリース:
docker pull zabbix/zabbix-server-mysql:alpine-7.0-latest

# Alpine Linux 上の Zabbix サーバー (MySQL) のバージョン 7.0.1:
docker pull zabbix/zabbix-server-mysql:alpine-7.0.1
```

[comment]: # ({/a7a01d95-e498c2aa})

[comment]: # ({a76784bc-c443c22e})
### Docker Compose

Docker Compose は、Zabbix を最も手早くデプロイする方法です。
設定ファイル（Compose file）を読み込み、Docker イメージの取得、コンテナ間の内部ネットワークの作成、ストレージの設定、データベースの初期化、そしてすべてを正しい順序で起動するところまで、セットアップ全体を処理します。

[公式 Zabbix Dockerfiles](https://github.com/zabbix/zabbix-docker) リポジトリには、すぐに使える Docker Compose ファイルと、さまざまなオペレーティングシステム、データベースバックエンド、Zabbix コンポーネント設定をサポートする `.env` ベースの設定システムが用意されています。

1\. リポジトリをクローンし、そのディレクトリに移動して、7.0 に切り替えます。

```bash
git clone https://github.com/zabbix/zabbix-docker.git
cd zabbix-docker
git checkout 7.0
```

2\. （任意）[環境変数](#environment-variables) を使用してデプロイをカスタマイズします。
デフォルト構成でよければ、この手順は省略できます。

3\. デフォルト構成をデプロイします。Zabbix サーバー、Webインターフェース（Nginx 上で動作）、およびデータベースバックエンド（MySQL または PostgreSQL）を、それぞれ Alpine Linux 上の個別コンテナで実行します。

```bash
# データベースとして MySQL を使用する場合:
docker compose -f ./compose.yaml up -d

# データベースとして PostgreSQL を使用する場合:
docker compose -f ./compose_pgsql.yaml up -d
```

コンテナが起動して稼働状態になると（通常 1〜3 分以内）、Zabbix サーバーが起動し、Webインターフェースは `http://localhost` で利用できるようになります。

::: noteclassic
`docker compose ps` を使用してコンテナの状態を確認します。
`zabbix-docker-server-db-init-1` コンテナを除くすべてのコンテナは、`Up` 状態である必要があります。
`Exited` と表示されるものがある場合は、`docker logs -f <container-name>` でログを確認し、エラーを調べてください。
:::

[comment]: # ({/a76784bc-c443c22e})

[comment]: # ({c9a11d44-0be3c140})
#### 環境変数

Docker Compose の動作と Zabbix コンポーネントの設定は、どちらも環境変数を使用してカスタマイズできます。

**Compose レベルの変数**（[`.env` ファイル](https://github.com/zabbix/zabbix-docker/blob/7.0/.env) で定義）は、使用する Docker イメージ、ポート、およびネットワーク IP 範囲を制御します。  
これらの変数は、`docker compose` コマンドの前にインラインで指定することも、`.env` ファイルを編集することもできます。

たとえば、次のコマンドは、Ubuntu ベースのイメージ（デフォルトの Alpine Linux の代わり）を使用し、Webインターフェースを Nginx 経由でカスタム HTTP（8282）および HTTPS（8443）ポートで公開する、完全なマルチコンテナ Zabbix 環境をデプロイします。

```bash
OS=ubuntu \
ZABBIX_WEB_NGINX_HTTP_PORT=8282 \
ZABBIX_WEB_NGINX_HTTPS_PORT=8443 \
docker compose -f ./compose.yaml up -d
```

**コンポーネント レベルの変数**（[`env_vars/.env_<component>`](https://github.com/zabbix/zabbix-docker/blob/7.0/env_vars/) ファイルで定義）は、Zabbix コンポーネントの設定を制御します。  
`docker compose` コマンドを実行する前に、該当する `.env_<component>` ファイルを編集してください。

たとえば、次の変数を編集することで、Zabbix サーバーの passive poller 数やキャッシュ設定を調整したり、Webインターフェースのタイムゾーンを設定したりできます。

```ini
# env_vars/.env_srv
ZBX_STARTPOLLERS=20
ZBX_CACHESIZE=64M
ZBX_HISTORYCACHESIZE=32M

# env_vars/.env_web
PHP_TZ=Europe/Paris
```

::: noteclassic
コンポーネント レベルの環境変数は、異なる命名規則を用いて Zabbix コンポーネントの設定パラメータに対応します（例: `ZBX_STARTPOLLERS` は [`StartPollers`](/manual/appendix/config/zabbix_server#startpollers) に対応します）。  
一部の変数は Docker 固有であり、変更できない設定パラメータもあります（例: `PIDFile` や `LogType`）。  
環境変数を使用する場合は、Docker Hub 上の各コンポーネントの [Docker イメージ](#available-docker-images) の説明にある *Environment variables* セクションを参照してください。
:::

[comment]: # ({/c9a11d44-0be3c140})

[comment]: # ({15680aeb-7d10f7dc})
#### ボリューム

Docker Compose は、Compose ファイルと同じ場所に作成される `zbx_env/` ディレクトリに永続データを保存します。  
このディレクトリは、コンテナの再起動や更新をまたいでコンポーネントのデータを保持します。

`zbx_env/` の内容は、各コンポーネントのイメージごとにあらかじめ定義されています。たとえば、次のとおりです。

-   `zbx_env/etc/` - [Zabbix Webインターフェースコンテナ](https://hub.docker.com/r/zabbix/zabbix-web-nginx-mysql#allowed-volumes-for-the-zabbix-web-interface-container) で使用されます
-   `zbx_env/usr/` および `zbx_env/var/` - [Zabbix サーバーコンテナ](https://hub.docker.com/r/zabbix/zabbix-server-mysql#allowed-volumes-for-the-zabbix-server-container) で使用されます

各ボリュームの詳細については、Docker Hub 上の各コンポーネントの [Docker イメージ](#available-docker-images) の説明にある *Allowed volumes* セクションを参照してください。

[comment]: # ({/15680aeb-7d10f7dc})

[comment]: # ({4287ef6f-fb9850d6})
#### Makefile

Zabbix Dockerfiles リポジトリには、一般的な Docker Compose タスクのショートカットとして [Makefile](https://github.com/zabbix/zabbix-docker/blob/7.0/Makefile) も用意されています。  
完全な `docker compose` コマンドの代わりに、より短い `make` コマンドを使用できます（利用可能なオプションを確認するには `make help` を実行してください）:

```bash
# デフォルトのデプロイメント（Zabbix サーバー、Webインターフェース、MySQL、すべて Alpine Linux 上）
make up

# カスタムデプロイメント（Zabbix サーバー、カスタム Nginx ポートを使用する Webインターフェース、PostgreSQL、すべて Ubuntu 上）
make up \
  OS=ubuntu \
  DB=pgsql \
  ZABBIX_WEB_NGINX_HTTP_PORT=8282 \
  ZABBIX_WEB_NGINX_HTTPS_PORT=8443
```

::: noteimportant
コンテナを停止または削除する際は、必ずデプロイ時と同じデータベース種別を指定してください（例: `make down DB=pgsql`）。
:::

デフォルトでは、`make up` は最小限のサービスのみを起動します（Zabbix サーバー、Webインターフェース、データベース）。  
これにより、セットアップを軽量に保ち、不要な可能性のあるコンポーネントの起動を避けられます。  
追加コンポーネントを含めるには、次の [Compose プロファイル](https://docs.docker.com/compose/how-tos/profiles/) を使用できます:

```bash
# デフォルトのデプロイメント + Zabbix エージェント、Javaゲートウェイ、Web サービス、SNMP トラップ:
make up COMPOSE_PROFILES=full

# COMPOSE_PROFILES=full + Zabbix プロキシ（MySQL および SQLite3）:
make up COMPOSE_PROFILES=all
```

[comment]: # ({/4287ef6f-fb9850d6})

[comment]: # ({ec9e0e44-0b4b68c7})
### Docker (手動デプロイ)

Zabbix を段階的にデプロイし、個々のコンポーネントを実行し、既存の環境と統合する場合、または Podman などの代替コンテナランタイムを使用する場合は、手動デプロイを使用します。

たとえば、Zabbix プロキシをデプロイするには、次のコマンドを実行します。

```bash
docker run --name zabbix-proxy-sqlite3 \
  -e ZBX_SERVER_HOST=192.0.2.1 \
  -e ZBX_PROXYMODE=0 \
  -e ZBX_HOSTNAME=zabbix-proxy-sqlite3 \
  -v zabbix-proxy-data:/var/lib/zabbix/db_data \
  --init \
  -d \
  zabbix/zabbix-proxy-sqlite3:alpine-7.0-latest
```

:::noteimportant
Zabbix (7.0.0-7.0.2) は、コンテナ内で `PID1`/`init` プロセスとして実行してはいけません。
:::

このコマンドは次の処理を行います。

-   `zabbix/zabbix-proxy-sqlite3:alpine-7.0-latest` [Docker イメージ](#available-docker-images) を取得します。

-   Docker イメージを基に `zabbix-proxy-sqlite3` コンテナを作成して起動します（[`--init`](https://docs.docker.com/reference/cli/docker/container/run/#init) および [`-d`](https://docs.docker.com/reference/cli/docker/container/run/#detach) フラグを使用）。

-   `ZBX_SERVER_HOST` 環境変数を使用して、Zabbix プロキシの [`Server`](/manual/appendix/config/zabbix_proxy#server) パラメータを設定します。
    このパラメータは、プロキシが設定データを取得し、収集したデータを送信する Zabbix サーバーの IP アドレスを指定します。
    アクティブプロキシの動作に必要な他の変数はデフォルト値を使用するため、省略できます。

::: noteclassic
環境変数は、Zabbix コンポーネントの設定パラメータに対して、異なる命名規則を使用して対応付けられます（例: `ZBX_SERVER_HOST` は [`Server`](/manual/appendix/config/zabbix_proxy#server) に対応します）。
一部の変数は Docker 固有であり、一部の設定パラメータは変更できません（例: `PIDFile` や `LogType`）。
環境変数を使用する場合は、Docker Hub 上の各コンポーネントの [Docker イメージ](#available-docker-images) の説明にある *Environment variables* セクションを参照してください。
:::

-   Docker によって管理される保存領域（例: `/var/lib/docker/volumes/zabbix-proxy-data/`）をコンテナの `/var/lib/zabbix` ディレクトリに接続し、コンテナが削除されても Zabbix プロキシのデータが永続的に保存されるようにします。

::: noteclassic
各ボリュームの詳細については、Docker Hub 上の各コンポーネントの [Docker イメージ](#available-docker-images) の説明にある *Allowed volumes* セクションを参照してください。
:::

Zabbix プロキシコンテナをデプロイした後は、Zabbix Webインターフェースで [プロキシを追加](/manual/distributed_monitoring/proxies#configuration) し、このプロキシで監視する [ホストを設定](/manual/config/hosts/host#configuration) できます。

以下の例では、さらに 3 つのデプロイシナリオを示します。

-   Zabbix サーバー (MySQL) と Javaゲートウェイ
-   Zabbix サーバー (PostgreSQL) と SNMP トラップ
-   Zabbix サーバー (MySQL) と RHEL 8–10 上の Javaゲートウェイ

その他の例については、Docker Hub 上の各コンポーネントの [Docker イメージ](#available-docker-images) の説明を参照してください。

[comment]: # ({/ec9e0e44-0b4b68c7})

[comment]: # ({a807fe94-492bd3ba})
#### Javaゲートウェイを使用した Zabbix サーバー (MySQL) のデプロイ

この例では、MySQL バックエンド、[JMX monitoring](/manual/config/items/itemtypes/jmx_monitoring) 用の Javaゲートウェイ、および Nginx ベースの Webインターフェースを備えた Zabbix サーバーのデプロイ方法を示します。

1\. 専用の Docker ネットワークを作成します。これにより、すべての Zabbix コンポーネントのコンテナがコンテナ名で相互に到達できるようになります。

```bash
docker network create --subnet 172.20.0.0/16 --ip-range 172.20.240.0/20 zabbix-net
```

2\. 空の MySQL サーバーコンテナを実行します (`zabbix_pwd` と `root_pwd` は強力なパスワードに置き換え、以降の手順でその値を使用してください)。

```bash
docker run --name mysql-server -t \
  -e MYSQL_DATABASE="zabbix" \
  -e MYSQL_USER="zabbix" \
  -e MYSQL_PASSWORD="zabbix_pwd" \
  -e MYSQL_ROOT_PASSWORD="root_pwd" \
  --network=zabbix-net \
  --restart unless-stopped \
  -d mysql:8.0-oracle \
  --character-set-server=utf8mb4 --collation-server=utf8mb4_bin
```

3\. MySQL のログを追跡し、MySQL が接続を受け付ける準備ができるまで待ちます (`Ctrl+C` でログ表示を終了します)。

```bash
docker logs -f mysql-server

# ... [Server] /usr/sbin/mysqld: ready for connections. ...
```

4\. Zabbix Javaゲートウェイコンテナを実行します。

```bash
docker run --name zabbix-java-gateway -t \
  --network=zabbix-net \
  --restart unless-stopped \
  -d zabbix/zabbix-java-gateway:alpine-7.0-latest
```

5\. MySQL サーバーコンテナで `log_bin_trust_function_creators` を有効にします。
これにより、ストアド関数に対するセキュリティ制限が一時的に緩和されます。この設定は後の手順で無効にします。
これにより、Zabbix のデータベースユーザーは `SUPER` 権限なしでストアド関数を作成できます。これは、[binary logging](https://dev.mysql.com/doc/refman/8.0/en/stored-programs-logging.html) が有効な場合に MySQL が要求する権限です (MySQL 8.0 以降ではデフォルト)。
次のコマンドを実行します。

```bash
docker exec -it mysql-server mysql -u root -p'root_pwd' \
  -e "SET GLOBAL log_bin_trust_function_creators = 1;"
```

6\. Zabbix サーバーコンテナを実行し、Java Gateway および MySQL サーバーコンテナに接続します。

```bash
docker run --name zabbix-server-mysql -t \
  -e DB_SERVER_HOST="mysql-server" \
  -e MYSQL_DATABASE="zabbix" \
  -e MYSQL_USER="zabbix" \
  -e MYSQL_PASSWORD="zabbix_pwd" \
  -e ZBX_JAVAGATEWAY="zabbix-java-gateway" \
  --network=zabbix-net \
  -p 10051:10051 \
  --restart unless-stopped \
  --init \
  -d zabbix/zabbix-server-mysql:alpine-7.0-latest
```

7\. Zabbix サーバーのログを追跡し、Zabbix サーバーがデータベーススキーマの初期化を完了するまで待ちます (`Ctrl+C` でログ表示を終了します)。

```bash
docker logs -f zabbix-server-mysql

# ... [info]: ** Creating 'zabbix' schema in MySQL
# ... [info]: ** Database schema successfully created!
```

8\. MySQL サーバーコンテナで `log_bin_trust_function_creators` を無効にします。
これにより、非 SUPER ユーザーによるストアド関数の作成を防ぐセキュリティ制限が再度有効になります。
次のコマンドを実行します。

```bash
docker exec -it mysql-server mysql -u root -p'root_pwd' \
  -e "SET GLOBAL log_bin_trust_function_creators = 0;"
```

9\. Zabbix Webインターフェースコンテナを実行し、Zabbix サーバーおよび MySQL サーバーコンテナに接続します。

```bash
docker run --name zabbix-web-nginx-mysql -t \
  -e ZBX_SERVER_HOST="zabbix-server-mysql" \
  -e DB_SERVER_HOST="mysql-server" \
  -e MYSQL_DATABASE="zabbix" \
  -e MYSQL_USER="zabbix" \
  -e MYSQL_PASSWORD="zabbix_pwd" \
  -e PHP_TZ="Europe/Riga" \
  --network=zabbix-net \
  -p 80:8080 \
  --restart unless-stopped \
  -d zabbix/zabbix-web-nginx-mysql:alpine-7.0-latest
```

コンテナが起動して実行中になると、Zabbix サーバーが開始され、Webインターフェースは `http://localhost` で利用できるようになります。

::: noteclassic
`docker ps` を使用してコンテナの状態を確認してください。
すべてのコンテナの状態は `Up` である必要があります。
`Exited` と表示されるものがある場合は、`docker logs -f <container-name>` でログを確認し、エラーを調べてください。
:::

#### SNMP トラップを使用した Zabbix サーバー (PostgreSQL) のデプロイ

この例では、PostgreSQL バックエンド、[SNMP traps](/manual/config/items/itemtypes/snmptrap)、および Nginx ベースの Webインターフェースを備えた Zabbix サーバーのデプロイ方法を示します。

1\. 専用の Docker ネットワークを作成します。これにより、すべての Zabbix コンポーネントのコンテナがコンテナ名で相互に到達できるようになります。

```bash
docker network create --subnet 172.20.0.0/16 --ip-range 172.20.240.0/20 zabbix-net
```

2\. 空の PostgreSQL サーバーコンテナを実行します (`zabbix_pwd` は強力なパスワードに置き換え、以降の手順でその値を使用してください)。

```bash
docker run --name postgres-server -t \
  -e POSTGRES_USER="zabbix" \
  -e POSTGRES_PASSWORD="zabbix_pwd" \
  -e POSTGRES_DB="zabbix" \
  --network=zabbix-net \
  --restart unless-stopped \
  -d postgres:latest
```

3\. Zabbix SNMP traps コンテナを実行します。

```bash
docker run --name zabbix-snmptraps -t \
  -v /zbx_instance/snmptraps:/var/lib/zabbix/snmptraps:rw \
  -v /var/lib/zabbix/mibs:/usr/share/snmp/mibs:ro \
  --network=zabbix-net \
  -p 162:1162/udp \
  --restart unless-stopped \
  -d zabbix/zabbix-snmptraps:alpine-7.0-latest
```

4\. Zabbix サーバーコンテナを実行し、PostgreSQL サーバーおよび SNMP traps コンテナに接続します。

```bash
docker run --name zabbix-server-pgsql -t \
  -e DB_SERVER_HOST="postgres-server" \
  -e POSTGRES_USER="zabbix" \
  -e POSTGRES_PASSWORD="zabbix_pwd" \
  -e POSTGRES_DB="zabbix" \
  -e ZBX_ENABLE_SNMP_TRAPS="true" \
  --network=zabbix-net \
  -p 10051:10051 \
  --volumes-from zabbix-snmptraps \
  --restart unless-stopped \
  --init \
  -d zabbix/zabbix-server-pgsql:alpine-7.0-latest
```

5\. Zabbix サーバーのログを追跡し、Zabbix サーバーがデータベーススキーマの初期化を完了するまで待ちます (`Ctrl+C` でログ表示を終了します)。

```bash
docker logs -f zabbix-server-pgsql

# ... [info]: ** Creating 'zabbix' schema in PostgreSQL
# ... [info]: ** Database schema successfully created!
```

6\. Zabbix Webインターフェースコンテナを実行し、Zabbix サーバーおよび PostgreSQL サーバーコンテナに接続します。

```bash
docker run --name zabbix-web-nginx-pgsql -t \
  -e ZBX_SERVER_HOST="zabbix-server-pgsql" \
  -e DB_SERVER_HOST="postgres-server" \
  -e POSTGRES_DB="zabbix" \
  -e POSTGRES_USER="zabbix" \
  -e POSTGRES_PASSWORD="zabbix_pwd" \
  -e PHP_TZ="Europe/Riga" \
  --network=zabbix-net \
  -p 443:8443 \
  -p 80:8080 \
  -v /etc/ssl/nginx:/etc/ssl/nginx:ro \
  --restart unless-stopped \
  -d zabbix/zabbix-web-nginx-pgsql:alpine-7.0-latest
```

コンテナが起動して実行中になると、Zabbix サーバーが開始され、Webインターフェースは `http://localhost` で利用できるようになります。

::: noteclassic
`docker ps` を使用してコンテナの状態を確認してください。
すべてのコンテナの状態は `Up` である必要があります。
`Exited` と表示されるものがある場合は、`docker logs -f <container-name>` でログを確認し、エラーを調べてください。
:::

#### RHEL 8–10 で Javaゲートウェイを使用した Zabbix サーバー (MySQL) のデプロイ

この例では、MySQL バックエンド、[JMX monitoring](/manual/config/items/itemtypes/jmx_monitoring) 用の Javaゲートウェイ、および Nginx ベースの Webインターフェースを備えた Zabbix サーバーを、Red Hat Enterprise Linux 8、9、または 10 上でデプロイする方法を示します。

Red Hat Enterprise Linux では、推奨されるコンテナランタイムは Docker ではなく Podman です。
Podman は Docker と同様に動作しますが、root として実行されるバックグラウンドサービスを必要としないため、Red Hat 環境により適しています。

1\. `zabbix` という名前の新しい pod を作成し、Zabbix Webインターフェースと Zabbix サーバー trapper 用のポートを公開します。

```bash
podman pod create --name zabbix -p 80:8080 -p 10051:10051
```

2\. (任意) `zabbix` pod 内で Zabbix エージェントコンテナを実行します。

```bash
podman run --name zabbix-agent \
  -e ZBX_SERVER_HOST="127.0.0.1,localhost" \
  --restart=always \
  --pod=zabbix \
  -d registry.connect.redhat.com/zabbix/zabbix-agent-70:latest
```

3\. RHEL ホスト上に `./mysql/` ディレクトリを作成します。

```bash
mkdir -p ./mysql
```

4\. 空の MySQL サーバーコンテナを実行します (`zabbix_pwd` と `root_pwd` は強力なパスワードに置き換え、以降の手順でその値を使用してください)。

```bash
podman run --name mysql-server -t \
  -e MYSQL_DATABASE="zabbix" \
  -e MYSQL_USER="zabbix" \
  -e MYSQL_PASSWORD="zabbix_pwd" \
  -e MYSQL_ROOT_PASSWORD="root_pwd" \
  -v ./mysql/:/var/lib/mysql/:Z \
  --restart=always \
  --pod=zabbix \
  -d mysql:8.0 \
  --character-set-server=utf8mb4 --collation-server=utf8mb4_bin
```

5\. MySQL のログを追跡し、MySQL が接続を受け付ける準備ができるまで待ちます (`Ctrl+C` でログ表示を終了します)。

```bash
podman logs -f mysql-server

# ... [Server] /usr/sbin/mysqld: ready for connections. ...
```

6\. Zabbix Javaゲートウェイコンテナを実行します。

```bash
podman run --name zabbix-java-gateway -t \
  --restart=always \
  --pod=zabbix \
  -d registry.connect.redhat.com/zabbix/zabbix-java-gateway-70
```

7\. MySQL サーバーコンテナで `log_bin_trust_function_creators` を有効にします。
これにより、ストアド関数に対するセキュリティ制限が一時的に緩和されます。この設定は後の手順で無効にします。
これにより、Zabbix のデータベースユーザーは `SUPER` 権限なしでストアド関数を作成できます。これは、[binary logging](https://dev.mysql.com/doc/refman/8.0/en/stored-programs-logging.html) が有効な場合に MySQL が要求する権限です (MySQL 8.0 以降ではデフォルト)。
次のコマンドを実行します。

```bash
podman exec -it mysql-server mysql -u root -p'root_pwd' \
  -e "SET GLOBAL log_bin_trust_function_creators = 1;"
```

8\. Zabbix サーバーコンテナを実行し、Java Gateway および MySQL サーバーコンテナに接続します。

```bash
podman run --name zabbix-server-mysql -t \
  -e DB_SERVER_HOST="127.0.0.1" \
  -e MYSQL_DATABASE="zabbix" \
  -e MYSQL_USER="zabbix" \
  -e MYSQL_PASSWORD="zabbix_pwd" \
  -e ZBX_JAVAGATEWAY="127.0.0.1" \
  --restart=always \
  --init \
  --pod=zabbix \
  -d registry.connect.redhat.com/zabbix/zabbix-server-mysql-70
```

9\. Zabbix サーバーのログを追跡し、Zabbix サーバーがデータベーススキーマの初期化を完了するまで待ちます (`Ctrl+C` でログ表示を終了します)。

```bash
podman logs -f zabbix-server-mysql

# ... [info]: ** Creating 'zabbix' schema in MySQL
# ... [info]: ** Database schema successfully created!
```

10\. MySQL サーバーコンテナで `log_bin_trust_function_creators` を無効にします。
これにより、非 SUPER ユーザーによるストアド関数の作成を防ぐセキュリティ制限が再度有効になります。
次のコマンドを実行します。

```bash
podman exec -it mysql-server mysql -u root -p'root_pwd' \
  -e "SET GLOBAL log_bin_trust_function_creators = 0;"
```

11\. Zabbix Webインターフェースコンテナを実行し、Zabbix サーバーおよび MySQL サーバーコンテナに接続します。

```bash
podman run --name zabbix-web-mysql -t \
  -e ZBX_SERVER_HOST="127.0.0.1" \
  -e DB_SERVER_HOST="127.0.0.1" \
  -e MYSQL_DATABASE="zabbix" \
  -e MYSQL_USER="zabbix" \
  -e MYSQL_PASSWORD="zabbix_pwd" \
  -e PHP_TZ="Europe/Riga" \
  --restart=always \
  --pod=zabbix \
  -d registry.connect.redhat.com/zabbix/zabbix-web-mysql-70
```

::: noteclassic
pod `zabbix` は、`zabbix-web-mysql` コンテナの `8080/TCP` からホストマシンへ `80/TCP` ポート (HTTP) を公開します。
:::

コンテナが起動して実行中になると、Zabbix サーバーが開始され、Webインターフェースは `http://localhost` で利用できるようになります。

::: noteclassic
`docker ps` を使用してコンテナの状態を確認してください。
すべてのコンテナの状態は `Up` である必要があります。
`Exited` と表示されるものがある場合は、`docker logs -f <container-name>` でログを確認し、エラーを調べてください。
:::

[comment]: # ({/a807fe94-492bd3ba})
