[Django] - Elastic Beanstalk 배포 04 : static media 설정
이전시간에 이어서 static file/media file
을 설정을 해보자
STATIC/MEDIA 설정
Django
를 Elastick Beanstalk
에서 배포할 때 static
과 media
를 s3
를 사용하여 배포하는 법을 알아보자.
1. CollectStatic
이제 배포된 admin
사이트로 접속해보자 그럼 아래와 같이 css
파일이 적용되지 않은 화면을 보게 될거다…
django
에서 지원해주는 runserver
는 static
파일들을 알아서 찾아서 해주지만 실제 배포에서는 static
파일을 모아줘야한다. collectstatic
명령어를 실행하자
먼저 settings.py
를 수정하자
이렇게 설정하고 collectstatic
을 실행하자
python manage.py collectstatic
static
에 있는 파일들과 admin
용 파일들을 staticfiles
(static_root
)에 정리해준다.
그런데 문제가 있다!
media
파일도 이렇게 해서 설정이 끝났지만 elastic beanstalk
에서 django instance
를 매번 deploy
할 때마다 서버를 초기화 시키며 진행하기 때문에 media
파일은 매번 날라가게 된다… (static
파일은 매번 재 전송) 그렇기 때문에 우리는 S3
를 사용하기 위한 작업을 해야한다.
S3
에static
,media
를 올려주자
2. django_storages
먼저 django-storages
와 boto3
을 설치해주자
그리고 settings.py
에 다음과 같이 설정한다.
DEFAULT_FILE_STORAGE
:media
파일 경로이다. (cusotm_storages.py
에서 설정한다.)STATICFILES_STORAGE
:static
파일 경로이다. (custom_storages.py
에서 설정한다.)AWS_ACCESS_KEY_ID
:IAM
의ACCESS_KEY_ID
이다.AWS_SECRET_ACCESS_KEY
:IAM
의ACCESS_SECRET_KEY
이다.AWS_STORAGE_BUCKET_NAME
:S3
에 연결할BUCKET
의 이름이다.AWS_AWS_DEFAULT_ACL
:S3
의ACL
보안 설정이다.public-read
로 설정하면 모두 읽을 수 있다.AWS_AUTO_CREATE_BUCKET
:BUCKET
이 없으면 자동으로 생성한다.AWS_S3_REGION_NAME
:S3
의 지역을 설정한다.ap-northeast-2
가 서울이다.
config
폴더 안에 custom_storages.py
를 생성하고 다음과 같이 작성한다.
location
은 폴더 경로이다.file_overwrite
는 같은 이름파일 덮어씌울지 여부이다.static
파일은 수정사항만 반영하기에false
로 해주자.
3. django.config
그리고 .ebextensions
의 django.config
를 수정하자. collectstatic
command
를 추가해준다.
그리고 Elastic Beanstalk
의 환경변수에 IAM
에서 생성했던 ACCESS_KEY_ID
와 SECRET_KEY
를 입력해준다.
그리고 deploy
하면 정상적으로 파일이 로드되는 것을 볼 수 있다.
다음은 마지막으로 custom command
로 create superuser
를 추가해보자