1. 为什么选择Docker部署Mosquitto MQTT服务
最近在帮朋友搭建智能家居系统时,发现MQTT协议简直是物联网设备通信的"普通话"。而Eclipse Mosquitto作为轻量级开源MQTT broker,就像个高效的邮局,专门处理设备间的消息传递。但直接在服务器上安装配置Mosquitto,总会遇到依赖冲突、环境污染这些烦心事,直到我想起Docker这个"集装箱神器"。
用Docker部署Mosquitto至少有三大优势:首先是环境隔离,不会污染主机环境;其次是快速部署,一条命令就能拉起服务;最重要的是配置持久化,所有设置都保存在固定目录,容器销毁重建也不怕丢数据。实测下来,从零开始到服务可用,整个过程不超过15分钟。
这里特别说明下版本选择问题。Mosquitto 2.x版本相比1.x有几个重要改进:支持MQTT 5.0协议、WebSocket默认启用、更细粒度的ACL控制。不过要注意,2.0.0到2.0.9版本存在内存泄漏问题,建议直接使用2.0.15这个稳定版本。
2. 准备工作:配置Docker环境
2.1 安装Docker引擎
在Ubuntu 20.04上安装Docker只需三步:
# 卸载旧版本 sudo apt-get remove docker docker-engine docker.io containerd runc # 安装依赖 sudo apt-get update sudo apt-get install ca-certificates curl gnupg lsb-release # 添加官方GPG密钥 curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg # 设置稳定版仓库 echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null # 安装Docker引擎 sudo apt-get update sudo apt-get install docker-ce docker-ce-cli containerd.io安装完成后,建议将当前用户加入docker组,避免每次都要sudo:
sudo usermod -aG docker $USER newgrp docker # 立即生效2.2 准备目录结构
合理的目录结构能让后续维护事半功倍。我习惯这样组织:
~/mqtt-docker/ ├── config/ │ └── mqtt/ # Mosquitto配置文件 ├── mqttdata/ # 持久化数据 └── mqttlog/ # 日志文件创建目录并设置权限:
mkdir -p ~/mqtt-docker/{config/mqtt,mqttdata,mqttlog} chmod -R 777 ~/mqtt-docker/mqttlog # 确保容器有写权限3. 获取并配置Mosquitto镜像
3.1 拉取官方镜像
直接使用Docker Hub上的官方镜像:
docker pull eclipse-mosquitto:2.0.15验证镜像是否拉取成功:
docker images | grep mosquitto3.2 生成初始配置文件
先临时运行容器获取默认配置:
docker run --rm -v ~/mqtt-docker/config/mqtt:/mosquitto/config eclipse-mosquitto:2.0.15 sh -c "cp /mosquitto/config/mosquitto.conf /mosquitto/config/mosquitto.conf.example && chown 1000:1000 /mosquitto/config/mosquitto.conf.example"这个命令做了三件事:1) 复制默认配置到挂载目录;2) 修改文件属主避免权限问题;3) 容器退出后自动删除。
3.3 配置用户认证
安全起见,必须禁用匿名访问。先创建密码文件:
docker run --rm -v ~/mqtt-docker/config/mqtt:/mosquitto/config eclipse-mosquitto:2.0.15 mosquitto_passwd -c /mosquitto/config/passwd admin执行后会提示输入密码,建议使用复杂密码。要添加更多用户时去掉-c参数(避免覆盖原文件):
docker run --rm -v ~/mqtt-docker/config/mqtt:/mosquitto/config eclipse-mosquitto:2.0.15 mosquitto_passwd /mosquitto/config/passwd user1查看生成的密码文件:
cat ~/mqtt-docker/config/mqtt/passwd你会看到类似这样的加密密码:
admin:$7$101$nZx4Z7Zx4Z7Zx4Z7$Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx4Z7Zx