WEB/Backend

Flask로 서버 배포하기 (AWS EC2)

Jerry_K 2024. 3. 25. 09:02

Flask 코드를 작성하고 실행하면, 

로컬 IP주소가 터미널 창에 뜬다.

 

이 주소는 같은 IP인 사람만 접근 가능하고,

외부 IP는 접근이 불가능하다.

 

flask 서버를 퍼블릭으로 배포하고 싶어서

이것저것 유튜브로 보며 찾아봤다.

솔직히 이해도 잘 안되고 어려웠던 것 같다.

 

그나마 가장 간단하게 퍼블릭 주소를 배포하는 것은

AWS에서 EC2 인스턴스를 실행하는 것 같다.

 

그래서 간단하게 서버를 만드는 방법을 포스팅해본다.

 

(아래 서버 배포는 기본적으로 Flask로 작성된 코드가 있고 AWS 가입 됐다는 전제로 진행)

 


- 인스턴스 생성

 

EC2 대시보드에 들어간 후,

인스턴스 시작 (주황 버튼)을 클릭한다. 

 

 

 

이름은 아무렇게나 지어주고,

Ubuntu 클릭하고, 프리티어 사용 

 

 

인스턴스 유형은 t2.micro로 선택 (프리 티어여서 무료이다.)

 

 

 

키 페어에는 원하는 이름을 입력하고  .pem 형식으로 키페어 생성한다.

( 키페어는 꼭 필요하니까 따로 저장해두기 ! )

 

 

 

형관펜 칠한 부분 체크

 

 

 

인스턴스 시작 (주황색 버튼) 클릭


- 보안 설정 (포트 번호 설정)

 

 

좀 기다리다가 인스턴스로 들어가면 실행 중이라고 뜬다.

 

 

 

해당 인스턴스 보안으로 들어가서 보안 그룹 클릭

 

 

 

이후 인바운드 규칙 편집 클릭

 

 

 

규칙 추가한 후 

사용자 지정 TCP / 5000 (Flask 기본 포트)  / 0.0.0.0/0 으로 추가하고

규칙 저장하기 

 

 


- 터미널로 우분투 인스턴스 접근

 

 

다시 인스턴스로 들어와 아까 만들어 둔 인스턴스 연결 

 

 

 

SSH 클라이언트 부분에서 아래 형관펜 그어둔 예시 복사 

 

 

좀 전에 키 페어 .pem 형식으로 저장한 파일에 들어가서

터미널 실행  후 복사한 거 붙여넣기 -> yes 입력

 

(우분투 연결이 안되는 경우 맨 아래를 참고)

 

sudo apt update
sudo apt install python3-pip
sudo pip3 install flask
# 그외 필요한 라이브러리 설치

 

저장소에 최신 정보 가져와 패키지 목록 갱신 (sudo apt update) ,

python 3 용 pip 패키지 설치  (sudo apt install python3-pip)

( 설치 도중 보라배경 화면이 뜨는데, 그냥 esc 눌러주면 된다.)

 

그리고 필요한 라이브러리 설치  (sudo pip3 install 라이브러리)

하나 하나 깔기 귀찮으면, requirements.txt 만들어서 하면 된다.

 

 

git clone 레파지토리 주소 로  ubuntu 서버에 저장 

 

 

파일 경로 맞춰주고, dir 명령어로 한번 확인  (실행 할  app.py 확인 완료!)

 

sudo python3 파일

 

sudo python3 파일 명령어로 flask 실행

 

 

방금 열은 서버 웹 사이트로 들어가고 싶으면,

AWS 인스턴스로 들어가서 퍼블릭 IPv4주소 확인

주소창에 (퍼블릭 IPv4주소:5000) 을 입력 하면 된다.


(고정 주소 설정)

터미널이나 ssh를 종료하면 서버가 종료된다.

그리고 인스턴스를 다시 실행하면 ip가 바뀌게 된다.

 

이 문제 해결하기 위해 Elastic IPs (탄력적 IP) 사용

 

 

탄력적 IP 주소에 들어가  탄력적 IP 주소 할당(주황 버튼) 클릭

 

 

 

바로 할당 버튼  클릭

 

 

 

작업 -> 탄력적 IP 주소 연결 클릭

 

 

 

 

인스턴스 선택에서 

좀 전에 만든 인스턴스 선택 후 연결

 

 

 

 

다시 인스턴스로 돌아와 세부사항들을 확인해보면,

탄력적 IP 주소 할당 된것이 보인다.

 

이렇게 내가 만든 Flask를  AWS 서버에 배포 성공  !! 

 


(우분투에 연결이 안될 경우 )

[11:02:07.332] > Bad permissions. Try removing permissions for user: NT AUTHORITY\\Authenticated Users (S-1-5-11) on file D:/dev/ssh/LightsailDefaultKey-ap-northeast-2.pem.
> @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
> @         WARNING: UNPROTECTED PRIVATE KEY FILE!          @
> @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

 

이런 에러가 떴을때의 대처법을 알아보자.

 

 

 

만들어둔 .pem 파일에 속성 들어가고,

보안고급 버튼 클릭

 

 

"상속 사용 안 함"   →  " 이 개체에서 상속된 사용 권한을 모두 제거합니다. "  클릭

 

 

 

그러면 사용 권항 항목이 전부다 지워진다.

이 후 추가 버튼 눌러서  "보안 주체 선택" 클릭

 

그리고 선택할 개체 이름을 입력

(소유자(이메일) 입력하니 됐음)

 

 

 

확인 버튼 누르고 적용 누르면  끝