[0721] Docker - Postgres 연동

nikevapormax·2022년 7월 21일
0

TIL

목록 보기
80/116
post-thumbnail
post-custom-banner

PostgreSQL

Django 세팅 변경

  • PostgreSQL을 사용하기 위해 settings.py에서 db 세팅을 변경해주자.
    • 원해 세팅되어 있던 sqlite3은 주석처리 하였다.
    • "django.db.backends.sqlite3"은 없어도 상관없다. 이 부분은 default 값이며 만약에 대비해 세팅되어 있는 것이다.
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'),
    }
}
  • 또한 .env 파일에 아래와 같은 코드를 추가해 주었다.
    • turtle_drf_backend는 나의 프로젝트 이름이다.
SECRET_KEY = '나의 프로젝트 시크릿 키'

SQL_ENGINE='django.db.backends.postgresql'
SQL_DATABASE='turtle_drf_backend_db'
SQL_USER='turtle_drf_backend_nikevapormax'
SQL_PASSWORD='turtle_drf_backend_password'
SQL_HOST='db'
SQL_PORT='5432'

docker-compose.yaml 파일 수정

  • 어제 띄웠던 docker-compose에 대한 파일에 내용을 추가하도록 하겠다.
version: "3.8"

services:
  web:
    # 현재 폴더에 있는 것들을 사용해 빌드하겠다.
    build: .
    command: python manage.py runserver 0.0.0.0:8000
    ports:
      - 8000:8000
    working_dir: /usr/src/app/
    volumes:
      - ./:/usr/src/app/
    env_file:
      - ./.env
    depends_on:
      - db
  db:
    image: postgres:14.4-alpine
    volumes:
      - postgres_db:/var/lib/postgresql/data # named-volume
    environment:
      # .env 파일에 있는 부분과 동일한 내용이다. django와 postgres는 이 부분을 통해 통신한다. 
      - POSTGRES_DB=turtle_drf_backend_db
      - POSTGRES_USER=turtle_drf_backend_nikevapormax
      - POSTGRES_PASSWORD=turtle_drf_backend_password
    ports:
      - "5432:5432"

# named-volume을 사용하기 때문에 아래에서 선언해주어야 함
volumes:
  postgres_db:

docker-compose 진행

  • docker-compose build를 진행한다.
  • 이렇게 만들고 나서 docker-compose up을 하면 에러가 난다.
  • 에러의 이유였던 psycopg2를 설치해보자.
pip install psycopg2
  • 하지만 에러가 발생했다.
  • 이유는 이기 때문이다. 원래는 postgreSQL을 설치하고 빌드를 진행해야 에러가 나지 않는다. 하지만 우리는 docker를 사용할 것이기 때문에 아래와 같은 방식으로 우회할 수 있다.
    • psycopg2==2.9.3를 추가해준다.
asgiref==3.5.2
Django==4.0.6
django-cors-headers==3.13.0
django-dotenv==1.4.2
djangorestframework==3.13.1
djangorestframework-simplejwt==5.2.0
Faker==13.15.0
Pillow==9.2.0
psycopg2==2.9.3
PyJWT==2.4.0
python-dateutil==2.8.2
pytz==2022.1
six==1.16.0
sqlparse==0.4.2
  • 하지만 나는 되지 않았다. 그래서 homebrew를 통해 postgreSQL을 깔아보았다. 하지만 위와 똑같이 아래의 에러 메세지가 나오게 되었다.
  • 그래서 Dockerfile에 아래 부분을 추가해주었다.
    • RUN apk add build-base python3-dev py-pip jpeg-dev zlib-devlibpq-dev를 추가했다.
# 현재 내가 사용하고 있는 python 버전을 작성해도 됨
# 만약 docker extension이 vscode에 깔려 있다면 자동완성으로 이름을 확인할 수 있음
FROM python:3.9.10-alpine
# python이 실행되기 전에 compile을 거치면서 .pyc 파일을 생성하는데, docker에서는 불필요해 그것을 방지해줌
ENV PYTHONDONTWRITEBYTECODE=1
# 버퍼링을 제거해주기 위해 사용
ENV PYTHONUNBUFFERED=1

RUN apk update
# pillow를 통해 이미지를 사용하고 있어 jpeg 같은 것들을 적어줌
RUN apk add build-base python3-dev py-pip jpeg-dev zlib-dev libpq-dev
# /usr/src/app/에 requirements.txt를 복사해준다.
COPY requirements.txt /usr/src/app/

WORKDIR /usr/src/app
RUN pip install -r requirements.txt

# 현재 폴더에 있는 것들을 다 복사해 /usr/src/app/에 넣어준다. 
COPY . /usr/src/app/
  • 그리고 다시 빌드를 진행하고, up을 했더니 해결되었다.

admin 페이지 확인

  • admin 페이지에 들어가보면 잘 들어가지는 것을 볼 수 있다.
    • 간혹 migration이 되지 않은 경우 아래와 같은 에러가 날 수 있다.
    • 해당 에러를 고치기 위해 migration을 진행해보자.
    • docker desktop으로 가 아래의 터미널을 켜준다.
    • 아래와 같이 바로 migrate를 진행해주면 된다.
    • 그리고 다시 admin 페이지로 가 로그인을 시도하면 데이터가 없기 때문에 되지 않는 것을 볼 수 있다.
    • 그러므로 다시 (docker desktop에서 킨) 터미널 창으로 돌아가 슈퍼유저를 생성하도록 하겠다.
    • 다시 admin 페이지로 돌아가 로그인을 하고 게시글을 작성해보도록 하자.
      • 글 작성이 되어 게시글 수정 페이지로 들어온 화면이다.
    • 지금 내가 작성한 글은 아래 그림에 있는 postgres db에 저장되게 된다.
    • 또한 우리는 docker-compose.yaml에서 named-volume을 사용한다고 작성했다. 따라서 named-volume에도 해당 데이터가 존재하게 된다.
    • 데이터가 실제로 잘 남아있는지 확인하기 위해 서버 실행을 중지하자.
    • 그리고 방금 전 생성한 container도 삭제해보자.
    • container를 날려도 named-volume은 남아있게 되고, admin 페이지에서 작성한 글이 그대로 남아있는 것을 볼 수 있다.
      • 중간에 구분이 잘 되도록 하기 위해 article 모델에 __str__을 추가해 제목을 볼 수 있도록 했다. 변경된 내용이 자동으로 잘 반영되는 것 또한 볼 수 있었다.

pgAdmin

  • pgAdmin 다운로드
  • 나의 운영체제인 애플을 선택해 다운도르를 진행하였다.
  • 나는 최신버전이 좋다.
  • 빨간 박스를 클릭한다.
  • 드래그 앤 드롭으로 설치해준다.
  • 설치가 끝나면 pgAdmin을 켜고, Add New Server를 눌러준다.
  • 이름을 넣어주고 connection으로 넘어간다.
  • 아래 값들을 나의 정보에 맞게 세팅하고 save 해준다.
    • 반드시 container를 켜줘야 한다.
  • 그러면 아래의 화면이 나오게 된다.
  • 아래의 순서로 데이터베이스를 확인하러 갈 수 있다.
  • 데이터베이스에 아까 admin 페이지에서 작성한 게시글을 확인할 수 있다.
profile
https://github.com/nikevapormax
post-custom-banner

0개의 댓글