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 파일에 속성 들어가고,
보안에 고급 버튼 클릭
"상속 사용 안 함" → " 이 개체에서 상속된 사용 권한을 모두 제거합니다. " 클릭
그러면 사용 권항 항목이 전부다 지워진다.
이 후 추가 버튼 눌러서 "보안 주체 선택" 클릭
그리고 선택할 개체 이름을 입력
(소유자(이메일) 입력하니 됐음)
확인 버튼 누르고 적용 누르면 끝
'WEB > Backend' 카테고리의 다른 글
[Firebase] 데이터베이스에 CSV 파일 Import (0) | 2024.05.21 |
---|---|
[Firebase] "error" : "Permission denied" 오류 (0) | 2024.05.20 |
[Python] Flask 블로그 만들기 (0) | 2024.04.24 |
[Python] Flask 로그인/회원가입 기능 만들기 (0) | 2024.04.12 |
[Python] Firebase 시작하기 (0) | 2024.04.08 |