배포 / / 2024. 10. 24. 00:02

AWS 인스턴스로 배포해보기2

ssh까지 접속을 성공하고

인스턴스에 NODE 설치

접속한다음 내 인스턴스에 NODE를 설치해야하는데
원래 내 윈도우에 NODE버전이 20.x버전이라 20버전을 시도했지만 아마존2 리눅스에는 지원을 하지 않아 18.x버전으로 시도하였지만 18버전도 지원하지 않는다고 합니다.
그래서 기존 인스턴스를 삭제하고 다시 아마존1리눅스를 설치하고 다시 진행
18.x버전을 설치할수 있었습니다.
 
일단 아마존 리눅스 인스턴스를 생성한다음
sudo yum update -y로 운영체제를 업데이트 해준다음
curl -sL https://rpm.nodesource.com/setup_18.x | sudo bash - sudo yum install -y nodejs
이렇게해서 node를 설치한다음 node -v를 쳐서 제대로 깔렸다면 설치된 버전이 출력이 됩니다.
 

프로젝트 빌드

 
이제 프로젝트를 내 인스턴스로 옮겨야합니다.
두가지 방법이 있다고 하는데
첫번째는, git으로 연결해서 프로젝트를 받는것이고
두번째는, 내 윈도우에서 옮기는 것입니다.
 
그런데 프로젝트를 인스턴스로 옮기기전에
리액트프로젝트를 빌드해서 익스프레스에 파싱(통합)합니다.
 
리액트 프로젝트에 들어간다음 콘솔에 npm run build를 입력하면
build폴더가 생성되고 내가 만든 모든 프론트엔드 프로젝트가 html,css,js로 바뀌면서
build가 성공적으로 끝납니다.
그러면 그 파일을 express로 파싱하면 되는데
빌드된 파일을 express내에 폴더를 생성하여 옮겨주고 express의 index.js파일에 옮긴 리액트파일의 index.html를 임포트해주시면 끝납니다.
 
이렇게한다음 테스트로 백앤드에서 npm start를 하면
localhost:4000 으로 홈페이지 접속이 가능하게되는데 홈페이지 테스트를 하는중 문제가 생김
회원가입할때 호원동을 썼는데 이 api가 작동을 안해서 회원가입을 할수가 없었습니다.
(이 문제는 코드를 고쳐서 굳이 api호출을 못하더라도 사용자가 입력한 값을 그냥 넣어주는 걸로 해결했습니다. 하지만 실제로 서비스를 시작한다고하면 도메인으로 api신청을 한다음에 해결해야 합니다.)
 
진행하다보니 리액트를 빌드한다음 익스프레스로 파일을에 파싱한다음
그걸 서버로 보내는 방법으로 배포하기로 합니다.
 

SCP로 파일 옮기기

내 윈도우에서 서버 인스턴스로 파일을 옮기려면 SCP(Secure Copy)것으로 할수있는데
 
파워쉘을 키고 명령어는
scp -i "your-key.pem" -r /path/to/local-directory ubuntu@your-ec2-public-ip:/path/to/destination-directory
이렇게 입력하면 내 인스턴스로 보낼수 있습니다.
 
그래서 제 scp 명령어는 밑에와 같이 되고
scp -i "C:/key/Clubings.pem" -r C:/clubing ec2-user@13.125.25.40:/home/ec2-user/clubing
이 명령어를 실행했는데 문제가 발생했습니다.
 
몇몇 파일이 전송문제로 오질 않아서 서버가 실행이 안됐습니다...
대표적으로 package.json파일이 자꾸 안오길래
파일들을 압축한다음 인스턴스로 보낸다음 인스턴스에서 압축을 푸는방식으로 변경했고
scp로 가지고온다음에 압축을 해제했습니다
 
위에는 scp명령어는 폴더전체를 옮기는 명령어지만 밑에 명령어는 zip파일하나만을 이동시키는 명령어입니다.
scp -i "C:/key/Clubings.pem" C:/backend.zip ec2-user@13.125.25.40:/home/ec2-user/
 

프로젝트 모듈 설치

파일을 다 옮기고 의존성설치를 해야합니다. 리액트는 이미 빌드를해서 넘겼기때문에 익스프레스쪽만 npm install로 설치하면 됩니다.
인스턴스내에 프로젝트 폴더로 이동한다음
cd /home/ec2-user/clubing
npm install
 

애플리케이션 실행(테스트)

모듈을 다 설치한다음
npm start
이렇게 시작해놓으면 되긴하지만 계속 터미널을 켜놓고있어야하는데
nodemon 때문에 에러나는데 nodemon에 권한이 없어서 안됩니다.
밑에 명령어로 nodemon모듈에 권한을 주면 해결됩니다.
chmod +x /home/ec2-user/clubing/node_modules/.bin/nodemon
 
근데 npm start로 앱을 실행하게되면 항상 파워쉘을 켜놓고 있어야해요 그래서
 
pm2라는걸 설치하게되면 서버를 백그라운드에서 지속적으로 실행 되도록 해줍니다.
npm install -g pm2 치면 인스톨이 되야하는데 안된다?
sudo npm install -g pm2 치면되고
실행하려면
pm2 start 현재 인덱스가 있는 경로 ./index.js —name clubing.app 이라고치면됨
pm start ./index.js --name clubing.app
 
이렇게하면 터미널을 꺼도 계속 서버가 실행되게됨다
 
두번째문제 발생. Chatroom
 
인스턴스로 옮기고 모듈도 설치하고 시작해야되는데 충돌난단다 원인은 chatroom에서 나는거같은데 왜그런지 잘 모르겠다.
후에 chatroom을 개발한 팀원에게 물어보니 처음 파일을 생성할때 대소문자를 잘못 입력해서 chatroom모델을 인식못하는거 였습니다.
 
pm2 명령어로 앱을 실행한다음 잘 돌아가고있나 확인하는 명령어는
pm2 list라고 치면 status정보가 출력됩니다.
 
주의할점은 sudo 를 앞에 붙히게되면
sudo를 붙힌 pm2와 안붙힌 pm2와 별개로 실행되는거 같습니다.
예를 들어 pm2로 앱을 실행한다음 sudo pm2 list라고하면 실행이 안되는것처럼 출력이되는데
왜이런지는 모르겠습니다. ㅎㅎ 오늘은 여기까지 쓰겠습니다.

'배포' 카테고리의 다른 글

Docker 종류  (1) 2024.11.07
Docker 기본개념  (0) 2024.11.07
AWS EC2인스턴스로 배포하다 해킹당한썰  (0) 2024.10.25
AWS EC2 인스턴스로 배포해보기1  (3) 2024.10.23
  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유