Eclipse Mosquitto 는 MQTT 프로토콜 버전 5.0, 3.1.1, 3.1을 구현하는 오픈 소스(EPL/EDL 라이선스) 메시지 브로커입니다.
Mosquitto는 가벼워서 저전력 단일 보드 컴퓨터부터 풀 서버까지 모든 장치에서 사용하기에 적합합니다.
MQTT 프로토콜은 게시/구독 모델을 사용하여 메시징을 수행하는 경량 방식을 제공합니다. 따라서 저전력 센서나 휴대폰, 임베디드 컴퓨터, 마이크로컨트롤러와 같은 모바일 기기와 같은 사물 인터넷(IoT) 메시징 에 적합합니다 .

1. Synology NAS에 Docker로 MQTT 브로커 설치하기 (Mosquitto 기반)
스마트홈, IoT 자동화를 시작하려면 가장 먼저 MQTT 브로커를 구축해야 한다.
이 글에서는 Synology NAS에 Docker를 이용해 Mosquitto 브로커를 설치하는 방법을 단계별로 설명한다.
1️⃣ 준비 사항 확인
- Synology NAS가 Container Manager(Docker)를 지원하는지 확인
(Container Manager 지원 모델 확인) - 유튜브 영상 참고 : MQTT in a Container Running on Synology NAS
(유튜브에서 Mosquitto와 Synology 환경 설정 과정을 참고할 수 있는 유익한 영상이다.)
# 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 이미지 다운로드
- DSM에서 Container Manager 패키지를 실행한다.
- 왼쪽 메뉴에서 레지스트리를 클릭한 후 ” eclipse-mosquitto “를 검색하고 공식 이미지를 선택한다.
(MQTT 프로토콜 5 를 지원하지 않는 이미지도 존재한다. 확인하고 원하는 버전을 선택한다.) - 태그를 선택하여 원하는 버전을 다운로드한다.
(여기서는 사용자 인증 및 차후 SSL/TLS 인증 설정을 위하여 ” 2.0.9-openssl ” 이미지를 다운로드 하였다.)

3️⃣ Mosquitto 컨테이너 생성
- 다운로드한 이미지를 선택한 후 실행 버튼을 클릭한다.
- 컨테이너 이름은 mqtt 또는 mosquitto 등으로 자유롭게 지정한다.

- 다음을 클릭해 아래 항목들을 설정하자.
✅ 포트 설정
필요한 포트만 추가하고, 나중에 라우터 포트포워딩도 잊지 말자.
로컬 포트 | 컨테이너 포트 | 용도 |
---|---|---|
1883 | 1883 | 기본 MQTT |
9001 | 9001 | WebSocket (옵션) |

✅ 볼륨 설정
File Station 또는 SSH 접속을 통해 다음 경로를 설정하고 연결한다.
로컬 폴더 예시 | 컨테이너 경로 |
---|---|
volume1/docker/mosquitto/config | /mosquitto/config |
volume1/docker/mosquitto/data | /mosquitto/data |
volume1/docker/mosquitto/log | /mosquitto/log |

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

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

✅ 설정파일 작성
/volume1/docker/mosquitto/config 폴더에 mosquitto.conf (UTF-8) 파일을 아래 내용을 참고하여 작성한 후 저장한다.
# 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 등과 연동해서 자유롭게 통신해보자.