회고/Today I Learned

[TIL] 9.16 - 스파르타 내일배움캠프 4일차(AWS 서버 구매 및 배포/ AWS ,mongoDB 연동하기, 포트포워딩, nohup)

민돌v 2021. 9. 16. 23:01

9.16

웹 프로그래밍 A-Z기초 5주차


1) AWS 서버 구매하기

https://ap-northeast-2.console.aws.amazon.com/ec2/v2/home?region=ap-northeast-2 

 

https://ap-northeast-2.console.aws.amazon.com/ec2/v2/home?region=ap-northeast-2

 

ap-northeast-2.console.aws.amazon.com

 


 

1. aws 에 들어가 로그인을 한 후 인스턴스를 클릭힌다.

[인스턴스] - [인스턴스 시작] - 3번째 거 (ubuntu server 18.04)

  • 인스턴스 : 서버 하나하나

인스턴스
ubuntu Server 18.04 선액

오픈소스 라이브러리인 리눅스 기반 서버 Ubuntu를 사용한다. (무료 라이센스이기 때문)

 


 

2. T2 micro 선택

T2 micro 선택
실행
키페어 선택 (생성시 RSA) : keypari는 잃어버리면 찾을 수 없으니 잘 보관하자

 

인스턴스를 보면 서버가 하나 실행중인 것을 볼 수있다.

t2 micro 서버는 해당된 크기만큼 1년간 무료로 사용이 가능하다고 한다. (하지만 혹시 모르니 잘 꺼두자)

 


 

3. AWS 인스턴스 서버 종료하기

  • 인스턴스 종료 : 다시 반납 (아예 종료)
  • 인스턴스 중지 : 잠시 컴퓨터 종료시키기
  • 인스턴스 재부팅 : 재부팅

 


 

4. 로컬 PC에서 원격으로 서버 접속하기

git Bash 에서 접속

//ssh -i 받은키페어를끌어다놓기 ubuntu@AWS에적힌내아이피(인스턴스 퍼블릭 ipv4 주소)

ex)
ssh -i /path/my-key-pair.pem ubuntu@13.125.250.20

접속 완료 상태

 


2) filezila

  • 파일질라란, FTP(File Transfer Protocol) 프로그램, 즉 파일 전송 프로그램 입니다.
  • 파일질라는 FTP, SFTP, FTPS를 지원한다.
    1. FTP : 파일 전송 프로트콜로, 프로코톨이란 컴퓨터가 서로 통신하기위한 통신 규약입니다. 즉 FTP는 컴퓨터끼리 파일을 전송할 때 사용하기위한 약속이라고 볼 수 있습니다.
    2. SFTP : (SSH FTP)를 말합니다. FTP를 이용하여 클라언트와 서버사이에 파일을 주고 받을 수 있습니다. SFTP 란 SSH(셸) 데이터 스트림을 통해 보안등급을 높인 파일 전송 프로토콜입니다.
  • 즉, 파일질라는 이런 통신 프로토콜(FTP, SFTP)를 제공함으로써 이를 이용하여 보다 쉽고 직관적으로(GUI 지원) 클라이언트와 서버 사이에 파일을 주고 받을 수 있습니다.

 

그럼 어디에 파일질라(FileZila)를 사용하나 ? ?

 

1. AWS 서버에 파일 업로드 하기

갑자기 파일질라가 나온 이유는 바로, 위에서 구매한 AWS 서버(인스턴스)에서 제공받은 키페어가 SSH이기 때문에 파일질라와 이 키페어를 이용해 쉽게 서버에 파일을 올릴 수 있습니다.

 

2. FileZila 사용법

[파일질라 실행 후 설정] - [1번 클릭] - [site 생성 (New site)] - [드로그 앤 드랍으로 파일 전송]

  1. Protocal : SFTP
  2. Host : aws 내 서버(인스턴스) 퍼블릭 IP 주소
  3. Logon type : key file

세팅 후 화면

 

 


3) AWS 서버 사용하기

1. aws 서버 환경 세팅 명령어들

  1. 한국시간 세팅 : EC2 컴퓨터의 시간대를 한국으로 맞추는 명령어
    •  
    • sudo ln -sf /usr/share/zoneinfo/Asia/Seoul /etc/localtime
  2.  파이썬 (python3 → python) : python3 명령어를 python으로 사용할 수 있게 하는 명령어
    • sudo update-alternatives --install /usr/bin/python python /usr/bin/python3 10
  3. pip (pip3 → pip)
    1. pip3 설치
    2. pip3 명령어를 pip으로 사용할 수 있게 하는 명령어
      • # pip3 설치
        sudo apt-get update
        sudo apt-get install -y python3-pip
        
        # pip3 대신 pip 라고 입력하기 위한 명령어
        sudo update-alternatives --install /usr/bin/pip pip /usr/bin/pip3 1

2.  aws 포트 열어주기

aws 서버 환경을 모두 설정해주고, 파일질라를 이용해 Flask 서버(app.py)를 옮겨서 실행하면 웹 구동 준비가 완료된다.

하지만, AWS 서버에서 구동하는 웹페이지상에 접속하기 위해서는 포트번호를 열어주어야 접속할 수 있다.

 

(AWS 접속이 안되는 이유)

  • AWS 자체적인 보안이 있기 때문에 아무포트로 접속한다고 해도, 접속을 막는다.
  • AWS에서 접속가능한 포트번호를 설정해준 후에야 접속이 가능하다.

 

(AWS 포트 여는 방법)

요 런처 위저드 클릭

  1. EC2 인스턴스에서 실행중인 인스턴스를 클릭해 보안그룹(Security Group)에 들어갑니다.
  2. 인바운드 규칙 편집을 클릭한 후 포트번호를 추가해줍니다.

이러면 접속 가능!

 


 

3. AWS MongoDB 연결하기

  1. AWS 서버에 몽고디비를 설치합니다.
  2. 설치한 몽고디비의 아이디와 패스워드를 세팅해줍니다.
  3. 몽고디비를 외부에서도 열수있도록 보안을 열어줍니다.
  4. Robo3T를 이용해 AWS 서버의 DB에 접속합니다.

 

몽고디비 설치 - aws 서버에서

wget -qO - https://www.mongodb.org/static/pgp/server-4.2.asc | sudo apt-key add -

echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu bionic/mongodb-org/4.2 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-4.2.list

sudo apt-get update

sudo apt-get install -y mongodb-org

 

몽고디비 접속 및 계정 생성

mongo

# admin으로 계정 바꾸기
use admin;

# 계정 생성하기
db.createUser({user: "test", pwd: "test", roles:["root"]});

# 나오기
exit

# MongoDB 재시작
sudo service mongod restart

 

몽고디비 외부 접속 열기

  • 몽고디비는 디폴트가 내부 접속만을 허용하기 때문에, 외부에서 접근이 가능하도록 작업해야한다.
  • vim에 접속해서 수정
sudo vi /etc/mongod.conf

# sudo: 관리자(SuperUser) 권한으로 다음을 실행
# => "관리자 권한으로 /etc 폴더 아래 mongod.conf 파일을 Vim으로 켜줘!"라는 뜻입니다

디폴트

 

수정

입려모드(i)로 수정하고 저장후 종료 (wq)

몽고디비 재시작 : sudo service mongod restart

 

Robo3T로 연결

새 커넥션 생성 후, 주소를 aws 서버 주소로 설정

설정해준 admin 계정으로 접속

 

파이썬에서 몽고디비 id, password로 접속

#pymongo 계정 접속 id:passwprd
client = MongoClient('mongodb://test:test@localhost', 27017)

 


4) 포트 포워딩 (포트 번호 때기)

 

포트 포워딩 이란 (Port fowarding)

  • http의 기본 포트번호는 디폴트로 80 포트가 설정되어 있다.
  • 그래서 80포트는 굳이 적지 않고 도메인만 입력해도 자동으로 80포트가 붙는다. (숨겨져 있다. naver.com:80 )
  • 주소에 포트번호를 보이고싶지 않다면, 80포트로 들어오는걸 원하는 포트번호로 포워딩을 시켜주면 된다.
  • 이것을 포트 포워딩이라 한다.

 

포트 포워딩 설정 방법 (5000 포트로)

aws 서버 shell 스크립트(bash) 에서 설정한다.

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


 

5) SSH 접속을 끊어도 서버 돌아가도록 설정하기 (nohup)

 

git bash(shell)에서 AWS 서버환경에서 작업]

#원격접속을 종료하더라도 돌아가게
nohup python app.py&


#서버 종료하기 (강제 종료)
# 아래 명령어로 미리 pid 값(프로세스 번호)을 본다
ps -ef | grep 'app.py'

# 아래 명령어로 특정 프로세스를 죽인다
kill -9 [pid값]


#다시 켜기
nohup python app.py &

nohup - 성공 상태
강제 종료할때 위에 두개 끄기 - (22943,22952 - 프로세스 번호(pid))

 

 

 

아이고 힘들다

오늘 좀 고생했다 화이팅!