shoppingmall (2) S3 미디어 서버 설정하기
데이터베이스 서버를 중앙화하는 이유 : 여러 웹 서버 인스턴스들간에 데이터를 공유해야 하기 때문 => 공유해야 하는 파일들이 있기 때문에 별도의 파일 서버를 사용
- 미디어 파일 공유해 사용할 수 있도록 아마존 s3 이용했었음
- 미디어 파일 뿐만 아니라 정적 파일들도 함께 공유해 사용할 수 있도록 s3 설정하기
(1) S3설정
-
S3는 데이터베이스나 웹 서버처럼 인스턴스 단위로 사용하지 않고 버킷 단위로 사용
-
만든 버킷을 장고에서 사용하기 위해서는 IAM에서 사용자 추가와 권한 설정이 필요
-
AWS 위쪽 메뉴에 있는 서비스를 클릭 - IAM 서비스 이동 - IAM서비스의 사용자 클릭 - 사용자 추가 - 액세스 유형은 프로그래밍 방식 액세스 체크 - 그룹 생성 & 아래처럼 그룹이름 설정하고 필터 고르기
- 생성된 그룹을 선택하고 - 검토 화면에서 특별한게 없으면 사용자 만들기 버튼을 클릭해 생성 마침
- 액세스 키 다운로드
(2) 정적 파일 관련 설정
- 장고 프로젝트에서 s3를 파일 저장소로 활용할 수 있게 두 개의 모듈을 설치
boto3는 S3를 사용하기 위한 모듈
pip install boto3
django-storages 는 다양한 저장소를 사용하기 위한 모듈
pip install django-storages
=> 이렇게 두개 모듈을 설치하면 django-storages 를 통해 boto3를 이용한 저장소를 사용할 수 있고 이때 boto3를 이용해 아마존 S3를 저장소로 설정해 미디어 서버로 사용
=> SETTINGS.PY 수정
AWS_ACCESS_KEY_ID = 'IAM 액세스 키 ID'
AWS_SECRET_ACCESS_KEY = '비밀 액세스 키'
AWS_REGION = 'ap-northeast-2'
AWS_STORAGE_BUCKET_NAME = 'django-onlineshop'
AWS_S3_CUSTOM_DOMAIN = '%s.s3.%s.amazonaws.com' % (AWS_STORAGE_BUCKET_NAME, AWS_REGION)
AWS_S3_OBJECT_PARAMETERS={
'CacheControl' : 'max-age=86400',
}
AWS_DEFAULT_ACL = 'public-read'
AWS_LOCATION = 'static'
STATIC_URL = 'https://%s/%s/' % (AWS_S3_CUSTOM_DOMAIN, AWS_LOCATION)
STATICFILES_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage'
- AWS_XXX 의 변수들은 boto3 모듈이 필요한 변수들
- 이변수들을 가지고 aws의 s3 관련 api를 가지고 파일을 관리
=> 정적 파일 관련 설정이 끝남, 로컬에 있는 정적 파일들을 s3로 업로드 위해선 collectstatic 명령을 실행 => 이 명령을 실행하면 정적 파일을 한 곳에 모으는 일을 함 => 지금은 s3에 업로드 하는 방식으로 정적 파일을 모음
python manage.py collectstatic
정적 파일 모으기 작업이 끝나면 s3 서비스 페이지에 가서 업로드 된 파일 확인
=> 아까 만든 버킷 내용을 보면 static 파일이 있다 - 그리고 그 안에 있는 파일과 폴더 목록 보면 정적 파일 모으기 작업을 잘 수 행한 것을 확인 가능
(3) 미디어 파일 관련 설정
-
미디어 파일도 s3에 업로드해 관리하기 위해서는 storages를 INSTALLED_APPS에 추가
-
미디어 파일을 위한 파일 스토리지 설정을 위해 DEFAULT_FILE_STORAGE 변수에 커스텀 스토리지 클래스를 설정
-
settings.py에
DEFAULT_FILE_STORAGE = '프로젝트명.asset_storage.MediaStorage'
- 커스텀 스토리지 클래스 경로를 프로젝트명/asset_storage.py로 설정했으니 해당 경로에 파일을 만들고 MediaStorage 클래스 생성
from storages.backends.s3boto3 import S3Boto3Storage
class MediaStorage(S3Boto3Storage) :
location = 'media'
file_overwrite = False
- 미디어 파일 설정 끝, 지금부터 업로드 되는 이미지 파일들은 모두 s3에 업로드
Author And Source
이 문제에 관하여(shoppingmall (2) S3 미디어 서버 설정하기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@myway00/django-shoppingmall-2-S3-미디어-서버-설정하기저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)