Flutter / Node 로 Window 메신저 개발기 - 몽고디비 도커 빌드하기 (2)

몽고디비 설치 - Window

아래 다운로드 센터에서 간편하게 다운로드 할 수 있다.

https://www.mongodb.com/try/download/community

 

Try MongoDB Community Edition

Try MongoDB Community Edition on premise non-relational database including the Community Server and Community Kubernetes Operator for your next big project!

www.mongodb.com

 

몽고디비 설치 - Ubuntu(Docker)

몽고디비 서버를 도커로 올리는 작업은 아래 홈페이지를 참고하면 명령어로 빌드할 수 있다.

https://www.mongodb.com/ko-kr/docs/manual/tutorial/install-mongodb-community-with-docker/

 

Docker를 사용하여 MongoDB Community 설치 - MongoDB 매뉴얼 v7.0

공식 MongoDB 커뮤니티 이미지를 사용하여 MongoDB 커뮤니티 에디션을 Docker container로 실행할 수 있습니다. MongoDB 배포서버를 실행하기 위한 Docker 이미지는 다음과 같은 경우에 유용합니다.신속한 배

www.mongodb.com

 

하지만 도커로 올렸다 내렸다.. 수정도 명령어로 하기 번거로우니 compose 파일을 작성하여 관리하는 것이 더 편하다.

 

.env

## Mongodb
MONGO_PORT=27017                        # 몽고디비 서버 실행 포트
MONGO_INITDB_DATABASE=msgdb             # 처음 생성할 데이터베이스 이름
MONGO_INITDB_ROOT_USERNAME=user         # 처음 생성할 유저 이름
MONGO_INITDB_ROOT_PASSWORD=mongopw      # 처음 생성할 유저 비번

 

docker-compose.yml

version: "3.8"
services:
  mongodb:
    image: mongo
    container_name: mongodb
    ports:
      # mongodb 기본포트
      - 27017:27017
    env_file: .env
    volumes:
      - mongodb_volumes:/data/db
    extra_hosts:
      - "host.docker.internal:host-gateway"

volumes:
  mongodb_volumes:
    external: true

 

기본적으로 사용할 compose 파일이고 개발서버를 운용할 예정이라면 몇 가지 세팅이 더 필요하다.

 

mongodb backup 설정

https://www.mongodb.com/ko-kr/docs/database-tools/mongodump/

 

mongodump - MongoDB Database Tools

--sslAllowInvalidCertificates 옵션은 사용할 수 있는 경우에도 가급적 사용하지 않는 것이 좋습니다. --sslAllowInvalidCertificates를 사용해야만 하는 경우, 침입이 불가능한 시스템에서만 옵션을 사용하세요

www.mongodb.com

 

몽고디비 백업은 아래 명령어로 동작한다.

mongodump --archive=backup_20240904.gz --gzip --host mongodb --port 27017 -u user -p mongopw
mongodump 옵션설명
--archive=backup_20240904.gz  파일명
--gzip 압축여부
--host 호스트
--port  포트
-u 유저아이디
-p 유저 비밀번호

 

참고로 복구는 아래 명령어로 동작한다.

mongorestore --archive=backup_20240904.gz --gzip --host mongodb --port 27017 -u user -p mongopw

 

backup.sh

서버관리할 때 백업을 매일 같이 하고싶을 때는 crontab 을 이용한다.

#!/bin/bash

# 실행 명령어 : bash 'backup.sh'
EXIST_MONGO_CONTAINER=$(docker ps | grep mongodb)
if [ -n "$EXIST_MONGO_CONTAINER" ]; then
  # 백업 파일명
  filename=backup_$nowdate.gz
  # 백업 압축파일 생성 실행 > 루트에 생성
  docker exec mongodb mongodump --archive=$filename --gzip --host mongodb --port 27017 -u user -p mongopw
  # 백업 폴더로 이동 후 루트에서 파일 삭제
  docker exec mongodb mkdir /backup
  docker exec mongodb cp $filename /backup
  docker exec mongodb rm -rf $filename
  exit 0
else
  # 실패 로그 작성
  echo "[ FAIL ] backup fail : $nowdate" >> /mongo/mongo_backup_fail.log
  exit 1
fi

 

* 경로 지정 옵션이 존재( --out 파일경로 ). 하지만 파일이름 지정하는 --archive 와 함께 쓸 수 없는 것 같으니 참고!

  ( 다른 방법 아시는 분은 댓글 부탁드리겠습니다...! )

 Failed: bad option: --out not allowed when --archive is specified 

* 백업 파일 보관 기간을 지정해주고 싶을 때는 if 문 안에 아래 내용을 추가

 docker exec msg-mongodb find /data/backup -name '*.gz' -mtime +14 -delete 

 

crontab

크론탭 설치 > 크론탭 문서에 아래 내용을 입력 > 크론탭 실행 혹은 재실행 하면 자동으로 매일 0시에 백업을 진행한다.

# 매일 0시 백업 실행
0 0 * * * /mongodb/backup.sh

 

백업파일 볼륨화

매일 백업을 해둔다고 해도 컨테이너 내부에 백업하고 있기 때문에 컨테이너가 삭제되면 백업도 사라진다.

꼭 볼륨화를 해서 관리해야한다.

version: "3.8"
services:
  mongodb:
    image: mongo
    container_name: mongodb
    ports:
      # mongodb 기본포트
      - 27017:27017
    env_file: .env
    volumes:
      - mongodb_volumes:/data/db # DB 데이터 볼륨화
      - mongodb_backup_volumes:/data/backup # DB 백업 데이터 볼륨화
      
    extra_hosts:
      - "host.docker.internal:host-gateway"

volumes:
  mongodb_volumes:
    external: true
  mongodb_backup_volumes:
  	external: true

 

여기까지 했다면 몽고디비 빌드 기본 설정은 끝이다!!

이제  docker-compose up -d --build  로 올리고  docker ps  를 하면 몽고디비 서버가 올라가 있을 것이다. 🎉 🎉

반응형