[RabbitMQ] EC2에 RabbitMQ 설치/설정/접속

LDB·2025년 10월 23일

RabbitMQ

목록 보기
3/6
post-thumbnail

📒 사전설명

원래는 RabbitMQ를 설치하는 방법만 설명하려고 했으나 제가 근무하고 있는 회사도 그렇고 타 기업들도 보면 RabbitMQ를 사용하는 방법이 다양했습니다. EC2에 docker 컨테이너로 운영하는 회사, AWS자체에 존재하는 Amazon MQ 라는 메시지 브로커를 사용하는 등 다양한 방법으로 사용하고 있었습니다. 이번 게시글에서는 EC2기반에 docker 컨테이너로 RabbitMQ를 운영하고 RabbitMQ 관리 페이지에 접속하는 시간을 가져보겠습니다.
(docker 설치는 이전에 작성한 게시글이 있어서 그걸로 대체 하겠습니다.)


📚 목차

  • Amazon EC2 서버 등록
  • EC2에 Docker 설치
  • Docker에 RabbitMQ 설치 및 설정
  • RabbitMQ 테스트 해보기

1. Amazon EC2 서버 등록

해당 내용은 이전에 작성한 게시글을 사용하겠습니다.

https://velog.io/@half-phycho/AWS-Amazon-EC2-세팅


2. EC2에 Docker 설치

해당 내용 또한 이전에 작성한 게시글을 사용하겠습니다.

https://velog.io/@half-phycho/Docker-설치-및-사용법


3. Docker에 RabbitMQ 설치 및 실행

Docker 환경에서 RabbitMQ를 실행시키는 방법은 2가지가 있습니다.

  • docker 명령어로 운영하는 방법
  • Dockerfile을 사용하여 운영하는 방법

📗 docker 명령어로 운영
해당 방법은 명령어를 통해 RabbitMQ이미지 다운로드, 컨테이너 실행하는 방법입니다.

# latest RabbitMQ 4.x
docker run -d -it --rm --name rabbitmq -p 5672:5672 -p 15672:15672 rabbitmq:4-management
# 기존 명령어에는 -d 없습니다, 백그라운드로 로딩시키기 위해 추가했습니다.

만약 RabbitMQ 컨테이너를 생성한다면 5672, 15672, 25672 포트와 함께 등록되는데 포트별로 의미는 다음과 같습니다.

  • 5672 : AMQP 프로토콜 포트번호
  • 15672 : RabbitMQ를 웹 UI로 접근하기 위한 포트번호
  • 25672 : 클러스터기능 사용을 위한 포트번호

🖼️ 실행 이미지

명령어를 실행하면 RabbitMQ의 이미지를 다운로드하고 백그라운드 상태로 컨테이너를 실행합니다.

docker ps -a 명령어를 실행시키면 다음과 같이 RabbitMQ가 실행되는 것을 확인할 수 있습니다.


Dockerfile을 사용하여 운영

직접 docker 명령어를 사용하면 빠르게 이미지를 다운로드하고 바로 실행시킬 수 있지만 상세 설정이 불편하다는 단점이 있습니다. 그렇기에 필요한 자잘한 설정들을 Dockerfile에 작성한 후 이미지로 빌드하여 컨테이너로 실행시키는 방법이 있습니다.

(해당 방법은 adjh54님의 방법을 사용했습니다.)

폴더구조는 다음과 같습니다.

rabbitmq.conf : 해당 파일에는 RabbitMQ 메세지 브로커의 설정을 담고 있습니다. 예를 들어 사용할 포트, 클러스터링 설정, 가상 호스트 설정 등이 있습니다.

1. rabbitmq.conf 설정파일 작성

# guest계정으로 접근 못하도록 막을 때 사용하는 설정입니다.
loopback_users.guest = false

# 해당 메세지 큐를 단일노드로 사용한다는 의미인데 경우에따라서 classic 혹은 milti로 설정이 가능합니다. (기본값은 single 입니다.)
distribution.mode = single

# 디스크 노드를 설정하는 의미 입니다.
# 만약 디스크와 메모리에 공간이 1GB만 남아있으면 메세지 발생을 중단시킵니다.
disk_free_limit.absolute = 1GB

# 디스크에 남은 여유 공간이 1.0배 정도면 메세지 발생을 중단시킨다는 의미입니다.
# 다른말로 하면 1.0으로 설정하면 여유 공간 한계를 두지않는다는 의미 입니다.
# 3.7.x 이전 버전은 0.5가 그런 이유 였지만 3.7.x 버전 이후 부터는 1.0이 비활성화를 의미합니다.
disk_free_limit.relative = 1.0

# 로깅설정 부분입니다.
log.dir = /var/log/rabbitmq # 로그 저장 경로
log.file = rabbitmq.log		# 저장할 로그 이름
log.file.rotation = daily	# 로그파일의 로테이션 (daily : 매일, weekly : 매주, size : 특정크기)
log.file.keep_count = 7		# 로테이션 된 로그파일의 최대 수량

# 클러스터 이름을 설정합니다.
cluster.name = rabbit@node1 

# TCP 리스너의 기본 포트를 지정합니다.
listeners.tcp.default = 5672

management.listener.port = 15672 # 관리 인터페이스 접근 HTTP API 포트 지정	
management.listener.ssl = false	 # 관리 인터페이스 SSL 사용여부

위의 설정을 반드시 따를 필요는 없고 용도에 맞게 설정하면 됩니다.


2. Dockerfile 작성예시

# 관리형 이미지를 설정합니다. 여기서는 RabbitMQ 이미지를 선택했습니다.
FROM rabbitmq:4-management

# rabbitmq.conf에서 구성한 RabbitMQ 설정 파일을 복사합니다.
COPY ./conf/rabbitmq.conf /etc/rabbitmq

# RabbitMQ 플러그인을 활성화합니다.
RUN rabbitmq-plugins enable --offline rabbitmq_management
# or 플러그인 추가 가능
# RUN rabbitmq-plugins enable --offline rabbitmq_mqtt rabbitmq_federation_management rabbitmq_stomp

# RabbitMQ 관리자 계정, 비밀번호를 지정합니다.
ENV RABBITMQ_DEFAULT_USER dev
ENV RABBITMQ_DEFAULT_PASS dev1234

# 컨테이너가 시작될 때 실행될 명령을 설정합니다.
CMD ["rabbitmq-server"]

3. Docker image 빌드

docker build -t rabbitmq-test .

명령어를 실행하면 rabbitmq-test이름의 Docker 이미지가 생성되는 것을 확인할 수 있습니다.


4. Docker 컨테이너 생성 및 실행

docker run -d --name rabbitmq-dev-test -p 5672:5672 -p 15672:15672 rabbitmq-test

명령어를 실행하면 다음과 같이 컨테이너가 생성되는 것을 확인할 수 있습니다.


4. RabbitMQ 접속 해보기

컨테이너가 올라갔으면 RabbitMQ 관리 페이지에 접속이 가능해집니다.

만약 본인 Local PC가 아니라 AWS EC2로 접근했으면 해당사항을 주의해야 합니다.

  • EC2 보안그룹에서 15672 포트를 인바운드 규칙추가
  • 접속할 때에는 해당 서버주소 뒤에 포트 붙여서 접속하기
localhostAWS EC2
localhost:15672<EC2 서버 포트>:15672

주의사항을 지켰다면 RabbitMQ 관리 페이지에 접속합니다.

이렇게 위와 같은 페이지가 로딩되었고 Dockerfile에 작성한 내용도 같으면 dev/dev1234 계정으로 로그인합니다.

접속하면 다음과 같은 페이지를 확인할 수 있겠습니다.


😎 작성후기

지난 글에서도 이야기했지만 처음 배운 기술이다 보니 익숙하지 않습니다. 하지만 이렇게 실제로 페이지를 구동시켜 보니 점점 익숙해지는 것 같은 기분이 듭니다, 다음 게시글에는 RabbitMQ 관리 페이지에서 메시지를 보내보는 실습을 진행해 보겠습니다.


📋 참고 사이트

https://adjh54.tistory.com/496#1.%20Dockerfile%20%EC%88%98%ED%96%89%EA%B3%BC%EC%A0%95-1-2

https://psychoria.tistory.com/541

https://printf-hellojudyworld.tistory.com/28

profile
가끔은 정신줄 놓고 멍 때리는 것도 필요하다.

0개의 댓글