[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를 추가해보자
