클라우드 Cloud/아마존웹서비스 AWS

Q. AWS EC2에 MongoDB 설치하고 외부 접속 가능하게 만드는 방법은?

Tap to restart 2022. 7. 10. 14:42

EC2에 MongoDB를 설치해보자.

NoSQL로 유명한 MongoDB 연습삼아 무료로 쓰고 싶다면 일단 t2.micro EC2에 설치해서 써볼 수 있다. 

 

사전 작업

아래 글을 보고 그대로 따라하자. 접속까지는 성공해야 한다.

Q. AWS EC2란? EC2 만들고 .pem 파일로 접속하는 방법은?

 

MongoDB 설치

잘 나온 튜토리얼이 있다. Install MongoDB Community Edition

 

일단 접속한 상태에서 아래 순서대로 실행하자.

Ubuntu20.04 기준으로 다른 버전의 경우에는 위 튜토리얼을 보고 참고하자.

$ wget -qO - https://www.mongodb.org/static/pgp/server-5.0.asc | sudo apt-key add -
$ echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu focal/mongodb-org/5.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-5.0.list
$ sudo apt-get update
$ sudo apt-get install -y mongodb-org

 

MongoDB 실행

설치가 끝났다면 MongoDB를 실행하자

$ sudo systemctl start mongod

 

작동하는지 확인하고 싶다면?

아래 명령어를 실행하자.

$ sudo systemctl status mongod

초록불이 들어와 있고 위처럼 나온다면 잘 작동하고 있는 것이다. Q를 누르면 다시 커서가 나타난다.

 

MongoDB 접속

MongoDB의 기본 포트는 27017이다. 공식 문서에 기본 포트 정보가 있다.

$ mongosh "mongodb://localhost:27017"

위 명령어를 실행하면 MongoDB에 접속할 수 있다. 

 

접속하면 아래와 비슷한 화면이 뜬다.

 

 

admin 계정 추가하기

참고할 Mongodb 공식 문서 Create the user administrator

test> 란 상태가 뜬다.

이때 use admin 명령어를 실행하자. admin>으로 바뀐다.

admin> 상태에서 아래 명령어를 복사 붙여넣기 하자. user명은 본인이 원하는대로 한다.

db.createUser(
  {
    user: "taptorestart",
    pwd: passwordPrompt(), 
    roles: [
      { role: "userAdminAnyDatabase", db: "admin" },
      { role: "readWriteAnyDatabase", db: "admin" }
    ]
  }
)

그리고 비밀번호를 입력하면 끝이다. 

 

 

그 뒤에 

db.adminCommand( { shutdown: 1 } )

를 실행한다.

 

이제 설정을 변경해야 한다. 

$ sudo vi /etc/mongod.conf

위 명령어를 실행한 뒤 아래 부분을 입력한다.

security:
  authorization: enabled

 

$ sudo systemctl stop mongod
$ sudo systemctl start mongod

로 다시 시작하자.

 

다시 아래 명령어로 접속을 시도하자.

$ mongosh "mongodb://localhost:27017"

접속 에러가 나는 것을 확인할 수 있다. 

 

이제는 아래 명령어로 입력해야 한다. taptorestart 대신 아까 입력한 user 명을 입력하면 된다.

$ mongosh --port 27017  --authenticationDatabase "admin" -u "taptorestart" -p

아래처럼 접속 성공한 모습을 확인할 수 있다!

 

 

외부 접속 가능하게 하는 방법은?

아래 내용은 Q. AWS EC2에 외부 접속 가능하게 하려면? 글을 먼저 읽은 뒤, 해야 한다.

 

EC2 서버에 접속해서 앞에서 확인한 포트를 열어 주자.

$ sudo ufw allow 27017

AWS EC2 inbound rules에도 27017을 추가하자. 이때 나만 접속할 거라면 My IP를 선택하면 된다. 

 

 

Mac에서 접속해보기

mongosh 설치가 필요하다. 관련 공식 문서 Install mongosh

$ brew install mongosh

명령어로 mongosh를 설치하자.

 

아래처럼 접속을 시도하자. --host 뒤에는 EC2 ip 주소를 입력하면 된다. 

$ mongosh --host 3.35.121.31 --port 27017 --authenticationDatabase "admin" -u "taptorestart" -p

 

"MongoNetworkError: connect ECONNREFUSED 3.35.121.31:27017" 이란 에러 메시지가 나고 접속 실패할 수 있다. 

원인은 mongodb 설정이다. 

 

mongodb 설정 변경

다시 ec2에 접속하자. 아래 명령어를 실행하자.

$ sudo vi /etc/mongod.conf

그리고 아래처럼 bindIp: 0.0.0.0 으로 변경한다. 그래야 외부 접속이 가능해진다.

# network interfaces
net:
  port: 27017
  bindIp: 0.0.0.0
#  bindIp: 127.0.0.1

몽고DB를 정지 시작을 다시 해준다.

$ sudo systemctl stop mongod
$ sudo systemctl start mongod

 

다시 내 컴퓨터 터미널에서 접속을 시도하자. 이번에는 아래처럼 접속에 성공했을 것이다!

 

 

또는 MongoDB Compass를 설치해서 접속할 수도 있다. 

 

Advanced Connection Options를 눌러서 Username/Password를 선택해서 앞에서 등록한 사용자명과 패스워드를 입력하고 포트를 localhost에서 ec2의 elastic IP 주소로 변경해서 Connect를 누르면 접속할 수 있다!

접속에 성공해서 Databases에 3개가 나타난 것을 볼 수 있다.