บทนำ
Mosquitto เป็น MQTT Broker แบบโอเพนซอร์สที่ใช้สำหรับการรับ-ส่งข้อความระหว่างอุปกรณ์ IoT ผ่านโปรโตคอล MQTT ซึ่งมีประสิทธิภาพสูงและเหมาะสำหรับระบบที่ต้องการการสื่อสารแบบเรียลไทม์
ในบทความนี้ เราจะอธิบายวิธีติดตั้งและตั้งค่า Mosquitto MQTT Broker บน Ubuntu โดยใช้ Bash Script เพื่อให้สามารถใช้งานได้อย่างง่ายดาย และ ปลอดภัย
MQTT คืออะไร?
MQTT (Message Queuing Telemetry Transport) เป็นโปรโตคอลการรับ-ส่งข้อความที่ออกแบบมาสำหรับการสื่อสารในระบบที่มีทรัพยากรจำกัด เช่น อุปกรณ์ IoT (Internet of Things) หรือระบบที่ต้องการใช้แบนด์วิดท์ต่ำและมีการเชื่อมต่อที่ไม่นิ่ง โดย MQTT ใช้โมเดล Publisher-Subscriber ซึ่งประกอบด้วย 3 องค์ประกอบหลัก ได้แก่:
- Publisher - ผู้เผยแพร่ข้อมูล เช่น เซ็นเซอร์ที่ส่งข้อมูลไปยัง MQTT Broker
- Broker - ตัวกลางที่ทำหน้าที่รับและแจกจ่ายข้อมูลไปยัง Subscriber ที่สนใจ
- Subscriber - ผู้รับข้อมูลที่สมัครรับข้อมูลจาก Broker ตามหัวข้อที่ต้องการ
MQTT ทำงานผ่าน TCP/IP และใช้พอร์ตเริ่มต้นที่ 1883 (สำหรับการสื่อสารปกติ) และ 8883 (สำหรับการสื่อสารแบบเข้ารหัส TLS/SSL)
ประโยชน์ของ MQTT
MQTT เป็นโปรโตคอลที่มีประสิทธิภาพสูงและเหมาะสำหรับการใช้งานหลายรูปแบบ โดยมีข้อดีหลัก ๆ ดังนี้:
- ใช้ทรัพยากรต่ำ - ออกแบบมาให้เหมาะสำหรับอุปกรณ์ที่มีพลังงานจำกัด เช่น Microcontroller
- ใช้แบนด์วิดท์ต่ำ - ใช้โครงสร้างข้อมูลที่มีขนาดเล็ก ทำให้ลดปริมาณข้อมูลที่ส่งผ่านเครือข่าย
- รองรับ QoS (Quality of Service) - มีระดับการรับ-ส่งข้อมูล 3 ระดับ ทำให้สามารถกำหนดความน่าเชื่อถือของการส่งข้อความได้
- รองรับการเชื่อมต่อแบบไม่ต่อเนื่อง - เหมาะสำหรับอุปกรณ์ที่อาจเชื่อมต่อเครือข่ายไม่ต่อเนื่อง เช่น ระบบมือถือ
- รองรับระบบ Pub/Sub - ช่วยให้สามารถสื่อสารแบบ one-to-many ได้ง่ายโดยไม่ต้องระบุผู้รับปลายทางโดยตรง
ขั้นตอนการติดตั้ง Mosquitto MQTT Broker
1. ดาวน์โหลดและรันสคริปต์ติดตั้ง
ให้บันทึกสคริปต์ด้านล่างเป็นไฟล์ install_mosquitto.sh
#!/bin/bash
# อัปเดตรายการแพ็กเกจ
echo "Updating package list..."
sudo apt update -y && sudo apt upgrade -y
# ติดตั้ง Mosquitto และ Mosquitto Clients
echo "Installing Mosquitto MQTT Broker..."
sudo apt install -y mosquitto mosquitto-clients
# กำหนดให้ Mosquitto เริ่มทำงานอัตโนมัติเมื่อบูต
echo "Enabling Mosquitto service..."
sudo systemctl enable mosquitto
sudo systemctl start mosquitto
# ตรวจสอบสถานะของ Mosquitto
echo "Checking Mosquitto status..."
sudo systemctl status mosquitto --no-pager
# เปิดพอร์ต MQTT (1883 และ 8883 สำหรับ TLS) ใน Firewall (ถ้ามี ufw)
if command -v ufw &> /dev/null
then
echo "Configuring firewall..."
sudo ufw allow 1883/tcp
sudo ufw allow 8883/tcp
sudo ufw reload
fi
# สร้างไฟล์คอนฟิกสำหรับ Authentication (กำหนดให้ใช้ username/password)
CONFIG_FILE="/etc/mosquitto/conf.d/mosquitto.conf"
echo "Creating Mosquitto configuration..."
sudo tee $CONFIG_FILE > /dev/null <<EOL
listener 1883
allow_anonymous false
password_file /etc/mosquitto/passwd
EOL
# สร้าง Username และ Password สำหรับ Mosquitto
echo "Creating MQTT user..."
MQTT_USER="mqtt_user"
MQTT_PASS="mqtt_password"
sudo mosquitto_passwd -c -b /etc/mosquitto/passwd $MQTT_USER $MQTT_PASS
# รีสตาร์ท Mosquitto เพื่อให้การตั้งค่ามีผล
echo "Restarting Mosquitto service..."
sudo systemctl restart mosquitto
# แสดงผลลัพธ์สุดท้าย
echo "============================================="
echo " Mosquitto MQTT Broker ติดตั้งเสร็จสมบูรณ์!"
echo " ใช้งานได้ที่: mqtt://localhost:1883"
echo " Username: $MQTT_USER"
echo " Password: $MQTT_PASS"
echo "============================================="
วิธีใช้
1. บันทึกสคริปต์เป็นไฟล์
บันทึกสคริปต์นี้เป็นไฟล์ เช่น install_mosquitto.sh
# ตัวอย่างคำสั่งเพื่อบันทึกสคริปต์
nano install_mosquitto.sh
2. ให้สิทธิ์การรันไฟล์
ใช้คำสั่ง chmod
เพื่อให้สิทธิ์การรันไฟล์:
chmod +x install_mosquitto.sh
3. รันสคริปต์
รันสคริปต์ด้วยคำสั่ง:
sudo ./install_mosquitto.sh
4. การตรวจสอบการทำงาน
หลังจากติดตั้งเสร็จ ลองตรวจสอบว่าบริการ Mosquitto ทำงานอยู่หรือไม่:
systemctl status mosquitto
หรือทดสอบการเชื่อมต่อกับ Mosquitto Broker โดยใช้ Mosquitto Client:
# เปิด Subscriber ใน Terminal หนึ่ง
mosquitto_sub -h localhost -t "test/topic" -u "mqtt_user" -P "mqtt_password" &
# ส่งข้อความผ่าน Publisher ใน Terminal อีกหนึ่ง
mosquitto_pub -h localhost -t "test/topic" -m "Hello MQTT" -u "mqtt_user" -P "mqtt_password"
ถ้าใช้งานได้ จะเห็นข้อความ "Hello MQTT"
แสดงออกมาใน Terminal ของ Subscriber
5. เพิ่มเติม
- ค่า
MQTT_USER
และMQTT_PASS
ในสคริปต์สามารถเปลี่ยนแปลงได้ตามต้องการ - ถ้าต้องการให้ MQTT Broker ทำงานแบบ TLS/SSL ให้เพิ่มการตั้งค่า Cert ในไฟล์
mosquitto.conf
- ถ้าใช้ Docker ก็สามารถติดตั้ง Mosquitto Broker ได้ง่าย ๆ โดยใช้คำสั่ง:
docker run -d --name mosquitto -p 1883:1883 eclipse-mosquitto