본문 바로가기
프로젝트/Django - How Dimt?

Django poj.c E4) Django / nginx 도커 컨테이너 간 정적 파일 공유 - 프로젝트 마감 추가글 1번

by Fola 2022. 5. 31.

 

Code E - Server 4번 글, 5월 31일 (화)

 

자격증 시험 준비로 미뤄 두었던

프로젝트 34~35일 차 (5월 21일~22일) 프로젝트 진행 과정 기록

( 프로젝트 마감 추가글 1번 )

 

 

 

 

0. 컨테이너 간 정적 파일(static / media files) 공유 과정

niginx 웹 서버가 정적 파일 요청을 처리하기 위해서는 

Django 컨테이너의 정적 파일을 nginx 서버와 동기화하는 작업이 필요하다

 

 

 

 

 

1. Django 컨테이너 세팅

Django 컨테이너에서 정적 파일을 한 곳에 모은다

python manage.py collectstatic

 

정적 파일은 setting.py의 STATIC_ROOT에 명시된 경로로 모두 모이게 된다.

 

 

 

 

2. nginx 컨테이너 세팅

ngnix.conf 파일에 정적 파일을 읽어올 경로를 명시

## 생략

http {

    server {
    
    	## 생략
      
        location /static/ {
            alias /data/static/;
        }

        location /media/ {
            alias /data/media/;
        }
        
        ## 생략
        
        }
    }
}

 

 

클라이언트가 /static/base.css 파일을 요청할 경우

nginx 컨테이너 내부의 /data/static/ 아래(alias 경로)에서 파일을 찾아 클라이언트에게 전송함

 

 

 

 

3. 컨테이너 간 볼륨 공유를 위한 docker volume 생성

 

컨테이너 대부분의 볼륨은 nas 서버에서 쉽게 접근 가능하도록

-v 옵션에 경로를 주어 디렉터리를 컨테이너에 마운트 하는 방법을 사용하였다.

 

하지만 Django의 정적 파일과 미디어 파일은 굳이 매뉴얼 하게 접근할 필요가 없으므로

간편하게 도커 볼륨을 이용하여 연결하기로 하였다. 

 

미디어 파일을 공유할 도커 볼륨과 정적 파일을 공유할 도커 볼륨을 생성한다. 

docker volume create --name howdimt_media
docker volume create --name howdimt_static

 

 

 

 

4. Django와 nginx 컨테이너 간 도커 볼륨 동기화

 

컨테이너의 도커 볼륨은 컨테이너 생성 시에만 설정할 수 있다.

현재 Dockfile을 이용한 이미지 생성 과정의 문제를 해결하지 못하고 있기 때문에

기존에 사용하고 있던 컨테이너를 docker commit을 통해 이미지로 만들고

도커 볼륨 변수를 주어 컨테이너를 다시 생성하는 방법을 사용하였다.

 

Django와 nginx 컨테이너에 다음과 같은 옵션을 추가로 기입하여 컨테이너를 재 생성한다.

# Django container
-v howdimt_media:/home/cocktail_how_did_i_make_this/media \
-v howdimt_static:/home/cocktail_how_did_i_make_this/staticfiles \

# nginx container
-v howdimt_media:/data/media \
-v howdimt_static:/data/static \

이후 양 컨테이너의 설정된 디렉터리는 완전히 동기화된다.

 

Django 애플리케이션이 업로드된 이미지 파일을 Django 컨테이너의 media 디렉터리에 저장 함과 동시에

nginx는 컨테이너 내부의 /data/media 경로로 저장된 이미지 파일에 접근할 수 있다.

 

 

 

5. 결과

웹서버로 들어오는 정적 파일 요청은 Django 컨테이너까지 가지 않고 nginx 서버가 직접 클라이언트에게 돌려준다.

 

 

댓글