환경 설정하기
1) AWS 가입하기
(승인까지 최대 24시간이 걸리니 미리해야한다)
https://portal.aws.amazon.com/billing/signup#/start
EC2 확인
https://ap-northeast-2.console.aws.amazon.com/ec2/v2/home?region=ap-northeast-2
- 해외결제가 가능한 결제수단을 넣어야 가입이 정상적으로 이루어진다.
- AWS는 개인에게 클라우드 환경의 가상서버를 제공한다.
- 기본사양의 서버(EC2)를 1년 동안 무료로 사용할 수 있다.
EC2 Instance 생성
1) 웹 서버 개념 복습
- 웹 클라이언트(브라우저)는 웹서버에 요청을 해서 웹 서버로부터
- 원하는 데이터를 받아가는 일방적인 관계
- => 웹 서버는 절대로 웹 클라이언트에 먼저 요청불가.
- - 서버는 어떤 클라이언트가 어떤 주소로 존재하는지 모르는게 일반적이기 때문
- - 서버가 클라이언트에게 먼저 요청하게 된다면 서버가 클라이언트가 되고
- 클라이언트가 서버가 되는 역할이 반전된 상황으로 봐야한다.
서버 컴퓨터와 웹 서버(프로그램)의 관계
- 직접 만든 프로그램을 API 서버, 웹 서버, 앱서버 등의 이름으로 부를수 있으며
- 모두 프로그램에 속한다.
- 서버 컴퓨터는 일반적으로 쓰는 컴퓨터와 같은 역할을 한다.
- Node.js로 app.js 파일을 실행해 서버 프로그램을 켤 수 있다
- MongoDB와 같으 DBMS를 설치하여 데이터베이스를 사용할 수 있다
- EC2란? - AWS에서 제공하는 서버 컴퓨터 대여 서비스
2) EC2 Instance 생성
- AWS EC2 에서는 컴퓨터 하나의 단위를 Instance라는 이름으로 부른다
- => 생성한다는 건 서버 컴퓨터를 하나 대여한다는 뜻
AWS Console Page
https://console.aws.amazon.com/console/home
- Region 선택 후 서울 선택
- EC2 Instance 생성
- EC2 서비스 페이지 이동 후 왼쪽 메뉴에서 인스턴스를 누른다
- 우측 상단 인스턴스 시작버튼을 누르고
- 스크롤을 조금내려 Ubuntu Server 18.04 LTS를 선택
- "프리 티어 사용 가능" 이라고 적혀있는 t2.micro타입을 체크
- keypair 에서 '새 키 페어 생성'을 누른다
- 키페어 이름을 입력하고 키페어 유형은 RSA방식으로 체크
- 키페어 다운로드 버튼을 누르고 인스턴스 시작을 누르면 끝.
3) EC2 Instance 종료하는 방법
- 무료 기간(1년) 후 결제 전 종료해야한다.
- 대상 인스턴스에 우클릭 > '인스턴스 상태'를 클릭 후 중지 또는 종료 선택
4) EC2 Instance에 접속하기
방화벽 ?
- 서버 컴퓨터에 아무나 연결할 수 없도록 해주는역할
- AWS에서는 "Security Group" 또는 "보안 그룹"이라는 이름으로 방화벽을 제공
SSH 개념정리
- SSH(Secure Shell)는 일반적으로 다른 컴퓨터에 연결할 때 사용되는 프로그램
- 보안이 뛰어나 서버 연결을 위해 일반적으로 사용된다
- 접속 할 Instance의 방화벽에서 22번 포트가 열려있어야 접속 가능한데
- AWS EC2의 경우, 기본적으로 생성하는 Instance는 이미 22번 포트가 열려있다.
AWS EC2에 접속하기
MacOS
Mac 자체 ssh가 있어 명령어로 바로 접근가능
터미널을 열고 (spotlight에 terminal 입력)
방금 받은 Keypair의 접근 권한을 바꿔준다
sudo chmod 400 받은키페어를끌어다놓기
SSH로 접속
ssh -i 받은키페어를끌어다놓기 ubuntu@AWS에적힌내아이피
Windows
ssh가 없으므로 git bash를 실행하고
ssh -i 받은키페어를끌어다놓기 ubuntu@AWS에적힌내아이피
Key fingerprint 관련 메세지가 나올 경우 Yes를 입력한다
git bash 종료시 exit 명령어를 입력하여 ssh 접속을 끊어준다.
5) 간단한 리눅스 명령어
ls: 내 위치의 모든 파일을 보여준다.
pwd: 내 위치(폴더의 경로)를 알려준다.
mkdir: 내 위치 아래에 폴더를 하나 만든다.
cd [갈 곳]: 나를 [갈 곳] 폴더로 이동시킨다.
cd .. : 나를 상위 폴더로 이동시킨다.
cp -r [복사할 것] [붙여넣기 할 것]: 복사 붙여넣기
rm -rf [지울 것]: 지우기
sudo [실행 할 명령어]: 명령어를 관리자 권한으로 실행한다.
sudo su: 관리자 권한이 있는 계정으로 접속한다. (exit 입력하면 관리자 계정에서 로그아웃)
서버에 Node.js와 MongoDB 설치
1) EC2 Instance에 Node.js 설치하기
터미널 혹은 git bash로 서버에 로그인 후
curl -sL https://deb.nodesource.com/setup_16.x | sudo -E bash -
sudo apt-get install -y nodejs
설치 확인
node -v
npm -v
2) EC2 Instance에 MongoDB 설치
wget -qO - https://www.mongodb.org/static/pgp/server-4.2.asc | sudo apt-key add -
echo "deb [ arh=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
( 참고자료 : https://docs.mongodb.com/manual/tutorial/install-mongodb-on-ubuntu/)
MongoDB 실행 명령어
sudo service mongod start
아무 반응이 없으면 정상.
서버 프로그램 실행 및 웹사이트 접속
1) EC2 Instance에서 서버 실행
- GitHub에 있는 Repository Clone으로 부터 코드를 가져와야한다.
- 서버로 보낼 코드가 있는 GitHub Repository에 들어가
- 초록색 "Code" 버튼을 누르고 HTTPS링크를 복사
- EC2 Instance 터미널에
git clone <복사한 GitHub Repository URL>
- 입력해준다.
프로젝트 실행
- cd <GitHub 프로젝트명>
- npm install
- node app.js
웹 사이트 접속
- EC2 Instance IP 복사 (IPv4)
- 브라우저에 주소입력을 하면 당연하게도 안된다.
- (방화벽 때문)
2) IP Address(IP 주소)와 Port(포트)
IP 주소
- 컴퓨터가 통신할 수 있도록 컴퓨터마다 가지는 고유주소.
=> 통신이 가능한 모든 기기가 통신할 수 있도록 함.
포트
- 통신이 가능한(IP를 가진) 모든 기기는 Port라고 불리는
- 데이터가 드나들 수 있는 통로
3) EC2 Instance 포트 설정 : AWS Scurity Group
https://console.aws.amazon.com/console/home
- Scurity Group 설정 페이지 접속
- 생성된 EC2를 선택 후 하단 창에있는 "Security"탭 선택
- Security groups 라는 이름 밑 링크를 클릭
- 인바운드 규칙 편집을 클릭
- Add rule - HTTP - Anywhere-IPv4를 설정후 저장한다.
4) EC2 Instance 포트 설정
iptables ?
- AWS가 아닌 리눅스 운영체제 내부에서의 방화벽 역할을 하는 프로그램
리눅스로 들어오는 모든 요청은 iptables에 의해 정의된 규칙을 따라 처리,
이것을 이용해 외부에서 80 포트로 들어오는 요청을 리눅스 내부에서 사용되는
3000 포트로 전달하도록 규칙을 설정
sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3000
https의 기본 포트는 443이며 http 프로토콜을 사용하는 경우 기본 포트를 80 으로 사용하는것이 약속
5) 서버 실행 프로그램 PM2
PM2 설치 전 관리자 계정 전환
sudo -s
npm으로 전역설치
npm install -g pm2
pm2로 app.js 실행
pm2 start app.js
종료
pm2 delete 0
입력후 pm2 list를 입력시 프로세스가 없다면 정상적으로 종료된 것.
더 알아보자 !
1. IP란 ?
2. Cloud ?
3. pm2 ?
참고할만한 추가 자료들
DNS란? (도메인 네임 시스템 개념부터 작동 방식까지) - 하나몬
이 게시물의 중요 포인트 DNS(도메인 네임 시스템)이 사람이 읽을 수 있는 도메인 이름(www.hanamon.kr)을 IP 주소로 변환하는 시스템이라는 것은 쉽게 알 수 있습니다. 이번 글에서는 이렇게 도메인
hanamon.kr
https://maxkim-j.github.io/posts/packet-travel
브라우저 주소창에 URL을 치면 일어나는 일들
패킷의 길고도 짧은 여행
maxkim-j.github.io
couldn't connect to server 에러 발생시
https://www.mongodb.com/community/forums/t/error-couldnt-connect-to-server-127-0-0-1-27017/705/2
Error: couldn't connect to server 127.0.0.1:27017
You need to ensure the MongoDB server is running. Try: brew services start mongodb-community. Regards, Stennie
www.mongodb.com
'DevOps > AWS' 카테고리의 다른 글
AWS CodeDeploy를 Node.js환경에서 Github Actions에서 사용하기! (0) | 2023.03.18 |
---|---|
EC2에서 NginX로 https 적용해보기 (0) | 2023.03.16 |
How to Ubuntu Portforwarding ? (0) | 2023.03.16 |