コンテナで作成したmariadbをzabbix DBとして使う

AlmaLinux9

webサーバーでmariadb 11.4 を使用しているのですが、Zabbix 7.0 が対応していませんでした(サイトの要件見ると対応してそうですが、サーバー上でインストールしてサービス起動しようとするとバージョンに対応してませんと表示される)
そのため、zabbix serverはwebサーバーで構築したうえで、Dockerコンテナ上で古いバージョンのmariadbを構築しようと思いました

ネットで検索すると、zabbixサーバー自体をコンテナ化する手順はよく見かけるのですが、mariadbだけコンテナのパターンが全然見つかりませんでした
あまり一般的な構成ではないのかもしれませんが、せっかくなので検証してみました

環境

■webサーバー
※ Dockerはインストール済想定で進めます
OS:AlmaLinux9
Apache:2.4
mariadb:11.4(zabbixには使用しない)
php:8.3
Docker:27.2
zabbix:7.0

■Dockerコンテナ
mariadb:10.5
※ zabbix 7.0の推奨バージョン

2 Requirements

zabbixのインストール

公式の手順を参考にします
※ OSや各アプリケーションのバージョンを合わせたうえで手順を見て進めてください

ダウンロード
Zabbix is being downloaded over 4 000 000 times every year for a reason. Download Zabbix for free and try it yourself!

dnf installまで済ませたら、その後はコンテナ作成後に実施します

mariadb10.5コンテナ作成

下記サイトを参考にさせていただきました

DockerでMariaDBを構築する - Qiita
目的Dockerを用いてMysqlを構築する時に、毎回webで調べてしまっているので、記事にまとめておこうと思う。ディレクトリ構成docker-compose.ymldb/Dockerfi…

docker hubのmariadb公式から10.5のイメージを取得します

https://hub.docker.com/layers/library/mariadb/10.5/images/sha256-d9a98e7d966ca4954425ea31eb93b1e38218d66a95e49c6d5f9cb603bcb3590f?context=explore
# docker pull mariadb:10.5

コンテナ用作業フォルダの作成

# mkdir /etc/docker/db
# mkdir /etc/docker/db/data

docker-compose.ymlを作成します

# vi /etc/docker/db/docker-compose.yml
services:
  db:
    container_name: mariadb10.5
    restart: always
    build:
     context: .
    environment:
      MARIADB_ROOT_PASSWORD: xxxxxxxxx
      TZ: 'Asia/Tokyo'
    volumes:
      - ./data:/var/lib/mysql
      - /usr/share/zabbix-sql-scripts:/usr/share/zabbix-sql-scripts
    command: --default-authentication-plugin=mysql_native_password --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
    ports:
      - 3006:3306

上記ファイルの補足をします

container_name: コンテナ名を指定します。わかりやすいようにmariadb10.5にします
context: DockerFileの場所。同じディレクトリ内に後で配置します
MARIADB_ROOT_PASSWORD: rootパスワードを指定します
TZ: タイムゾーンを指定します

volumes: ./data:/var/lib/mysql
ホストのディレクトリ:コンテナのディレクトリです。データベースのデータを保存する領域のマッピングをしています。コンテナを消したり停止してもホストの./dataにデータが残ります

volumes: /usr/share/zabbix-sql-scripts:/usr/share/zabbix-sql-scripts
zabbixデータベーススキーマ作成する際にホストにインストールしたzabbixのスクリプトを参照するためマッピングしています

ports: ホストのポート:コンテナのポートです。ホストでは別のmariadb動かしてるので3306ではなく、3006とマッピングしています

DockerFileを作成します
先ほど取得したイメージをもとに、カスタマイズしたイメージを作成するためのファイルです

# vi /etc/docker/db/Dockerfile
FROM mariadb:10.5
RUN touch /var/log/mysql/mysqld.log
ADD my.cnf /etc/mysql/conf.d/my.cnf
RUN chmod 644 /etc/mysql/my.cnf

上記ファイルの補足をします

From mariadb:10.5 ←コンテナ作成に使用するイメージを指定します
RUN touch /var/log/mysql/mysqld.log ←コンテナ上にmysqld.logを作成します
ADD my.cnf /etc/mysql/conf.d/my.cnf ←ホストで後程作成するmy.cnfをコンテナの/etc/mysql/conf.d/my.cnfへマッピングします
RUN chmod 644 /etc/mysql/my.cnf ← コンテナのmy.cnfのパーミッションです

my.cnfを作成し、文字コードと整合順序の設定をしておきます

# vi /etc/docker/db/my.cnf
[mysqld]
# 文字コード、整合順序の設定
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci

docker-compose.ymlのあるディレクトリまで移動して、ビルドします
※ 移動してから実行しないとエラーになります

# cd /etc/docker/db
# docker compose up --build -d

コンテナが作成されていることを確認します
少し見えづらいですが、NAMESがmariadb10.5となっているものがあれば作成できています
CONTAINER IDはすぐ後に使うのでコピーしておきます(本環境では436657bda04aと書いてある部分が該当します)

# docker container ls
CONTAINER ID   IMAGE                    COMMAND                   CREATED          STATUS          PORTS                                                                                                                                           NAMES
436657bda04a   db-db                    "docker-entrypoint.s…"   11 seconds ago   Up 11 seconds   0.0.0.0                                               :3006->3306/tcp, [::]:3006->3306/tcp                                                      mariadb10.5

zabbixデータベースへの接続

コンテナに入って操作をしていきます
下記コマンドの数字部分は、上記のCONTAINER IDを入れてください

# docker exec -it 436657bda04a bash

root権限でデータベース接続します
パスワードを聞かれたら、先ほどdocker-compose.ymlで設定したものを入れてください

root@436657bda04a:/# mysql -uroot -p

基本公式のzabbixインストール手順に基づいて進めますが、指定するホストだけ変更が必要です
localhostのユーザーとして作成すると、コンテナデータベースへ接続できません
そのため、「%」ですべてのホストからのアクセスを指定します

passwordと書いてある部分はパスワードを指定してください

MariaDB [(none)]>
mysql> create database zabbix character set utf8mb4 collate utf8mb4_bin;
mysql> create user zabbix@'%' identified by 'password';
mysql> grant all privileges on zabbix.* to zabbix@'%';
mysql> set global log_bin_trust_function_creators = 1;
mysql> quit;

先ほどdocker-composeでマッピングしたスクリプトを実行します
パスワードを聞かれたら、パスワードを入力します

root@436657bda04a:/# zcat /usr/share/zabbix-sql-scripts/mysql/server.sql.gz | mysql --default-character-set=utf8mb4 -uzabbix -p zabbix

再度データベースへ接続し、公式のzabbixインストール手順に基づいて進めます

root@436657bda04a:/# mysql -uroot -p
MariaDB [(none)]>
mysql> set global log_bin_trust_function_creators = 0;
mysql> quit;

コンテナから抜けます

root@436657bda04a:/# exit

zabbixデータベースへ接続するための諸々の設定を入れます
DBPasswordには、先ほど作成したzabbixユーザーのパスワードを入れます
ホストは、localhostだと名前解決失敗しますのでループバックアドレスを入れてください

# vi /etc/zabbix/zabbix_server.conf
DBHost=127.0.0.1
DBPassword=xxxxxxx
DBPort=3006

zabbixのサービスを再起動&有効化します

# systemctl restart zabbix-server zabbix-agent httpd php-fpm
# systemctl enable zabbix-server zabbix-agent httpd php-fpm

zabbixセットアップ

zabbixにアクセスします
IPアドレスは、zabbixがインストールされているホストのアドレスを指定してください
http://xxx.xxx.xxx.xxx/zabbix/

初回のアクセスでは下記のようなセットアップ画面が表示されます
デフォルトの言語を「日本語(ja-JP)」に設定して、「次のステップ」をクリックします

前提条件のチェックが入ります、エラーがなければ「次のステップ」へ進みます

データベースの接続設定をします
下記の通り設定し、「次のステップ」をクリックします

データベースホスト:127.0.0.1 ←localhostだと名前解決に失敗します
データベースポート:3006 ←ポート番号は、docker-compose.ymlで指定したコンテナのポートを指定します
データベース名:zabbix
ユーザー名:zabbix
パスワード:設定した値
データベース接続のTLS暗号化:チェックを外す

下記の通り設定し、「次のステップ」をクリックします

zabbixサーバー名:任意の名前
デフォルトのタイムゾーン:Asia/Tokyo

設定内容に問題ないことを確認し、「次のステップ」をクリックします

インストールは以上で終了です、「終了」をクリックしてログイン画面を表示します

初回ログインは下記ユーザーとパスワードを入力します

初期ユーザー名:Admin
パスワード:zabbix

コメント

タイトルとURLをコピーしました