스파르타 웹개발 종합반 5주차 - 프로젝트 서버에 올리기

정영찬·2022년 2월 27일
0

웹개발 종합반 일지

목록 보기
34/37

전에 만들었던 프로젝트를 서버레 배포하는 작업을 진행한다.

웹 서비스를 런팅하기 위해서 클라이언트 요청에 항상 응답해줄 수 있는 서버에 프로젝트를 실행히시킨다.

언제든지 요청에 응답하려면

  • 컴퓨터가 항상 켜져있고 프로그램이 실행되어있어야하고,
  • 모두가 접근할수 있는 공개 주소인 공개 IP주소로 나의 웹서비스에 접근할 수 있도록 해야한다.

이에 대해서 AWS라는 클라우드 서비스에서 편하게 서버를 관리하기 위해서 항상 켜놓을 수 있는 컴퓨터인 EC2 사용권을 구입해 서버로 사용할 것이다.

AWS 서버 구매하기

EC2 서버 구매하기

EC2 콘솔페이지에 들어가서 로그인을 한다.

  • 인스턴스 항목 - 인스턴스 시작
  • Ubuntu Server 20.04 LTS (HVM), SSD Volume Type 를 선택
  • "검토 후 시작" 버튼 누르기
  • "시작하기" 버튼 누르기

이렇게 진행하면

키 페어를 선택 혹은 생성하라는 창이 나타나는데, 새 키 페어 생성으로 이름은 자유롭게 작성 후 "키페어 다운로드"를 클릭한 다음 인스턴스를 시작한다.

인스턴스 목록에 돌아오면 인스턴스가 실행중인 상태로 하나 추가되어있는 모습을 나타내고 있다.

EC2 서버 종료

만약, 인스턴스에 문제가 생겼을 경우, 해당 인스턴스에 마우스를 올리고 우측 마우스 클릭 - 인스턴스 중지 혹은 인스턴스 종료를 할수 있다.
인스턴스 중지는 컴퓨터를 끈것이고, 인스턴스 종료는 컴퓨터를 반납한 것이라고 생각하면 이해가 편하다.

EC2 접속하기

git bash를 켜서 ssh -i (다운로드 받은 키 페어) ubuntu@ (퍼블릭 IPV4 주소) 입력 후 enter를 누른뒤에 정말 연결을 계속할지 물어보는 문구가 나타나면 yes 라고 입력해준다.

이렇게 하면 자신이 구매한 컴퓨터에 접속을 한 것이다. 이 컴퓨터는 리눅스 사용하며 명령어를 입력하는 것을 사용이 가능하다.

이제 이 서버에 우리가 작업한 프로젝트를 올려서 실행해보자.

서버 세팅하기

서버 환경 통일하기

이전에 접속한 뒤를 이어서 작업한다.
해당 명령어들을 차례로 입력한다(한줄씩만 작성하여 실행할 것, #은 설명이며, 입력하지 않아도 된다.)

#python3 -> python
sudo update-alternatives --install /usr/bin/python python /usr/bin/python3 10

#pip3 -> pip
sudo apt-get update
sudo apt-get install -y python3-pip
sudo update-alternatives --install /usr/bin/pip pip /usr/bin/pip3 1

#port forwarding
sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 5000

첫 번째는 python3 를 python으로 명령 내리겠다라는 명령어
두 번째는 pip라는 패키지 마법사를 설치한다.
마지막은 사이트에 들어갈 때마다 작성한 localhost:5000 에서 5000을 떼고 작성할 수 있게 해주는 명령어이다.

filezilla 를 이용해서 python 파일 올리기

filezilla를 실행한 뒤 전에 제작한 프로젝트가 있는 파일 경로로 이동한다.

왼쪽 창이 현재 자신의 컴퓨터이고 오른쪽 창이 바로 방금 구매한 컴퓨터이다.
pycharm 을 켜서 테스트로 파일을 만든뒤 파일을 올려보자.

test.py 의 내용은 그냥 간단하게 작성한다.

그다음 filezilla에 들어가서 test.py가 들어있는 경로로 이동한다.
왼쪽 위에 보면
이런 버튼이 있는데 누르고 나면 사이트 관리자 창이 나타나는데

New site - 이름 정해서 작성 - 프로토콜선택(SFTP) - 호스트 입력 (이전에 생성한 인스턴스에서 버블릭 IP 주소 복사)-포트(22 이건 정해진것이므로 변형하지 말자) - 로그온 유형(키파일) - 사용자( ubuntu -> 똑같이 입력할 것) - 키파일(다운받은 키파일 경로를 찾기) - 연결


오른쪽의 디렉토리가 바로 우리가 산 컴퓨터가 나타난다!

아까 실습때 만든 sparta 폴더에 test.py를 드래그해서 옮기면 업로드가 끝난다!

그럼 이 파일을 실행해보자. 파일업로드가 제대로 되어있다면 git bash 에서 조회를 해도 나타나있을 것이다.

파일이 등록 되어있다.

이제 python test.py라고 입력하면,

test.py가 실행되었다.

Flask 서버를 실행해보기

filezilla에 전에 만들었던 homework 프로젝트의 파일을 옮긴다.(static, templates, app.py)

git bash 에서 app.py 를 실행한다.

flask가 없다는 문구가 나타났으므로 , flask를 설치하자.
pip install flask
그러면 이제 실행 되겠지? .... 아니다. 전의 프로젝트에서 설치했던 패키지들은 현재 우리가 산 컴퓨터의 폴더에는 설치되어있지 않다. 그렇다는 말은? pycharm 에서 실습할 때 설치한 패키지들을 다시 git bash를 통해서 설치를 해줘야 한다.
pymongo dnspython certifi

전부 설치하고 다시 app.py를 실행하면

뭔가가 나타났다.

오! 그럼 이제 ip 주소만 입력하고 포트번호 5000 옆에 붙이면 실행 되는건가?

안된다. 아직 내가 산 컴퓨터(EC2 서버)에서 5000번 포트로 접속 할 수 있는 입구를 열어놓지 않았다.

aws사이트에서 인스턴스 창으로 들어가서 내 인스턴스의 보안탭으로 들어가서 보안그룹 아래에 적힌 영어와 숫자조합을 클릭한다.

들어가면 인바운드 규칙이라는 문구가 보이는데 아래의 인바운드 규칙 편집을 클릭한다.

그러면 규칙 추가 버튼을 눌러서 포트 범위 항목에 5000번을 작성하고 소스 항목에는 Anywhere ipv4를 선택한다.
내 경우는 80번 포트도 추가하여 작성했다.


우측 하단에 규칙 저장을 누르면 성공이다.
이제 접속되지 않았던 사이트로 가서 다시 접속을 시도해보면?

접속된다. 그리고 모바일로도 접속이 가능하다.
심지어 규칙에 추가 했던 포트번호 5000번을 빼서 입력해도 접속이 된다....고..? 왜?

아까 규칙에 추가한 80번 포트가 여기서 설명된다. 우리가 평상시에 사용하는 naver나 daum 같은것들도 사실 사이트 뒤에 80번 포트가 숨어있었다. 실제로 해보면 안다. 네이버 사이트 url 뒤에 :80이라고 적고 실행해도 naver는 나타난다(예기치 않은 이유로 종료됐다고 나오는데 url그대로 실행하면 다시 원래대로 나타난다)

그렇다면, 80번 포트로 사이트를 열어서 5000번 포트에 연결시켜줬던 것이다.
근데 왜 하필 80? 서버 세팅할때 입력한 명령어들중 하나,

sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 5000 이것 때문이다.

포트 번호를 입력하지 않아도 자동으로 접속되기 위해서, 80포트로 오는 요청을 5000포트로 전달하게 하는것을 포트 포워딩이라고 한다.

이런 작업을 진행했기 때문에 포트 번호 없이도 접속이 가능한 것이다.

이번주의 목표는 내가 컴퓨터를 안켜놓아도 서버가 돌아가게 하는것인데, git bash를 끄면 사이트가 연결되지 않는다. 내가 컴퓨터를 꺼놓아도 서버가 연결되게끔 하는 작업을 해보자.

profile
개발자 꿈나무

0개의 댓글

관련 채용 정보