티스토리 뷰

TIL

[TIL] AWS 서버 접속 및 에러 해결 정리

수박소바 2021. 1. 25. 17:10
반응형

토이프로젝트를 진행하면서 AWS로 EC2 인스턴스를 만들어보고 서버를 올려보고 있다.

워낙 많은 자료들이 있어서 찾아보면서 따라하기는 어렵지 않았지만 내가 모르는게 너무 많아서 일일히 찾아봐야 하는게 번거롭긴 했다...

 

원격 서버 접속

먼저 인스턴스를 만들면서 받은 key로 인스턴스에 접속하려면 터미널을 열어 key가 있는 폴더로 가서 아래와 같이 입력한다.

chmod 400 <your pem key name>.pem
ssh -i "<your pem key name>.pem" ubunutu@<your IPv4 Public IP>

<>안에는 자신의 파일명과 IP 주소에 맞게 알아서 입력하면 된다.

 

여기서 chmod란 리눅스 명령어로 change mod 라는 뜻으로 파일의 접근 권한을 변경하는 명령어다.

chmod [레퍼런스] [연산자] [변경할 접근권한] [파일]

위와 같이 옵션을 지정할 수 있는데 [레퍼런스] [연산자] [변경할 접근권한] 대신 8진수 숫자로 표현할 수도 있다.

여기서 400은 파일 소유자의 읽기 권한을 나타내고 각 접근 권한에 따라 값을 더하면 된다.

 

접속 성공!

 

환경 변수 설정

접속에 성공하면 아래 명령어로 node와 npm을 깔고 내가 만든 코드를 원하는 디렉토리에서 git clone을 해주면 된다.

sudo apt update
sudo apt install nodejs
sudo apt install npm

그러나 npm install을 하고 실행시키니 다음과 같은 에러가 났다.

./dev 파일을 찾을수 없다.

몽고 DB를 연결할 때 process.env.NODE_ENV 값에 따라서 production 모드일 땐 process.env.MONGO_URI 값을 사용하고 아니면 dev.js 파일을 사용하도록 했는데 보안을 위해 dev.js 는 git에 올리지 않았기 때문에 이러한 에러가 발생했다.

따라서 NODE_ENV를 production으로 설정해주고 그에 따라 MONGO_URI 값도 설정해줘야 했다.

 

리눅스에서 환경 변수 설정은 아래와 같이 하면 된다.

export NODE_ENV=production
export MONGO_URI='...'

여기서 의아한 점이 NODE_ENV는 따옴표 없이 그냥 써도 잘 인식되는데 MONGO_URI는 따옴표 없이 쓰니까 다음과 같이 string이 아니고 "undefined" 를 받았다고 나온다.

안그래도 값을 할당할때 부터 헷갈리긴 했는데 따옴표를 쓰면 잘 실행되므로 일단 넘어가고 다음에 찾아보기로...ㅠ_ㅠ

그리고 이게 서버를 껐다 켤때마다 리셋되던데 자동화 할 수 있는 방법도 찾아봐야겠다...

환경변수를 영구 등록하려면 vi 에디터로 ~/.bachrc 파일 마지막 부분에 환경변수 등록 명령어를 추가하면 터미널이 켜질때마다 환경변수 등록이 자동적으로 실행된다고 한다.

vi ~/.bachrc

bashrc 파일 맨 밑에 환경변수 추가

 

이미 사용중인 포트 에러 처리

환경 변수를 설정하고 켰더니 이번엔 아래 에러가 났다.

이전에 프로세스가 비정상적으로 종료되어 나타난 에러ㅠㅠ

내가 이전에 서버 연결해서 NodeJS 프로세스를 실행했었는데 오랜 시간이 지나 자동으로 원격 서버와 연결이 끊어진적이 있어서 그것 때문에 발생한 에러인것 같다.

해결 방법은 간단하다. 맥이나 리눅스에서는 아래 명령어로 해결 가능하다.

// 5000번 포트를 사용하는 프로세스 리스트 출력
lsof -i TCP:5000
// 특정 프로세스 강제 종료
kill -9 <PID>

리스트 확인 후 해당 PID 종료

 

결과 확인

드디어 만난 화면

드디어 정상적으로 실행된거 같아서 브라우저에 서버 IP 주소와 포트번호를 입력하니 드디어 Hello World를 만날 수 있었다!

그러나 내가 원한건 클라이언트 폴더에 작업해둔 3000번 포트를 사용하는 리액트 프로젝트 화면이었으나 3000번 포트를 입력하면 연결되지 않았다...

이건 이제부터 다시 삽질을 해봐야 겠다.

 

나는 클라이언트를 spa로 작업했는데 빌드한 파일을 보여주려면 S3같은 정적리소스 서버를 별도로 파거나, 현재의 EC2에 별도의 웹서버를 띄워줘야 하는거 같다. 그래서 일단은 개발시 로컬로 작업할 때 처럼 실행했는데 해당 리액트 프로젝트가 3000번 포트로 띄워졌기 때문에 웹브라우저로 접속하려면 AWS 해당 인스턴스의 보안그룹에서 3000번 포트를 열어줘야 한다.

3000번 포트 설정

보안 그룹에서 인바운드 규칙 편집을 눌러 수정하고 접속하면 잘 접속이 된다!

 

 

+추가

PM2를 이용해서 서버 무중단 설정

서버 연결이 끊어지면 node 웹서버도 같이 끊어진다. 그럴땐 pm2를 이용해서 관리하면 된다.

pm2 start npm --name "{app_name}" -- run {script_name}

// 나의 경우는 아래 명령어로 처리
pm2 start npm --name "rsp-ranking" -- run dev

 

 

 

출처

velog.io/@rheey90/AWS-EC2-Node.js-%EC%84%9C%EB%B2%84-%EB%B0%B0%ED%8F%AC

 

AWS EC2 Node.js 서버 배포

AWS EC2는 아마존 웹 서비스에서 제공하는 서비스로서 아마존 웹 서비스 클라우드에서 확장 가능한 컴퓨팅 용량을 제공합니다. 과거와는 달리 투자 비용이 상당히 드는 서버를 담당하는 하드웨어

velog.io

bimmermac.com/2789

 

리눅스 chmod 명령 사용 방법 | BIMMER MAC

chmod 명령어 소개 chmod(change mod)는 파일의 접근 권한을 변경하는 명령어입니다. chown과 달리 파일의 소유자도 명령을 내릴 수 있습니다. 당연히 소유권이 없는 사용자는 chmod 명령을 사용할…

bimmermac.com

devhyun.com/blog/post/23

 

NodeJS 환경 변수 설정 - 데브현

애플리케이션을 다양한 환경에서 테스트를 하거나 배포를 합니다. DB 커넥션, 외부 API 연동과 같은 정보들은 환경별로 다르기 때문에 매번 변경해줘야 하는 번거로움이 있습니다. NodeJS에서는 시

devhyun.com

jootc.com/p/201912253249

 

NodeJS address already in use 문제 해결 - JooTC

NodeJS address already in use 문제 해결 방법 Error: listen EADDRINUSE: address already in use :::5000 현재 다른 프로세스에서 사용 중이라 해당 서비스를 시작할 수 없다는 에러입니다.

jootc.com

sosobaba.tistory.com/279

 

리눅스 환경변수 등록하기(환경변수 영구 등록)

안녕하세요 마블랑입니다. 이번 포스팅은 터미널 창에서 리눅스 Ubuntu(우분투)의 환경변수를 등록하는 방법에 대해서 소개하겠습니다. 먼저 현재 리눅스에 등록된 전체 환경변수를 보려면 터미

sosobaba.tistory.com

 

반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함