mongodb 설치, db, collection, user 만들기
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