배포용 도커 파일 만들기

Posted on 2021-08-25 by GKSRUDTN99
Django로 웹사이트 만들기 장고

실제로 웹 사이트를 공개할 때 오류가 발생할 시 어디서 오류가 발생했는지 알려준다면, 서버의 취약점 등이 공개될 수 있기 때문에,
개발용 환경과 실제 배포 환경설정을 달리 하는 것이 좋다.


docker-compose 파일을 개발용과 배포용으로 분리하기

기존에 사용하던 docker-compose 파일을 docker-compose.dev.yml로 복사한다.

이제 기존 docker-compose 파일은 배포용 docker-compose 파일로 사용한다.

docker-compose를 할 때 docker-compose 파일을 지정하고 싶다면 -f 옵션을 사용한다.

예시 : docker-compose -f docker-compose.dev.yml up --build -d


배포용 docker-compose.yml 파일 수정하기

web 컨테이너의 환경 파일을 .env.prod로 변경

db 컨테이너의 환경 변수들을 삭제하고, 환경 파일(.env.prod.db)로 옮긴다.

# docker-compose.yml
version: '3'

services:
  web:
    build: .
    command: gunicorn do_it_django_prj.wsgi:application --bind 0.0.0.0:8000
    volumes:
      - ./:/usr/src/app/
    ports:
      - 8000:8000
    env_file:
      - ./.env.prod
    depends_on:
      - db
  db:
    image: postgres:12.0-alpine
    volumes:
      - postgres_data:/var/lib/postgresql/data/
    env_file:
      - ./.env.prod.db

volumes:
  postgres_data:

.env.dev 파일을 복사해여 .env.prod 파일을 만들고 다음처럼 수정한다.

# .env.prod
DEBUG=0
SECRET_KEY=h8a_a=srrln&d0+9fltlv5vl93^k%q6*n*-ol$ip10@uod(66c
DJANGO_ALLOWED_HOSTS=localhost 127.0.0.1 [::1]
SQL_ENGINE=django.db.backends.postgresql
SQL_DATABASE=do_it_django_prod
SQL_USER=do_it_django_db_user_prod
SQL_PASSWORD=do_it_django_db_password_prod
SQL_HOST=db
SQL_PORT=5432

DEBUG = 0

문제가 발생했을 때 브라우저에서 자세한 오류 메시지를 더 이상 나타내지 않습니다.

SECRET_KEY

새로운 시크릿 키를 만들어 대입해줍니다.
shell에서
from django.core.management.utils import get_random_secret_key로 임포트 한 뒤.
get_random_secret_key()함수를 호출하여 생성한다.

SQL_USER, SQL_PASSWORD

이 두 부분은 내가 사용하고 싶은 id와 pw로 설정하면 된다.

.env.prod.db 파일을 새로 만들고 docker-compose.yml에서 삭제한 내용을 붙여넣는다.

# .env.prod.db
POSTGRES_USER = do_it_django_db_user_prod
POSTGRES_PASSWORD = do_it_django_db_password_prod
POSTGRES_DB = do_it_django_prod

PASSWORD와 USER에는 위에서 사용한 것과 같은 것을 사용한다.

.gitignore에 .env.prod와 .env.prod.db를 추가한다.

# .gitignore

# Environments
.env
.venv
env/
venv/
ENV/
env.bak/
venv.bak/
.env.prod
.env.prod.db

도커 실행

docker-compose down -v 로 기존 컨테이너와 연결되어 있던 볼륨들도 함께 삭제하며 컨테이너들을 중지시킨다.

docker-compose up --build -d로 실행한다.

기존의 볼륨을 삭제하였으므로, migrate, createsuperuser를 다시 수행한다.