Django

Django collectstatic S3 파일 업로드 안되는 오류 (Django static파일 S3 연결하기)

UserDonghu 2024. 12. 30. 19:40

서버 배포를 할때 static파일들을 AWS S3에 보관을 하고싶거나 해야만 할때 (zappa로 배포) Django는 boto3와 django-storages를 사용한다.

 

 

가상환경에서 설치

pip install boto3 django-storages

 

 S3 버킷을 생성하고 적절하게 정책 부여 후(정책은 연결하고 해도 됨) AWS키 받아서 환경변수 설정

AWS_ACCESS_KEY_ID='' # 발급받은 키
AWS_SECRET_ACCESS_KEY='' # 발급받은 키
AWS_STORAGE_BUCKET_NAME='' # 내가 만든 버킷 이름
AWS_S3_REGION_NAME='' # 버킷 지역

 

settings.py에 환경변수 등록해주고 STATIC 설정

AWS_S3_CUSTOM_DOMAIN = f'{AWS_STORAGE_BUCKET_NAME}.s3.amazonaws.com' # S3 커스텀 도메인 설정

STATIC_URL = f'https://{AWS_S3_CUSTOM_DOMAIN}/static/' # 정적 파일 저장될 url 설정
DEFAULT_FILE_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage' # django 프로젝트 기본 파일 저장소를 S3를 사용하겠다
STATICFILES_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage' # boto3 SDK로 정적 파일은 S3를 사용하겠다

STATIC_ROOT = BASE_DIR / 'staticfiles' # 정적 파일을 모았다가 S3로 업로드 할 위치 설정

INSTALLED_APPS = [
     ...
    'storages', # 추가
     ...
]

 

collectstatic으로 정적파일 업로드

python manage.py collectstatic

 

S3 버킷에 정적파일 제대로 업로드 됐는지 확인


이렇게 하면 S3 연결이 되어야하는데, STATIC_ROOT에 정적파일을 모으기만 하고 S3 버킷에는 계속 파일 업로드가 안되는 문제가 발생했다.

분명 다른 프로젝트에서 정상작동하는데 왜 안되는거지 하면서 온갖 쌩쑈를 다 하면서 문제점을 찾다가 발견

바로 Django 버전을 최신 버전을 사용중이었다..

 

Django 4.2 버전 이후로는 settings.py 쓰는 법이 달라진다

# DEFAULT_FILE_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage'
# STATICFILES_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage'
# 얘네 둘 대신에 아래 처럼 써야함

STORAGES = {
    'default': {
        'BACKEND': 'storages.backends.s3boto3.S3Boto3Storage',
    },
    'staticfiles': {
        'BACKEND': 'storages.backends.s3boto3.S3Boto3Storage',
    },
}

 

수정하고 다시 collectstatic

python manage.py collectstatic

 

하니까 귀신같이 S3 버킷에 정적파일이 정상적으로 업로드 되었다.

 

몇시간씩 뻘짓거리하지말고 버전관리를 더 신경쓰자 꼭..