우선 AWS S3를 장고에서 사용하기 위한 기본 셋팅을 포스팅 해두었다.
https://yeongwoo-cho.tistory.com/309
Django Setting
django에서 S3를 연동 시키기 위해서는 두가지 라이브러리가 필요하다.
django-storages를 통해 boto3를 사용한다.
이렇게 설치된 라이브러리를 django에서 사용하기 위해 settings.py에 추가해야 한다.
Settings.py
그럼 이제 설치된 라이브러리를 이용해 S3와 연결 시키기 위해 settings.py를 설정해봅시다!
STATIC_URL = '/static/'
STATICFILES_DIRS = [
os.path.join(BASE_DIR, 'static'),
]
# media file (as a upload file)
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
#AWS S3
AWS_ACCESS_KEY_ID = 'Access key ID'
AWS_SECRET_ACCESS_KEY = 'Access Secret Key'
AWS_REGION = 'ap-northeast-2'
AWS_STORAGE_BUCKET_NAME = '버킷명'
AWS_S3_CUSTOM_DOMAIN = '%s.s3.%s.amazonaws.com' % (AWS_STORAGE_BUCKET_NAME,AWS_REGION)
DATA_UPLOAD_MAX_MEMORY_SIZE = 1024000000 # value in bytes 1GB here
FILE_UPLOAD_MAX_MEMORY_SIZE = 1024000000
DEFAULT_FILE_STORAGE = '프로젝트명.storages.S3DefaultStorage'
STATICFILES_STORAGE = '프로젝트명.storages.S3StaticStorage'
Django 정적 파일 관련 설정
static & media files
Django에서 처리하는 데이터의 종류는 두 가지가 존재한다. 바로 정적파일과 동적 파일이다.
정적파일: 준비해둔 파일을 보여주는 static 파일
동적파일: 외부에서 사용자가 업로드 하는 media파일 (media파일이란 프로젝트에 업로드 되는 파일을 말한다.)
즉, media파일(동적파일)을 다루기 위해서는 세팅 해줄 것이 있다.
1. 업로드될 파일을 저장할 디렉토리 경로 지정해주기
2. url 지정
config > asset_storage.py
작업하고 있는 django project 폴더 config 폴더 안에 asset_storage.py 파일을 만든다.
public media file과 private media file을 각 다른 방법으로 관리하도록 구현되어 있다.
각자의 모델에 맞게 views.py 파일을 설정하면 끝이다.
이 후 storages 패키지 용 파일을 하나 만들어 준다.
$ vi storages.py
from storages.backends.s3boto3 import S3Boto3Storage
__all__ = (
'S3StaticStorage',
'S3DefaultStorage',
)
# for media
class S3DefaultStorage(S3Boto3Storage):
default_acl = 'private'
location = 'media'
# for static
class S3StaticStorage(S3Boto3Storage):
default_acl = 'public-read'
location = 'static'
마지막으로 nginx, wsgi 연동까지 해두었다면 nginx 설정도 해주어야 한다.
지난번글을 그대로 이어서 설명하자면,
server {
...
client_max_body_size 128M;
charset UTF-8;
...
location /static/ {
alias https://버킷명.s3.northeast.amazonaws.com/static/;
}
location /media/ {
alias https://버킷명.s3.northeast.amazonaws.com/media/;
}
위와 같이, 업로드 허용 용량을 설정해주고, 기존에 설정해두었던 static과 media 경로를 s3 경로로 바꾸어 주면 된다.
해당 버킷 내에 media나 static 폴더가 없어도 데이터가 들어가는 순간 만들어 지므로 걱정할 필요 없다.
마지막으로 기존 django 서버에 urls.py에 static 용 설정을 해주었다면 해제 시켜 준다.
이후 collectstatics 명령어를 실행시켜서 s3에 static과 media 파일을 저장한다.
Reference
https://kdharchive.tistory.com/830
https://zladnrms.tistory.com/85
https://velog.io/@hwang-eunji/aws-s3-미디어-서버-설정-django-설정
'Server > Django issue' 카테고리의 다른 글
[Django] TextChoices (0) | 2022.11.24 |
---|---|
[Django] 인증 인가 참고자료 (0) | 2022.08.08 |
[Django] Custom User (0) | 2022.08.05 |
[Django] MySQL 테이블 전체 삭제 (0) | 2022.08.05 |
[Django] User model 확장 (0) | 2022.08.04 |