0부터 시작하는 Django 공부 - AWS를 이용해 배포해보자 3

Jaehong Lee·2022년 6월 27일
0
post-thumbnail

1. RDS 생성

  • DB를 생성한다
  • MARIA DB와 프리티어 설정
  • 마스터 사용자 이름을 주의하자. Django settings.py에서 DB 접속할때 이 이름을 사용해야한다
  • 암호를 설정해준다
  • 스토리지 자동 조정을 off한다. 돈이 나올 수 있기 때문이다. 최대한 돈나오지 않게 설정한다
  • 원래 DB는 PUBLIC ACCESS를 하면 안된다. 하지만 지금은 편하게 하기 위해 허용한다
  • 보안그룹 추가해주고, 가용 영역은 기본값으로 해준다
  • 원래 가용 영역은 개인정보보호법상 한 곳에 다 있으면 안되고, 특정 거리 밖에 분산되어 있어야한다
  • Django에서 설정한 DB 이름으로 작성해주고, 밑에 두 가지를 허용하지 않는다
  • 이것도 허용하지 않는다. 생성되는데 시간이 소요된다
  • 보안 설정을 해주자
  • 현재, 서브넷마스크가 32bit이므로 모든 IP주소가 동일해야 접속할 수 있다. 즉, 네트워크 대역이 동일한 컴퓨터만 접속하게 해준다고 설정되있다. 우리는 EC2의 가상 컴퓨터를 사용하므로, 외부 IP로 접속해야 한다. 따라서 현재 EC2 가상 서버에서는 접근이 불가능하다
  • 우리는 본 컴퓨터가 아니라 EC2의 가상 컴퓨터가 접속해줘야한다. 따라서 모든 서버에서 접속 가능하게 0.0.0.0으로 바꿔준다. 이 설정은 좋은 설정이 아니다. 보안상 문제가 있기 때문이다. 하지만, 본 프로젝트는 간단하게 하는 것이므로 그냥 설정해준다
  • 본 컴퓨터의 heidisql로 접속한다. DB 설정한거에 맞게 정보를 입력해준다. Ip 주소 대신 엔드포인트라는 도메인 주소를 넣어준다

2. Django DB ( 가상 서버 ) 설정

  • DB 설정대로 바꾼다
  • settings.py 수정. 이제 mysql로 다시 바꿔준다
  • DB가 수정됬으므로 migrate 해준다
  • RDS에 TABLE이 생성되었다
  • 회원가입이 잘 실행된다
  • 현재, 한글로 게시글 작성은 되지 않고, 영어와 숫자로는 가능하다
  • 이제 Static 파일 경로, kakao 설정, 도메인 설정을 해줘야한다

3. Static 파일 경로 수정

  • 관리자 페이지에 대한 static 파일은 밑에 auth에 들어있다. 이때, runserver를 하면 Django 내부의 프로그램이 돌아가 관리자 페이지의 static 파일들을 사용할 수 있다
  • 허나, 지금은 Apache를 이용해 서버를 구동하므로, 이 Apache에서 해당 static 파일을 찾을 수 있게 해줘야 한다
  • Django 프로젝트의 보이지 않는 static 파일까지 전부 지정된 Directory에 모아놓겠다고 설정한다. os.path.join은 두 가지 경로를 합쳐주는 것이다. 이를 BASE_DIR 밑에 static Directory에 저장하겠다는 것이다
  • FILES와 ROOT가 중복되므로 FILES를 삭제해준다
  • 다음 cmd에서 collectstatic을 통해 static 파일들을 모아준다. 이제 Apache에서 숨겨진 static 파일들을 찾을 수 있다
  • 서버 설정을 바꿨다면 서버를 재실행 한다
  • 관리자 페이지가 잘 나온다

4. Domain 설정

  • Dns 서버에서 Domain 주소를 IP 주소로 바꿔준다. 우리는 '내도메인한국'을 통해 Domain 주소를 등록할 것 이다
  • 먼저, 회원가입을 해서 로그인한다
  • 일반 Domain 검색을 통해 사용 가능한 Domain을 찾아보자. 아래 검색 결과에 사용 가능한 Domain이 나온다. 사용하고 싶은 Domain을 '등록하기'를 통해 등록하자
  • 각각 ipv4, ipv6, Domain 이름, mail, 정보를 Domain과 연결시키는 것이다
  • EC2 Public Ip와 연결시켜 준다
  • Domain 주소로 잘 접속된다

5. S3 생성

  • 현재 image 파일을 등록하면 EC2의 프로젝트 파일 내부에 저장된다. 이를 S3를 생성하여 S3에 저장해보자
  • 버킷을 생성한다. 버킷은 저장소를 의미한다
  • 버킷 이름은 고유한 이름이여야 한다
  • ACL은 접근 제어 목록으로 방화벽이다
  • 현재 외부 사용자가 접근할 수 없다. 이를 설정하자
  • 해당 경로로 들어가 편집을 눌러준다
  • 액세스 차단을 해제하고 저장한다
  • 버킷 정책을 편집한다
    • *을 통해 모든 사용자들에게 Allow한다. 이때 Action은 s3에서 Object를 가져오는 것이고, 해당 s3는 ljh-storage로 설정한다

  • 객체 소유권을 설정한다

6. 접근 관리 KEY 발급

  • S3로 접근할 수 있는 KEY를 발급해보자
  • 사용자를 추가한다
  • 액세스 키로 설정해준다
  • 그룹을 추가한다. 여기서 정책은 이 그룹에서 AWS의 어떤 기능을 사용할 수 있게 해줄지 설정해주는 것이다
  • s3full을 통해 s3에 대한 모든 접근 권한을 준다
  • 태그는 스킵
  • 이 두 가지 ID를 통해 접근할 수 있다. Django에 이 두 가지를 가지고 설정해야한다. 잘 보관하자. CSV 파일에 ,로 구분되어있다

7. Django settings.py S3 설정

  • 문자열 ' '로 입력한다

    • ACCESS KEY ID : IAM 사용자의 ACCESS KEY ID 입력
    • SECRET ACCESS KEY : IAM 사용자의 SECRET ACCESS KEY 입력
    • REGION : 지역
    • BUCKET NAME : S3 BUCKET 이름
  • 이제 media와 static Directory를 S3의 경로로 지정해야한다

  • 기존 static과 media를 지우고 S3로 경로를 새로 지정한다

  • 기존 MEDIA_ROOT 대신 DEFAULT_FILE_STORAGE로 지정한다

  • STATICFILES_DIRS를 통해 보이지 않는 곳에 저장된 Static 파일들을 가져와 지정한 경로에 저장한다

  • 이때, 웹 서버 상에서는 S3의 STORAGE를 통해 STATIC/MEDIA 파일들을 가져오고, 저장한다

  • 현재, 위의 코드를 작성하면 static과 media storage가 겹쳐서 error가 난다. 이는 밑에서 다루겠다

  • boto3를 설치해준다 ( AWS에서 제공해주는 SDK )

  • django-storages를 설치해준다. Django storage api는 local 파일 시스템만 지원하는데 다른 storage를 사용하려면 추가해야한다

  • collectstatic을 통해 S3에 static 파일들을 모아준다. 이 명령어는 Static 파일들을 settings.py 파일 안에 정의되어 있는 STATIC_ROOT 디렉토리로 옮기는 작업을 수행한다

  • 만약 잘 안된다면, AWS_DEFAULT_ACL을 None으로 한 번 collect 해주고, 다시 public-read로 collect 해보자

  • S3에 잘 업로드 됬다

8. media 오류 해결

  • 현재, media와 static의 storage가 중복되어 충돌해서 error가 일어난다. media를 인식하지 못해서 static에 전부 저장될 것이다. 이를 수정해보겠다
  1. config/asset_storage.py 생성
  • S3Boto3Storage는 class다. 이 class를 상속받아서 overriding하여 media를 저장할 새 storage class를 구현한다
  1. config/settings.py 수정
  • media storage를 새 class로 지정해준다
  1. url 수정
  • MEDIA_ROOT를 삭제했으므로, URL을 수정한다

  • 위 부분을 삭제해준다

  • MEDIA STORAGE가 생성되어 업로드한 IMG 파일이 잘 저장되는 것을 확인할 수 있다

  1. Html 수정
  • 이제 로컬 Directory가 아닌 S3에 저장된 파일들을 불러온다. 따라서 Html의 파일 불러오는 주소도 바꿔줘야한다
  • S3상의 파일 주소를 참조하여 수정한다
profile
멋진 엔지니어가 될 때까지

0개의 댓글

관련 채용 정보