━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Docker Network構成のイメージ図 [修正不要] ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ STEP2の手順 STEP2の手順 STEP3の手順    STEP1の手順  ┌─────┐  ┌─────┐   ┌─────┐   ┌──────┐ │ Nginx │  │ GitLab │   │ Zabbix │   │ MailServer │ └──┬──┘  └──┬──┘   └──┬──┘ └──┬───┘  ↑ │        │         │ │  | └────────┴─────────┴─────────┴──────[ Docker Network]  |  |┌──────────┐  └┤Windows(10.26.3.31) |   └──────────┘ 前提確認作業(Windows/hostsの設定情報) ---------------------------------------------------------------------------------------------------------------------------- <接続先> STEP4の手順 /Container/gitlab https://git.sasio.jp STEP5の手順 /Container/jenkins https://jenkins.sasio.jp STEP6の手順 /var/lib/subako/zabbix https://zabbix.sasio.jp ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1. Zabbixコンテナの説明     [修正不要] ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ (1)zabbix-mysql 概要: zabbix-serverがDB構造やデータを**流し込むための「箱(データベース環境)」**として事前に作成・起動しておく必要があります。 注意点: DB内の各テーブルを作成(流し込み)するのはzabbix-server側の役割であり、mysqlコンテナ自体が自動でテーブルを 作るわけではありません。また、server側からのSQL実行や関数作成の許可設定を init.sql 等で事前定義しておかないと、serverからの 流し込み処理が失敗するため、権限設定を含めた初期化ファイルの作成には細心の注意が必要です。 (2)zabbix-server 概要: 起動時にzabbix-mysqlへ接続し、初期スキーマ(SQLデータ)を流し込む役割を担います。 注意点: デフォルトの状態ではテーブル数が207個に留まり、LDAP連携用の設定が含まれません。 そのため、事前に /usr/share/doc/zabbix-server-mysql/create.sql.gz を取得・加工し、LDAP用テーブル等の定義を追加した カスタム済みのSQLファイルを準備しておく必要があります。この「最強の設計図」を起動時に流し込むことで、管理画面での 手動設定を介さない、完全自動化された環境構築が可能となります。。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2. Zabbixコンテナの説明注意    [追記済み] ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ JobArrangerの最新版を使うにはzabbix7.2までが限界であるため、 下記の手順を見直す必要がる (1)URL ■zabbix/zabbix-server-mysql [名称] zabbix/zabbix-server-mysql:7.2-centos-latest [URL] https://hub.docker.com/r/zabbix/zabbix-server-mysql/tags?name=7.2 ■zabbix/zabbix-agent2 [名称] zabbix/zabbix-agent2:7.2-centos-latest [URL] https://hub.docker.com/r/zabbix/zabbix-agent2/tags?name=7.2 ■zabbix-web-apache-mysql [名称] zabbix/zabbix-web-apache-mysql:7.2-centos-latest [URL] https://hub.docker.com/r/zabbix/zabbix-web-apache-mysql/tags?name=7.2 もしくは下記の手順の順場にに従ってアクセスをする (1)下記のURLにアクセスをする https://hub.docker.com/u/zabbix (2)「Zabbix SIA」であることを確認する ※アカウント名「Zabbix SIA」の右横に、青色のチェックマークが付いています。  これはDocker社が企業の身元を直接審査し、本物の公式アカウントであることを証明する (3)対象の種類をクリックする (4)[Tag]から7.2を検索する ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2. Zabbixコンテナの説明注意    [追記済み] ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ (1)DBの数の確認 mysql: [Warning] Using a password on the command line interface can be insecure. 203 (2)Zabbixのバージョン jobarranger7.2を利用するためにはzabbix 7.0とする必要がある。zabbix7.2以上は互換性はない。 (3)zabbixの接続確認 コンテナの作成は時間がかからないのですが、初回のDBの流し込みが時間がかかるためすぐには接続ができない。 (4)LDAP認証の確認 zabbix/zabbix-server-mysql:7.0-centos-latestの「create.sql.gz」をダウンロードしてSQL文を追加する ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 3. ログから見る「実効時間」の分析 [修正不要] ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ログの時間軸を整理すると、以下のようになっています。 MySQL (zabbix-mysql) 12:44:32: 初期化開始(Initializing database files) 12:47:18: 初期化完了(Database files initialized) 12:47:38: init.sql 実行開始 12:48:22: 完全に受付可能状態(ready for connections) 【分析】: ゼロからの構築時、MySQLが「Healthy」になるまで 約4分(240秒) かかっています。 Zabbix Server (zabbix-server) 13:48:26: スキーマ作成開始(Creating 'zabbix' schema) 14:31:39: 作成完了(Database schema successfully created!) 【分析】: ここが衝撃的ですが、スキーマ作成に 約43分 かかっています。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 3.運用監視サーバーへの接続     [修正不要] ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ssh -p 10902 kbmnt@172.26.4.45 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 4.管理者権限に切り替える     [修正不要] ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ su - ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 5.zabbix用のサーバー証明書の作成     [修正不要] ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ [root@om01 cert]# ls -la /Container/cert 合計 32 drwxr-xr-x 2 root root 4096 6月 14 10:21 . drwxr-xr-x. 7 root root 4096 6月 13 07:44 .. -rw-r--r-- 1 root root 4812 6月 14 10:20 gitlab_cert.pem -rw------- 1 root root 227 6月 14 10:21 gitlab_privkey.pem -rw-r--r-- 1 root root 4808 6月 13 08:06 mail_cert.pem -rw------- 1 root root 227 6月 13 08:07 mail_privkey.pem [root@om01 cert]# ---------------------------------------------------------------------------------------------------------------------------- cd /Container/cert;pwd sudo certbot certonly \ --manual \ --preferred-challenges=dns \ --email sasio-technologies@outlook.jp \ --agree-tos \ --no-eff-email \ -d zabbix.sasio.jp [root@om01 cert]# sudo certbot certonly \ > --manual \ > --preferred-challenges=dns \ > --email sasio-technologies@outlook.jp \ > --agree-tos \ > --no-eff-email \ > -d zabbix.sasio.jp Saving debug log to /var/log/letsencrypt/letsencrypt.log Requesting a certificate for zabbix.sasio.jp ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 6.Job Arranger用のサーバー証明書の作成 [修正不要] ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ sudo certbot certonly \ --manual \ --preferred-challenges=dns \ --email sasio-technologies@outlook.jp \ --agree-tos \ --no-eff-email \ -d jobarg.sasio.jp [root@om01 ~]# sudo certbot certonly \ > --manual \ > --preferred-challenges=dns \ > --email sasio-technologies@outlook.jp \ > --agree-tos \ > --no-eff-email \ > -d jobarg.sasio.jp Saving debug log to /var/log/letsencrypt/letsencrypt.log Requesting a certificate for gitlab.sasio.jp ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 7.Job Arranger用のサーバー証明書の作成     [修正不要] ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ (1)zabbixのサーバー証明書をコピーする cp /etc/letsencrypt/live/zabbix.sasio.jp/fullchain.pem /Container/cert/zabbix_cert.pem cp /etc/letsencrypt/live/zabbix.sasio.jp/privkey.pem /Container/cert/zabbix_privkey.pem; (2)Job Arrangerのサーバー証明書をコピーする cp /etc/letsencrypt/live/jobarg.sasio.jp/fullchain.pem /Container/cert/jobarg_cert.pem cp /etc/letsencrypt/live/jobarg.sasio.jp/privkey.pem /Container/cert/jobarg_privkey.pem ---------------------------------------------------------------------------------------------------------------------------- (3)サーバ証明書の格納先にファイルが配置されていることを確認する [root@om01 cert]# ls -la /Container/cert 合計 56 drwxr-xr-x 2 root root 4096 6月 14 13:13 . drwxr-xr-x. 7 root root 4096 6月 13 07:44 .. -rw-r--r-- 1 root root 4812 6月 14 10:20 gitlab_cert.pem -rw------- 1 root root 227 6月 14 10:21 gitlab_privkey.pem -rw-r--r-- 1 root root 4812 6月 14 13:12 jobarg_cert.pem -rw------- 1 root root 227 6月 14 13:13 jobarg_privkey.pem -rw-r--r-- 1 root root 4808 6月 13 08:06 mail_cert.pem -rw------- 1 root root 227 6月 13 08:07 mail_privkey.pem -rw-r--r-- 1 root root 4817 6月 14 13:06 zabbix_cert.pem -rw------- 1 root root 227 6月 14 13:08 zabbix_privkey.pem [root@om01 cert]# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 8. hostsの設定                                     ★DNSに登録するまでは暫定で追加する ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ [root@om01 cert]# cat /etc/hosts 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 172.26.4.45 om01.sasio.jp om01 172.26.4.45 jobarg.sasio.jp jobarg [root@om01 cert]# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 9. Zabbixコンテナのコードの格納先の準備 [修正不要] ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ (1).ディレクトリの一括作成 mkdir -p /Container/zabbix/mysql/data mkdir -p /Container/zabbix/mysql/conf.d (2)追加機能向けのディレクトリの一括作成 mkdir -p /Container/zabbix/jobarg-build ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 11. Nginxコンテナの再構築情報のコンテナの作成                   [修正不要] ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ nano /Container/nginx/compose.yml [root@om01 zabbix]# cat /Container/nginx/compose.yml services: nginx: image: nginx:latest container_name: nginx restart: always ports: - "80:80" - "443:443" volumes: - /Container/nginx/conf.d:/etc/nginx/conf.d - /Container/nginx/logs:/var/log/nginx - /Container/cert:/etc/nginx/cert networks: - gitlab_net - monitor_net # ★ Zabbix に接続するため追加 networks: gitlab_net: external: true monitor_net: external: true [root@om01 zabbix]# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 12. Nginxコンテナからzabbixへの接続の設定ファイルの作成                   [修正不要] ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 以下の内容で各設定ファイルを作成・配置してください。 nano /Container/nginx/conf.d/zabbix.conf [root@om01 zabbix]# cat /Container/nginx/conf.d/zabbix.conf server { listen 443 ssl; server_name zabbix.sasio.jp; ssl_certificate /etc/nginx/cert/zabbix_cert.pem; ssl_certificate_key /etc/nginx/cert/zabbix_privkey.pem; # ★ Docker内部のDNSサーバー(名前解決の即死を防ぐ) resolver 127.0.0.11 valid=30s; # SSLの推奨設定(セキュリティ向上) ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384'; # ========================================================================= # ★【最重要:新規追加】 # zabbix.sasio.jp/jobarranger 宛てのリダイレクトパケットが来たら、 # Zabbix側ではなく、JobArrangerの画面実体がある「jobargコンテナの80番」へバイパスします。 # ========================================================================= location /jobarranger { set $jobarg_endpoint http://jobarg:80; proxy_pass $jobarg_endpoint; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto https; # 中のApacheが「http://...」で返してきたリダイレクトURLを「https://...」に自動補正 proxy_redirect http:// https://; } # ========================================================================= # 通常のZabbixの通信(ルートパス)の処理 # Zabbix公式Webの仕様に合わせて、内部ポート「8080」へ正しく転送します(既存のまま) # ========================================================================= location / { set $upstream_endpoint http://zabbix-web:8080; proxy_pass $upstream_endpoint; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto https; } } [root@om01 zabbix]# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 13. 事前準備としてzabbixのDB圧縮ファイルを取得する                          [修正済み] ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 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 [root@om01 ~]# 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 Unable to find image 'zabbix/zabbix-server-mysql:latest' locally latest: Pulling from zabbix/zabbix-server-mysql 6a0ac1617861: Pull complete d764f9797cc7: Pull complete 940c279f6983: Pull complete 4f4fb700ef54: Pull complete 08a37832fa7c: Pull complete 7c1589460779: Pull complete 9a4a826b506f: Pull complete 13d239f8e7f6: Pull complete 44833abc7568: Pull complete 1f919662e15f: Download complete 064dd68848e9: Download complete Digest: sha256:4cddcdaff354b097c234625afc2990b10be355639c329cf297170c8ae0686248 Status: Downloaded newer image for zabbix/zabbix-server-mysql:latest [root@om01 ~]# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 14. 事前準備としてLDAPの設定情報の追加作業実施                    [修正済み] ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ (1)対象フォルダに移動する cd /Container/zabbix/mysql/conf.d;pwd (2)圧縮ファイルを解凍する gunzip create.sql.gz (3)下記のファイルを開いて最終行に追加する nano /Container/zabbix/mysql/conf.d/create.sql [Ctrl]+[End]を押して最終行に移動する -- ================================================================================================================ -- 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; ──────────────────────────────────────────────────────────── (4)下記のコマンドで設定を確認する [root@om01 zabbix]# cat /Container/zabbix/mysql/conf.d/create.sql | tail -n 63 -- ================================================================================================================ -- 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; [root@om01 zabbix]# ──────────────────────────────────────────────────────── (5)-c オプションで元のファイルを残しつつ、.gz ファイルを作成します gzip -c create.sql > create.sql.gz ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 15. 事前準備としてzabbix-serverからzabbix-mysqlへのコンテナの流し込みの許可の設定ファイルの準備      [修正済み] ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ vi /Container/zabbix/mysql/conf.d/init.sql [root@om01 zabbix]# cat /Container/zabbix/mysql/conf.d/init.sql -- ① 既存の不完全な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'@'%'; [root@om01 zabbix]# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 16. Dockerfile      [修正済み] ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ [root@om01 zabbix]# cat /Container/zabbix/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 [root@om01 zabbix]# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 17. Zabbixコンテナの構築情報    [修正済み] ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ nano /Container/zabbix/compose.yml [root@om01 zabbix]# cat /Container/zabbix/compose.yml 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 [root@om01 zabbix]# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 18.コンテナの構築の実施                              [修正不要] ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ (1)構築のコマンド cd /Container/zabbix;pwd docker build -t zabbix-jobarranger:latest . docker compose up -d ※コンテナの作成は時間が掛からないが、DBの流し込みは最長約50分以上かかるため待機する ------------------------------------------------------------------------------------------------------------------------ [root@om01 zabbix]# watch -n 2 'docker exec -i jobarg mysql -h zabbix-mysql -u zabbix -pzabbixpass zabbix -e "SHOW TABLES;" | grep -v "Tables_in_zabbix" | wc -l' Every 2.0s: docker exec -i jobarg mysql -h zabbix-mysql -u zabbix -pzabbixpa... om01.sasio.jp: Fri Aug 7 23:56:22 2026 mysql: [Warning] Using a password on the command line interface can be insecure. 203 ------------------------------------------------------------------------------------------------------------------------ (2)構築後のサーバー証明書の配置確認 [root@om01 cert]# docker exec -it nginx ls -la /etc/nginx/cert/ total 40 drwxr-xr-x 2 root root 4096 May 17 03:37 . drwxr-xr-x 1 root root 4096 Apr 18 07:09 .. -rw-r--r-- 1 root root 2855 Apr 18 04:49 gitlab_cert.pem -rw------- 1 root root 227 Apr 18 04:50 gitlab_privkey.pem -rw-r--r-- 1 root root 2851 May 17 03:37 jobarg_cert.pem -rw------- 1 root root 227 May 17 03:37 jobarg_privkey.pem -rw-r--r-- 1 root root 2847 Apr 17 22:55 mail_cert.pem -rw------- 1 root root 227 Apr 17 22:55 mail_privkey.pem -rw-r--r-- 1 root root 2855 Apr 20 22:23 zabbix_cert.pem -rw------- 1 root root 227 Apr 20 22:23 zabbix_privkey.pem [root@om01 cert]# ------------------------------------------------------------------------------------------------------------------------ (3)構築後の接続確認 https://zabbix.sasio.jp/zabbix.php?action=authentication.edit (4)初回ログイン ユーザー名:Admin パスワード:zabbix ------------------------------------------------------------------------------------------------------------------------ [Authentication](タブ名:Authentication) Default authentication [Internal]→[LDAP] Deprovisioned users group [未設定]→[Disable] ------------------------------------------------------------------------------------------------------------------------ [Authentication](タブ名:LDAP settings) Enable LDAP authentication □ → ■ Enable JIT provisioning □ → ■ Server  SASIO-AD   User group mapping    LDAP group pattern   [未設定] → [*]    User groups     [未設定] → [Zabbix administrators]    User role   [未設定] → [Super admin role] ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 19.zabbix-serverからzabbix-mysqlへの接続確認 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ docker exec zabbix-mysql mysql -uroot -pzabbixroot zabbix -e "SELECT count(*) FROM information_schema.tables WHERE table_schema='zabbix';" [root@om01 zabbix]# docker exec zabbix-mysql mysql -uroot -pzabbixroot zabbix -e "SELECT count(*) FROM information_schema.tables WHERE table_schema='zabbix';" mysql: [Warning] Using a password on the command line interface can be insecure. count(*) 203 [root@om01 zabbix]# -------------------------------------------------------------------------------------------------------------------------- docker exec -it zabbix-server bash mysql -h mysql -uzabbix -pzabbixpass zabbix USE zabbix; SHOW TABLES LIKE 'config'; SELECT count(*) FROM information_schema.tables WHERE table_schema='zabbix'; [root@om01 zabbix]# docker exec -it zabbix-server bash bash-5.2$ bash-5.2$ mysql -h mysql -uzabbix -pzabbixpass zabbix mysql: [Warning] Using a password on the command line interface can be insecure. Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 8414 Server version: 8.0.46 MySQL Community Server - GPL Copyright (c) 2000, 2026, Oracle and/or its affiliates. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> USE zabbix; Database changed mysql> mysql> SHOW TABLES LIKE 'config'; +---------------------------+ | Tables_in_zabbix (config) | +---------------------------+ | config | +---------------------------+ 1 row in set (0.00 sec) mysql> mysql> SELECT count(*) FROM information_schema.tables WHERE table_schema='zabbix'; +----------+ | count(*) | +----------+ | 203 | +----------+ 1 row in set (0.00 sec) mysql> mysql> exit Bye bash-5.2$ exit exit [root@om01 zabbix]# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 20.zabbix-mysqlのレコード状態の確認(実行結果) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ [root@om01 zabbix]# docker exec -it zabbix-mysql mysql -u root -pzabbixroot -e "SHOW GRANTS FOR 'zabbix'@'%';" mysql: [Warning] Using a password on the command line interface can be insecure. +----------------------------------------------------+ | Grants for zabbix@% | +----------------------------------------------------+ | GRANT USAGE ON *.* TO `zabbix`@`%` | | GRANT ALL PRIVILEGES ON `zabbix`.* TO `zabbix`@`%` | +----------------------------------------------------+ [root@om01 zabbix]# ──────────────────────────────────────────────────────────────────────────────────────── [root@om01 zabbix]# docker exec zabbix-mysql mysql -uroot -pzabbixroot zabbix -t -e "SELECT host, port, base_dn, bind_dn FROM userdirectory_ldap WHERE userdirectoryid = 1;" mysql: [Warning] Using a password on the command line interface can be insecure. +-------------+------+----------------+------------------------------------------+ | host | port | base_dn | bind_dn | +-------------+------+----------------+------------------------------------------+ | 172.26.4.43 | 389 | DC=sasio,DC=jp | CN=Administrator,CN=Users,DC=sasio,DC=jp | +-------------+------+----------------+------------------------------------------+ [root@om01 zabbix]# ──────────────────────────────────────────────────────────────────────────────────────── [root@om01 zabbix]# docker exec zabbix-mysql mysql -uroot -pzabbixroot zabbix -e "SELECT userdirectoryid, name, provision_status FROM userdirectory WHERE userdirectoryid = 1;" mysql: [Warning] Using a password on the command line interface can be insecure. userdirectoryid name provision_status 1 SASIO-AD 1 [root@om01 zabbix]# ──────────────────────────────────────────────────────────────────────────────────────── [root@om01 zabbix]# docker exec -it zabbix-mysql mysql -uroot -pzabbixroot zabbix -e "SELECT userdirectoryid, name FROM userdirectory;" mysql: [Warning] Using a password on the command line interface can be insecure. +-----------------+----------+ | userdirectoryid | name | +-----------------+----------+ | 1 | SASIO-AD | +-----------------+----------+ [root@om01 zabbix]# ──────────────────────────────────────────────────────────────────────────────────────── [root@om01 zabbix]# docker exec zabbix-mysql mysql -uroot -pzabbixroot zabbix -e "SELECT host, port, base_dn, bind_dn FROM userdirectory_ldap WHERE userdirectoryid = 1;" mysql: [Warning] Using a password on the command line interface can be insecure. host port base_dn bind_dn 172.26.4.43 389 DC=sasio,DC=jp CN=Administrator,CN=Users,DC=sasio,DC=jp [root@om01 zabbix]# ──────────────────────────────────────────────────────────────────────────────────────── [root@om01 zabbix]# docker exec zabbix-mysql mysql -uroot -pzabbixroot zabbix -e "SELECT count(*) FROM information_schema.tables WHERE table_schema='zabbix';" mysql: [Warning] Using a password on the command line interface can be insecure. count(*) 203 [root@om01 zabbix]# ──────────────────────────────────────────────────────────────────────────────────────── [root@om01 zabbix]# docker exec -it zabbix-mysql mysql -uroot -pzabbixroot zabbix -e "SELECT authentication_type, ldap_userdirectoryid FROM config;" mysql: [Warning] Using a password on the command line interface can be insecure. +---------------------+----------------------+ | authentication_type | ldap_userdirectoryid | +---------------------+----------------------+ | 1 | 1 | +---------------------+----------------------+ [root@om01 zabbix]# ──────────────────────────────────────────────────────────────────────────────────────── [root@om01 zabbix]# docker exec -it zabbix-mysql mysql -uroot -pzabbixroot zabbix -e "SELECT name, host, bind_password FROM userdirectory JOIN userdirectory_ldap USING(userdirectoryid);" mysql: [Warning] Using a password on the command line interface can be insecure. +----------+-------------+----------------------+ | name | host | bind_password | +----------+-------------+----------------------+ | SASIO-AD | 172.26.4.43 | get04F15fr34!x07r008 | +----------+-------------+----------------------+ [root@om01 zabbix]# ──────────────────────────────────────────────────────────────────────────────────────── docker exec -t zabbix-mysql mysql -uroot -pzabbixroot zabbix -e " SELECT '--- [userdirectory] ---' AS table_name; SELECT userdirectoryid, name, idp_type FROM userdirectory; SELECT '--- [userdirectory_ldap] ---' AS table_name; SELECT host, port, base_dn, search_attribute FROM userdirectory_ldap; SELECT '--- [config (Auth Status)] ---' AS table_name; SELECT authentication_type, ldap_auth_enabled, ldap_jit_status, ldap_userdirectoryid FROM config; " [root@om01 zabbix]# docker exec -t zabbix-mysql mysql -uroot -pzabbixroot zabbix -e " > SELECT '--- [userdirectory] ---' AS table_name; > SELECT userdirectoryid, name, idp_type FROM userdirectory; > > SELECT '--- [userdirectory_ldap] ---' AS table_name; > SELECT host, port, base_dn, search_attribute FROM userdirectory_ldap; > atus)] > SELECT '--- [config (Auth Status)] ---' AS table_name; > SELECT authentication_type, ldap_auth_enabled, ldap_jit_status, ldap_userdirectoryid FROM config; > " mysql: [Warning] Using a password on the command line interface can be insecure. +-------------------------+ | table_name | +-------------------------+ | --- [userdirectory] --- | +-------------------------+ +-----------------+----------+----------+ | userdirectoryid | name | idp_type | +-----------------+----------+----------+ | 1 | SASIO-AD | 1 | +-----------------+----------+----------+ +------------------------------+ | table_name | +------------------------------+ | --- [userdirectory_ldap] --- | +------------------------------+ +-------------+------+----------------+------------------+ | host | port | base_dn | search_attribute | +-------------+------+----------------+------------------+ | 172.26.4.43 | 389 | DC=sasio,DC=jp | sAMAccountName | +-------------+------+----------------+------------------+ +--------------------------------+ | table_name | +--------------------------------+ | --- [config (Auth Status)] --- | +--------------------------------+ +---------------------+-------------------+-----------------+----------------------+ | authentication_type | ldap_auth_enabled | ldap_jit_status | ldap_userdirectoryid | +---------------------+-------------------+-----------------+----------------------+ | 1 | 1 | 1 | 1 | +---------------------+-------------------+-----------------+----------------------+ [root@om01 zabbix]# ──────────────────────────────────────────────────────────────────────────────────────── [root@om01 zabbix]# docker exec -t zabbix-mysql mysql -uzabbix -pzabbixpass zabbix -e " > SELECT > uig.name AS pattern, > r.name AS role, > ug.name AS zabbix_group > FROM userdirectory_idpgroup uig > JOIN role r ON uig.roleid = r.roleid > JOIN userdirectory_usrgrp uug ON uig.userdirectory_idpgroupid = uug.userdirectory_idpgroupid > JOIN usrgrp ug ON uug.usrgrpid = ug.usrgrpid;" mysql: [Warning] Using a password on the command line interface can be insecure. +---------+------------------+-----------------------+ | pattern | role | zabbix_group | +---------+------------------+-----------------------+ | * | Super admin role | Zabbix administrators | +---------+------------------+-----------------------+ [root@om01 zabbix]#