AWS에 Docker로 배포한 Django 프로젝트의 PostgreSQL DB 백업하기

김의석 ·2024년 4월 4일

Hello! Poko Ver.1

목록 보기
12/20

3월 31일 hello! Poko 정식 오픈 후 데이터베이스 백업의 필요성을 느껴 그 과정을 정리 함.

Docker 컨테이너 내에서 DB 백업을 위해 스크립트 작성하기

스크립트 작성

# 백업을 저장할 디렉토리 경로
BACKUP_DIR=./backup/
  • 컨테이너 내에서 DB 백업을 위해 실행 할 스크립트 파일을 작성한다.
    • 컨테이너 내에 backup이란 디렉토리를 만들어 앞으로 업데이트 될 데이터베이스의 백업을 관리하기로 했다.
mkdir -p $BACKUP_DIR

# 현재 날짜를 백업 파일 이름으로 사용
BACKUP_FILE="$BACKUP_DIR/db_backup_$(date +'%Y%m%d').sql.gz"
  • mkdir -p $BACKUP_DIR의 -p
    • "parents"의 약자로, 지정한 디렉토리와 그 부모 디렉토리를 모두 생성하는 옵션이다.
    • 실제로 존재하지 않는 경우에도 지정한 디렉토리를 생성한다.
# Docker 컨테이너에서 PostgreSQL 백업 실행
sudo docker exec hello_poko_db_1 pg_dump -U poko_db_user_prod -d poko_db_prod | gzip > $BACKUP_FILE
  • hello_poko_db_1 : 내가 사용하고 있는 db 컨테이너의 이름 sudo docker ps 명령어로 확인 가능하다.

  • pg_dump : postgresql의 백업을 생성하는 명령어.

  • -U poko_db_user_prod : 데이터베이스에 접속할 사용자 이름을 지정.

  • -d poko_db_prod : 백업할 데이터 베이스 이름을 지정

  • | gzip > $BACKUP_FILE : '|'는 파이프라인을 의미하며, 앞의 명령어의 출력을 다음 명령어의 입력으로 전달

스크립트 실행

chmod +x backup.sh # 실행 권한 부여
./backup.sh # 현재 경로의 backup.sh 실행
  • chmod +x
    • 명령어를 사용하여 스크립트 파일에 실행 권한을 부여하면, 해당 스크립트 파일을 실행 가능한 파일로 만들 수 있다.
    • 실행 권한이 부여된 스크립트 파일은 터미널에서 ./backup.sh와 같이 직접 실행할 수 있다.
    • 실행 권한이 부여되지 않은 스크립트 파일은 실행되지 않으므로, 무단으로 스크립트가 실행되는 것을 방지할 수 있다.

백업 완료

  • BACKUP_DIR=./backup/에 지정한 위치에 백업 파일이 생성됨을 확인 할 수 있다.

백업 파일을 로컬로 복사

  • aws light sail 인스턴스에서 ssh 키를 발급 받아 로컬의 적당한 경로에 저장한다.

    • 한번만 발급 가능하니 신중하게 보관 및 관리 할 것
    • 절대 유출되면 안된다.
  • 발급 받은 key와 데이터베이스 백업파일을 저장할 경로를 로컬 내에 생성한다.

  • 로컬 터미널에서 다음 명령어 실행

scp -i [local ssh key path]ubuntu@[aws instance ip]:~/github/Hello_Poko/backup/db_backup_20240404.sql.gz [local database backup sava pate]
  • ~/github/Hello_Poko/backup/db_backup_20240404.sql.gz
    : 컨테이너 내에 데이터베이스 백업 파일의 위치
    • '~'는 홈 디렉토리를 의미
chmod 400 [local ssh key path]
  • 위 명령어 실행 전 해당 명령어를 통해 SSH 키 파일은 다른 사용자에게 접근할 수 없도록 보안 설정이 필요
    chmod: 파일의 권한을 변경하는 명령어입니다.

  • 400: 권한 설정 값으로, 각 숫자는 다음을 의미합니다:

    • 4: 소유자에게 읽기 권한 부여
    • 0: 그룹에 대한 권한 없음
    • 0: 다른 사용자에 대한 권한 없음

로컬 복사 완료

추후 시도할 것

profile
널리 이롭게

0개의 댓글