PROJECTS

RDS PostgreSQL 배포 과정

nicesugi 2022. 9. 2. 19:56

 

엔진 PostgreSQL 사용 이유 :

Django 에서 공식적으로 지원하는 databases이기에 사용함

1. Django

  • psycopg2 설치
    • 이유 : Python이 Postgres와 함께 작동하기 위해 모듈 설치
    • OS에 pg_config 설치가 선행되어야 함
    • pip requirements.txt에만 추가해주어 우분투에서 설치해도 무관
  • settings.py DATABASES 설정 -> env로 설정
DATABASES = {
    'default': {
        'ENGINE': os.environ.get('SQL_ENGINE',"django.db.backends.sqlite3"),
        'NAME': os.environ.get('SQL_DATABASE', BASE_DIR / "db.sqlite3"),
        'USER': os.environ.get('SQL_USER', 'user'),
        'PASSWORD': os.environ.get('SQL_PASSWORD', 'password'),
        'HOST': os.environ.get('SQL_HOST', 'localhost'),
        'PORT': os.environ.get('SQL_PORT', '5432'),
    }
}
  • SECRET_KEY 발급 (명령어)
python -c 'from django.core.management.utils import get_random_secret_key; print(get_random_secret_key())'
  • .env.prod 생성
POSTGRES_DB='RDS인스턴스 생성시 초기 데이터베이스 이름'
POSTGRES_USER='RDS인스턴스 생성시 마스터 사용자 이름'
POSTGRES_PASSWORD='RDS인스턴스 생성시 마스터 사용자 암호'
  • .env.postgres.prod 생성
DEBUG='0'

SECRET_KEY = '새로만든 SECRET_KEY'

DJANGO_ALLOWED_HOSTS='127.0.0.1 IP주소 URL주소'

SQL_ENGINE='django.db.backends.postgresql_psycopg2'

SQL_DATABASE='RDS인스턴스 생성시 초기 데이터베이스 이름'

SQL_USER='RDS인스턴스 생성시 마스터 사용자 이름'

SQL_PASSWORD='RDS인스턴스 생성시 마스터 사용자 암호'

SQL_HOST='RDS 인스턴스의 엔드포인트'

SQL_PORT='5432'
  • .env.prod와 .env.postgres.prod의 내용이 일치해야하는 부분이 있음
    • DB 이름 / USER / PW
  • docker-compose.yml 에 .env.prod 적용
    • 이것만 봐서는 모를테니 프로젝트 내 yml 파일을 참고바람
    • web에 적용을 시켜줘야함. nginx에 넣는 거 아님
env_file:
	- ./.env.prod

여기까지 Django에서 적용!

모두 git 에 push 해놓기


2. AWS

  • RDS 인스턴스 생성 ( 여기 없는 내용은 디폴트값 적용)표준 선택템플릿 : 프리티어 사용마스터 사용자 이름 = DB 인스턴스 마스터 사용자 = .env.prod 의 POSTGRES_USERDon’t connect to an EC2 computer resource 선택VPC : 더보기 클릭 -> EC2 인스턴스 요약에 있는 VPC ID 선택VPC 보안 그룹 : 기존 항목 선택 : 기존 VPC 보안 그룹 더보기 클릭 -> EC2 인스턴스 보안그룹 선택 (default 해제하여 보안그룹 하나만 선택해줌)데이터베이스 포트 : 5432  확인생성 버튼 클릭하여 생성!이 내용을 위의 .env.postgres.prod에 넣어주기
  • 끝!
  • 상태가 사용가능으로 바뀌면 인스턴스에서 엔드포인트와 포트 확인 가능해짐
  • 초기 데이터베이스 이름  = .env.prod 의 POSTGRES_DB
  • 추가구성
  • 퍼블릭 액세스 : 예
  • 이유 : 밑의 VPC와 가용범위를 설정하여 연결
  • 마스터 암호 = .env.prod 의 POSTGRES_PASSWORD
  • DB 인스턴스 식별자 = 인스턴스에 표시될 이름
  • 엔진 선택 : PostgreSQL / 버전 가장 최신
  • 데이터 베이스 생성 ->
  • EC2 인스턴스 연결 ( Ubuntu 연결 )git checkout 브랜치sudo apt-get update -> psycopg2 받았기 때문에 update해줘야함sudo docker images -> 이미지 확인 -> 다 삭제하기 (sudo docker image prune)sudo docker ps -> web 혹은 django 컨테이너 이름 확인하기python manage.py makemigrationspython manage.py collectstaticexit만약 되질 않고 Error 발생시 !sudo docker-compose build -> 이미지 생성오류 해결 후 다시 한번 컨테이너와 이미지를 모두 삭제한 상태에서
  • sudo docker-compose up -d —build -> 이미지 만들고 컨테이너 만들고 올리기 와 이후의 과정을 해보시면 될 듯 합니다.
  • sudo docker-comopse up -> 로그 확인하면 어디서 오류가 나는지 확인이 가능합니다.
  • sudo docker-compose down -> 컨테이너 내리기
  • 브라우저 IP주소 입력하여 접속해보면 admin페이지를 들어갈 수 있습니다.
  • python manage.py createsuperuser
  • python manage.py migrate
  • sudo docker exec -ti 컨테이너이름 /bin/sh -> 입력하는 창이 바뀔텐데 터미널 들어간 상태임
  • sudo docker-compose up -d —build
  • sudo docker ps -> 컨테이너 확인 -> 다 삭제하기 (sudo docker container prune)
  • git pull 하여 최신 상태 유지
  • cd 프로젝트 이름
반응형

'PROJECTS' 카테고리의 다른 글

https 적용  (0) 2022.09.06
도메인 연결  (0) 2022.09.05
AWS EC2 배포과정  (0) 2022.09.02
서비스 레이어  (0) 2022.09.01
Team Project | 🌲 KPT | iPark 최종발표  (0) 2022.08.17