以下是通过 Docker 容器化实现 Zabbix 离线部署 的详细方案,支持 完全无外网环境 的安装:
一、外网环境准备(需联网设备操作)
1. 下载所需 Docker 镜像
# 核心镜像
docker pull mysql:8.0
docker pull zabbix/zabbix-server-mysql:6.0-ubuntu-latest
docker pull zabbix/zabbix-web-nginx-mysql:6.0-ubuntu-latest
docker pull zabbix/zabbix-agent:6.0-ubuntu-latest
# 可选管理工具
docker pull portainer/portainer-ce:latest
docker pull adminer:latest
2. 保存镜像为离线文件
mkdir zabbix-docker-offline
docker save -o D:/mysql.tar mysql:8.0
docker save -o D:/zabbix-server-mysql.tar zabbix/zabbix-server-mysql:ubuntu-6.0-latest
docker save -o D:/zabbix-server-web.tar zabbix/zabbix-web-nginx-mysql:6.0-ubuntu-latest
docker save -o D:/zabbix-agent.tar zabbix/zabbix-agent:6.0-latest
docker save -o D:/portainer.tar portainer/portainer-ce:latest
docker save -o D:/adminer.tar adminer:latest
# 打包传输 zabbix-docker-offline目录名称
tar czvf zabbix-docker-offline.tar.gz zabbix-docker-offline/
二、内网服务器部署(192.168.0.1)
1. 传输并加载镜像
# 上传文件到服务器
mkdir -p /opt/zabbix-docker
tar xzvf zabbix-docker-offline.tar.gz -C /opt/zabbix-docker
# 加载所有镜像
docker load -i /opt/zabbix-docker/mysql.tar
docker load -i /opt/zabbix-docker/zabbix-server.tar
docker load -i /opt/zabbix-docker/zabbix-web.tar
docker load -i /opt/zabbix-docker/zabbix-agent.tar
2. 创建持久化目录
mkdir -p /data/zabbix/{mysql,server,web}
chmod -R 777 /data/zabbix
3. 编写 docker-compose.yml
version: '3.7'
services:
mysql-server:
image: mysql:8.0
container_name: zabbix-mysql
restart: unless-stopped
environment:
MYSQL_DATABASE: zabbix
MYSQL_USER: zabbix
MYSQL_PASSWORD: Z@bb1x_2023
MYSQL_ROOT_PASSWORD: Root@2023
volumes:
- /data/zabbix/mysql:/var/lib/mysql
networks:
- zabbix-net
command:
--character-set-server=utf8mb4
--collation-server=utf8mb4_unicode_ci
zabbix-server:
image: zabbix/zabbix-server-mysql:ubuntu-6.0-latest
container_name: zabbix-server
restart: unless-stopped
environment:
DB_SERVER_HOST: mysql-server
MYSQL_DATABASE: zabbix
MYSQL_USER: zabbix
MYSQL_PASSWORD: Z@bb1x_2023
ZBX_ENABLE_SNMP_TRAPS: "true"
volumes:
- /data/zabbix/server:/var/lib/zabbix
networks:
- zabbix-net
ports:
- "10051:10051"
depends_on:
- mysql-server
zabbix-web:
image: zabbix/zabbix-web-nginx-mysql:6.0-ubuntu-latest
container_name: zabbix-web
restart: unless-stopped
environment:
DB_SERVER_HOST: mysql-server
MYSQL_DATABASE: zabbix
MYSQL_USER: zabbix
MYSQL_PASSWORD: Z@bb1x_2023
ZBX_SERVER_HOST: zabbix-server
networks:
- zabbix-net
ports:
- "80:8080"
- "443:8443"
depends_on:
- zabbix-server
portainer:
image: portainer/portainer-ce:latest
container_name: portainer
restart: always
ports:
- "9000:9000"
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- /data/zabbix/portainer:/data
networks:
- zabbix-net
networks:
zabbix-net:
driver: bridge
4. 启动服务栈
cd /opt/zabbix-docker
docker compose up -d
三、Agent节点部署(192.168.0.2 和 192.168.0.3)
1. 加载Agent镜像
docker load -i /opt/zabbix-docker/zabbix-agent.tar
2. 启动Agent容器
docker run -d \
--name zabbix-agent \
--privileged \
-e ZBX_SERVER_HOST=192.168.0.1 \
-e ZBX_HOSTNAME=node-01 \
-p 10050:10050 \
-v /:/rootfs \
-v /var/run:/var/run \
zabbix/zabbix-agent:6.0-latest
四、初始化配置
1. 访问 Web 界面
- 浏览器访问
http://192.168.0.1
- 默认凭证:
Admin/zabbix
2. 添加监控主机
- 登录后进入 Configuration → Hosts → Create host
- 配置项:
- Host name:
node-01
- Groups:
Linux servers
- Agent interfaces:
192.168.0.2:10050
- Host name:
- 关联模板:
Linux by Zabbix agent
五、离线部署增强配置
1. 时间同步
# 所有容器添加时间同步
docker run ... \
-v /etc/localtime:/etc/localtime:ro \
--add-host=ntp.server:192.168.0.1
2. 数据备份
# 创建备份脚本 /opt/zabbix-docker/backup.sh
docker exec zabbix-mysql mysqldump -uzabbix -pZ@bb1x_2023 zabbix | gzip > /data/backup/zabbix-$(date +%Y%m%d).sql.gz
3. 安全加固
# 在docker-compose.yml中添加:
environment:
- ZBX_TLSCONNECT=psk
- ZBX_TLSACCEPT=psk
- ZBX_TLSPSKIDENTITY=PSK001
- ZBX_TLSPSKFILE=/etc/zabbix/psk.key
volumes:
- ./psk.key:/etc/zabbix/psk.key
六、验证与排错
1. 检查容器状态
docker ps -a --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}"
2. 查看日志
docker logs -f zabbix-server
docker exec zabbix-mysql mysql -uzabbix -pZ@bb1x_2023 -e "SHOW DATABASES;"
3. 测试数据采集
docker exec zabbix-server zabbix_get -s 192.168.0.2 -k system.cpu.load[all,avg1]
七、扩展方案
1. 高可用部署
# 添加以下服务到docker-compose.yml
zabbix-proxy:
image: zabbix/zabbix-proxy-mysql:6.0-latest
environment:
ZBX_SERVER_HOST: zabbix-server
ZBX_HOSTNAME: proxy-01
2. 监控Docker容器
# 在Agent容器中添加:
-e ZBX_DOCKER=1
-v /var/lib/docker/containers:/var/lib/docker/containers:ro
3. 自定义监控模板
- 创建
/opt/zabbix-docker/custom_checks
目录 - 在docker-compose.yml中添加:
volumes:
- ./custom_checks:/etc/zabbix/zabbix_agentd.d/custom
八、关键注意事项
- 版本一致性:确保所有组件版本均为6.0系列
- 存储规划:MySQL数据目录至少预留20GB空间
- 防火墙规则:
firewall-cmd --permanent --add-port={80,10051,10050}/tcp firewall-cmd --reload
- 备份策略:每日备份MySQL数据库和配置文件
此方案通过容器化实现了快速部署和易维护性,同时保留完整的扩展能力。通过 Portainer 可以方便地进行可视化容器管理,适合长期运维场景。