Open Sources

mongodb 설치, db, collection, user 만들기

Happy@Cloud 2020. 2. 3. 19:28

 

1. mongodb 설치

helm chart로 설치하는 방법을 가이드합니다.  
helm 설치는 helm설치하기를 참조하세요. 
1) 준비

- 작업디렉토리 생성
$ mkdir ~/install/mongodb 
$ cd ~/install/mongodb

- helm chart registry추가
$ helm repo add bitnami https://charts.bitnami.com/bitnami
$ helm repo ls
$ helm repo update

- helm values.yaml 다운로드
$ helm inspect values bitnami/mongodb > mongo.yaml

2) mongo.yaml을 아래를 참조하여 수정
아래는 stand alone으로 설치할때의 예입니다. master-slave로 설치하려면 mongo.yaml내용을 꼼꼼이 읽어 보면서 수정하십시오. 

image:
  registry: docker.io
  repository: bitnami/mongodb
  tag: 4.4.4-debian-10-r41
  pullPolicy: IfNotPresent

architecture: standalone

useStatefulSet: true

## MongoDB(R) Authentication parameters
auth:
  enabled: true
  rootPassword: "happy@cloud"
  username: admin
  password: happy@cloud
  database: sample

##
persistence:
  enabled: true
  storageClass: "nfs-standard"
  accessModes:
    - ReadWriteOnce
  size: 8Gi

service:
  type: NodePort
  port: 27017
  portName: mongodb

 
3) 설치 테스트 및 설치

$ helm install mongo -f mongodb.yaml bitnami/mongodb --dry-run

네임스페이스 확인 후 필요 시 변경 
$ kubens -c 

$ helm install mongo -f mongodb.yaml bitnami/mongodb

 

2. db, collection, user만들기

mongo db 생성 후에 수동으로 db, collection. user만드는 방법 입니다. 

user는 database 'admin'에 만들고 접근할 database와 role을 부여하는 것이 좋습니다. 

 
1) 로그인
# kubectl exec -it <pod명> sh
- root 로 로그인
중요) mongodb v6 이후로 CLI가 mongosh로 변경되었습니다. 뒤에 명령과 파라미터는 동일합니다. 

$ mongosh admin -u root -p <password>

2) database 생성

> show dbs;

위 결과에 원하는 db가 없는 경우 db생성

> use <database명>

예) use product

참고) Database삭제 : db.dropDatabase()

3) collection 생성

아래와 같이 collection생성 후 아무 값이나 입력해야 합니다. 

>  db.createCollection("<collection명: 아무거나 넣으면 됨>");

예) db.createCollection("product")


중요) mongodb v6 이후로 insertOne, insertMany로 변경되었습니다. 
> db.<collection명>.insertOne( { "id":"1" });
> show dbs;
이제 생성한 db명이 나타날 것입니다. 

참고) collection삭제: db.<collection명>.drop()

 

4) User 생성

User는 database 'admin'에 생성합니다. 

> use admin

user를 생성하고, 생성한 db에 대한 권한을 부여

db.createUser( { user: "user명", pwd: "암호", roles: [{ role: 'readWrite', db: 'DB명'}]} )

ex) db.createUser( { user: "admin", pwd: "passw0rd", roles: [{ role: 'readWrite', db: 'product'}]} )

> show users

참고) User삭제: db.dropUser("유저명")

 

5) 생성한 User에게 db 접근 권한 부여 

아래와 같이 updateUser를 이용할 수 있습니다. 

> use admin

> db.updateUser("admin", { roles: [{ role: 'readWrite', db: 'product'}, {role: 'userAdmin', db: 'product' }]} )

또는, grantRolesToUser명령을 이용할 수도 있습니다.

// 권한 추가
db.grantRolesToUser("USER", ["NEW_ROLE1", "NEW_ROLE2"])

예) db.grantRolesToUser( "admin", [ { role: "userAdmin", db: "product" } ] )

 

// 권한 제거
db.revokeRolesFromUser("USER", ["DEL_ROLE1", "DEL_ROLE2"])

 

참고) mongodb 유저 관리와 Role 관리 

https://estherlog.tistory.com/2

 

7) 테스트

아래 예와 같이 생성된 db, user로 'admin' 데이터베이스 인증을 통해 접근합니다. 

$ mongosh product -u admin -p P@ssw0rd$ --authenticationDatabase admin

 

참고) SpringBoot에서 application.properties 설정

아래 예와 같이 지정합니다. 

spring.data.mongodb.host=${DB_SERVER:165.192.105.59}
spring.data.mongodb.port=${DB_PORT:32500}
spring.data.mongodb.username=${DB_USERNAME:admin}
spring.data.mongodb.password=${DB_PASSWORD:P@ssw0rd$}
spring.data.mongodb.database=product
spring.data.mongodb.authentication-database=admin

또는, uri 파라미터로 한 줄로 정의할 수도 있습니다. 

spring.data.mongodb.uri=mongodb://${DB_USERNAME:admin}:${DB_PASSWORD:P%40ssw0rd$}@${DB_SERVER:165.192.105.59}:${DB_PORT:32500}/product?authSource=admin