AWS에서 초간단 flask 웹서버 띄우기
이해하기 쉽고, 장황하지 않은 자료를 기반으로 강의를 진행합니다.
잔재미코딩 소식 공유
좀더 제약없이, IT 컨텐츠를 공유하고자, 자체 온라인 강의 사이트와 유투브 채널을
오픈하였습니다
응원해주시면, 곧 좋은 컨텐츠를 만들어서 공유하겠습니다
응원해주시면, 곧 좋은 컨텐츠를 만들어서 공유하겠습니다
● 잔재미코딩 유투브 오픈
[구독해보기]
5. AWS에서 초간단 flask 웹서버 띄우기¶
ubuntu OS에는 python2, python3 가 디폴트로 설치되어 있음¶
- 간단히 pip, python을 실행하면 ubuntu OS에 있는 pip, python 버전 2로 실행될 가능성이 많음
- 깔끔한 환경을 만들기 위해 우선 리눅스용 anaconda 를 설치해야 함
ubuntu 용 anaconda 설치¶
- FTP를 사용해서 다운로드받은 파일을 AWS EC2에 업로드한 후
- bash Anaconda3-5.1.0-Linux-x86_64.sh
PATH 에 /home/ubuntu/anaconda3/bin 추가¶
- vi ~/.bashrc
- PATH="$PATH:/home/ubuntu/anaconda3/bin"
- ~/.bashrc 파일은 처음 터미널 접속(해당 아이디로 로그인)시에 실행됨
- ~/.bashrc 수정 후 바로 해당 설정 적용을 위해서는 다음 명령을 실행해야 함
- source ~/.bashrc
- ~/.bashrc 수정 후 바로 해당 설정 적용을 위해서는 다음 명령을 실행해야 함
sudo 명령어 로 실행시, PATH 설정이 적용되도록 설정¶
- sudo 명령은 별도로 PATH 설정을 해줘야 합니다. (보안 이슈)
- sudo 의 PATH에 /home/ubuntu/anaconda3/bin 을 추가하고 싶어요
- sudo vi /etc/sudoers
- Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin:/home/ubuntu/anaconda3/bin"
- 이 설정은 변경 후 바로 적용
- sudo 명령을 실행할 때마다 해당 설정을 확인하기 때문
EC2 안에서 flask로 웹서버 실행하기¶
- flask 코드 올려놓기
- mkdir flaskapp
- flaskapp 디렉토리에 flask 코드 파일 올리기 (예: basic.py)
- 파이썬 가상환경 만들기
- cd flaskapp
- sudo conda install virtualenv
- virtualenv flaskapp
- source flaskapp/bin/activate
- python3.6 basic.py
본 자료와 같이 IT 기술을 잘 정리하여, 온라인 강의로 제공하고 있습니다
체계적으로 전문가 레벨까지 익힐 수 있도록 온라인 강의 로드맵을 제공합니다
에러 확인하기¶
- EC2에 flask로 웹서버를 실행한 후, 어느 순간 flask 웹서버가 다운되었다.
- 어느 코드에 문제가 있는지, logging 라이브러리로 설정하면 되지만,
- 핵심 코드에는 logging 라이브러리로 로그 코드를 넣어야겠지만,
- 모든 에러를 확인하기 위해 리눅스 명령을 활용해서 간단하게 에러 확인 명령을 넣을 수 있음
- flask 코드에 다음 코드 추가하기
- app.debug = True
- 리눅스에서 터미널에 출력되는 내용을 파일로 저장하기
- standard output을 파일로 redirect 하기
- echo "flask error" > flaskapp.log
- flaskapp.log 파일 뒤에 계속 내용을 이어서 기록하려면
- echo "flask error" >> flaskapp.log
- 화면에도 출력하고, 파일로도 redirect 하기
- echo "flask error" | tee flaskapp.log
- 화면에도 출력하고, 파일로도 redirect 하기(flaskapp.log 파일 뒤에 계속 내용 기록)
- echo "flask error" | tee -a flaskapp.log
에러는 standard output 이 아니라, standard error 로 출력될 가능성이 높음¶
- 테스트를 위해 강제로 간단한 코드를 basic.py 라는 이름으로 만들어봅니다.
In [9]:
import sys
sys.stdout.write("This is a standard output")
sys.stderr.write("This is a standard error")
- standard error만 파일로 redirect 하고, standard output은 화면에 출력하려면
- python3.6 basic.py 2> flaskapp.log
- standard output/error를 모두 파일로 redirect 하기
- python3.6 basic.py 2&> flaskapp.log
- standard output/error를 모두 파일로 redirect 하고 화면에도 출력하기
- python3.6 basic.py 2>&1 | tee flaskapp.log
본 자료와 같이 IT 기술을 잘 정리하여, 온라인 강의로 제공하고 있습니다
가장 빠르게 풀스택 개발자가 될 수 있도록, 최적화된 로드맵을 제공합니다
테스트 (다음 코드를 basic.py 로 작성하고, EC2 IP:8080/hello 로 실행)¶
- 터미널에서 다음 실행
- python3.6 basic.py 2>&1 | tee flaskapp.log
- 웹브라우저를 오픈해서 EC2 IP:8080/hello 주소 입력
- 해당 EC2의 Security Group 에서 8080을 Custom TCP Rule 로 InBound 룰에 추가해야 해당 포트로 flask 웹서버를 접속할 수 있음
- 터미널에서 에러 로그 확인
- 터미널에서 control + c 키로 basic.py 실행을 중지시키고, 해당 디렉토리에 생성된 flaskapp.log 파일 확인
- vi flaskapp.log
In [ ]:
from flask import Flask
app = Flask(__name__)
app.debug = True
test = 1
@app.route("/hello")
def hello():
test += 1
if test > 4:
return test / 0
else:
return "<h1>JaeSung Fighting</h1>"
if __name__ == "__main__":
app.run(host="0.0.0.0", port="8080")