본문 바로가기

Linux

Mongodb initialize script

다음과 같이 인증서 자동화 배포 및 ssl/tls mongodb 재실행 및 init하는 방식에서 자동화 시키기 위해 다음과 같이 bash shell을 만들었다.

 

mongo -u root -p ab352aga --tls --tlsCAFile /certs/ca.pem --tlsCertificateKeyFile /certs/mongodb.pem --tlsAllowInvalidHostnames <<EOF
rs.initiate({"_id" : ${MONGO_REPLICASET}, "members" : [{"_id" : 0,"host" : ${MASTER_SERVER}:${MASTER_SERVER_PORT}},{"_id" : 1,"host" : ${NODE_SERVER_1}:${NODE_SERVER_PORT_1}},{"_id" : 2,"host" : ${NODE_SERVER_2}:${NODE_SERVER_PORT_2}}]});
conf = rs.config();
conf.members[0].priority = 2;
rs.reconfig(conf);
use dev_neuralworks;
db.createUser({user:${MONGO_USER_ID}, pwd:${MONGO_USER_PASSWORD},roles:[{ role: "readWrite", db: ${MONGO_DATABASE} }]});
EOF

 

하지만 다음과 같이 에러가 발생했다.

 

 

해결책:

환경변수로 사용할 경우 ""를 써서 변수를 저장해야한다는 것이다.

위에서는 $MONGO_DATABASE에는 dev_neuralworks가 저장되어있는데 사실상 "dev_neuralworks"라는 string이 저장되어 있어야 한다는 것이다.

 

또한 위 script와 같이 작성할 때 줄바뀜 \이나 엔터등을 넣고 unexpected token등의 에러가 뜰 때가 있는데 bash의 짜증나는 문법때문일 경우가 많다.

그렇다면 위 script를 이렇게 javascript를 만들고, javascript를 실행시키는 걸로 해도된다.

 

#init_mongo.js
rs.initiate({"_id" : `${MONGO_REPLICASET}`,"members" : [{"_id" : 0,"host" : `${MASTER_SERVER}`},{"_id" : 1,"host" : `${NODE_SERVER_1}`},{"_id" : 2,"host" : `${NODE_SERVER_2}`}]});
conf = rs.config();
conf.members[0].priority = 2;
rs.reconfig(conf);
use dev_neuralworks;
db.createUser({user:`${MONGO_USER_ID}`, pwd:`${MONGO_USER_PASSWORD}`,roles:[{ role: "readWrite", db: `${MONGO_DATABASE}` }]});

 

INITIALIZE=./scrypts/initialize.js
mongosh -u $MONGO_INITDB_ROOT_USERNAME -p $MONGO_INITDB_ROOT_PASSWORD --tls --tlsCAFile $CAFILE --tlsCertificateKeyFile $PRIVFILE --tlsAllowInvalidHostnames < $INITIALIZE

 

'Linux' 카테고리의 다른 글

top을 통해 본 exe는 도대체 뭐지?  (0) 2022.03.16
symbolic link is red and relative path?  (0) 2021.11.29
알아두면 좋을 리눅스 명령어  (0) 2021.11.18
(에러)the input device is not a TTY  (0) 2021.11.15
Bash shell scripts 문법  (0) 2021.11.09