Docker를 사용하여 RabbitMQ를 설치하고 설정하는 방법
Docker Stack을 사용하여 RabbitMQ를 설치 및 설정하는 방법을 소개합니다. RabbitMQ는 Windows, Linux, macOS 등 다양한 환경에서 설치가 가능하지만, 저는 Linux 환경에서 Docker Stack를 활용해 설정을 진행했습니다.
아래에서는 RabbitMQ를 Docker Swarm 환경에서 YAML 파일을 이용해 설치하고, Traefik으로 라우팅을 설정하는 방법을 상세히 설명합니다.
1. Docker Network 생성
다음 명령어를 사용하여 네트워크를 생성합니다
docker network create --driver overlay --attachable rabbotmq-network
- --driver overlay: Docker Swarm에서 여러 호스트 간 네트워크를 연결하기 위해 Overlay 네트워크를 사용합니다.
- --attachable: 컨테이너가 실행 중에 이 네트워크에 연결 가능하도록 설정합니다.
2. docker-rabbitmq.yml 파일 구성
아래는 RabbitMQ를 설정하기 위한 YAML 파일입니다.
version: '3.9'
networks:
traefik-network:
external: true
rabbitmq-network:
driver: overlay
volumes:
rabbitmq-data:
driver: local
driver_opts:
type: none
o: bind
device: /volumes/rabbitMq
services:
rabbitmq-onlyoffice-document:
image: rabbitmq:management
volumes:
- rabbitmq-data:/var/lib/rabbitmq
environment:
RABBITMQ_DEFAULT_USER:
RABBITMQ_DEFAULT_PASS:
networks:
- traefik-network
- onlyoffice-network
healthcheck:
test: ["CMD", "rabbitmq-diagnostics", "-q", "ping"]
interval: 10s
timeout: 5s
retries: 3
deploy:
mode: replicated
replicas: 1
placement:
constraints:
- node.hostname == master
labels:
- "traefik.enable=true"
- "traefik.http.routers.rabbit.rule=Host(`ex.domain`)"
- "traefik.http.routers.rabbit.service=rabbit"
- "traefik.http.services.rabbit.loadbalancer.server.port=15672"
- "traefik.http.routers.rabbit.entrypoints=websecure"
- "traefik.http.routers.rabbit.tls.certresolver=letsencrypt"
- "traefik.http.routers.rabbit.tls=true"
- "traefik.http.services.rabbit.loadbalancer.passhostheader=true"
- "traefik.http.routers.rabbit.middlewares=compresstraefik"
# RabbitMQ Broker (TCP)
- "traefik.tcp.routers.rabbitmq-broker.rule=HostSNI(`ex.domain`)"
- "traefik.tcp.routers.rabbitmq-broker.entrypoints=amqps"
- "traefik.tcp.services.rabbitmq-broker.loadbalancer.server.port=5672"
- "traefik.tcp.routers.rabbitmq-broker.tls=true" # Enable TLS for TCP router
구성 요소 설명
네트워크 설정
- traefik-network: 외부에서 접근 가능한 네트워크. Traefik을 통해 라우팅됩니다.
- rabbitmq-network: RabbitMQ와 관련된 내부 네트워크.
볼륨 설정
- rabbitmq-data: RabbitMQ 데이터를 저장하기 위한 볼륨입니다.
- driver_opts를 통해 로컬 경로(/volumes/rabbitMq)를 마운트했습니다.
volume 을 사용하는 이유는 아래 블로그에 정리되어 있습니다.
서비스 설정
- image: RabbitMQ 관리 플러그인이 포함된 공식 Docker 이미지(rabbitmq:management)를 사용합니다.
- environment: RabbitMQ 초기 관리자 계정과 비밀번호를 설정합니다.
- healthcheck: RabbitMQ의 상태를 주기적으로 확인합니다.
- deploy:
- replicas: 컨테이너 복제본 수를 1개로 설정합니다.
- constraints: master 호스트에서만 실행되도록 제한합니다.
Traefik 설정
- HTTP 라우터: rabbitmq.keystrom.site 도메인으로 RabbitMQ 관리 웹사이트(포트 15672)에 접근합니다.
- TCP 라우터: RabbitMQ 브로커(포트 5672)로 TLS를 사용해 안전한 연결을 제공합니다.
3. YAML 파일 배포
다음 명령어를 사용하여 YAML 파일을 배포합니다.
docker stack deploy -c docker-rabbitmq.yml rabbitmq
- -c docker-rabbitmq.yml: YAML 파일 지정
- rabbitmq: 배포 스택 이름