前提情報
①インフラ・仮想化基盤
VMwareESXi上による仮想マシン(MIRACLE LINUX 9.6)上でDockerコンテナを作成する
②SambaでのAD環境構築が必須
下記を構築してWindowsでも認証機能が正しくできることの確認が必要である
https://travel-web.net/2026/03/14/adserver/
③Zabbix7.0へのリバプロの設定
通信の暗号化とセキュリティ向上のためHTTPS通信化およびSSL/TLS証明書の設定を行う。
④Zabbixコンテナのバージョン選定の前提(構築理由)
Job Arranger 7.2を構築・稼働させる要件として互換性を確保するため、ベースとなるZabbixをバージョン7.0に指定して構築を行う。
⑤Zabbix7.0の事前設定(zabbix-mysqlのフォルダ構成)
LDAP設定情報をデータベースの設定ファイル(または環境変数等)に追記するため、データベースの設定ファイルは「/Container/zabbix/mysql/conf.d」に配置して構築する
DBの最新化
①Zabbix 7.0の初期データベース構築に必要な初期スキーマファイル(create.sql.gz)を、公式のDockerイメージから一時コンテナを起動してホスト側の指定フォルダ(/Container/zabbix/mysql/conf.d)へ抽出・保存する。
docker run --rm --user root zabbix/zabbix-server-mysql:7.0-centos-latest \
sh -c "cat /usr/share/doc/zabbix-server-mysql/create.sql.gz" > /Container/zabbix/mysql/conf.d/create.sql.gz
②取得した圧縮ファイル(create.sql.gz)を解凍し、SQL文を直接実行・読み込みできる状態(create.sql)にするため解凍する。
gunzip create.sql.gz
③Zabbix起動時にActive Directory等のLDAP認証連携が自動で行われるよう、userdirectory および userdirectory_ldap テーブルへの接続設定・初期データをINSERT文としてデータベース初期化スクリプトに追加する。
-- ================================================================================================================
-- Custom LDAP Configuration (Fixed for Zabbix 7.0)
-- ================================================================================================================
-- ① userdirectoryテーブルへの登録
INSERT INTO userdirectory (userdirectoryid, name, description, idp_type, provision_status)
VALUES (1, 'SASIO-AD', 'Auto-configured', 1, 1)
ON DUPLICATE KEY UPDATE name='SASIO-AD', description='Auto-configured', idp_type=1, provision_status=1;
-- ② userdirectory_ldapテーブルへの登録(動作確認済みの原本構成)
INSERT INTO userdirectory_ldap (
userdirectoryid, host, port, base_dn, search_attribute,
bind_dn, bind_password, start_tls, search_filter
) VALUES (
1, '172.26.4.43', 389, 'DC=sasio,DC=jp', 'sAMAccountName',
'CN=Administrator,CN=Users,DC=sasio,DC=jp', 'get04F15fr34!x07r008', 0, ''
)
ON DUPLICATE KEY UPDATE
host='172.26.4.43', port=389, base_dn='DC=sasio,DC=jp',
search_attribute='sAMAccountName', bind_dn='CN=Administrator,CN=Users,DC=sasio,DC=jp',
bind_password='get04F15fr34!x07r008';
-- ③ Default authentication を LDAP に切り替え
UPDATE config SET authentication_type = 1 WHERE configid = 1;
-- ④ 使用するディレクトリを ID:1 (SASIO-AD) に指定
UPDATE config SET ldap_userdirectoryid = 1 WHERE configid = 1;
-- ⑤ 「Enable LDAP authentication」および「Enable JIT provisioning」のスイッチをONにする
UPDATE config SET ldap_auth_enabled = 1, ldap_jit_status = 1 WHERE configid = 1;
-- ⑥ ステップA: マッピングルール(パターンとロール)を登録
INSERT INTO userdirectory_idpgroup (userdirectory_idpgroupid, userdirectoryid, name, roleid)
SELECT
1,
ud.userdirectoryid,
'*',
r.roleid
FROM userdirectory ud, role r
WHERE ud.name = 'SASIO-AD' AND r.name = 'Super admin role'
ON DUPLICATE KEY UPDATE userdirectoryid=1, name='*', roleid=VALUES(roleid);
-- ⑦ ステップB: マッピングと Zabbixグループの紐付け
INSERT INTO userdirectory_usrgrp (userdirectory_usrgrpid, userdirectory_idpgroupid, usrgrpid)
SELECT
1,
1,
ug.usrgrpid
FROM usrgrp ug
WHERE ug.name = 'Zabbix administrators'
ON DUPLICATE KEY UPDATE userdirectory_idpgroupid=1, usrgrpid=VALUES(usrgrpid);
-- ⑧ Deprovisioned users group を Disabled グループ(ID: 9 または名前判定)に設定
UPDATE config
SET disabled_usrgrpid = IFNULL((SELECT usrgrpid FROM usrgrp WHERE name = 'Disabled'), 9)
WHERE configid = 1;
-- ⑨ ID管理テーブルを更新し、構築後のGUI操作での衝突を防ぐ
INSERT INTO ids (table_name, field_name, nextid)
VALUES ('userdirectory_idpgroup', 'userdirectory_idpgroupid', 2),
('userdirectory_usrgrp', 'userdirectory_usrgrpid', 2)
ON DUPLICATE KEY UPDATE nextid = 2;
④INSERT文を追加・編集した create.sql を、Dockerコンテナの初期化スクリプトが自動読み込みできるように、再度gzip形式の圧縮ファイル(create.sql.gz)に固め直す。
gzip -c create.sql > create.sql.gz
④Zabbixアプリケーションからデータベースへ自由にアクセスできるよう、ユーザー zabbix に対してすべての権限を付与する。
-- ① 既存の不完全なDBを消し、Zabbix 7.0専用の規格で作り直す
DROP DATABASE IF EXISTS zabbix;
CREATE DATABASE zabbix CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;
-- ② 関数作成の制限を解除(インポートの中断防止)
SET GLOBAL log_bin_trust_function_creators = 1;
-- ③ 権限の付与
GRANT ALL PRIVILEGES ON zabbix.* TO 'zabbix'@'%';
①Zabbix7.0のDockerFileの構築
FROM zabbix/zabbix-web-apache-mysql:7.0-centos-latest
USER root
# OS更新と必要パッケージ
RUN microdnf update -y && \
microdnf install -y tar gzip && \
microdnf clean all
WORKDIR /tmp
# JobArrangerの展開と配置
RUN curl -L -o jobarranger.tar.gz https://www.jobarranger.info/download/7.2.1/Other/jobarranger-7.2.1.tar.gz && \
mkdir -p /tmp/jobarg_extracted && \
tar -xzf jobarranger.tar.gz -C /tmp/jobarg_extracted && \
mkdir -p /usr/share/jobarranger && \
cp -R /tmp/jobarg_extracted/*/* /usr/share/jobarranger/ 2>/dev/null || cp -R /tmp/jobarg_extracted/* /usr/share/jobarranger/
# 設定置換
RUN sed -i "s|http://localhost/jobarranger|https://zabbix.sasio.jp/jobarranger|g" /usr/share/jobarranger/frontend/jobarranger/modules/JazManager/config/jam.module.config.php && \
sed -i "s|http://localhost/zabbix|https://zabbix.sasio.jp/zabbix|g" /usr/share/jobarranger/frontend/jobarranger/api/app/config/jam.config.php && \
sed -i "s|'localhost'|'zabbix-mysql'|g" /usr/share/jobarranger/frontend/jobarranger/api/app/config/jam.config.php && \
sed -i 's|"localhost"|"zabbix-mysql"|g' /usr/share/jobarranger/frontend/jobarranger/api/app/config/jam.config.php
# モジュールコピー
RUN mkdir -p /usr/share/zabbix/modules && \
if [ -d "/usr/share/jobarranger/frontend/jobarranger/modules/JazManager" ]; then \
cp -R /usr/share/jobarranger/frontend/jobarranger/modules/JazManager /usr/share/zabbix/modules/; \
fi
# 不要ファイル削除
RUN rm -rf /tmp/jobarg_extracted /tmp/jobarranger.tar.gz
# 【重要】Apache の設定エラーを回避するため、conf.d 配下の不要ファイルを無効化
RUN for f in autoindex.conf userdir.conf welcome.conf ssl.conf; do \
if [ -f /etc/httpd/conf.d/$f ]; then \
mv /etc/httpd/conf.d/$f /etc/httpd/conf.d/$f.disabled; \
fi; \
done
# 権限設定
RUN chown -R 1997:0 /usr/share/jobarranger /usr/share/zabbix/modules && \
chmod -R 755 /usr/share/zabbix/modules
②Zabbix7.0のDockerコンテナの構築
services:
mysql:
image: mysql:8.0
container_name: zabbix-mysql
restart: always
command: --log-bin-trust-function-creators=1 --character-set-server=utf8mb4 --collation-server=utf8mb4_bin
environment:
TZ: Asia/Tokyo
MYSQL_ROOT_PASSWORD: zabbixroot
MYSQL_DATABASE: zabbix
MYSQL_USER: zabbix
MYSQL_PASSWORD: zabbixpass
volumes:
- /Container/zabbix/mysql/data:/var/lib/mysql
- /Container/zabbix/mysql/conf.d:/etc/mysql/conf.d
- /Container/zabbix/mysql/conf.d/init.sql:/docker-entrypoint-initdb.d/init.sql:ro
networks:
- monitor_net
# ★ 自分自身のDBサーバーへの接続確認(healthcheck)を追加
healthcheck:
test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-uroot", "-pzabbixroot", "--ssl-mode=DISABLED"]
interval: 60s
timeout: 10s
retries: 5
start_period: 480s
zabbix-server:
image: zabbix/zabbix-server-mysql:7.0-centos-latest
container_name: zabbix-server
restart: always
volumes:
# ★ カスタムした「最強の設計図」をマウント
- /Container/zabbix/mysql/conf.d/create.sql.gz:/usr/share/doc/zabbix-server-mysql/create.sql.gz:ro
environment:
TZ: Asia/Tokyo
DB_SERVER_HOST: mysql
MYSQL_USER: zabbix
MYSQL_PASSWORD: zabbixpass
MYSQL_DATABASE: zabbix
healthcheck:
# サーバーが起動し、設定を読み込める状態かを5分おきに確認
test: ["CMD", "zabbix_server", "-V"]
interval: 300s
timeout: 60s
retries: 3
# ★次回の「スナップショット戻し」後の初期化に備えて1時間に設定
start_period: 3600s
depends_on:
mysql:
condition: service_healthy # MySQLが完全に「Healthy」になるのを待つ
ports:
- "10051:10051"
networks:
- monitor_net
zabbix-web:
image: zabbix-jobarranger:latest
container_name: zabbix-web
restart: always
environment:
DB_SERVER_HOST: zabbix-mysql
DB_SERVER_PORT: 3306
MYSQL_USER: zabbix
MYSQL_PASSWORD: zabbixpass
MYSQL_DATABASE: zabbix
ZBX_SERVER_HOST: zabbix-server
ZBX_SERVER_PORT: 10051
PHP_TZ: Asia/Tokyo
ZBX_LOGIN: ldap
ZBX_LDAP_HOST: "172.26.4.43"
ZBX_LDAP_PORT: "389"
ZBX_LDAP_BASE_DN: "DC=sasio,DC=jp"
ZBX_LDAP_BIND_DN: "CN=Administrator,CN=Users,DC=sasio,DC=jp"
ZBX_LDAP_BIND_PASSWORD: "get04F15fr34!x07r008"
ZBX_LDAP_SEARCH_ATTRIBUTE: "sAMAccountName"
ZBX_NGINX_PROXY_READ_TIMEOUT: 3600
ZBX_NGINX_PROXY_SEND_TIMEOUT: 3600
depends_on:
mysql:
condition: service_healthy
zabbix-server:
condition: service_healthy
ports:
- "8080:8080"
networks:
- monitor_net
- mail_net
- gitlab_net
networks:
monitor_net:
external: true
mail_net:
external: true
gitlab_net:
external: true
