Zabbix 7.4 Alpine 版 Docker Compose 部署

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 -> Add Agent:

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

    • Connect to :选择 IP。

    • Port :10050。

  5. 点击 Add 添加。

相关推荐
szxinmai主板定制专家1 小时前
X86 工控机 vs RK3588 异构主控:AMR 控制器 BOM、散热、长期运维对比
运维·stm32·单片机·嵌入式硬件·fpga开发·am62x
叼烟扛炮2 小时前
Linux 学习笔记(四十一):TCP 并发演进——从单进程到多线程服务器
linux·运维·服务器·网络·笔记·学习·tcp/ip
Decay__2 小时前
09_MySQL 闪回与时间点恢复 —— binlog 回放、mysqlbinlog、PITR 与误删恢复
运维·数据库·sql·mysql·架构
久曲健的测试窝2 小时前
2026软件测试工具选型指南:双模式如何化解UI脚本维护难题
运维·人工智能·科技·aigc
三少爷的鞋2 小时前
Java 线程自上而下,Kotlin 协程自下而上
android
DarkAthena3 小时前
wslc ps 卡死的排查:一次「停容器不停 VM」引发的连环故障
docker
好的佩奇4 小时前
Dart 之增强枚举
android·flutter·dart
NailiConveyor4 小时前
柔性物流方案如何适配工厂升级?自动化输送流水线定制要点
大数据·运维·自动化·制造·业界资讯
小沈同学呀4 小时前
【Agent开发第十五期】部署上线:把 Alex 搬进浏览器,15 期全栈串联收官
docker·agent·从零搭建ai助手
Lsetea4 小时前
Certbot webroot申请SSL证书总是404:Nginx挑战目录与路径映射检查
运维·nginx·https·ssl证书·certbot