一、部署背景与核心组件说明
Zabbix是一款企业级开源监控解决方案,能够实时监控服务器、网络设备、应用程序等IT资源的状态,并提供告警、数据可视化等核心能力。在Docker环境下部署Zabbix,可大幅简化环境依赖管理,提升部署效率。
Zabbix 的核心运行依赖以下三类组件,缺一不可:
| 组件类型 | 作用说明 |
|---|---|
| 数据库(MySQL) | 存储 Zabbix 的配置数据、监控指标、告警日志等核心数据 |
| Zabbix Server | Zabbix 核心服务,负责收集 Agent 上报的监控数据、处理告警规则、与数据库交互 |
| Zabbix Web | 可视化管理界面,提供配置管理、监控看板、报表查看等操作入口 |
二、环境准备
- 前置条件 已安装 Docker 环境(建议 Docker 20.10+) 服务器资源:至少 2 核 4G 内存,确保容器运行稳定 网络:开放 80(Web 访问)、3306(数据库)、10051(Zabbix Server)端口
- 镜像拉取(标准化管理) 为保证镜像来源稳定,优先从渡渡鸟镜像源拉取,并标准化镜像标签:
1. 拉取MySQL 8.4.2镜像
docker pull swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/mysql:8.4.2
docker tag swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/mysql:8.4.2 docker.io/mysql:8.4.2
2. 拉取Zabbix Server镜像
docker pull swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/zabbix/zabbix-server-mysql:alpine-7.2-latest
docker tag swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/zabbix/zabbix-server-mysql:alpine-7.2-latest docker.io/zabbix/zabbix-server-mysql:alpine-7.2-latest
3. 拉取Zabbix Web镜像
docker pull swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/zabbix/zabbix-web-nginx-mysql:ubuntu-7.2-latest
docker tag swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/zabbix/zabbix-web-nginx-mysql:ubuntu-7.2-latest docker.io/zabbix/zabbix-web-nginx-mysql:ubuntu-7.2-latest
验证镜像拉取结果
docker images
检查结果:
三、分步部署 Zabbix
1. 创建专属 Docker 网络
为 Zabbix 组件创建独立网络,避免端口冲突,保证容器间通信隔离:
[root@Ops docker-images]# docker network create --subnet 172.20.0.0/16 --ip-range 172.20.240.0/20 zabbix-net
4394a41c14ff095dd3f833669623e3d6674870e69e9f0f163de04411d126c390
2. 启动 MySQL 数据库
Zabbix 对 MySQL 有版本要求(8.0+),需提前配置数据库、用户及权限:
docker run -itd \
--name=mysql \
-e MYSQL_DATABASE="zabbix" \ # 预创建Zabbix数据库
-e MYSQL_USER="zabbix" \ # 预创建Zabbix专用用户
-e MYSQL_PASSWORD="P@ssw0rd" \ # Zabbix用户密码
-e MYSQL_ROOT_PASSWORD="P@ssw0rd" \ # MySQL root密码
--restart=always \ # 开机自启
--network=zabbix-net \ # 加入Zabbix专属网络
-p 3306:3306 \ # 映射端口到宿主机
-v mysql_data:/var/lib/mysql \ # 挂载数据卷,防止数据丢失
swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/mysql:8.4.2
# 验证MySQL启动状态
docker ps -a | grep mysql
# 可选:进入容器验证数据库创建
docker exec -it mysql mysql -uroot -pP@ssw0rd -e "show databases;" | grep zabbix
然后docker ps -a确认启动
3. 启动 Zabbix Server
注意:需等待 MySQL 完全启动(约 10 秒)后再启动 Server,避免连接失败: 启动zabbix Web
docker run -itd \
--name=mysql \
-e MYSQL_DATABASE="zabbix" \ # 预创建Zabbix数据库
-e MYSQL_USER="zabbix" \ # 预创建Zabbix专用用户
-e MYSQL_PASSWORD="P@ssw0rd" \ # Zabbix用户密码
-e MYSQL_ROOT_PASSWORD="P@ssw0rd" \ # MySQL root密码
--restart=always \ # 开机自启
--network=zabbix-net \ # 加入Zabbix专属网络
-p 3306:3306 \ # 映射端口到宿主机
-v mysql_data:/var/lib/mysql \ # 挂载数据卷,防止数据丢失
swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/mysql:8.4.2
# 验证MySQL启动状态
docker ps -a | grep mysql
# 可选:进入容器验证数据库创建
docker exec -it mysql mysql -uroot -pP@ssw0rd -e "show databases;" | grep zabbix
然后docker ps -a确认启动
4. 启动 Zabbix Web 界面
Zabbix Web 依赖 Nginx+PHP,需配置时区、Server 地址等关键参数:
# 等待MySQL初始化完成
sleep 30
docker run -itd \
--name=zabbix-server \
-v zabbix_server:/etc/zabbix \ # 挂载配置卷,方便修改配置
-e DB_SERVER_HOST="mysql" \ # 数据库容器名(同网络下可直接访问)
-e MYSQL_DATABASE="zabbix" \ # 对应MySQL创建的数据库
-e MYSQL_USER="zabbix" \ # 对应MySQL创建的用户
-e MYSQL_PASSWORD="P@ssw0rd" \ # 对应MySQL用户密码
-e MYSQL_ROOT_PASSWORD="P@ssw0rd" \ # MySQL root密码(用于初始化表结构)
--network=zabbix-net \ # 加入Zabbix专属网络
-p 10051:10051 \ # Zabbix Server默认端口
--restart=always \ # 开机自启
swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/zabbix/zabbix-server-mysql:alpine-7.2-latest
# 验证Zabbix Server启动状态
docker ps -a | grep zabbix-server
# 查看Server日志,确认无报错
docker logs zabbix-server | grep -i "started"
然后docker ps -a确认启动
服务正常,启动!
四、访问与验证
1. 登录 Zabbix Web
在浏览器访问服务器 IP(我的是192.168.0.2),使用默认账号密码登录:
- 账号:Admin
- 密码:zabbix
2. 常见问题排查
如果Web界面显示如果出现以下情况“Zabbix Server is not running”,说明Zabbix Server出现了问题,导致后端数无法与数据库交互。
可按以下步骤排查:
-
检查 Server 容器日志:
docker logs zabbix-server | grep -i error常见错误:数据库连接失败(密码错误 / 网络不通)、表结构未初始化。
-
验证容器间网络通信:
# 从Web容器ping Server容器 docker exec -it zabbix-web ping zabbix-server -c 3 # 从Server容器ping MySQL容器 docker exec -it zabbix-server ping mysql -c 3 -
重新初始化 Zabbix 数据库(若表结构缺失):
docker exec -it zabbix-server sh -c "zcat /usr/share/zabbix-sql-scripts/mysql/server.sql.gz | mysql -h mysql -uzabbix -pP@ssw0rd zabbix" # 重启Server docker restart zabbix-server
五、部署后优化建议
- 修改默认密码:登录后立即修改 Admin 密码,避免安全风险;
- 持久化数据:所有容器均已挂载数据卷,定期备份数据卷(
docker volume inspect查看挂载路径); - 调整监控参数:根据服务器性能,修改 Zabbix Server 的
StartPollers等参数,提升监控效率; - 配置告警媒介:添加邮件 / 钉钉 / 微信告警,确保监控异常及时通知。
总结
- 核心组件:Zabbix 部署依赖 MySQL(数据库)、Zabbix Server(核心服务)、Zabbix Web(可视化界面)三大组件,且需保证容器在同一网络下通信;
- 关键步骤:先创建专属网络,再启动 MySQL(需挂载数据卷),等待 MySQL 初始化完成后启动 Server,最后启动 Web 并配置时区;
- 排错重点:Web 界面显示 Server 未运行时,优先检查 Server 日志、容器间网络连通性、数据库账号密码及表结构是否正常。