2020. 4. 29. 22:59ㆍ개발노트
1. Deploy 하기 전 준비
- github에 작업한 프로젝트 파일 push
- AWS회원가입(AWS는 12개월 프리티어를 지원합니다.)
2. AWS 인스턴스 생성
- EC2 서비스를 이용해서 서버를 구동시킬 예정이기 때문에 서비스 찾기에 EC2를 입력합니다.
- 인스턴스 시작을 클릭합니다.
- 원하는 서비스를 선택합니다. 저는 무난하게 우분투 서비스를 선택했습니다.
- 인스턴스 유형에서 원하는 유형을 선택합니다.
- 시작하기를 누르면 키 페어 생성 메시지가 나옵니다.
- 새 키 페어 생성 >> 원하는 키 페어 이름 입력 후 키 페어를 다운로드합니다.
3. EC2 접속
위 과정까지 진핼했다면 인스턴스는 잘 만들어진 상태입니다.
다운로드한 키 페어를 이용해 EC2에 접속하는 과정은 아래와 같습니다.
- 인스턴스 연결을 위해 연결 버튼을 누릅니다.
- 우선 예시로 보여준 코드 ssh -i ~~ 를 모두 복사합니다.
- 위에서 저장한 키 페어의 이름이 위 코드와 달리 "MyKeyPair.pem"가 아니라면 수정합니다.
키 페어로 접속하기 위해서 간단한 사전작업이 필요합니다.
- 다운로드한 키 페어의 속성 >> 보안 탭 >> 고급을 클릭합니다.
- 제거와 상속 사용 안 함을 사용해 아래와 같이 되도록 합니다.
이제 CMD 창을 관리자 권한으로 열어줍니다.
그리고 아까 복사한 코드를 사용해 인스턴스에 접속합니다.
4. 배포하기
지금부터 접속된 터미널에서 모든 작업을 진행합니다.
우선 아무 파일도 존재하지 않기 때문에 git clone을 사용해 프로젝트 파일을 불러옵니다.
>> git clone 깃허브 Repository 주소
제대로 불러왔다면 아래 명령어로 위치를 이동합니다.
>> cd 폴더이름 ex) >> cd flask-chat-room
우분투에는 파이썬이 기본으로 있기 때문에 파이썬을 제외한 라이브러리를 설치합니다.
>> sudo apt update
>> sudo apt install python3-pip
>> sudo pip3 install flask
이외에도 설치할 라이브러리가 있으면 sudo pip3 install ~ 명령어로 설치합니다.
서버를 구동하기 전에 디버그는 off 인지 연결 주소는 어떻게 되어있는지 파이썬 파일을 다시 확인해봅시다.
>> vi 파이썬파일 ex) >> vi app.py
위 명령어로 터미널에서 파이썬 파일을 확인할 수 있습니다.
if __name__ == '__main__':
app.run(debug=False, host='0.0.0.0')
debug는 기본값으 False이므로 입력하지 않아도 상관없습니다.
AWS 서버의 연결 소스를 0.0.0.0/0으로 하기 때문에 host를 '0.0.0.0'으로 합니다.
host를 입력하지 않으면 127.0.0.1과 같이 다른 host로 연결을 시도하기 때문에 필수로 입력해야 합니다.
DB에 접속하기 위한 URI와 APP KEY는 보통 환경변수에 저장하는데
우분투에서는 간단하게 APP_KEY=MYKEY 와 같이 터미널에 입력하면 환경변수에 저장됩니다.
등록
>> APP_KEY=MYKEY
삭제
>> unset APP_KEY
전역환경변수
>>export APP_KEY=MYKEY
다른 방법으로는. py 파일에 직접 입력하는 방법이 있습니다.
>> vi 파이썬파일 ex) >> vi app.py
수정할 위치를 커서로 선택 후 "i" 입력
수정 후 "ESC" 키로 빠져나오기
저장 후 종료
>> :wq
Flask 서버의 기본 포트는 5000이기 때문에 규칙 추가를 위해 위 화면의 보안 그룹 >> launch-wizard-1을 클릭합니다.
위와 같은 화면이 나오면 인바운드 규칙 편집을 클릭해 포트 5000을 추가합니다.
배포가 끝났습니다.
.py 파일을 실행시켜서 Flask 서버를 구동합니다.
sudo python3 "파일이름".py
*파이썬 서버 백그라운드에서 구동*
파이썬 파일 구동 후 아래와 같이 하면 서버를 백그라운드에서 구동시킬 수 있습니다.
터미널을 켜놓지 않아도 서버는 작동합니다.
Ctrl + Z : 프로세스 중지
bg : 백그라운드에서 서버를 다시 구동
disown -h : 소유권 포기
이제 서버의 퍼블릭 주소를 주소창에 입력해서 제대로 서비스되고 있는지 테스트합니다.
Procfile이나 requirements 파일이 필요하지 않고 gunicorn 설치도 할 필요가 없어서 좋았고
heroku에서 배포할 때 생기는 자잘한 오류들도 신경 쓰지 않을 수 있어서 좋았습니다.
터미널을 사용해서 과정도 heroku 보다 많이 간단했습니다.