[Django] DAY27. Elastic Beanstalk에 서비스를 올려 실제 서버 구축하기!

이하얀·2024년 2월 28일
0

2024년 2월 27일 화요일

📙 강의 내용 요약

본 강의는 27강1, 27강2로 나누어져 있음을 알립니다.

[27강1 : EB 생성 및 기본 설정하기]

  • EB 생성하기

    • 서비스 > 컴퓨팅 > Elastic Beanstalk 클릭

    • CLI로 구성하기

      • vscode > requirements.txt
        ...
        awsebcli
      • Terminal
        pip install -r requirements.txt
    • 사용하지 않을 내용 삭제하기

      • upload 폴더
      • db.sqlite3
    • 명령어 입력

      eb init

      • 10번 선택

      • IAM으로 발급받은 ACCESS_KEY, SECRET_KEY 입력
        - admin으로 발급받은 이유 → 이렇게 EB 서비스도 사용할 것이었기 때문!

    • 새로운 어플리케이션을 만들겠다는 의미인 2 입력

    • 어플리케이션 이름 : anonymous

    • 파이썬 사용이 맞고, 아마존 리눅스2를 이용, 서버에 접속도 할 것이기 때문에 모두 y입력


    • 새로운 키페어 생성 → 3번 입력 후, 키페이 이름 입력, 엔터 2번

    • AWS 홈페이지 > EC2 > 네트워크 및 보안 > 키 페어

    • .elastcibeanstalk 생성 완료

  • EB 설정하기
    - 루트 폴더 → 📝 .ebignore 생성
        ```
        # .gitignore의 모든 내용 복사 + env.json만 삭제
        
        venv/*
        .vscode/*
        .idea/*
        *.pyc
        # Elastic Beanstalk Files
        .elasticbeanstalk/*
        !.elasticbeanstalk/*.cfg.yml
        !.elasticbeanstalk/*.global.yml
        ```
        
    
    - anonymous > settings.py
        
        ```python
        ...
        DEBUG = False  # 기존 True로 되어있었지만 -> False로 변경
        
        ALLOWED_HOSTS = ["*"] # 모든 호스트의 접근 허용
        ```
        
    
    - 루트 폴더 → 📁 .ebextensions 폴더 생성 → 📝 00_anonymous.config 파일 생성
        
        ```
        # 00_anonymous.config
        
        option_settings:
            aws:elasticbeanstalk:container:python:
                WSGIPath: anonymous.wsgi:application
                NumProcesses: 2
                NumThreads: 15
        
        packages:
            yum:
                postgresql-devel: []
        
        container_commands:
            00_wsgipass:
                command: 'echo "WSGIPassAuthorization On" >> ../wsgi.conf'
        ```

[27강2 : EB 설정하기]

  • config 파일 적용하기

    eb create
    • anonymous-dev(또는 test-dev) 입력 > 엔터 > DNS 설정 → 바로 엔터

    • 로드밸런서는 2번 어플리케이션으로 설정

    • 오토 스케일링 적용 여부 N 입력 → 서버 생성 시작됨.

    • AWS에서 확인

      • Elastic Beanstalk 접속 → 설치가 진행되고 있음을 볼 수 있음.

      • 시간이 지난 후 완료되면, 다음과 같은 화면을 볼 수 있음.

      • 상단 URL 접속

  • 소스코드 수정 시, 다시 배포하는 방법
    • 수정 후, 다음 명령어 입력
      eb deploy
    • 첫 배포보다는 시간이 많이 단축됨.
  • 터미널에서 EC2 접속하는 법

    eb ssh 

    → y 입력

  • 터미널에서 프로젝트 프로세스가 작동하고 있는지 확인
    • gunicorn이 해당 프로젝트의 프로세스

      top

      → 그 다음, Shift+M 입력

  • 도메인 연결이 하고 싶다면?
    • Route 53을 이용해 도메인 구입 후 사용하면 됨.

♻️느낀점&인사이트

오늘 강의는 AWS의 EB 서비스를 생성하고, 서버를 배포하는 방법에 대한 내용이었다.

먼저, EB를 AWS에서 생성하는 것이 아닌 CLI 환경에서 설치하는 방식으로 진행했다.

AWS에서 생성 버튼을 눌러 만들 수도 있지만 확실히 터미널 환경에서 명령어를 입력하며 만드는 것이 도움이 될 때도 있고, 프로젝트 내 터미널 환경에서 진행하다보니 코드 파일에 추가할 때에는 개발툴 내에서 쉽게 추가하고 삭제할 수 있기 때문에 용이한 부분도 있는 것 같다는 생각이 들었다.

EB에 관련된 패키지를 프로젝트의 requirments에 추가해 설치해주고, 명령어를 이용해 EB를 생성하고 EC2도 설정을 했다.

또한 현재의 프로젝트가 디버그 모드가 켜져 있는데, 그렇게 되면 사용자들이 접속을 했을 때 모두 보여주게 되어 보안 상 문제가 발생할 수 있기 때문에 DEBUG = False로 바꿨다.

그리고, 모든 호스트가 접속할 수 있도록 ALLOWED_HOSTS = ["*"]로 설정했다.

그 다음 .ebextensions 폴더에 00_anonymous.config를 작성해 미리 EB에 관련된 설정값을 입력했다.

설정값을 적용하기 위해 eb create로 서버 이름, DNS, 로드밸런서 설정, 오토 스케일링은 하지 않는 것까지 설정해줬다.

오토 스케일링은 순간적으로 여러 명의 유저가 몰렸을 때와 그렇지 않을 때를 보고 자동으로 서버 사양을 조절하는 서비스를 말한다.

그렇게 배포를 진행했고, 실제 URL로 접속해보면 잘 배포가 되었는지 확인할 수 있다.

마지막으로는 도메인 설정에 대해 Route 53 서비스를 공부해 사용하면 이용이 가능하다고 말씀하셨지만, 이 역시 과금 문제가 조금 있어 나의 경우, 도메인 구매 비용만 들이고 다른 서비스를 이용하는 방식을 주로 사용했고 이 프로젝트도 도메인이 필요하다면 다음과 같은 방법을 이용할 생각이다. (실제 개발 당시 참고한 사이트는 아래에 첨부!)

  1. 가비아 또는 닷홈과 같은 사이트에서 원하는 도메인을 구매한다.
  2. 사이트의 DNS 설정 부분에서 A 타입의 레코드를 EC2 서버의 ip로 저장한다.
  3. EC2 서버에 접속한다.
  4. 서버에 Nginx를 설치한 후, 구매한 도메인 주소를 설정에서 수정한다.
  5. 서버에 Cerbot(Let’s Encypt)을 설치해 https를 무료로 이용한다.

이러한 방법으로 도메인을 적용해도 충분히 될 것 같다!

드디어 배포까지 마무리지을 수 있었다. 남은 이틀동안 프로젝트를 잘 수정하고 다시 배포하며 완성도 있는 django 프로젝트가 될 수 있도록 노력해야지🔥

profile
언젠가 내 코드로 세상에 기여할 수 있도록, BE&Data Science 개발 기록 노트☘️

0개의 댓글