몽고 DB 를 AWS 에 설치해서 쓰는 방법.
lightsail 관련 정보
putty
터미널에서 다음과 같이 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
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
sudo apt update
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
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 파일을 참조하세요.
다음 명령어를 입력하여 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
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
외부접속 설정법
mongodb 실행
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의 종류는 공식 문서에서 확인할 수 있습니다.
외부 접속을 위한 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 항목을 아래와 같이 수정합니다.
net:
port: 27017
bindIp: 0.0.0.0
security:
authorization: 'enabled'
수정을 완료했다면 저장 후 mongod service를 재실행합니다.
sudo service mongod restart
다시 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
이제 서비스에 사용할 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 권한으로 생성했습니다.
외부에서 ec2 인스턴스의 특정 포트에 접속하려면 인바운드 정책을 수정 해줘야 합니다.
aws 콘솔 페이지 -> 보안그룹 -> 인바운드에서 27017번 포트를 추가 해줍니다.
이제 제 로컬 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명을 적어줍니다.
문제없이 설정이 완료되었다면 아래 이미지처럼 정상 동작하는 모습을 볼 수 있습니다.
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
정상적 종료.
mongo
use admin
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