211002 개발일지

Moonsun Kim·2021년 10월 2일
1

프로젝트 서버에 올리는 방법

1. "웹서비스 런칭"에 필요한 개념 소개

📍 웹 서비스를 런칭하기 위해 클라이언트의 요청에 항상 응답해줄 수 있는 서버에 프로젝트를 실행시켜줄 것이다.
📍 언제나 요청에 응답하려면,
① 컴퓨터가 항상 켜져있고 프로그램이 실행되어 있어야하고,
② 모두가 접근할 수 있는 공개 주소인 공개 IP 주소(Public IP Address)로 나의 웹 서비스에 접근할 수 있도록 해야한다.
📍 외부 접속이 가능하게 설정한 다음에 내 컴퓨터를 서버로 사용할 수도 있다.
📍 AWS 라는 클라우드 서비스에서 편하게 서버를 관리하기 위해서 항상 켜 놓을 수 있는 컴퓨터인 EC2 사용권을 구입해 서버로 사용할 것이다.

<IP 주소와 포트>

  • 우리가 접속하는 컴퓨터는 숫자로 되어있는 주소(IP 주소)가 붙어있다. 우리가 아는 URL 은 우리가 알아보기 쉽게하는 등의 이유로 IP 주소를 알파벳으로 바꾼 것이다. 이렇게 변환해주는 시스템을 DNS 라고 한다.

    EX)

    URL = http://google.com

    ↓ DNS (Domain Name System)

    IP = http://172.217.25.14:80

    (여기서 Port = :80에 해당)

IP 주소 (줄여서 IP)

: 컴퓨터가 통신할 수 있도록 컴퓨터마다 가지는 고유한 주소라고 생각하면 된다. 정확히는 네트워크가 가능한 모든 기기가 통신할 수 있도록 가지고 있는 특수한 번호이다. 서버는 하나의 주소를 가지고 있다.

포트(port)

: 하나의 IP에 여러 포트가 있다. 하나의 포트에 하나의 프로그램을 실행시킬 수 있다.

2. AWS 서버 구매하기

2-1) AWS EC2 서버 구매하기

EC2 콘솔페이지

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

2-2) AWS EC2 서버 종료하는 방법 (1년 후 자동결제 방지!)

중지 또는 종료하는 법. 무료 기간(1년) 후 결제가 되기 전에, 이렇게 종료하기!!
✔ 대상 인스턴스에 마우스 우클릭 → '인스턴스 상태' 클릭
✔ 중지 또는 종료 중 하나를 클릭하면 명령을 실행한다.

2-3) AWS EC2에 접속하기

(1) SSH (Secure Shell Protocol)

  • 다른 컴퓨터에 접속할 때 쓰는 프로그램이다. 다른 것들 보다 보안이 상대적으로 뛰어나다.
  • 접속할 컴퓨터에 22번 포트가 열려있어야 접속 가능하다. AWS EC2의 경우, 이미 22번 포트가 열려있다.

(2) AWS EC2에 접속하기

  • Window에는 SSH가 없으므로, git bash라는 프로그램을 이용!!
    - git bash를 실행하고, 아래를 입력하기

    ssh -i 받은키페어를끌어다놓기 ubuntu@AWX에적힌내아이피

    - EX) 아래와 비슷한 생김새!

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

    - Key fingerprint 관련 메시지가 나올 경우 Yes 입력하기
    - git bash를 종료할 때는 exit 명령어를 입력하여 ssh 접속을 먼저 끊어주기

2-4) 간단한 리눅스 명령어

  • 리눅스는 윈도우 같지 않아서, '쉘 명령어'를 통해 OS를 조작한다.
    (일종의 마우스 역할)

    <가장 많이 쓰는 명령어>

    ls: 내 위치의 모든 파일을 보여준다.
    pwd: 내 위치(폴더의 경로)를 알려준다.
    mkdir: 내 위치 아래에 폴더를 하나 만든다.
    cd [갈 곳]: 나를 [갈 곳] 폴더로 이동시킨다.
    cd .. : 나를 상위 폴더로 이동시킨다.
    cp -r [복사할 것][붙여넣기 할 것]: 복사 붙여넣기
    rm -rf [지울 것]: 지우기
    sudo [실행 할 명령어]: 명령어를 관리자 권한으로 실행한다.
    sudo su: 관리가 권한으로 들어간다. (나올때는 exit으로 나옴)

💡 TIP. 리눅스 커널에서 윗화살표를 누르면 바로 전에 썼던 명령어가 나온다.


3. 서버 세팅하기

3-1) filezilla를 이용해서, 간단한 python 파일을 올려보자.

1st. 서버에 업로드 할 간단한 파일을 다운로드한다.

EX) test.py
https://s3-us-west-2.amazonaws.com/secure.notion-static.com/593aa12f-0c0440dc-957340e1b6

아주 간단하게, 이 정도만 적어보자.
그리고 적당한 곳에 파일을 저장해보자.

print('hello sparta!!')

2nd. filezilla 실행 후, File 클릭 → New Site 클릭 → 파일 제목 myec2 입력

3rd. 정보들을 입력하고, OK 누르면 서버의 파일들을 볼 수 있다.

(HOST: 내 EC2서버의 IP // User: ubuntu로 입력)

4th. 마우스로 드래그 해서 파일을 업로드/다운로드하면 된다.

3-2) 파이썬 파일 실행해보기

  • EC2 콘솔창에서 아래와 같이 입력하기
    home 디렉토리로 이동

    cd ~

    실행. 콘솔창에 hellow world!가 뜨는 것을 확인 할 수 있다.

    python3 test.py

3-3) 서버 환경 통일하기

💡 지금 막! 컴퓨터를 구매한 상태이기 때문에 여기에 업그레이드, DB설치, 명령어 통일 등의 세팅을 해줘야 본격적으로 이용할 때 편리하다.

EC2 한방에 세팅하기
https://s3-us-west-2.amazonaws.com/secure.notion-static.com/d3623fe88b1745d1-bb70304e88dfb537/initial_ec2.sh

✔ filezilla로 업로드하고, git bash(또는 터미널)에서 아래 코드를 차례대로 입력해주기
✔ 3분 정도 기다리면 모든 세팅이 완료된다.

sudo chmod 755 initial_ec2.sh
./initial_ec2.sh

3-4) 다시, 파이썬 파일을 실행해보기

💡 이제, python 이라고 입력해도 가능!

python test.py


4. 서버 환경 세팅 - [한 걸음 더]

4-1) 한국시간 세팅

- EC2 컴퓨터의 시간대를 한국으로 맞추는 명령어
sudo ln -sf /usr/share/zoneinfo/Asia/Seoul /etc/localtime

4-2) 파이썬 (python3 → python)

- python3 명령어를 python으로 사용할 수 있게 하는 명령어
sudo update-alternatives --install /usr/bin/python python /usr/bin/python3 10

4-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

4-4) mongoDB 설치

(1) mongoDB 설치 코드

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 /e

sudo apt-get update

sudo apt-get install -y mongodb-org

(2) mongoDB 실행하기

✔ 실행. 아무 반응이 없으면, 잘 실행된 것!
✔ 리눅스는 보통 잘 되면 아무것도 안나온다.

sudo service mongod start

(3) mongoDB 접속 계정 생성하기

  • mongoDB를 외부에 열어주기 전에, 접속에 필요한 아이디와 비밀번호를 세팅해보자!! (설정 안 하면 누구나 DB정보를 볼 수 있다는...)

    mongo

  • 좌측에 > 표시가 나오면 성공적으로 MongoDB에 접속한 것이다!

  • 다음 명령어를 순차적으로 입력하기 (test, test 자리에 내가 넣고 싶은 아이디/비밀번호를 넣으면 된다.(영어로))

    ✔ admin으로 계정 바꾸기

    use admin;

    ✔ 계정 생성하기

    db.createUser({user: "test", pwd: "test", roles:["root"]});

  • 그 후

    ✔ 나오기

    exit

    ✔ MongoDB 재시작

    sudo service mongod restart

(4) mongoDB를 외부에 열어주기

💡 mongoDB는 디폴트로 내부에서만 접속을 허용하고 있다. 이 작업은 외부에서 접근이 가능하도록 잠금을 풀어는 것이다.
  • 리눅스 자체 에디터(고급 메모장 정도로 생각!)인 Vimn이 등장한다.
  • a를 눌러야 입력 모드가 되고, :wq를 눌러야 저장하고 나올 수 있다.

    sudo vi /etc/mongod.conf

    sudo: 관리자(SuperUser) 권한으로 다음을 실행
    => "관리자 권한으로 /etc 폴더 아래 mongod.conf 파일을 Vim으로 켜줘!"라는 뜻
  • 위 멸영어 실행 후, 아래 방향 화살 키 누르기

입력 모드 전환
a

  • bindIp: 내용을 0.0.0.0으로
  • security: 내용을 authorization: enabled로 바꾸기
내용 저장하고 에디터 종료하기. esc 누르고 다음 입력.

:wq

재시작

sudo service mongod restart

(5) Robo3T를 이용해서, "내 컴퓨터에서" → "서버에 있는 mongoDB"에 접속하기

💻 좌측 상단 File 아래에 위치한 아이콘(컴퓨터모양) 클릭
Create 클릭
↓ 접속 정보 세팅하기
↓ 상단 Authentication 탭 클릭

① Perform authentication 체크박스 클릭
② 생성한 계정의 아이디와 비밀번호 입력 후, save 클릭

4-5) 포트포워딩 (80포트 → 5000포트)

- 80포트로 들어오는 요청을 5000포트로 넘겨주는 명령어
sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 5000

5. Flask 서버 실행해보기

5-1) 기초적인 flask 서버 파일 만들기

  • app.py 파일 준비
from flask import Flask
app = Flask(__name__)

@app.route('/')
def home():
    return 'This is Home!'

if __name__ == '__main__':
    app.run('0.0.0.0', port=5000, debug=True)
  • filezilla를 통해 EC2에 업로드한 다음, 실행해보기
# 실행
python app.py

🎯 실행시키면, 'flask 패키지가 없다'는 에러가 난다. 패키지를 설치해야 한다.

5-2) pip로 패키지 설치하기

💡 file → setting → ..에서 + 버튼 누르고 설치했던 작업을, 명령어로 해야한다.

pip install flask

5-3) 다시 flask 서버를 실행해보기

  • 아래 명령어로 flask 서버를 실행한다.
python app.py
  • 서버 실행이 되면, 크롬에서 접속을 해본다.
    ✔ 크롬 브라우저 창에 아래와 같이 입력한다.
http://[내 EC2 IP]:5000/

🎯 아직 작동하지 않는다. AWS에서 약간의 설정이 더 필요하다.


6. AWS에서 포트 열어주기

6-1) AWS에서 5000포트 열어주기

- EC2 서버(=가상의 내 컴퓨터)에서 포트를 따로 설정하는 것 외에도, AWS EC2에서도 자체적으로 포트를 열고/닫을 수 있게 관리를 하고 있다.
→ 그래서 AWS EC2 Security Group에서 인바운드 요청 포트를 열어줘야 한다.
💻 일단, EC2 관리 콘솔로 들어간다. 그리고 보안그룹(영문: Security Group)을 눌러 들어간다.
↓ 해당 보안그룹을 클릭한다.
↓ Edit inbound rules를 선택한다.
↓ 아래 세 가지 포트를 추가한다.
① 80포트: HTTP 접속을 위한 기본포트
② 5000포트: flask 기본포트
③ 27017포트: 외부에서 mongoDB 접속을 하기 위한 포트

6-2) 다시 접속해보기!!

  • http://내아이피:5000
    → 잘 작동하는 것을 확인할 수 있다.
  • 이제 app.py 파일을 수정하고, 다듬어서 올리면 진짜 프로젝트가 된다.

0개의 댓글