Web/기타

AWS에 웹 서버 구축 및 DB 서버 연결 및 웹 페이지 배포하기

daeunnniii 2021. 7. 29. 00:34
728x90
반응형

이번에는 1) AWS에 웹 페이지를 개발한 코드를 올리고, 2) AWS의 DB를 내 컴퓨터와 연결하고, 3) 포트 포워딩해준 뒤, 4) AWS EC2 인스턴스의 원격접속을 종료하더라도 웹 페이지 접속이 계속 가능하도록 (즉, 컴퓨터를 종료해도 웹 페이지 접속이 가능하도록) 설정하는 방법을 알아보려고 한다!

 

1. 웹 페이지 개발하기

먼저, 만들고자하는 웹페이지를 개발한다.

 

2. AWS에서 포트 열어주기

EC2 인스턴스에서 포트를 따로 설정하는 것 이외에도, AWS EC2에서도 자체적으로 포트를 열고 닫을 수 있게 관리를 하고 있다. 따라서 AWS EC2 Security Group 에서도 인바운드 요청 포트를 열어주어야한다.

먼저 해당 인스턴스의 보안 그룹 이름을 확인하고, 해당 보안 그룹 설정으로 들어간다.

기본적으로 아래와 같이 하나의 인바운드 규칙이 존재할 것이다. 오른쪽 "Edit inbound rules(인바운드 규칙 편집)"을 눌러 인바운드 규칙을 편집해준다.

 

아래와 같이 사용하고자 하는 포트를 추가해준다.

참고로 80번 포트는 HTTP 접속을 위한 기본포트, 5000번 포트는 flask 기본포트, 27017 포트는 외부에서 mongoDB 접속을 하기 위한 포트이다.

3. 서버에 있는 DB를 내 컴퓨터와 연결하기

글쓴이의 경우 mongoDB를 사용했기 때문에 Robo3T를 활용해서 AWS EC2 인스턴스에 있는 mongoDB를 로컬 컴퓨터와 연결할 것이다.

Robo3T를 들어가서 Create를 클릭한다.

 

Name에는 데이터베이스 이름을, Address에는 AWS EC2 인스턴스의 퍼블릭 IP 주소를 입력해준다.

그리고 Authentication으로 가서 Perform authentication을 체크해준 뒤 User Name과 Password를 설정해준 뒤 "Save" 버튼을 눌러준다.

위에서 설정한 id와 pw를 서버 코드에도 동일하게 입력해준다.

client = MongoClient('mongodb://아이디:비밀번호@localhost', 27017)

 

4. 웹 사이트를 AWS에 업로드하기

이전 게시물에서 AWS EC2 인스턴스를 Filezilla를 활용해서 sftp 접속하는 방법을 알아보았다.

(혹시 모르시는 분은 아래 게시물을 참고)

https://daeunnniii.tistory.com/110

 

AWS EC2 인스턴스를 Filezilla(파일질라)로 sftp 접속하기

앞에서 AWS EC2 인스턴스 생성 방법과 Filzilla 설치 방법을 알아보았다. 이번에는 AWS EC2 인스턴스를 Filezilla로 sftp 접속하는 방법을 알아볼 것이다. SFTP는 SSH File Transfer Protocol의 약자로 SSH의 파일..

daeunnniii.tistory.com

Filezilla를 들어가면 다음과 같이 뜨는데, 자신이 개발해둔 폴더로 가서 웹 사이트를 동작시키기 위해 필요한 파일 및 폴더들을 모두 AWS EC2 인스턴스의 폴더로 업로드해준다.

아래에서는 가상환경에 해당하는 venv 폴더 빼고 이동해주었다.

잘 전송된 것을 확인할 수 있다.

 

5. 포트포워딩

우리가 네이버를 들어갈 때 url을 https://www.naver.com로 입력하지만, 사실 https://www.naver.com:80으로 뒤 포트 번호가 숨어있는 것이다!

그리고 우리가 위에서 개발한 웹사이트의 경우 http://ip주소:5000의 경우에는 외부에서 80포트로 들어오는 요청을 5000포트(flask 서버)로 포트포워딩을 해주는 것이다!

 

위 네이버처럼 굳이 뒤에 포트 번호를 입력하지 않고, 그냥 http://ip주소만 입력했을 경우에 바로 접속이 될 수 있도록 하기 위해서는 포트포워딩을 활용하면 활용하면 된다.

포트포워딩 해주는 리눅스 명령어는 다음과 같다. 아래 명령어는 80포트로 들어오는 요청을 5000포트로 넘겨주는 명령어이다.

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

 

6. nohup 설정하기

5번까지만 할 경우에는 AWS EC2 인스턴스 원격접속을 종료할 경우, 즉 PuTTY를 종료한 뒤에 해당 http://IP주소로 접속해보면 접속이 안되는 것을 확인할 수 있다.

 

SSH 접속을 끊어도 서버가 계속 실행되게 하려면 어떻게해야할까?

바로 nohup 명령어를 활용하면 된다.

nohup 명령어는 리눅스에서 프로세스를 실행한 터미널의 세션 연결이 끊어지더라도 지속적으로 동작 할 수 있게 해주는 명령어이다.


★원격 접속을 종료하더라도 서버가 계속 실행되도록 하기

nohup [프로세스] &

ex) nohup python app.py &

위 명령어를 입력한 뒤 원격접속을 종료해보자.

종료한 뒤 http://ip주소를 접속해도 웹 사이트가 잘 접속되는 것을 확인할 수 있다!

 

★서버 종료하기

# 아래 명령어로 미리 pid 값(프로세스 번호)을 확인한다
ps -ef | grep 'app.py'

# 아래 명령어로 특정 프로세스를 종료한다.
kill -15 [pid값]

#만약 종료되지 않으면 강제 종료한다. (비권장)
kill -9 [pid값]

 

다음 게시글에서는 도메인을 구입해서 웹 사이트를 배포하는 방법을 알아볼 것이다!

https://daeunnniii.tistory.com/111

 

도메인 구입하고 AWS EC2 인스턴스와 연결해서 웹 페이지 배포하기

이전 게시물에서는 AWS에 웹 서버 구축하고, DB 서버 연결, AWS EC2 인스턴스 원격접속 종료 시에도 웹 페이지를 접속할 수 있는 방법 등을 알아보았습니다. https://daeunnniii.tistory.com/112 AWS에 웹 서버

daeunnniii.tistory.com

728x90
반응형