MongoDB Community Edition 3.6 on Ubuntu
2018-06-22 내용 정리, User auth 링크
{:.right-history}
이 문서는 Ubuntu/Debian 계열 정규 배포본에 3.x 버전을 지원하지 않는 플랫폼에 MongoDB Community Edition 3.6 버전을 설치하는 과정을 정리하고 있다. 내용의 기초는 MongoDB Community Edition 3.6 버전을 Amd64, Arm64 지원하는 64bit OS에 설치해 사용하기 위해서 Install MongoDB Community Edition, on-ubuntu를 따라서 진행하고 경험상 필요한 부분을 추가로 정리했다.
- MongoDB Community Edition 3.6 설치
- Mongo Database 구성
Install MongoDB 3.6 Community edition
문서에 따르면 리눅스 계열은 Ubuntu, Red Hat, SUSE, Amazon, Debian 과 tarball 설치를 지원한다. 또한 macOS, Windows 플랫폼 설치도 지원한다고 한다.
테스트한 플랫폼은
- 64bit Ubuntu 16.04:
- Hardkernel Odroid C2: 64bit, Armbian
MongoDB는 다음 패키지를 지원하고 있다:
mongodb-org
: 다음 패키지를 설치하기 위한 메타 패키지mongodb-org-server
:mongod
daemon 과 구성 및 초기 스크립트.mongodb-org-mongos
:mongos
daemon.mongodb-org-shell
:mongo
shell.mongodb-org-tools
: MongoDB 유틸리티: mongoimport bsondump, mongodump, mongoexport, mongofiles, mongoperf, mongorestore, mongostat, and mongotop.
사전준비
여기서는 Odroid C2 같은 64bit Arm을 지원하는 Armbian 배포본, 그리고 PC Linux/n-Cloud 등의 플랫폼에서 Ubuntu Xeniel 버전에 설치를 했다.
- Armbian 배포본 Debian Jessie/Stretch 에는 아직 mongodb 64bit 를 제공하지 않고 있다.
레포지토리 등록
인증된 .dpkg
, .apt
패키지를 설치하기 위해, 아래 처럼 서버의 키를 등록한다.
여러분 시스템이 적용되는 지는 [^1]에 잘 설명되어 있다.
키서버 등록
1 | $ sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 2930ADAE8CAF5059EE73BB4B58712A2291FA4AD5 |
MongoDB용 소스 리스트 추가
apt의 source list에 mongodb repository를 등록한다. 우분투 계열은 파일 생셩 /etc/apt/sources.list.d/mongodb-org-3.6.list
파일 생성하고 아래 같이 해당 리눅스 버전에 맞는 소스 목록을 추가한다.
Ubuntu 16.04
1 | echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu xenial/mongodb-org/3.6 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.6.list |
Ubuntu 14.04
1 | $ echo "deb [ arch=amd64 ] https://repo.mongodb.org/apt/ubuntu trusty/mongodb-org/3.6 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.6.list |
remove key & ppa
설치 후 필요 없어서 키 서버 저장소 목록을 지우려면, 삭제할 키 해시 8자리 코드를 확인한다.
1 | $ sudo apt-key list |
이 키를 삭제한다.
1 | $ sudo apt-key del A15703C6 |
설치
그리고 apt
명령으로 소스 캐시를 갱신하고 mongodb-org 커뮤니티 버전의 mongodb를 설치한다.
1 | $ sudo apt update |
mongodb 3.x 버전은 데이터 저장 파일 시스템으로 xfs 를 권장하고 있다.
만약 특정 버전을 설치하려면 다음 같이 버전을 명시한다.
1 | $ sudo apt-get install -y mongodb-org=3.6.5 mongodb-org-server=3.6.5 mongodb-org-shell=3.6.5 mongodb-org-mongos=3.6.5 mongodb-org-tools=3.6.5 |
이전 mongod-org 3.4를 Armbian 에서 설치중 systemd unit 설정 파일과 MongoDB 시스템 계정 등이 생성되지 않는 경우가 있었다. 아래를 따라 손으로 생성해 주면 된다.
mongodb 사용자
mongod-org 설치후 시스템 사용자 mongodb 가 추가되야 한다. 만약 생성되지 않았으면, 새로 만든다.
1 | $ sudo adduser --disabled-password --gecos "" --no-create-home --disabled-password --disabled-login mongodb |
systemd service entry
만약 mongodb-org 설치후 systemctl
스크립트가 /etc/init.d
에 복사되지 않는 경우
여기서는 odroid-c2 armbian 설치 상태, 일반 리눅스 배포본은 잘 된다.
systemd 서비스 파일이 /lib/systemd/system/mongod.service에 위치한다. 아래 명령을 실행해 mongodb.service 가 없으면 새로 생성해야 한다.
1 | $ sudo systemctl list-unit-files --type=service |grep mongodb |
만약 mongodb.service 가 없다면, /lib/systemd/system/mongod.service
파일을 다음 같이 활성화 시켜준다.
1 | $ cd /lib/systemd/system |
mongodb.service 가 등록됐는지 확인한다.
1 | $ sudo systemctl list-unit-files --type=service |grep mongodb |
disable 상태면 systemctl
명령으로 enable 시킨다.
1 | $ sudo systemctl enable mongodb.service |
### Run
MongoDB Community Edition이 설치되면 요구되는 파일 및 폴더가 다음 위치에 생성됟다.
- /var/lib/mongodb : 기본 데이터 파일 위치
- /var/log/mongodb : 기본 로그 저장 폴더
- /etc/mongod.conf : mongod 구성 파일. 로그, 데이터 위치 등을 변경 가능
mongod
데몬은 mongodb user account 계정으로 실행된다. systemctl
명령으로 mongod
를 시작한다.
1 | $ sudo systemctl start mongod |
실행한 mongod
를 확인해 보면
1 | $ ps -ef |grep mongod |
mongod
서비스가 제대로 실행됐으면 mongo 클라이언트로 테스트해 볼 수 있으면 접속해 볼 수 있다.
Mongo Database 설정
- mongodb 사용자와 디렉토리 퍼미션 확인
- mongod.conf 설정
- mongo client 접속 테스트
- mongodb 인증
퍼미션 확인
로그 디렉토리 /var/log/mongo 그리고 데이터 디렉토리 /data/mongodata 라면 해당 디렉토리에 몽고디비 사용자가 쓸 수 있는 퍼미션을 준다.
1 | $ sudo chown mongo.daemon /var/log/mongodb |
mongod.conf 설정
MongoDB의 systemd
서비스는 데이터베이스 구성 파일 /etc/mongod.conf
을 참조한다.
먼저 /etc/mongod.conf
파일에 인증을 제외한 데이터 디렉토리, bindIp, 로그 부분만 설정한다.
1 | storage: |
- dbPath : 데이터베이스 스토리지 위치
- bindIp: 서버 외에서 mongo 클라이언트가 접근하려면 IP 를 입력한다.
현재는 mongo.conf
설정 파일에 접근 제어가 없는 상태에서 mongo 클라이언트로 접속한다
Admin 사용자
mongod
에 인증이 비활성화 상태에서 mongo` 클라이언트로 접속에 성공하면 > 프롬프트가 나온다. admin 데이터베이스로 전환한다.
1 | $mongo |
admin 데이터베이스에서 관리자 role을 가진 사용자를 추가하고, 사용할 데이터베이스의 사용자와 접근 제어를 추가해서 사용하기 위해서 작업한다.
user administrator
userAdmin role
혹은 userAdminAnyDatabase role
을 가진 사용자 만든다. 다음은 admin 데이터베이스에서 사용자를 관리하는 admin 계정을 생성하고 있다.
1 | >db.createUser( |
admin 사용자 패스워드 변경
은
1 | > db.changeUserPassword("accountUser", "SOh3TbYhx8ypJPxmt1oOfL") |
사용자의 role
을 변경,
1 | > db.grantRolesToUser( 'admin', [{role: 'userAdmin', db:'admin'}]) |
혹은 updateUser 를 사용할 수 있다:
1 | db.updateUser( "appClient01", ... |
security.authorization
mongodb.conf 파일에 security.authorization
을 활성화 한다
1 | security: |
인증모드는 v2.4이전에는
--auth
옵션을 사용하고, v2.6 이후에서 mongod.conf 파일 사용할 때security.authorization
를 활성화 한다.
systemd 로 서비스를 재시작 한다.
1 | $ sudo systemctl restart mongod.service |
이제 인증 모드에서 데이터베이스에 접속해야 한다. 만약 인증모드로 시작한 후에 다음 같이 인증 정보없이 로그인 하면 데이터베이스 사용시 에러를 만난다.
1 | $ mongo |
인증모드로 접속
데이터베이스 시스템에 접근제어가 활성화 되면 mongo
클라이언트 접속시 -u <username>, -p <password>
와 --authenticationDatabase <database>
를 지정해 주어야 한다.
1 | $ mongo --port 27017 -u "admin" -p "****" --authenticationDatabase "admin" |
만약 데이터베이스 인증모드로 실행되는데 비인증 클라이언트 접근은 아래 같이 에러를 낸다:
1 | MongoDB shell version v3.6.5 |
원격지에서 접근
외부에서 mongodb로 접근시 authentication을 적용한 상태라면 다음과 같은 URL로 접근할 수 있다:
“username:password@HOST_NAME/mydb”
그러나 외부접근시 클라이언트 버전과 서버의 Credential 버전이 맞지 않은 경우 다음 같이 실패 메시지를 확인할 수 있다.
2016-05-16T00:53:10.338+0900 I ACCESS [conn2] Failed to authenticate student@student with mechanism MONGODB-CR: AuthenticationFailed: MONGODB-CR credentials missing in the user document
2016-05-16T00:53:10.352+0900 I NETWORK [conn2] end connection 220.121.140.59:51634 (0 connections now open)
### 데이터베이스 생성과 인증
새 데이터베이스에 컬렉션을 생성하고 데이터베이스 사용자를 접근제어할 수 있는 내용은 MongoDB User Authentication 에서 다루고 있다.
## MongoDB에 관련 글
MongoDB Community Edition Installations 시리즈:ㅇ
MongoDB Tutorials 시리즈:
MongoDB와 Middleware Platform:
이전 버전과 기타 자료:
- MongoDB User Authentication
- MongoDB Community Edition 3.6 on Ubuntu(ARM64)
- Mongodb 3.4 install on Armv8
- Raspberry Pi 3 64bit OS openSUSE: Build MongoDB 3.4
### `mongod` 명령 사용
systemd
가 아닌, mongod
명령으로 로 MongoDB를 시작해 설정 파일 등이 제대로 동작하는지 확인할 수 있다.
다만 데이터베이스가 생성하는 데이터와 로그 파일의 접근권한이 실행한 사용자 계정으로 처리되어 퍼미션 문제가 발생할 수 있다.
mongoDB v2.4 인증모드로 시작
mongod
명령라인으로 시작할 수 있다.
1 | $ sudo mongod --port 27017 --dbpath /data/mongodata |
mongoDB v2.4는 다음 같이 인증 모드로 시작한다. mongod
명령라인에서 --auth
옵션을 붙여 DB 인스턴스(mongod
)를 시작 혹은 재시작한다.
1 | $ mongod --auth --port 27017 --dbpath /data/db1 |
혹은 mongod.conf 설정 파일에서 auth 를 활성화 한다.
1 | auth = true |
mongoDB v2.6 이후
앞서 시작한 명령행 mongodb를 종료하고 명령라인에서 재시작 --auth
옵션을 붙여 시작한다.
1 | $ mongod --auth --port 27017 --dbpath /data/mongodata |
접근제어 --auth
옵션으로 데이터베이스를 시작하면 로그인시 -u <username>, -p <password>
와 --authenticationDatabase <database>
를 지정해 주어야 한다.
1 | $ mongo --port 27017 -u "admin" -p "****" --authenticationDatabase "admin" |
참조
MongoDB Community Edition 3.6 on Ubuntu
https://blog.thinkbee.kr/2018-06-08-mongodb-3.6-install-be31d0447d18/