서버 배포를 할때 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 버킷에 정적파일이 정상적으로 업로드 되었다.
몇시간씩 뻘짓거리하지말고 버전관리를 더 신경쓰자 꼭..
'Django' 카테고리의 다른 글
Django apscheduler SQLAlchemy Connection timed out 오류 (0) | 2025.02.12 |
---|---|
Zappa로 AWS Lambda를 사용해서 Django 서버리스 배포하기 (0) | 2024.12.30 |
TDD (Test-Driven Development) (0) | 2023.11.16 |
Django 프로젝트(1) - Hot🔥Deal Blog (0) | 2023.11.08 |
Django와 SQLite3 (0) | 2023.10.23 |