웹 서버 실습

yoon__0_0·2024년 5월 14일
0

이어드림 수업

목록 보기
30/103

Flask


from flask import Flask, request, jsonify
app = Flask(__name__)

@app.route('/')
def welcome():
    return  "안녕하세요 누구시죠? "

@app.route('/sj')
def welcome_sj():
    return  "윤재입니다 "

if __name__ == "__main__": 
    app.run(host = "0.0.0.0", port = 4332)
  • Flask : Flask 애플리케이션 생성 및 구성할때 사용
  • request : HTTP 요청을 처리할 때 사용
  • jsonify : JSON 데이터를 반환값으로 사용시 활용
  • @app.route('/경로') : 라우팅으로 , 입력해주는 경로로 접근했을 때, 바로아래 함수의 return 값이 브라우저에 나타남
  • app.run() : 플라스크 애플리케이션을 실행하는 메서드
  • host : 요청을 받아들일 IP
  • port : 요청을 받아들일 IP이자, 플라스크 애플리케이션이 사용할 포트

로컬에서 실습해보기

  • vscode에서 위의 코드 실행
루트경로sj 경로
  • 터미널에서 테스트 해보기

EC2 서버에서 실습해보기

1) EC2에 파일 만들기

  • 위와 동일한 파일을 만들어 주면 됨

2) 가상 환경을 통해서 위의 파일 실생시키기

3) inbound 규칙 편집

  • EC2에서 flask 돌린 것을 현재 내컴퓨터에서 띄우기 위해서는 내가 ec2-flask로 들어갈 수 있는 통로가 열려있어야 함.
  • 즉, EC2의 inbound 규칙 편집을 통해 flask로 들어올 통로를 열여줘야함.
  • 지금은 내 네트워크에 있는 컴퓨터만 들어가게 하고 싶어서 source type을 내 IP로 설정해주기

4) 접속하기

  • 나의 퍼블릭 EC2 IP:포트번호 로 접속시 로컬과 동일한 창이 나옴

gunicorn

  • wsgi로 flask와 웹서버(ngix)를 연결해주는 통로
gunicorn {flask파일이름}:app --bind {ip주소}:{port번호}
  • 이때 파일이름에서 .py는 제외하고 작성
  • port 번호는 flask 파일에서 작성한 port 번호와 일치 시키기

  • 만약 백그라운드로 실행시키고 싶을땐 nohup 이용
nohup gunicorn {flask파일이름}:app --bind {ip주소}:{port번호} >& /dev/null &

nginx

1) nginx 설치

sudo apt install nginx

2) nginx 설치 확인

  • 명령어 실행시 active(running) 이 실해중인 것
sudo systemctl status nginx

3) nginx 파일 수정

sudo vi /etc/nginx/sites-enabled/default
  • 여기 location 부분 변경
location / {
                # First attempt to serve request as file, then
                # as directory, then fall back to displaying a 404.
                #try_files $uri $uri/ =404;
                proxy_pass http://127.0.0.1:4332;
        }

4) nginx 재시작

sudo systemctl restart nginx
sudo systemctl status nginx

5) 보안그룹 열어주기

  • 아까는 flask만 실습했기 때문에 flask 포트의 보안그룹을 열어 주었지만, 이제 이를 nginx와 연동시켰기 때문에 (proxy_pass 로 연동시켜준 것) 위에서 했던 것을 지우고 80번 포트를 열어주면 됨
  • 보안상의 문제도 있어서 proxy_pass 사용함

6) 연결해보기

  • 나의 ec2 퍼블릭 아이피 주소 포트 80으로 접속하면 아까와 동일한 화면 출력 가능
profile
신윤재입니다

0개의 댓글