☰
Zabbix 7.4 Alpine 版 Docker Compose 部署
2026/10/8 9:03:10 网站建设 项目流程

compose.yaml

services: # --------------------------------------------------------------------------- # 1. 数据库服务 (MariaDB) # --------------------------------------------------------------------------- zabbix-db: image: mariadb:11.8 container_name: zabbix-db restart: always command: - --character-set-server=utf8mb4 - --collation-server=utf8mb4_bin - --default-authentication-plugin=mysql_native_password - --innodb-buffer-pool-size=1G - --innodb-log-file-size=256M - --max-connections=500 environment: MYSQL_DATABASE: ${MYSQL_DATABASE:-zabbix} MYSQL_USER: ${MYSQL_USER:-zabbix} MYSQL_PASSWORD: ${MYSQL_PASSWORD:-zabbix_secret_password} MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD:-root_secret_password} volumes: - db-data:/var/lib/mysql networks: - zabbix-net healthcheck: test: ["CMD", "healthcheck.sh", "--connect", "--innodb_initialized"] interval: 10s timeout: 5s retries: 5 # --------------------------------------------------------------------------- # 2. Zabbix Server 服务 (MySQL/MariaDB 后端) # --------------------------------------------------------------------------- zabbix-server: image: zabbix/zabbix-server-mysql:alpine-7.4-latest container_name: zabbix-server restart: always ports: - "10051:10051" environment: DB_SERVER_HOST: zabbix-db MYSQL_DATABASE: ${MYSQL_DATABASE:-zabbix} MYSQL_USER: ${MYSQL_USER:-zabbix} MYSQL_PASSWORD: ${MYSQL_PASSWORD:-zabbix_secret_password} MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD:-root_secret_password} ZBX_JAVAGATEWAY_ENABLE: "false" ZBX_CACHESIZE: "128M" ZBX_HISTORYCACHESIZE: "128M" ZBX_HISTORYINDEXCACHESIZE: "64M" ZBX_TRENDCACHESIZE: "64M" ZBX_VALUECACHE_SIZE: "256M" TZ: "Asia/Shanghai" volumes: - /etc/localtime:/etc/localtime:ro - zabbix-alertscripts:/usr/lib/zabbix/alertscripts - zabbix-externalscripts:/usr/lib/zabbix/externalscripts networks: - zabbix-net depends_on: zabbix-db: condition: service_healthy # --------------------------------------------------------------------------- # 3. Zabbix Web 前端 (Nginx + PHP-FPM) # --------------------------------------------------------------------------- zabbix-web-nginx: image: zabbix/zabbix-web-nginx-mysql:alpine-7.4-latest container_name: zabbix-web-nginx restart: always ports: - "8080:8080" - "8443:8443" environment: DB_SERVER_HOST: zabbix-db MYSQL_DATABASE: ${MYSQL_DATABASE:-zabbix} MYSQL_USER: ${MYSQL_USER:-zabbix} MYSQL_PASSWORD: ${MYSQL_PASSWORD:-zabbix_secret_password} ZBX_SERVER_HOST: zabbix-server PHP_TZ: "Asia/Shanghai" volumes: - /etc/localtime:/etc/localtime:ro networks: - zabbix-net depends_on: zabbix-db: condition: service_healthy zabbix-server: condition: service_started # --------------------------------------------------------------------------- # 4. Zabbix Agent 2 (监控宿主机自身) # --------------------------------------------------------------------------- zabbix-agent2: image: zabbix/zabbix-agent2:alpine-7.4-latest container_name: zabbix-agent2 restart: always ports: - "10050:10050" privileged: true pid: "host" environment: ZBX_SERVER_HOST: "zabbix-server,127.0.0.1" ZBX_HOSTNAME: "Zabbix server" volumes: - /etc/localtime:/etc/localtime:ro - /var/run/docker.sock:/var/run/docker.sock:ro - /:/host:ro networks: - zabbix-net depends_on: - zabbix-server # ----------------------------------------------------------------------------- # 持久化 Data Volume # ----------------------------------------------------------------------------- volumes: db-data: driver: local zabbix-alertscripts: driver: local zabbix-externalscripts: driver: local # ----------------------------------------------------------------------------- # 网络配置 # ----------------------------------------------------------------------------- networks: zabbix-net: driver: bridge

生产部署要点说明

  1. 环境凭据安全:强烈建议在compose.yaml同级目录下新建一个.env文件,将密码替换为自定义安全字符串:

    代码段
    MYSQL_DATABASE=zabbix MYSQL_USER=zabbix MYSQL_PASSWORD=YourStrongDBPassword123! MYSQL_ROOT_PASSWORD=YourStrongRootPassword123!
  2. 性能与缓存优化:在zabbix-db中添加了参数--innodb-buffer-pool-size=1G,在zabbix-server中放大了ZBX_VALUECACHE_SIZE等缓存配置,避免中大型监控场景下的缓存瓶颈。

  3. 健康检查依赖(Healthcheck):使用depends_on: condition: service_healthy,确保 MariaDB 完全初始化并准备好接收连接后,Zabbix Server 才会启动建表,避免首次启动时 Server 因数据库未就绪而频繁崩溃重启。

  4. 宿主机监控:Agent 2 挂载了/var/run/docker.sock和根目录/host:ro,并开启pid: "host",可直接通过官方模板采集宿主机的 CPU、内存、磁盘以及 Docker 容器状态。

前端 Web 页面配置
  1. 登录 Zabbix Web 界面(默认端口8080,初始账号密码Admin/zabbix)。

  2. 点击左侧菜单Data collection->Hosts。

  3. 找到默认生成的Zabbix server主机(如果禁用状态则启用它)。

  4. 点击进入配置:

    • Host name:必须与compose.yaml中环境变量ZBX_HOSTNAME: "Zabbix server"完全一致(区分大小写)。

    • Interfaces(接口配置):选择Agent类型。

      • DNS name:填zabbix-agent2(Docker 服务名/容器名)。

      • Connect to:选择DNS。

      • Port:10050。

  5. 保存后等待 1~2 分钟,页面上该主机的BX标识变为绿色,即代表连接成功。

监控外部物理机 / 其他服务器上的 Agent 2

如果你是在其他独立服务器上安装了 Zabbix Agent 2,需要将其连接回 Docker 运行的 Zabbix Server。

1. 外部服务器的zabbix_agent2.conf配置

修改 Agent 2 的配置文件(通常位于/etc/zabbix/zabbix_agent2.conf):

Ini, TOML
# 被动模式:允许来自 Zabbix Server 宿主机公网/内网 IP 的轮询请求 Server=192.168.1.100 # 主动模式:Agent 2 主动向 Zabbix Server 汇报数据 ServerActive=192.168.1.100:10051 # 本机标识:必须与 Web 界面添加 Host 时的 Host name 完全一致 Hostname=Web-Server-01

(注意:将192.168.1.100替换为你运行 Zabbix Docker 的宿主机实际 IP)

修改后重启外部 Agent 2 服务:

Bash
systemctl restart zabbix-agent2
2. 前端 Web 页面添加该主机
  1. 路径:Data collection->Hosts-> 点击右上角Create host。

  2. Host name:填写Web-Server-01(对应 Agent 配置文件中的Hostname)。

  3. Templates:添加官方模板Linux by Zabbix agent ZBX或System Performance by Zabbix agent。

  4. Interfaces-> AddAgent:

    • IP address:填写外部服务器的实际 IP。

    • Connect to:选择IP。

    • Port:10050。

  5. 点击Add添加。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询