django 와 postgreSQL 을 연동하여 사용 할 시에 이점
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 |