스프링 STOMP에서 사용할 메시지 브로커로 RabbitMQ를 사용하기로 했다. 그래서 오라클 클라우드를 사용해 보는 김에 해당 인스턴스에 RabbitMQ를 설치해 보았다.
설치 과정
과정은 크게 어려울 건 없고 공식문서만 잘 따라 하면 무난하게 진행할 수 있다.
https://www.rabbitmq.com/docs/install-debian#apt-quick-start-cloudsmith
Installing on Debian and Ubuntu | RabbitMQ
<!--
www.rabbitmq.com

#!/bin/sh
sudo apt-get install curl gnupg apt-transport-https -y
## Team RabbitMQ's main signing key
curl -1sLf "https://keys.openpgp.org/vks/v1/by-fingerprint/0A9AF2115F4687BD29803A206B73A36E6026DFCA" | sudo gpg --dearmor | sudo tee /usr/share/keyrings/com.rabbitmq.team.gpg > /dev/null
## Community mirror of Cloudsmith: modern Erlang repository
curl -1sLf https://github.com/rabbitmq/signing-keys/releases/download/3.0/cloudsmith.rabbitmq-erlang.E495BB49CC4BBE5B.key | sudo gpg --dearmor | sudo tee /usr/share/keyrings/rabbitmq.E495BB49CC4BBE5B.gpg > /dev/null
## Community mirror of Cloudsmith: RabbitMQ repository
curl -1sLf https://github.com/rabbitmq/signing-keys/releases/download/3.0/cloudsmith.rabbitmq-server.9F4587F226208342.key | sudo gpg --dearmor | sudo tee /usr/share/keyrings/rabbitmq.9F4587F226208342.gpg > /dev/null
## Add apt repositories maintained by Team RabbitMQ
sudo tee /etc/apt/sources.list.d/rabbitmq.list <<EOF
## Provides modern Erlang/OTP releases
##
deb [arch=amd64 signed-by=/usr/share/keyrings/rabbitmq.E495BB49CC4BBE5B.gpg] https://ppa1.rabbitmq.com/rabbitmq/rabbitmq-erlang/deb/ubuntu jammy main
deb-src [signed-by=/usr/share/keyrings/rabbitmq.E495BB49CC4BBE5B.gpg] https://ppa1.rabbitmq.com/rabbitmq/rabbitmq-erlang/deb/ubuntu jammy main
# another mirror for redundancy
deb [arch=amd64 signed-by=/usr/share/keyrings/rabbitmq.E495BB49CC4BBE5B.gpg] https://ppa2.rabbitmq.com/rabbitmq/rabbitmq-erlang/deb/ubuntu jammy main
deb-src [signed-by=/usr/share/keyrings/rabbitmq.E495BB49CC4BBE5B.gpg] https://ppa2.rabbitmq.com/rabbitmq/rabbitmq-erlang/deb/ubuntu jammy main
## Provides RabbitMQ
##
deb [arch=amd64 signed-by=/usr/share/keyrings/rabbitmq.9F4587F226208342.gpg] https://ppa1.rabbitmq.com/rabbitmq/rabbitmq-server/deb/ubuntu jammy main
deb-src [signed-by=/usr/share/keyrings/rabbitmq.9F4587F226208342.gpg] https://ppa1.rabbitmq.com/rabbitmq/rabbitmq-server/deb/ubuntu jammy main
# another mirror for redundancy
deb [arch=amd64 signed-by=/usr/share/keyrings/rabbitmq.9F4587F226208342.gpg] https://ppa2.rabbitmq.com/rabbitmq/rabbitmq-server/deb/ubuntu jammy main
deb-src [signed-by=/usr/share/keyrings/rabbitmq.9F4587F226208342.gpg] https://ppa2.rabbitmq.com/rabbitmq/rabbitmq-server/deb/ubuntu jammy main
EOF
## Update package indices
sudo apt-get update -y
## Install Erlang packages
sudo apt-get install -y erlang-base \
erlang-asn1 erlang-crypto erlang-eldap erlang-ftp erlang-inets \
erlang-mnesia erlang-os-mon erlang-parsetools erlang-public-key \
erlang-runtime-tools erlang-snmp erlang-ssl \
erlang-syntax-tools erlang-tftp erlang-tools erlang-xmerl
## Install rabbitmq-server and its dependencies
sudo apt-get install rabbitmq-server -y --fix-missing
sudo systemctl enable rabbitmq-server
위 명령어로 부팅 시 자동 시작되도록 한다.
클라우드 설정
설치 과정은 쉬우나 클라우드에서 설정해주어야 할 점이 몇 가지 있다.
- 인바운드 규칙에 내 개발 PC IP 허용
- 고정 IP 사용 (선택)
- 우분투 내 iptables에 RabbitMQ에서 사용할 포트 허용
인바운드 규칙은 그냥 VCN 설정에서 개발 PC에서 사용하는 IP에 대해 특정 포트만 허용해도 되고, 나는 딱히 문제 될 게 없어 보여서 그냥 모든 프로토콜 허용했다. 주의할 점은 안전하다고 생각되는 IP만 허용해야 한다는 점이다.
고정 IP는 인스턴스를 재기동하면 IP가 변경되니 계속 변경된 IP를 확인하고 싶지 않으면 사용하면 된다.
iptables는 기본적으로 허용할 조건이 없기 때문에 management 페이지에 외부에서 접속할 수 없다.
그래서 아래와 같은 명령어로 관리 페이지에서 사용하는 포트를 허용해 주었다.
사실 이 부분에서 많이 헤맸었는데 여러 시도를 해보니까 이게 문제였었다...
sudo iptables -I INPUT 5 -p tcp --dport 15672 -j ACCEPT
sudo iptables-save > /etc/iptables/rules.v4
나는 어차피 VCN 인바운드 규칙에서 들어오는 요청을 필터링하기 때문에 TCP 요청을 다 열어두었다.
만약 보안에 더 신경 써야 한다면 RabbitMQ에서 사용하는 포트가 몇 개 있기 때문에 이 포트들에 대해서 일일이 허용을 해주어야 정상 작동한다.
sudo iptables -I INPUT 5 -p tcp -j ACCEPT

rabbitmq-plugins enable rabbitmq_management
웹에서 관리를 편하게 하기 위해서 위 명령어로 플러그인을 활성화시킨다.

그런데 이 상태에서 기본 계정인 guest guest로는 로그인을 할 수 없다.
로컬 환경이 아니면 로그인할 수 없다고 뜨기 때문이다.
그러면 CLI 환경에서 유저를 하나 생성해 보자.
rabbitmqctl add_user <유저명> <비밀번호>
위 명령어로 유저를 만든다.
생성으로 끝나는 것이 아니라 역할을 부여해야 한다.
- administrator
- monitoring
- policymaker
- management
나는 내가 관리할 것이기 때문에 모든 권한을 가지는 administrator로 설정했다.
rabbitmqctl set_user_tags <유저명> administrator
이제 해당 아이디로 로그인하면 접속이 가능할 거다!!
'공부 > 기타' 카테고리의 다른 글
| [Ubuntu] NGINX로 포트포워딩 구성하기 (0) | 2024.10.05 |
|---|---|
| [Git] 서브모듈(Submodule)로 설정 파일 분리하기 (0) | 2024.10.03 |
| 프론트에서 쿠키를 사용 시 withCredentials 또는 credential 포함시켜야 하는 이유 (0) | 2024.06.15 |
| [Redis] Spring Data Redis 사용하기 (0) | 2024.05.21 |
| MapStruct는 Lombok보다 먼저 작성하자 (0) | 2024.04.29 |