Eclipse Mosquitto MQTT 설치

Eclipse Mosquitto 는 MQTT 프로토콜 버전 5.0, 3.1.1, 3.1을 구현하는 오픈 소스(EPL/EDL 라이선스) 메시지 브로커입니다.
Mosquitto는 가벼워서 저전력 단일 보드 컴퓨터부터 풀 서버까지 모든 장치에서 사용하기에 적합합니다.

MQTT 프로토콜은 게시/구독 모델을 사용하여 메시징을 수행하는 경량 방식을 제공합니다. 따라서 저전력 센서나 휴대폰, 임베디드 컴퓨터, 마이크로컨트롤러와 같은 모바일 기기와 같은 사물 인터넷(IoT) 메시징 에 적합합니다 .

MQTT Architecture
MQTT Broker의 publish/Subscribed 구조 설명
MQTT Architecture

1. Synology NAS에 Docker로 MQTT 브로커 설치하기 (Mosquitto 기반)

스마트홈, IoT 자동화를 시작하려면 가장 먼저 MQTT 브로커를 구축해야 한다.
이 글에서는 Synology NAS에 Docker를 이용해 Mosquitto 브로커를 설치하는 방법을 단계별로 설명한다.

1️⃣ 준비 사항 확인


# Docker Compose 를 활용하여 프로젝트 생성할 수도 있고, 아래 절차처럼 컨테이너 실행으로 설정을 진행할 수 도 있다.

version: '3.8'

services:
  mosquitto:
    image: eclipse-mosquitto:2.0.9-openssl
    container_name: mosquitto
    restart: unless-stopped
    ports:
      - "1883:1883"
      - "8883:8883"
      - "8081:8081"
    volumes:
      - /volume1/docker/mosquitto/config:/mosquitto/config
      - /volume1/docker/mosquitto/data:/mosquitto/data
      - /volume1/docker/mosquitto/log:/mosquitto/log
      - /volume1/docker/mosquitto/certs:/mosquitto/certs

2️⃣ Docker에서 Mosquitto 이미지 다운로드

  1. DSM에서 Container Manager 패키지를 실행한다.
  2. 왼쪽 메뉴에서 레지스트리를 클릭한 후 ” eclipse-mosquitto “를 검색하고 공식 이미지를 선택한다.
    (MQTT 프로토콜 5 를 지원하지 않는 이미지도 존재한다. 확인하고 원하는 버전을 선택한다.)
  3. 태그를 선택하여 원하는 버전을 다운로드한다.
    (여기서는 사용자 인증 및 차후 SSL/TLS 인증 설정을 위하여 ” 2.0.9-openssl ” 이미지를 다운로드 하였다.)

3️⃣ Mosquitto 컨테이너 생성

  1. 다운로드한 이미지를 선택한 후 실행 버튼을 클릭한다.
  2. 컨테이너 이름은 mqtt 또는 mosquitto 등으로 자유롭게 지정한다.
  1. 다음을 클릭해 아래 항목들을 설정하자.

✅ 포트 설정

필요한 포트만 추가하고, 나중에 라우터 포트포워딩도 잊지 말자.

로컬 포트컨테이너 포트용도
18831883기본 MQTT
90019001WebSocket (옵션)

✅ 볼륨 설정

File Station 또는 SSH 접속을 통해 다음 경로를 설정하고 연결한다.

✅ 환경 설정

Time Zone 을 설정한다( TZ == Asia/Seoul ).

✅ 네트워 설정

네트워크는 host 로 설정하여야 한다.


✅ 설정파일 작성

# MQTT
listener 1883
protocol mqtt
# WebSocket
listener 9001
protocol websockets
# 익명 로그인 허용 (true == 허용, false == 사용자 인증 필수)
allow_anonymous true
# 사용자 인증 정보 연결
# password_file /mosquitto/config/passwd.txt
# 세션 정보 유지
persistence true
# 메시지 저장 경로 지정(이전 메시지들을 유지하기 위해 사용)
persistence_location /mosquitto/data/
# 모든 활동을 기록하기 위한 설정
log_dest file /mosquitto/log/mosquitto.log

✅ 설정 완료 및 컨테이너 실행

폴더 접근권한 설정

컨테이너 실행에 문제가 있는 경우 대부분 폴더 접근권한이 없기 때문이다. 자세한 내용은 로그 파일을 확인하여 원인을 찾을 수 있습니다.
컨테이너가 실행되지 않으면 Container Manager에서의 터미널 접속은 불 가능하므로 윈도우 명령프롬프트 또는 SSH 프로그램을 이용하여 접속한다.

ssh synology-id@domain -p port

chmod 명령어를 사용하여 폴더의 권한을 변경합니다.

  • chmod 777 <폴더>: 모든 사용자에게 읽기, 쓰기, 실행 권한을 부여합니다. (경우에 따라 보안상 권장하지 않습니다.)
  • chmod 755 <폴더>: 소유자에게 읽기, 쓰기, 실행 권한을, 그룹 및 다른 사용자에게 읽기 및 실행 권한을 부여합니다. (일반적인 설정입니다.)
  • chmod 770 <폴더>: 소유자 및 그룹에게 읽기, 쓰기, 실행 권한을, 다른 사용자에게는 아무런 권한을 부여하지 않습니다.
    (MQTT 서버에서 필요한 경우)

4️⃣MQTT 클라이언트 접속

이제 Synology NAS에 MQTT 브로커가 구축되었다.
스마트홈 기기, 센서, Node-RED 등과 연동해서 자유롭게 통신해보자.

답글 남기기