aws 에서 Ubuntu 20.04 (Focal) mongodb

column clash·2021년 12월 19일
0

몽고 DB 를 AWS 에 설치해서 쓰는 방법.

lightsail 관련 정보

https://saewan.net/aws-lightsail-%ec%9a%b0%eb%b6%84%ed%88%ac-ubuntu-20-04-lts-%ec%9d%b8%ec%8a%a4%ed%84%b4%ec%8a%a4-%ec%83%9d%ec%84%b1/

putty

https://saewan.net/putty-%eb%8b%a4%ec%9a%b4%eb%a1%9c%eb%93%9c-ssh-%ec%a0%91%ec%86%8d-%ed%99%98%ea%b2%bd-%ec%84%b8%ed%8c%85-%eb%b0%a9%eb%b2%95/

  1. 패키지 관리 시스템에서 사용되는 공개 키 가져오기

터미널에서 다음과 같이 MongoDB 공개 GPG 키를 가져오는 명령어 입력
'OK' 응답이 나오면 정상적으로 키를 가져온 것

wget -qO - https://www.mongodb.org/static/pgp/server-4.4.asc | sudo apt-key add -

만약, 'gnupg' 가 설치되지 않았다는 오류가 발생한다면, 다음 명령어를 입력하여 'gnupg' 를 설치합니다. 그리고 다시 키를 가져오는 명령어를 입력합니다.

sudo apt install gnupg

  1. MongoDB를 위한 list 파일 생성하기
    MongoDB를 설치하려는 Ubuntu 서버에 '/etc/apt/sources.list.d/mongodb-org-4.4.list' list 파일을 생성합니다.

Ubuntu 버전 별로 다르므로 다음 명령어를 통해 Ubuntu 버전을 확인하고 명령어를 입력해야 합니다.

2.1. Ubuntu 20.04 (Focal)

echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu focal/mongodb-org/4.4 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-4.4.list

2.2. Ubuntu 18.04 (Bionic)

echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu bionic/mongodb-org/4.4 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-4.4.list

2.3. Ubuntu 16.04 (Xenial)

echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu xenial/mongodb-org/4.4 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-4.4.list

  1. 로컬 패키지 데이터베이스를 업데이트하기
    방금 MongoDB를 위한 list 파일을 로컬 패키지 데이터베이스에 추가했으므로, 로컬 패키지 데이터베이스를 다음과 같이 명령어를 입력하여 업데이트
sudo apt update

  1. MongoDB 패키지 설치하기
    이제 MongoDB를 설치할 준비가 되었습니다. MongoDB를 설치하는 데 두 가지 방법이 있는데, 최신 안정화 버전을 설치하는 것과 특정 릴리즈 버전을 설치하는 것이 있습니다.

4.1. 최신 안정화 버전 설치하기

sudo apt install -y mongodb-org

4.2. 특정 릴리즈 버전 설치하기
만약 4.4.1 릴리즈 버전을 설치하고 싶다면, 다음 명령어에 4.4.2에 해당하는 자리에 4.4.1을 입력하면 됩니다.

sudo apt install -y mongodb-org=4.4.2 mongodb-org-server=4.4.2 mongodb-org-shell=4.4.2 mongodb-org-mongos=4.4.2 mongodb-org-tools=4.4.2

만약 의도치 않은 업그레이드를 막고 싶다면 각각의 패키지를 별도로 설치할 수 있습니다.

echo "mongodb-org hold" | sudo dpkg --set-selections
echo "mongodb-org-server hold" | sudo dpkg --set-selections
echo "mongodb-org-shell hold" | sudo dpkg --set-selections
echo "mongodb-org-mongos hold" | sudo dpkg --set-selections
echo "mongodb-org-tools hold" | sudo dpkg --set-selections

  1. MongoDB 실행하기
    'mongod' 프로세스를 관리하고 실행하기 위해 Ubuntu의 built-in init system을 사용해야 합니다. 최근 Linux 버전에서 'systemctl' 또는 'service' 명령어를 사용하는 경향이 있는데 이를 위해 다음 명령어를 입력하여 확인합니다.
ps --no-headers -o comm 1

'systemd' 이라고 응답할 경우 5.1 systemd (systemctl) 를 따라가세요.
'init' 이라고 응답할 경우 5.2 System V Init (service) 를 따라가세요.


5.1. systemd (systemctl) 명령어로 실행하기
다음 명령어를 입력하여 MongoDB를 실행합니다.

sudo systemctl start mongod

만약 다음과 같이 오류가 뜬다면 다음 명령어를 입력하고, 다시 위 명령어를 입력하여 MongoDB를 실행합니다.

Failed to start mongod.service: Unit mongod.service not found.
sudo systemctl daemon-reload

MongoDB가 정상적으로 실행되었는지를 확인하기 위해 다음 명령어를 입력합니다.

sudo systemctl status mongod

서버가 재시작하면 MongoDB를 자동으로 실행하도록 다음과 같이 명령어를 입력합니다.

sudo systemctl enable mongod

MongoDB를 중지하는 명령어는 다음과 같습니다.

sudo systemctl stop mongod

MongoDB를 재시작하는 명령어는 다음과 같습니다.

sudo systemctl restart mongod

5.2. System V Init (service) 명령어로 실행하기
다음 명령어를 입력하여 MongoDB를 실행합니다.

sudo service mongod start

MongoDB가 정상적으로 실행되었는지를 확인하기 위해 다음 명령어를 입력합니다.

sudo service mongod status

MongoDB를 중지하는 명령어는 다음과 같습니다.

sudo service mongod stop

MongoDB를 재시작하는 명령어는 다음과 같습니다.

sudo service mongod restart

만약 위 명령어들과 관련하여 오류 및 로그 기록을 확인하고 싶다면 /var/log/mongodb/mongod.log 파일을 참조하세요.


  1. MongoDB 제거하기
    이 절차를 진행하면 MongoDB, 설정, 모든 DB가 완전히 삭제되어 복구가 불가능하니 신중하게 진행해야 합니다.

다음 명령어를 입력하여 MongoDB를 중단합니다.

sudo systemctl stop mongod
sudo service mongod stop

다음 명령어를 입력하여 MongoDB 패키지를 제거합니다.

sudo apt-get purge mongodb-org*

다음 명령어를 입력하여 데이터 디렉토리를 제거합니다.

sudo rm -r /var/log/mongodb
sudo rm -r /var/lib/mongodb

  1. MongoDB 파일 살펴보기
Data Directory: /var/lib/mongodb
Log Directory: /var/log/mongodb

(패키지 매니저를 통해 설치했을 경우)

Configuration File: /etc/mongod.conf

MongoDB 설치에 관해 더 자세히 알고 싶다면?
https://docs.mongodb.com/manual/tutorial/install-mongodb-on-ubuntu/#import-the-public-key-used-by-the-package-management-system


외부접속 설정법

  1. mongodb 실행

  2. mongodb root 계정 생성

show databases;
admin 0.000GB
config 0.000GB
local 0.000GB

use admin;
switched to db admin

db;
admin

다음으로, createUser 명령어를 사용하여 root 계정을 생성합니다.

db.createUser({user: "아이디", pwd: "비밀번호", roles:["root"]});
exit;
user키의 value에 root 아이디, pwd키의 value에 비밀번호를 입력하고 엔터를 치면 root 권한 계정이 생성됩니다.

roles는 계정이 갖는 역할/권한(읽기, 쓰기 등)을 의미하며, roles의 종류는 공식 문서에서 확인할 수 있습니다.


  1. mongodb config 변경

외부 접속을 위한 ip bind, 인증된 사용자만 사용할 수 있도록 security 설정을 변경하기 위해 mongodb config 파일을 수정해야합니다.

ubuntu의 경우 /etc/mongod.conf 혹은 /etc/mongodb.conf에 위치하고 있습니다.

설치 방법에 따라 mongodb service가 참조하고 있는 config 파일이 다를 수 있으니 유의하시기 바랍니다.

편집기를 사용하여 mongod.conf 파일을 엽니다.


리눅스 기본 명령어

pwd 현재 포지션
ls (도스의 mdir 과 같다. 아무것도 안나타있다면, 비어있는 것)
cd / (도스의 cd 와 같다. 루트로 가자.)
cd /var
cd var
cd ..
ls -F (파일인지 디렉토리인지)
ls -l (더 많은 정보를 볼 수 있음)
cd ../home/eunsuk
mkdir myfolder (디렉토리 만들기)
vi hello.txt (윈도우의 메모장) vi editor

vi 간단 명령어.
i 라고 하면, 입력모드 됨.
esc 를 누르면 입력모드에서 나감.
:wq 를 하면 저장과 동시에 에디터 나감.
그냥 나갈때는 :q

파일 카피 : cd hello.txt hello2.text

파일 이동 : mv hello2.text ../

파일 삭제 : rm hello2.text

디렉토리 삭제 : rm -r myfolrder/

웹에서 다운로드 : wget 인터넷url

/ 모든 명령어에서 Permission denied 가 나오면 일단 sudo 로 실행해볼것 /

설치 :
예제 - nodejs 를 설치해보자~

apt (js로 따지면 npm 같은 것)
apt-config -v (버전확인)
apt update

구글에서
ubuntu install nodejs => 공식문서 =>

curl -fsSL https://deb.nodesource.com/setup_16.x | sudo -E bash -
sudo apt-get install -y nodejs

copy + paste

node -v (정상확인)
npm -v (정상확인)

리눅스에는 기본으로 git 이 설치되어있음.
git --version

git clone https://gitlab.com/familyman801205/home_builder.git


sudo vi /etc/mongod.conf

여러가지 항목 중에 network interfaces와 security 항목을 아래와 같이 수정합니다.

mongod.conf

...

net:
port: 27017
bindIp: 0.0.0.0

...

security:
authorization: 'enabled'

...

수정을 완료했다면 저장 후 mongod service를 재실행합니다.

sudo service mongod restart

  1. root 계정으로 접속

다시 mongo shell에 접속해서 명령을 입력하면 아까는 볼 수 없었던 에러 메세지가 출력됩니다.

mongo
show databases;
2019-02-04T08:00:30.164+0000 E QUERY [js] Error: listDatabases failed:{
"ok" : 0,
"errmsg" : "command listDatabases requires authentication",
"code" : 13,
"codeName" : "Unauthorized"
} :
_getErrorWithCode@src/mongo/shell/utils.js:25:13
Mongo.prototype.getDBs@src/mongo/shell/mongo.js:124:1
shellHelper.show@src/mongo/shell/utils.js:876:19
shellHelper@src/mongo/shell/utils.js:766:15
@(shellhelp2):1:1

exit;
인증되지 않은 사용자는 명령을 수행할 수 없음을 확인할 수 있습니다.

이제부터는 mongo shell을 이용할 때 계정 정보를 함께 입력 해야합니다.

-u와 -p 옵션을 사용하여 1번에서 생성한 root 계정으로 접속합니다.

mongo -u 아이디 -p 비밀번호
show databases;
admin 0.000GB
config 0.000GB
local 0.000GB

  1. database, user 생성

이제 서비스에 사용할 database를 설정하고, 해당 database에 읽기 쓰기 권한을 갖는 user를 생성하겠습니다.

우선 임의로 명명한 chatbot_service라는 database를 생성 합니다.

use chatbot_service;
db;
chatbot_service

다음은 createUser명령으로 해당 database에 user를 생성합니다.

db.createUser({user: "developer", pwd:"developer", roles:["readWrite"]});
Successfully added user: { "user" : "developer", "roles" : [ "readWrite" ] }
developer / developer라는 임의의 계정을 readWrite 권한으로 생성했습니다.

  1. ec2 인바운드 정책 수정

외부에서 ec2 인스턴스의 특정 포트에 접속하려면 인바운드 정책을 수정 해줘야 합니다.

aws 콘솔 페이지 -> 보안그룹 -> 인바운드에서 27017번 포트를 추가 해줍니다.

  1. 외부 접속

이제 제 로컬 pc에서 developer 계정으로 chatbot_service database에 접속 해보겠습니다.(로컬 pc에도 mongo shell이 설치 되어있어야 합니다.)

mongo -u developer -p developer public_ip:27017/chatbot_service
db;
chatbot_service

자신의 ec2 public ip 혹은 public dns를 통해 접속할 수 있습니다.

슬래쉬(/) 뒤에는 원하는 db명을 적어줍니다.

문제없이 설정이 완료되었다면 아래 이미지처럼 정상 동작하는 모습을 볼 수 있습니다.

  1. Robo Mongo(Robo 3T) 툴을 사용한 외부 접속(선택)

putty 로 접속하기

https://extrememanual.net/27663


터미널 종료 후, 계속 런닝

sudo nohup mongod --port 27017 --dbpath "/var/lib/mongodb" --replSet "rs0" --bind_ip "0.0.0.0" &

아래처럼
sudo mongod --fork
처럼 해도 안되더라.

sudo service mongod stop

mkdir /data

cd /data

mkdir /db

sudo mongod --fork --logpath /var/log/mongodb.log

정상적 종료.

  1. mongo

  2. use admin

  3. db.shutdownServer();

    sudo nohup mongod --port 27017 --dbpath "/var/lib/mongodb" --replSet "rs0" --bind_ip "0.0.0.0" &

MongoDB loads but breaks, returning status=14 에러
sudo rm -rf /tmp/mongodb-27017.sock
sudo systemctl start mongod

profile
풀스택 개발 중...

0개의 댓글