TIL

AWS 배포하는법

추운날_너를_기다리며 2024. 9. 4. 21:44

앞으로 해야할 Item Simulator의 과제를 하기 위해서 AWS 배포하는 법에 대해서 복기를 해보도록하겠습니다.

 

1. 환경 설정하기

 

 

2. AWS EC2 Instance 생성

  • EC2 Instance 생성하기
    • AWS EC2에서는 컴퓨터 하나의 단위를 Instance 라는 이름으로 부릅니다.
    • EC2에 관해서 https://docs.aws.amazon.com/ko_kr/AWSEC2/latest/UserGuide/concepts.html 를 참조하세요.
    • 인스턴스 만들 때 기억해야하는 키워드
    • Ubuntu
    • 프리 티어 선택
    • EC2 Instance 생성: 키 페어 이름 지정 및 다운로드 (RSA, .pem)
    • 완료하게 되면 아래처럼 나오게 됩니다.

  • EC2 Instance에 접속하기
    • AWS에서는 Security Group 또는 보안 그룹 이라는 이름으로 방화벽을 제공합니다.
    • EC2 Instance에 접속하기 위한 도구, SSH 개념 정리
      • SSH(Secure Shell)는 일반적으로 다른 컴퓨터에 연결할 때 사용되는 프로그램입니다.
        • 다른 접속 방법보다 보안이 뛰어나 서버 연결을 위해 일반적으로 사용됩니다.
        • 로컬 저장소에서 Github의 원격 저장소를 사용하기 위해 SSH Key를 발급했던 것과 동일합니다.
    • 접속 할 EC2 Instance의 방화벽에서 22번 포트가 열려있어야 접속 가능합니다.
    • AWS EC2에 접속하기
      • EC2 Instance를 생성하면서, 다운로드 받은 Key Pair의 접근 권한을 바꿔줘야합니다.
      • 기본적으로 download위치에 있습니다.
      • SSH로 접속하기
# 다운로드 폴더로 접근합니다.
cd Download
# 또는
cd ~/Downloads

# sparta_keypair.pem 파일의 권한을 읽기만 가능하도록 수정합니다.
sudo chmod 400 sparta_keypair.pem
ssh -i 받은키페어를끌어다놓기 ubuntu@AWS에적힌내아이피

ex) ssh -i sparta_keypair.pem ubuntu@13.125.253.21

ssh -p 9222 -i 받은키페어를끌어다놓기 ubuntu@AWS에적힌내아이피
ex) ssh -p 9222 -i "sparta_keypair.pem" ubuntu@13.125.253.21

접속 성공시

 

3. AWS EC2 Node.js 설치

  • EC2 Instance에 Node.js 설치하기
    • 우리는 Node.js 웹 사이트에 들어가 다운받아 설치 프로그램으로 설치를 했지만 지금은 우리가 사용중인 EC2 Instance (위에서 접속이 성공하면 EC2 Instance에 접속한 겁니다.)에서는 모든 것을 명령어로 조작할 수 있습니다.
    • 아래의 명령어로 설치해 주세요.
curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash -

sudo apt-get install -y nodejs
# 설치된 Node.js 버전 확인하기
node -v

# 설치된 npm 버전 확인하기
npm -v

 

4. 서버 프로그램 실행 및 웹사이트 접속

  • EC2 Instance에서 서버 실행하기
    • GitHub에 있는 Repository Clone 즉, GitHub의 원격 저장소로 부터 코드를 가져오는 것을 Clone이라고 이해하면 됩니다.
    • GitHub 레파지토리 페이지로 들어가 초록색 "Code" 버튼을 눌러 네모가 두개 겹친 모양의 아이콘을 가진 복사 버튼을 눌러주세요.
    • EC2 Instance 터미널에 접속해 밑의 그림과 같은 예시로 내용을 붙여 넣어주세요.
    • 밑의 그림대로 하시면 됩니다.

# 원격 저장소로 부터 코드 가져오기
git clone <Github Repository URL>

# 예시
git clone https://github.com/archepro84/nodejs-todo-list.git

 

  • 프로젝트 실행 순서
    • cd 깃허브 레파지토리 이름 : 원격 저장소로부터 가져온 프로젝트로 이동합니다.
      ex) cd nodejs-todo-list
    • sudo npm install -g yarn : yarn을 사용하기 위해, 전역으로 yarn을 설치합니다.
    • yarn : 원격 저장소로 부터 가져온 프로젝트의 의존성 및 패키지를 설치합니다.
    • node app.js : 프로젝트를 실행합니다.
  • IP Address(IP 주소)와 Port(포트) && 방화벽 문제
    • EC2 Instance 포트 설정: AWS 보안 그룹(Security Group)
      • 보안 그룹(Security Group 설정 페이지 접속
      • 1. 인스턴스 페이지 접속
      • 2. 생성된 EC2 선택하며 노출되는 하단 창에서 보안 탭 선택
      • 3. 이후 보안 그룹 이라는 이름을 가진 링크를 누릅니다.
      • 4. 밑에 보안 그룹 sg-어쩌구 저쩌구 파랑색으로 표시되어 있는걸 누릅니다.
      • 5. 인바운드 규칙 편집 버튼을 누릅니다.
      • 6. 규칙 추가 버튼을 눌러 아래의 정보를 추가로 입력합니다.
      • 유형 : 사용자 지정 TCP
      • 포트 범위 : 3000 <- 우리가 사용할 Node.js 서버 포트번호 입니다.
      • 소스: Anywhere-IPv4
      • 7. 규칙 저장
      • 다하면 밑의 그림 처럼 됩니다.

  • 영원히 꺼지지 않는 서버 실팽 프로그램, PM2
    • 지금 EC2 Instance에 ssh 명령어로 접속한 상태입니다.
    • 하지만 이 접속이 끊기는 순간 웹사이트 접속은 불가능해집니다.
    • 서버 컴퓨터에서는 항상 서버 프로그램이 켜져 있어야 들어온 요청을 처리해 응답을 보낼 수 있기 때문입니다.
    • 해결 방법
      • pm2란 프로세스 매니징 도구로 Node.js를 편하게 관리할 수 있게 도와주는 라이브러리입니다.
      • pm2는 대표적으로 터미널을 종료하더라도 웹 서버가 실행될 수 있게 하거나 Log 정보들을 실시간으로 확인하여 현재 서버의 상황을 더욱 빠르고 명확하게 관리할 수 있습니다.
      • pm2 설치 (밑의 그림대로 하시면 됩니다.)
        • 1. pm2는 관리자 권한이 필요하기 때문에 관리자 계정으로 전환합니다.
        • 2. yarn으로 설치
        • pm2로 app.js 실행
        • 실행된 프로젝트 종료 방법
# Linux의 관리자 계정으로 전환합니다.
sudo -s
# pm2 라이브러리를 global로 설치합니다.
yarn global add pm2

# pm2 로 app.js 파일을 실행합니다.
pm2 start app.js
# pm2의 id가 0인 프로세스를 종료합니다.
pm2 delete 0

 

5. 서버와 도메인 연결하기

  • 이제 다 왔습니다.
  • 내 EC2 Instance 서버에 도메인 연결하기
    • 1. 가비마 마이페이지 접속 : https://my.gabia.com/service#/
    • 2. DNS 관리 툴 클릭
    • 3. DNS 설정 클릭
    • 4. 레코드 수정 클릭
    • 5. 호스트 이름에 @, IP주소에 EC2 Instance의 Public IP 입력 후 저장
    • 밑의 그림대로 따라하세요.

  • 도메인으로 접속 (이제부터 누구든지 밑의 주소랑 방법으로 내 도메인 서버에 접속이 가능합니다.)
    • 내 IP 주소로 지금 Node 서버가 잘 돌고 있는 지 들어가본다.
    • 내 도메인으로 접근해본다.
    • 이 두가지 방식 이외에도 insomnia API Client를 통해 API를 테스트 할 수 있습니다.
    • 밑의 코드블럭처럼 해본다.
//내 IP주소로 지금 node 서버가 잘 돌고 있나요? 먼저 확인해봅니다.
http://내AWS아이피:3000/
//약간의 시간을 가진 후, 내 도메인으로 접근하면, 접속이 됩니다.
http://내도메인:3000/