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の推奨バージョン
zabbixのインストール
公式の手順を参考にします
※ OSや各アプリケーションのバージョンを合わせたうえで手順を見て進めてください
dnf installまで済ませたら、その後はコンテナ作成後に実施します
mariadb10.5コンテナ作成
下記サイトを参考にさせていただきました
docker hubのmariadb公式から10.5のイメージを取得します
# 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
コメント