[WIL] 웹개발 종합반 5주차

[WIL] 웹개발 종합반 5주차

프로젝트 서버에 올리기

서버의 역할

클라이언트의 요청을 받아서 원하는 것을 준다.

언제나 요청에 응답하려면,

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

외부 접속이 가능하게 설정한 다음, 내 컴퓨터를 서버로 사용할 수도 있지만 AWS라는 클라우드 서비스에서 편하게 서버를 관리하기 위해서 항상 켜 놓을 수 있는 컴퓨터인 EC2 사용권을 구입해 서버를 사용할 예정이다.

IP 주소와 포트

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

IP 주소

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

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

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

AWS 서버 구매하기

EC2 서버 구매하기

AWS에서는 컴퓨터 한대를 인스턴스라고 부른다.

EC2 콘솔페이지

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

1년 간 무료 이용이 가능하며, 1년 후엔 자동 결제된다. 더이상 결제를 원하지 않으면 종료/중지한다.

준비 상식

1. SSH(Secure Shell Protocol)

다른 컴퓨터에 접속할 때 쓰는 프로그램. 다른 것들 보다 보안이 상대적으로 뛰어나다.

접속할 컴퓨터의 22번 포트가 열려있어야 접속 가능하다. AWS EC2의 경우, 이미 22번 포트가 열려있다.

2. AWS EC2에 접속하기

git bash를 실행한다. ssh -i 받은키페어끌어다놓기 ubuntu@AWS에적힌내아이피 Key fingerprint 관련 메세지가 나올 경우 Yes. git bash를 종료할 때는 exit 명령어를 입력하여 ssh 접속을 먼저 끊어줄 것.

3. 간단한 리눅스 명령어 연습하기

리눅스는 윈도우와 달리 '쉘 명령어'를 통해 OS를 조작한다.

가장 많이 쓰는 명령어 몇 가지 (tip! ↑키를 누르면 직전에 썼던 명령어가 나온다.)

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

서버 세팅하기

filezilla를 이용해서, 파일을 업로드한다.

파일질라 실행 후 다음과 같이 설정한다.

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

(Host : 내 EC2서버의 ip//User:ubuntu로 입력)

(Host : 내 EC2서버의 ip//User:ubuntu로 입력) 마우스로 드래그해서 파일을 업로드/다운로드하면 된다.

파이썬 파일 실행하기

EC2 콘솔창에

python3 test.py

를 입력하면 실행된다. 여기서 python3인 이유는 python3버전을 사용하고 있기 때문이다.

서버 환경 통일하기

파일질라에 EC2 세팅 파일을 업로드 한 후

미리 세팅된 파일(initial_ec2.sh)

sudo chmod 755 initial_ec2.sh ./initial_ec2.sh

를 차례대로 실행한다. 3분 정도 기다리면 모든 세팅이 완료된다.

이제 python test.py 라고 입력해도 파일이 실행된다.

서버 환경 세팅(EC2 세팅 파일 내용)

#EC2 컴퓨터의 시간대를 한국으로 맞추는 명령어 sudo ln -sf /usr/share/zoneinfo/Asia/Seoul /etc/localtime #sudo update-alternatives --install /usr/bin/python python /usr/bin/python3 10 sudo update-alternatives --install /usr/bin/python python /usr/bin/python3 10 # 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 # 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 /etc/apt/sources.list.d/mongodb-org-4.2.list sudo apt-get update sudo apt-get install -y mongodb-org # 실행. 아무 반응이 없으면, 잘 실행된 것! sudo service mongod start #mongoDB 접속 계정 생성하기 mongo #좌측에 '>' 표시가 나오면 성공적으로 MongoDB에 접속한 것! 다음 명령어를 순차적으로 입력 # admin으로 계정 바꾸기 use admin; # 계정 생성하기 db.createUser({user: "원하는아이디", pwd: "비번", roles:["root"]}); # 나오기 exit # MongoDB 재시작 sudo service mongod restart #mongoDB 외부에 열어주기 sudo vi /etc/mongod.conf # sudo: 관리자(SuperUser) 권한으로 다음을 실행 # => 관리자 권한으로 /etc 폴더 아래 mongod.conf 파일을 Vim으로 켠다 # 리눅스 자체 에디터 Vim, a = 입력모드, :wp = 저장하고 나가기 # 입력 모드 전환 i # bindIp : 0.0.0.0 # security : authorization:enabled # 내용 저장하고 에디터 종료하기. esc 누르고 다음 입력. :wq # 재시작 sudo service mongod restart # 80포트로 들어오는 요청을 5000포트로 넘겨주는 명령어 sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 5000

flask 서버 실행해보기

1) pip로 패키지 설치

file → setting → ... 에서 +버튼을 누르고 설치했었던 작업을 명령어로 한다면 pip install flask 가 된다.

가 된다. pip : python의 패키지들을 쉽게 깔아주는 라이브러리

2) flask 서버 실행

python app.py

3) AWS에서 포트 열어주기

EC2 서버(=가상의 내 컴퓨터)에서 포트를 따로 설정하는 것 외에도, AWS EC2에서도 자체적으로 포트를 열고 닫을 수 있게 관리를 하고 있다.

→ 그래서 AWS EC2 Security Group에서 인바운드 요청 포트를 열어줘야 한다.

EC2 관리 콘솔로 들어가서 보안그룹(Security Group)을 눌러 들어간다. 해당 보안그룹을 클릭하고 Edit inbound rules를 선택한다. 세 가지 포트를 추가한다.

→ 80포트 : HTTP 접속을 위한 기본 포트

→ 5000포트 : flask 기본 포트

→ 27017포트 : 외부에서 mongoDB 접속을 하기 위한 포트

4) http://내아이피:5000 접속하기

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

Create를 눌러서 Adress를 서버 아이피로 바꾼 후 Authentication 탭을 클릭 Perform authentication 체크박스를 클릭 생성한 계정의 아이디와 비밀번호를 입력하고, 'save'를 클릭

※ pymongo가 올바르게 DB에 접근할 수 있도록 MongoDB 접속 세팅을 바꿔준다.

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

포트포워딩

http 요청에서는 80포트가 기본이기 때문에 굳이 :80을 붙이지 않아도 자동으로 연결이 된다.

포트 번호를 입력하지 않아도 자동으로 접속되기 위해 80포트로 오는 요청을 5000포트로 전달하게 하는 포트포워딩을 사용

리눅스에서 기본으로 제공해주는 포트포워딩

nohup 설정하기

터미널을 종료하면 프로세스가 종료되면서 서버가 멈춘다. SSH 접속을 끊어도 서버가 계속 돌게 설정해주자.

# 원격 접속을 종료하더라도 서버가 계속 돌아가게 하기 nohup python app.py & # 서버 종료하기(강제종료) # 아래 명령어로 미리 pid 값(프로세스 번호)을 본다 ps -ef | grep 'app.py' # ps -ef 모든 프로세스 # | grep 'app.py' 중에서 app.py가 포함된 애만 보여라 # 아래 명령어로 특정 프로세스를 죽인다 kill -9 [pid값] #다시 켜기 nohup python app.py

도메인 구입하기

도메인을 구매한다는 것은 네임서버를 운영해주는 업체에 IP와 도메인 매칭 유지비를 내는 것이다. 한국의 '가비아'라는 회사가 있다.

my가비아에서 DNS 관리툴로 가면 구매한 도메인 확인과 도메인에 호스트와 IP주소를 연결할 수 있다.

og태그

sns에 공유했을 때 사진이 보이도록 태그를 설정할 수 있다.

html 파일의 사이에 입력한다.

og태그 초기화

페이스북 og 태그 초기화 하기: https://developers.facebook.com/tools/debug/

카카오톡 og 태그 초기화 하기: https://developers.kakao.com/tool/clear/og

from http://haze-92.tistory.com/66 by ccl(A) rewrite - 2021-10-13 00:26:26