Cách cài đặt Mosquitto MQTT Server trên Ubuntu 22.04

theanh

Administrator
Nhân viên
Mosquitto là một triển khai máy chủ miễn phí, mã nguồn mở và nhẹ của giao thức MQTT. Nó được thiết kế cho tất cả các thiết bị, từ máy tính bảng đơn công suất thấp đến máy chủ đầy đủ. MQTT hoạt động trên giao thức TCP/IP và sử dụng mạng gia đình Internet hiện có của bạn để gửi tin nhắn đến các thiết bị IoT của bạn và phản hồi các tin nhắn đó. Nó được viết bằng ngôn ngữ C, khiến nó nhanh hơn và hiệu quả hơn các trình môi giới MQTT khác.

Bài đăng này sẽ chỉ cho bạn cách cài đặt máy chủ Mosquitto trên Ubuntu 22.04.

Điều kiện tiên quyết​

  • Một máy chủ chạy Ubuntu 22.04.
  • Mật khẩu gốc được cấu hình trên máy chủ của bạn.

Cài đặt các phụ thuộc bắt buộc​

Trước khi bắt đầu, bạn nên cập nhật và nâng cấp tất cả các gói hệ thống lên phiên bản đã cập nhật. Bạn có thể cập nhật chúng bằng cách chạy lệnh sau:
Mã:
apt update -y
apt upgrade -y
Sau khi nâng cấp tất cả các gói, hãy chạy lệnh sau để cài đặt các gói cần thiết khác packages:
Mã:
apt-get install curl gnupg2 wget git apt-transport-https ca-certificates -y
Sau khi cài đặt tất cả các gói cần thiết, bạn có thể tiến hành bước tiếp theo.

Cài đặt Mosquitto Server​

Theo mặc định, gói Mosquitto không có trong kho lưu trữ mặc định của Ubuntu 22.04. Vì vậy, bạn sẽ cần thêm kho lưu trữ chính thức của Mosquitto vào APT. Bạn có thể thêm nó bằng lệnh sau:
Mã:
add-apt-repository ppa:mosquitto-dev/mosquitto-ppa -y
Sau khi kho lưu trữ được thêm vào APT, bạn có thể cài đặt nó bằng lệnh sau:
Mã:
apt install mosquitto mosquitto-clients -y
Sau khi quá trình cài đặt hoàn tất, bạn có thể xác minh trạng thái Mosquitto bằng lệnh sau lệnh:
Mã:
systemctl status mosquitto
Bạn sẽ thấy đầu ra sau:
Mã:
? mosquitto.service - Mosquitto MQTT Broker Loaded: loaded (/lib/systemd/system/mosquitto.service; enabled; vendor preset: enabled) Active: active (running) since Tue 2022-12-06 04:50:33 UTC; 8s ago Docs: man:mosquitto.conf(5) man:mosquitto(8) Process: 5491 ExecStartPre=/bin/mkdir -m 740 -p /var/log/mosquitto (code=exited, status=0/SUCCESS) Process: 5492 ExecStartPre=/bin/chown mosquitto:mosquitto /var/log/mosquitto (code=exited, status=0/SUCCESS) Process: 5493 ExecStartPre=/bin/mkdir -m 740 -p /run/mosquitto (code=exited, status=0/SUCCESS) Process: 5494 ExecStartPre=/bin/chown mosquitto:mosquitto /run/mosquitto (code=exited, status=0/SUCCESS) Main PID: 5495 (mosquitto) Tasks: 1 (limit: 2242) Memory: 1.3M CPU: 23ms CGroup: /system.slice/mosquitto.service ??5495 /usr/sbin/mosquitto -c /etc/mosquitto/mosquitto.conf
Dec 06 04:50:32 ubuntu2204 systemd[1]: Starting Mosquitto MQTT Broker...
Dec 06 04:50:33 ubuntu2204 systemd[1]: Started Mosquitto MQTT Broker.

Tạo mật khẩu quản trị MQTT​

Vì lý do bảo mật, bạn nên định cấu hình xác thực mật khẩu cho MQTT.

Chúng ta hãy thiết lập người dùng và mật khẩu quản trị viên với thông tin sau lệnh:
Mã:
mosquitto_passwd -c /etc/mosquitto/passwd hitesh
Đặt mật khẩu như hiển thị bên dưới:
Mã:
Password:
Reenter password:
Tiếp theo, chỉnh sửa tệp cấu hình MQTT và xác định cổng và mật khẩu tệp.
Mã:
nano /etc/mosquitto/conf.d/default.conf
Thêm các dòng sau:
Mã:
listener 1883
password_file /etc/mosquitto/passwd
Lưu và đóng tệp sau đó khởi động lại dịch vụ Mosquitto để áp dụng thay đổi.
Mã:
systemctl restart mosquitto

Cách sử dụng MQTT để gửi và nhận tin nhắn​

Bạn sẽ cần sử dụng ứng dụng khách Mosquitto để kết nối với máy chủ Mosquitto, sau đó gửi và nhận tin nhắn về các chủ đề khác nhau.

Trước khi gửi và nhận tin nhắn, bạn sẽ cần đăng ký một chủ đề. Bạn có thể sử dụng một trong các chủ đề sau trong các ứng dụng tự động hóa gia đình.
  • home/lights/sitting_room
  • home/lights/kitchen
  • home/lights/master_bedroom
  • home/lights/kids_bedroom
Hãy chạy lệnh sau để đăng ký chủ đề home/lights/kids_bedroom.
Mã:
mosquitto_sub -u hitesh -P password -t "home/lights/kids_bedroom"
Tiếp theo, mở giao diện thiết bị đầu cuối mới và đăng một thông báo lên chủ đề home/lights/kids_bedroom với nội dung sau lệnh.
Mã:
mosquitto_pub -u hitesh -P password -m "ON" -t "home/lights/kids_bedroom"
Trên thiết bị đầu cuối đầu tiên, bạn sẽ nhận được tải trọng ON:
Mã:
ON
Bây giờ, hãy đến thiết bị đầu cuối thứ hai và gửi tin nhắn TẮT về cùng chủ đề.
Mã:
mosquitto_pub -u hitesh -P password -m "OFF" -t "home/lights/kids_bedroom"
Bạn sẽ thấy tin nhắn sau trên thiết bị đầu cuối đầu tiên:
Mã:
ON
OFF
Sau khi hoàn tất, bạn có thể tiến hành bước tiếp theo.

Bảo mật Mosquitto bằng Let's Encrypt SSL​

Để bảo mật Mosquitto bằng SSL, bạn sẽ cần cài đặt gói máy khách Certbot vào máy chủ của mình.

Trước tiên, hãy cài đặt trình quản lý gói Snap bằng lệnh sau:
Mã:
apt install snapd
Tiếp theo, hãy cập nhật gói Snap bằng lệnh sau lệnh:
Mã:
snap install core 
snap refresh core
Tiếp theo, cài đặt gói Certbot bằng lệnh sau:
Mã:
snap install --classic certbot
Tiếp theo, tạo liên kết tượng trưng của tệp nhị phân Certbot tới hệ thống vị trí.
Mã:
ln -s /snap/bin/certbot /usr/bin/certbot
Tiếp theo, chạy lệnh sau để tạo chứng chỉ SSL.
Mã:
certbot certonly --standalone --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m [emailprotected] -d mosquitto.linuxbuz.com
Bạn sẽ thấy thông báo sau đầu ra:
Mã:
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Requesting a certificate for mosquitto.linuxbuz.com
Successfully received certificate.
Certificate is saved at: /etc/letsencrypt/live/mosquitto.linuxbuz.com/fullchain.pem
Key is saved at: /etc/letsencrypt/live/mosquitto.linuxbuz.com/privkey.pem
This certificate expires on 2023-03-06.
These files will be updated when the certificate renews.
Certbot has set up a scheduled task to automatically renew this certificate in the background.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
If you like Certbot, please consider supporting our work by: * Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate * Donating to EFF: https://eff.org/donate-le
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Bạn có thể xem tất cả các tệp chứng chỉ được tạo bằng lệnh sau:
Mã:
ls /etc/letsencrypt/live/mosquitto.linuxbuz.com/
Bạn sẽ nhận được thông tin sau đầu ra:
Mã:
cert.pem chain.pem fullchain.pem privkey.pem README
Tiếp theo, tạo chứng chỉ Diffie-Hellman bằng lệnh sau:
Mã:
openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048
Sau khi hoàn tất, bạn có thể tiến hành bước tiếp theo.

Cấu hình MQTT để sử dụng Let's Encrypt SSL​

Trước tiên, hãy sao chép tất cả các chứng chỉ đã tạo vào thư mục Mosquitto bằng lệnh sau:
Mã:
cp /etc/letsencrypt/live/mosquitto.linuxbuz.com/fullchain.pem /etc/mosquitto/certs/server.pem
cp /etc/letsencrypt/live/mosquitto.linuxbuz.com/privkey.pem /etc/mosquitto/certs/server.key
Tiếp theo, hãy thiết lập quyền sở hữu thích hợp cho chứng chỉ Mosquitto.
Mã:
chown -R mosquitto: /etc/mosquitto/certs
Tiếp theo, hãy chỉnh sửa tệp cấu hình Mosquitto và xác định Let's Encrypt SSL.
Mã:
nano /etc/mosquitto/conf.d/default.conf
Thêm các dòng sau:
Mã:
listener 8883
certfile /etc/mosquitto/certs/server.pem
cafile /etc/ssl/certs/ISRG_Root_X1.pem
keyfile /etc/mosquitto/certs/server.key
dhparamfile /etc/ssl/certs/dhparam.pem
Lưu và đóng tệp sau đó khởi động lại dịch vụ Mosquitto để áp dụng thay đổi.
Mã:
systemctl restart mosquitto
Tiếp theo, xác minh kết nối Mosquitto bằng lệnh sau:
Mã:
mosquitto_pub -h mosquitto.linuxbuz.com -t "home/lights/kids_bedroom" -m "hello" -p 8883 --capath /etc/ssl/certs/ -u hitesh -P password
Sau khi hoàn tất, bạn có thể tiến hành kiểm tra kết nối Mosquitto qua trình duyệt web.

Cấu hình Mosquitto Websockets​

Tiếp theo, bạn sẽ cần cấu hình Websockets để sử dụng giao thức MQTT từ bên trong trình duyệt. Bạn có thể bật nó bằng cách chỉnh sửa tệp cấu hình mặc định của Mosquitto:
Mã:
nano /etc/mosquitto/conf.d/default.conf
Thêm các dòng sau:
Mã:
listener 8083
protocol websockets
certfile /etc/mosquitto/certs/server.pem
cafile /etc/ssl/certs/ISRG_Root_X1.pem
keyfile /etc/mosquitto/certs/server.key
dhparamfile /etc/ssl/certs/dhparam.pem
Lưu và đóng tệp, sau đó khởi động lại dịch vụ Mosquitto để áp dụng thay đổi.
Mã:
systemctl restart mosquitto
Tiếp theo, mở giao diện đầu cuối của bạn và chạy lệnh sau:
Mã:
mosquitto_sub -u hitesh -P password -t "home/lights/kids_bedroom"
Bây giờ, hãy mở trình duyệt web của bạn và sử dụng máy khách MQTT dựa trên trình duyệt để kiểm tra chức năng WebSockets. Bạn sẽ thấy màn hình sau:


data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22358%22%3E%3C/svg%3E




Cung cấp máy chủ Mosquitto, cổng, tên người dùng, mật khẩu và nhấp vào nút Kết nối. Bạn sẽ thấy màn hình sau:


data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22415%22%3E%3C/svg%3E


Bây giờ, hãy nhập bất kỳ chủ đề, tin nhắn nào rồi nhấp vào nút Xuất bản.

Tiếp theo, quay lại giao diện thiết bị đầu cuối. Bạn sẽ thấy thông báo đã xuất bản của mình trong đầu ra sau:
Mã:
Hi

Kết luận​

Trong bài đăng này, chúng tôi đã giải thích cách cài đặt máy chủ Mosquitto và bảo mật máy chủ này bằng Let's Encrypt SSL trên Ubuntu 22.04. Chúng tôi cũng thử nghiệm Mosquitto thông qua một máy khách dựa trên trình duyệt. Hãy thoải mái hỏi tôi nếu bạn có bất kỳ câu hỏi nào.
 
Back
Bên trên