CentOS 8でDocker/ mySQL/Nginxを使用したZabbixを起動

  1. リポジトリをインストール
  2. Dockerをインストール
  3. Docker composeのインストール
  4. gitをインストール
  5. firewalldの設定
  6. ZabbixのGitHubのリポジトリをclone
  7. docker-compose.yamlを編集
  8. zabbix のコンテナを起動する
  9. コンテナ起動状況確認
  10. Zabbixにログインする

【リポジトリをインストール】

# yum install -y yum-utils device-mapper-persistent-data lvm2
# yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

【Dockerをインストール】

# yum install -y docker-ce docker-ce-cli containerd.io --allowerasing
# systemctl start docker
# systemctl status docker
# systemctl enable docker
# docker --version
Docker version 20.10.2, build 2291f61

《参考ページ》

https://zenn.dev/ymasaoka/articles/install-docker-centos-7

https://docs.docker.com/engine/install/centos/

【Docker composeのインストール】

# curl -L "https://github.com/docker/compose/releases/download/1.28.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
# chmod +x /usr/local/bin/docker-compose
# ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
# docker-compose --version
docker-compose version 1.28.0, build d02a7b1a

《参考ページ》

https://zenn.dev/ymasaoka/articles/install-docker-compose-centos-7

https://docs.docker.com/compose/install/

【gitをインストール】

# yum install git

【firewalldの設定】

Port 8081(http)、Port 8443(https),Port 162(SNMP Trap)用のポートを開放する。8081、8443用のxmlファイルを作成する。※既存のxmlファイルをコピーして編集する。

IPマスカレードを有効にする。※これを忘れるとコンテナおよびSQLへの通信ができない。

# vi /usr/lib/firewalld/services/http-8081.xml
<?xml version="1.0" encoding="utf-8"?>
<service>
  <short>WWW (HTTP)</short>
  <description>HTTP is the protocol used to serve Web pages. If you plan to make your Web server publicly available, enable this option. This option is not required for viewing pages locally or developing Web pages.</description>
  <port protocol="tcp" port="80"/>
</service>
# vi /usr/lib/firewalld/services/https-8443.xml
<?xml version="1.0" encoding="utf-8"?>
<service>
  <short>Secure WWW (HTTPS) 8443</short>
  <description>HTTPS is a modified HTTP used to serve Web pages when security is important. Examples are sites that require logins like stores or web mail. This option is not required for viewing pages locally or developing Web pages. You need the httpd package installed for this option to be useful.</description>
  <port protocol="tcp" port="8443"/>
</service>
# firewall-cmd --add-masquerade --permanent
# firewall-cmd --zone=public --add-service=http-8081
# firewall-cmd --zone=public --add-service=https-8443
# firewall-cmd --zone=public --add-service=snmptrap
# firewall-cmd --reload

【ZabbixのGitHubのリポジトリをclone】

git clone https://github.com/zabbix/zabbix-docker.git
cd zabbix-docker
cp docker-compose_v3_centos_mysql_latest.yaml docker-compose.yaml

【docker-compose.yamlを編集】

SQLはMySQLを使用、フロントエンドはnginxを使用するため、それ以外はコメント化にする。

# vi docker-compose.yaml
version: '3.5'
services:
 zabbix-server:
  image: zabbix/zabbix-server-mysql:centos-5.2-latest
  ports:
   - "10051:10051"
  volumes:
   - /etc/localtime:/etc/localtime:ro
   - /etc/timezone:/etc/timezone:ro
   - ./zbx_env/usr/lib/zabbix/alertscripts:/usr/lib/zabbix/alertscripts:ro
   - ./zbx_env/usr/lib/zabbix/externalscripts:/usr/lib/zabbix/externalscripts:ro
   - ./zbx_env/var/lib/zabbix/export:/var/lib/zabbix/export:rw
   - ./zbx_env/var/lib/zabbix/modules:/var/lib/zabbix/modules:ro
   - ./zbx_env/var/lib/zabbix/enc:/var/lib/zabbix/enc:ro
   - ./zbx_env/var/lib/zabbix/ssh_keys:/var/lib/zabbix/ssh_keys:ro
   - ./zbx_env/var/lib/zabbix/mibs:/var/lib/zabbix/mibs:ro
   - snmptraps:/var/lib/zabbix/snmptraps:rw
  links:
   - mysql-server:mysql-server
   - zabbix-java-gateway:zabbix-java-gateway
  ulimits:
   nproc: 65535
   nofile:
    soft: 20000
    hard: 40000
  deploy:
   resources:
    limits:
      cpus: '0.70'
      memory: 1G
    reservations:
      cpus: '0.5'
      memory: 512M
  env_file:
   - .env_db_mysql
   - .env_srv
  secrets:
   - MYSQL_USER
   - MYSQL_PASSWORD
   - MYSQL_ROOT_PASSWORD
#   - client-key.pem
#   - client-cert.pem
#   - root-ca.pem
  depends_on:
   - mysql-server
   - zabbix-java-gateway
   - zabbix-snmptraps
  networks:
   zbx_net_backend:
     aliases:
      - zabbix-server
      - zabbix-server-mysql
      - zabbix-server-centos-mysql
      - zabbix-server-mysql-centos
   zbx_net_frontend:
#  devices:
#   - "/dev/ttyUSB0:/dev/ttyUSB0"
  stop_grace_period: 30s
  sysctls:
   - net.ipv4.ip_local_port_range=1024 65000
   - net.ipv4.conf.all.accept_redirects=0
   - net.ipv4.conf.all.secure_redirects=0
   - net.ipv4.conf.all.send_redirects=0
  labels:
   com.zabbix.description: "Zabbix server with MySQL database support"
   com.zabbix.company: "Zabbix LLC"
   com.zabbix.component: "zabbix-server"
   com.zabbix.dbtype: "mysql"
   com.zabbix.os: "centos"

# zabbix-proxy-sqlite3:
#  image: zabbix/zabbix-proxy-sqlite3:centos-5.2-latest
#  ports:
#   - "10061:10051"
#  volumes:
#   - /etc/localtime:/etc/localtime:ro
#   - /etc/timezone:/etc/timezone:ro
#   - ./zbx_env/usr/lib/zabbix/externalscripts:/usr/lib/zabbix/externalscripts:ro
#   - ./zbx_env/var/lib/zabbix/modules:/var/lib/zabbix/modules:ro
#   - ./zbx_env/var/lib/zabbix/enc:/var/lib/zabbix/enc:ro
#   - ./zbx_env/var/lib/zabbix/ssh_keys:/var/lib/zabbix/ssh_keys:ro
#   - ./zbx_env/var/lib/zabbix/mibs:/var/lib/zabbix/mibs:ro
#   - snmptraps:/var/lib/zabbix/snmptraps:rw
#  links:
#   - zabbix-server:zabbix-server
#   - zabbix-java-gateway:zabbix-java-gateway
#  ulimits:
#   nproc: 65535
#   nofile:
#    soft: 20000
#    hard: 40000
#  deploy:
#   resources:
#    limits:
#      cpus: '0.70'
#      memory: 512M
#    reservations:
#      cpus: '0.3'
#      memory: 256M
#  env_file:
#   - .env_prx
#   - .env_prx_sqlite3
#  depends_on:
#   - zabbix-java-gateway
#   - zabbix-snmptraps
#  networks:
#   zbx_net_backend:
#    aliases:
#     - zabbix-proxy-sqlite3
#     - zabbix-proxy-centos-sqlite3
#     - zabbix-proxy-sqlite3-centos
#   zbx_net_frontend:
#  stop_grace_period: 30s
#  labels:
#   com.zabbix.description: "Zabbix proxy with SQLite3 database support"
#   com.zabbix.company: "Zabbix LLC"
#   com.zabbix.component: "zabbix-proxy"
#   com.zabbix.dbtype: "sqlite3"
#   com.zabbix.os: "centos"
#
# zabbix-proxy-mysql:
#  image: zabbix/zabbix-proxy-mysql:centos-5.2-latest
#  ports:
#   - "10071:10051"
#  volumes:
#   - /etc/localtime:/etc/localtime:ro
#   - /etc/timezone:/etc/timezone:ro
#   - ./zbx_env/usr/lib/zabbix/externalscripts:/usr/lib/zabbix/externalscripts:ro
#   - ./zbx_env/var/lib/zabbix/modules:/var/lib/zabbix/modules:ro
#   - ./zbx_env/var/lib/zabbix/enc:/var/lib/zabbix/enc:ro
#   - ./zbx_env/var/lib/zabbix/ssh_keys:/var/lib/zabbix/ssh_keys:ro
#   - ./zbx_env/var/lib/zabbix/mibs:/var/lib/zabbix/mibs:ro
#   - snmptraps:/var/lib/zabbix/snmptraps:rw
#  links:
#   - zabbix-server:zabbix-server
#   - zabbix-java-gateway:zabbix-java-gateway
#  ulimits:
#   nproc: 65535
#   nofile:
#    soft: 20000
#    hard: 40000
#  deploy:
#   resources:
#    limits:
#      cpus: '0.70'
#      memory: 512M
#    reservations:
#      cpus: '0.3'
#      memory: 256M
#  env_file:
#   - .env_db_mysql_proxy
#   - .env_prx
#   - .env_prx_mysql
#  depends_on:
#   - mysql-server
#   - zabbix-java-gateway
#   - zabbix-snmptraps
#  secrets:
#   - MYSQL_USER
#   - MYSQL_PASSWORD
#   - MYSQL_ROOT_PASSWORD
#   - client-key.pem
#   - client-cert.pem
#   - root-ca.pem
#  networks:
#   zbx_net_backend:
#    aliases:
#     - zabbix-proxy-mysql
#     - zabbix-proxy-centos-mysql
#     - zabbix-proxy-mysql-centos
#   zbx_net_frontend:
#  stop_grace_period: 30s
#  labels:
#   com.zabbix.description: "Zabbix proxy with MySQL database support"
#   com.zabbix.company: "Zabbix LLC"
#   com.zabbix.component: "zabbix-proxy"
#   com.zabbix.dbtype: "mysql"
#   com.zabbix.os: "centos"

# zabbix-web-apache-mysql:
#  image: zabbix/zabbix-web-apache-mysql:centos-5.2-latest
#  ports:
#   - "80:8080"
#   - "443:8443"
#  links:
#   - mysql-server:mysql-server
#   - zabbix-server:zabbix-server
#  volumes:
#   - /etc/localtime:/etc/localtime:ro
#   - /etc/timezone:/etc/timezone:ro
#   - ./zbx_env/etc/ssl/apache2:/etc/ssl/apache2:ro
#   - ./zbx_env/usr/share/zabbix/modules/:/usr/share/zabbix/modules/:ro
#  deploy:
#   resources:
#    limits:
#      cpus: '0.70'
#      memory: 512M
#    reservations:
#      cpus: '0.5'
#      memory: 256M
#  env_file:
#   - .env_db_mysql
#   - .env_web
#  secrets:
#   - MYSQL_USER
#   - MYSQL_PASSWORD
##   - client-key.pem
##   - client-cert.pem
##   - root-ca.pem
#  depends_on:
#   - mysql-server
#   - zabbix-server
#  healthcheck:
#   test: ["CMD", "curl", "-f", "http://localhost:8080/"]
#   interval: 10s
#   timeout: 5s
#   retries: 3
#   start_period: 30s
#  networks:
#   zbx_net_backend:
#    aliases:
#     - zabbix-web-apache-mysql
#     - zabbix-web-apache-centos-mysql
#     - zabbix-web-apache-mysql-centos
#   zbx_net_frontend:
#  stop_grace_period: 10s
#  sysctls:
#   - net.core.somaxconn=65535
#  labels:
#   com.zabbix.description: "Zabbix frontend on Apache web-server with MySQL database support"
#   com.zabbix.company: "Zabbix LLC"
#   com.zabbix.component: "zabbix-frontend"
#   com.zabbix.webserver: "apache2"
#   com.zabbix.dbtype: "mysql"
#   com.zabbix.os: "centos"

 zabbix-web-nginx-mysql:
  image: zabbix/zabbix-web-nginx-mysql:centos-5.2-latest
  ports:
   - "8081:8080"
   - "8443:8443"
  links:
   - mysql-server:mysql-server
   - zabbix-server:zabbix-server
  volumes:
   - /etc/localtime:/etc/localtime:ro
   - /etc/timezone:/etc/timezone:ro
   - ./zbx_env/etc/ssl/nginx:/etc/ssl/nginx:ro
   - ./zbx_env/usr/share/zabbix/modules/:/usr/share/zabbix/modules/:ro
  deploy:
   resources:
    limits:
      cpus: '0.70'
      memory: 512M
    reservations:
      cpus: '0.5'
      memory: 256M
  env_file:
   - .env_db_mysql
   - .env_web
  secrets:
   - MYSQL_USER
   - MYSQL_PASSWORD
#   - client-key.pem
#   - client-cert.pem
#   - root-ca.pem
  depends_on:
   - mysql-server
   - zabbix-server
  healthcheck:
   test: ["CMD", "curl", "-f", "http://localhost:8080/"]
   interval: 10s
   timeout: 5s
   retries: 3
   start_period: 30s
  networks:
   zbx_net_backend:
    aliases:
     - zabbix-web-nginx-mysql
     - zabbix-web-nginx-centos-mysql
     - zabbix-web-nginx-mysql-centos
   zbx_net_frontend:
  stop_grace_period: 10s
  sysctls:
   - net.core.somaxconn=65535
  labels:
   com.zabbix.description: "Zabbix frontend on Nginx web-server with MySQL database support"
   com.zabbix.company: "Zabbix LLC"
   com.zabbix.component: "zabbix-frontend"
   com.zabbix.webserver: "nginx"
   com.zabbix.dbtype: "mysql"
   com.zabbix.os: "centos"

 zabbix-agent:
  image: zabbix/zabbix-agent:centos-5.2-latest
  ports:
   - "10050:10050"
  volumes:
   - /etc/localtime:/etc/localtime:ro
   - /etc/timezone:/etc/timezone:ro
   - ./zbx_env/etc/zabbix/zabbix_agentd.d:/etc/zabbix/zabbix_agentd.d:ro
   - ./zbx_env/var/lib/zabbix/modules:/var/lib/zabbix/modules:ro
   - ./zbx_env/var/lib/zabbix/enc:/var/lib/zabbix/enc:ro
   - ./zbx_env/var/lib/zabbix/ssh_keys:/var/lib/zabbix/ssh_keys:ro
  links:
   - zabbix-server:zabbix-server
  deploy:
   resources:
    limits:
      cpus: '0.2'
      memory: 128M
    reservations:
      cpus: '0.1'
      memory: 64M
   mode: global
  env_file:
   - .env_agent
  privileged: true
  pid: "host"
  networks:
   zbx_net_backend:
    aliases:
     - zabbix-agent
     - zabbix-agent-passive
     - zabbix-agent-centos
  stop_grace_period: 5s
  labels:
   com.zabbix.description: "Zabbix agent"
   com.zabbix.company: "Zabbix LLC"
   com.zabbix.component: "zabbix-agentd"
   com.zabbix.os: "centos"

 zabbix-java-gateway:
  image: zabbix/zabbix-java-gateway:centos-5.2-latest
  ports:
   - "10052:10052"
  deploy:
   resources:
    limits:
      cpus: '0.5'
      memory: 512M
    reservations:
      cpus: '0.25'
      memory: 256M
  env_file:
   - .env_java
  networks:
   zbx_net_backend:
    aliases:
     - zabbix-java-gateway
     - zabbix-java-gateway-centos
  stop_grace_period: 5s
  labels:
   com.zabbix.description: "Zabbix Java Gateway"
   com.zabbix.company: "Zabbix LLC"
   com.zabbix.component: "java-gateway"
   com.zabbix.os: "centos"

 zabbix-snmptraps:
  image: zabbix/zabbix-snmptraps:centos-5.2-latest
  ports:
   - "162:1162/udp"
  volumes:
   - snmptraps:/var/lib/zabbix/snmptraps:rw
  deploy:
   resources:
    limits:
      cpus: '0.5'
      memory: 256M
    reservations:
      cpus: '0.25'
      memory: 128M
  networks:
   zbx_net_frontend:
    aliases:
     - zabbix-snmptraps
   zbx_net_backend:
  stop_grace_period: 5s
  labels:
   com.zabbix.description: "Zabbix snmptraps"
   com.zabbix.company: "Zabbix LLC"
   com.zabbix.component: "snmptraps"
   com.zabbix.os: "centos"

 mysql-server:
  image: mysql:8.0
  command:
   - mysqld
   - --character-set-server=utf8
   - --collation-server=utf8_bin
   - --default-authentication-plugin=mysql_native_password
#   - --require-secure-transport
#   - --ssl-ca=/run/secrets/root-ca.pem
#   - --ssl-cert=/run/secrets/server-cert.pem
#   - --ssl-key=/run/secrets/server-key.pem
  volumes:
   - ./zbx_env/var/lib/mysql:/var/lib/mysql:rw
  env_file:
   - .env_db_mysql
  secrets:
   - MYSQL_USER
   - MYSQL_PASSWORD
   - MYSQL_ROOT_PASSWORD
#   - server-key.pem
#   - server-cert.pem
#   - root-ca.pem
  stop_grace_period: 1m
  networks:
   zbx_net_backend:
    aliases:
     - mysql-server
     - zabbix-database
     - mysql-database

 db_data_mysql:
  image: busybox
  volumes:
   - ./zbx_env/var/lib/mysql:/var/lib/mysql:rw

# elasticsearch:
#  image: elasticsearch
#  environment:
#   - transport.host=0.0.0.0
#   - discovery.zen.minimum_master_nodes=1
#  networks:
#   zbx_net_backend:
#    aliases:
#     - elasticsearch

networks:
  zbx_net_frontend:
    driver: bridge
    driver_opts:
      com.docker.network.enable_ipv6: "false"
    ipam:
      driver: default
      config:
      - subnet: 172.16.238.0/24
  zbx_net_backend:
    driver: bridge
    driver_opts:
      com.docker.network.enable_ipv6: "false"
    internal: true
    ipam:
      driver: default
      config:
      - subnet: 172.16.239.0/24

volumes:
  snmptraps:

secrets:
  MYSQL_USER:
    file: ./.MYSQL_USER
  MYSQL_PASSWORD:
    file: ./.MYSQL_PASSWORD
  MYSQL_ROOT_PASSWORD:
    file: ./.MYSQL_ROOT_PASSWORD
#  client-key.pem:
#    file: ./.ZBX_DB_KEY_FILE
#  client-cert.pem:
#    file: ./.ZBX_DB_CERT_FILE
#  root-ca.pem:
#    file: ./.ZBX_DB_CA_FILE
#  server-cert.pem:
#    file: ./.DB_CERT_FILE
#  server-key.pem:
#    file: ./.DB_KEY_FILE

【zabbix のコンテナを起動する】

docker-compose pullでimageをpullする。

docker-compose imagesで確認する。

docker-compose up -dでコンテナ起動する。

docker-compose logs -fで起動状態を確認する。

# docker-compose pull
# docker-compose images
              Container                           Repository                    Tag            Image Id       Size
--------------------------------------------------------------------------------------------------------------------
zabbix-docker_db_data_mysql_1            busybox                         latest              b97242f89c8a   1.232 MB
zabbix-docker_mysql-server_1             mysql                           8.0                 c8562eaf9d81   546.1 MB
zabbix-docker_zabbix-agent_1             zabbix/zabbix-agent             centos-5.2-latest   deeaabf17a9a   240.3 MB
zabbix-docker_zabbix-java-gateway_1      zabbix/zabbix-java-gateway      centos-5.2-latest   f7ce98cfb3b8   398.3 MB
zabbix-docker_zabbix-server_1            zabbix/zabbix-server-mysql      centos-5.2-latest   f5edea6478bf   348.3 MB
zabbix-docker_zabbix-snmptraps_1         zabbix/zabbix-snmptraps         centos-5.2-latest   8fc514b6a712   251.2 MB
zabbix-docker_zabbix-web-nginx-mysql_1   zabbix/zabbix-web-nginx-mysql   centos-5.2-latest   3ae562ceafb9   447.4 MB
# docker-compose up -d
# docker-compose logs -f

《参考ページ》

https://qiita.com/zembutsu/items/d98099bf68399c56c236

https://www.zabbix.com/documentation/current/manual/installation/containers#docker_compose

https://github.com/zabbix/zabbix-docker

https://github.com/docker/compose/releases

【コンテナ起動状況確認】

sh以外はupになっている事を確認する。

# docker-compose ps
                 Name                               Command                  State                           Ports
---------------------------------------------------------------------------------------------------------------------------------------
zabbix-docker_db_data_mysql_1            sh                               Exit 0
zabbix-docker_mysql-server_1             docker-entrypoint.sh mysql ...   Up
zabbix-docker_zabbix-agent_1             /sbin/tini -- /usr/bin/doc ...   Up
zabbix-docker_zabbix-java-gateway_1      docker-entrypoint.sh /usr/ ...   Up
zabbix-docker_zabbix-server_1            /sbin/tini -- /usr/bin/doc ...   Up             0.0.0.0:10051->10051/tcp
zabbix-docker_zabbix-snmptraps_1         /usr/sbin/snmptrapd -n -C  ...   Up             0.0.0.0:162->1162/udp
zabbix-docker_zabbix-web-nginx-mysql_1   docker-entrypoint.sh             Up (healthy)   0.0.0.0:8081->8080/tcp, 0.0.0.0:8443->8443/tcp

【Zabbixにログインする】

WebブラウザでZabbixにログインする。

Username : Admin

Password : zabbix

http://xxx.xxx.xxx.xxx:8081/

Leave a Reply

Your email address will not be published. Required fields are marked *