AI 웹 개발 과정/Docker

django - docker - postgreSQL

만 기 2022. 8. 9. 15:24

 

django 와 postgreSQL 을 연동하여 사용 할 시에 이점

https://www.enterprisedb.com/postgres-tutorials/why-django-so-impressive-developing-postgresql-and-python

 

EDB: Power to Postgres | Get the most out of PostgreSQL with tools, products, services, and support for enterprises

EDB provides best in class database management software and wide-range services with 24x7 support to get more from Postgres. EDB offers secure, scalable, advanced and enterprise-class Postgres solutions.

www.enterprisedb.com

 

 

django 와 postgreSQL 을 연동하기

 

settings.py 에 DATABASES 변경

DATABASES = {
    'default': {
        'ENGINE': os.environ.get('SQL_ENGINE', "django.db.backends.sqlite3"),   #(key값,deault값)
        '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 환경변수

SECRET_KEY = "장고시크릿키"

SQL_ENGINE = "db엔진"

SQL_DATABASE = "db이름"

SQL_USER = "dbuser"

SQL_PASSWORD = "db비번"

SQL_HOST = 'db'

SQL_PORT = 'db port'

 

 

docker-compose.yaml 작성

# docker compose 버전
version: "3.8"  

services:
  # 웹서비스 (django)
  web:
    # . : 현재폴더에 Dockerfile 찾아서 빌드 하겠다.
    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
    # db 컨테이너 먼저 실행된 후 실행
    depends_on:
      - db
  db:
    image: postgres:14.4-alpine
    volumes:  # 네임드 볼륨
      - postgres_db:/var/lib/postgresql/data  # 로컬네임드볼륨:컨테이너경로
    environment:  # 환경 변수 설정
      - POSTGRES_DB=db이름   # .env에 DB설정 내용과 같게 해줘야한다.
      - POSTGRES_USER=dbuser
      - POSTGRES_PASSWORD=db비번
    ports:  # docker 내의 postgres를 보고싶을때
      - "5432:5432"

# 네임드 볼륨 선언
volumes:
  postgres_db:

 

 

Dockerfile 추가

FROM ...
...
RUN ... libpq-dev	#postgreSQL에 빌드하기위해 필요한 라이브러리
...

 

 

psycopg2 설치 (django 와 postgesql 연동에 필요하다.)

pip install psycopg2

참조: https://docs.djangoproject.com/en/4.0/ref/databases/#postgresql-notes

 

Databases | Django documentation | Django

Django The web framework for perfectionists with deadlines. Overview Download Documentation News Community Code Issues About ♥ Donate

docs.djangoproject.com

 

docker-compose build

docker-compose up 

실행확인

 

 

 

데이터 유지 확인하기

docker desktop 에서 실행중인 컨테이너 web과 db가 있는데 web 의 터미널을 실행한다.

ls 로 파일 확인 후

python manage.py migrate

python manage.py createsuperuser

 

계정 만들어서 localhost:8000/admin 진입 후 데이터 생성

 

docker-compose down 후에 재실행하고 admin 페이지에서 데이터 확인

 

 

 

pgAdmin

컨테이너 실행중인 db를 편하게 보기위한 방법 (터미널열어서 cli로 접속하는 방법도있음(pesql))

pgadmin 실행

Dashboard - Add New Server 

General - name : 

Connection

 - host name : localhost

 - port : .env 에 적었던 port

 - username : .env 에 적었던 user

 - password  : .env 에 적었던 pw

 

 

docker-compose.yaml 파일에 postgres 환경변수 설정하기

1) .env.postgres 파일 생성

2) docker-compose.yaml 의 environment 항목을 잘라서 .env.postgres 파일에 붙이기

POSTGRES_DB=db이름   
POSTGRES_USER=dbuser
POSTGRES_PASSWORD=db비번

3) .gitignore 파일에 .env.postgres 추가

 

4) docker-compose.yaml 파일의 environment 항목 제거하고 env_file: 항목 추가

    env_file:
      - ./.env.postgres

 

 

** 에러

user 와 password 노출 되었을때 .env 와 .env.postgres 에 정보를 변경 후에 docker-compose up 을 하면 authentication failed 에러가 발생한다.

이유는 volumes 에 db 정보가 유지되고 있기 때문이다.

따라서 컨테이너와 볼륨을 삭제하고 docker-compose up 을 진행한다.

 

 

'AI 웹 개발 과정 > Docker' 카테고리의 다른 글

docker - nginx/gunicorn  (0) 2022.08.10
docker 명령어  (0) 2022.08.08
django 프로젝트 docker 사용하여 ec2 배포까지  (0) 2022.07.29
Docker 실무 - 3주차  (0) 2022.07.11
Docker 실무 - 2주차  (0) 2022.07.10