React+Node.js 프로젝트 배포하기, mongoDB연결, 환경변수 설정(feat. pm2)

bible_k_·2023년 7월 26일
1

휴우~
그간 점잖게 글을 써왔는데 오늘은 조금 신이 납니다.
이유는 읽다보면 나옵니다..

지난편에서는 Nginx를 사용해서 리액트 앱을 배포하였습니다.
이번편에서는 server를 다뤄보겠습니다.

우선 지지난 편에서 클라이언트와 서버 레포지토리를 각각 클론해왔습니다.
이제 서버 레포지토리 위치로 이동하여 작업을 이어서 진행하겠습니다.
cd 숑숑~

1. 패키지 설치

$ npm install

2. 환경변수 설정

로컬에서 사용한 환경 변수는 .gitignore에 적용되어있어 푸쉬할 때 반영되지 않습니다.

클라이언트

-> ec2 프리티어 메모리 부족으로 인해 로컬에서 빌드한 후 인스턴스 서버에서 받아서 사용했습니다.
그래서 배포용 .env.production 파일을 별도로 생성하고 재빌드를 진행하였습니다.

package.json script 필드에 아래 코드 추가
"build": "env-cmd -f .env.production react-scripts build",

위 스크립트는 프로덕션 환경에서 React 애플리케이션을 빌드하는 데 사용됩니다. "env-cmd"를 사용하여 .env.production 파일에 정의된 환경 변수들을 적용하여 빌드합니다. 이렇게 환경 변수를 설정하면 빌드 시 특정 변수들을 사용하여 애플리케이션을 설정하거나, API 엔드포인트를 구성하는 등의 작업을 할 수 있습니다.

서버

=> 로컬에서 빌드하고 가져오는 과정이 없기때문에 ec2 서버 환경에서 직접 .env 파일을 생성했습니다.

4. cors origin 수정

허용할 origin 목록에 ec2 퍼블릭 IP도 추가합니다.

포트도 잊지말깅..

3. mongoDB연결

저의 경우는 mongoDB를 사용해서 이 과정을 진행했습니다.

https://www.mongodb.com/docs/manual/tutorial/install-mongodb-on-amazon/

공식 문서가 답이다 ~~
일단 저는 ec2인스턴스를 생성할 때 ami로 Amazon Linux를 선택하였는데요.
각자 운영체제에 맞는 튜토리얼 보면서 진행하시면 됩니다.

1) mongoDB 패키지 관리 시스템 설정

sudo vi /etc/yum.repos.d/mongodb-org-6.0.repo

mongoDB를 설치하기 전에 패키기관리시스템 설정을합니다.
위 명령어로 repo파일을 생성하고 아래 내용을 입력합니다.

[mongodb-org-6.0]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/amazon/2/mongodb-org/6.0/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-6.0.asc

이건 6.0 버전용입니다. 버전 확인 잘 합시당

2) mongoDB 패키지 설치

가장 최신버전을 설치하는 명령어입니다.

sudo yum install -y mongodb-org
Installed:
  mongodb-org.x86_64 0:6.0.8-1.amzn2                                             

Dependency Installed:
  cyrus-sasl.x86_64 0:2.1.26-24.amzn2                                            
  cyrus-sasl-gssapi.x86_64 0:2.1.26-24.amzn2                                     
  mongodb-database-tools.x86_64 0:100.7.4-1                                      
  mongodb-mongosh.x86_64 0:1.10.1-1.el8                                          
  mongodb-org-database.x86_64 0:6.0.8-1.amzn2                                    
  mongodb-org-database-tools-extra.x86_64 0:6.0.8-1.amzn2                        
  mongodb-org-mongos.x86_64 0:6.0.8-1.amzn2                                      
  mongodb-org-server.x86_64 0:6.0.8-1.amzn2                                      
  mongodb-org-tools.x86_64 0:6.0.8-1.amzn2                                       

Complete!

설치 완료

3) mongoDB 실행

sudo systemctl start mongod

4) 잘 작동하는지 상태 확인

 sudo systemctl status mongod

* mongoDB 접속

mongosh

저의 삽질을 잠시 말씀드리자면.. 이 내용은 번외이니 넘기셔도 됩니다ㅎㅎ

저는 ami를 amazon linux 2023을 선택하여 인스턴스를 생성하였었습니다.
그런데 말입니다. 몽고디비 설치가 계~속 안되고

MongoDB Repository                               3.2 kB/s | 1.3 kB     00:00    
Error: 
Problem: conflicting requests

 - package mongodb-org-6.0.0-1.amzn2.x86_64 requires mongodb-org-database, but none of the providers can be installed
 - package mongodb-org-6.0.1-1.amzn2.x86_64 requires mongodb-org-database, but none of the providers can be installed
 ...
 - nothing provides libcrypto.so.10(OPENSSL_1.0.2)(64bit) needed by mongodb-org-server-6.0.8-1.amzn2.x86_64
 - nothing provides libcrypto.so.10(libcrypto.so.10)(64bit) needed by mongodb-org-server-6.0.8-1.amzn2.x86_64
 - nothing provides libssl.so.10()(64bit) needed by mongodb-org-server-6.0.8-1.amzn2.x86_64
 - nothing provides libssl.so.10(libssl.so.10)(64bit) needed by mongodb-org-server-6.0.8-1.amzn2.x86_64
(try to add '--skip-broken' to skip uninstallable packages)

계속 이런 에러가 발생했습니다.
다시 차근차근 해보자라는 마음으로 공식문서를 다시 보는데

mongoDB는 현재 Amazon Linux 2023을 지원하지 않습ㄴㅣ다.. 왜 지금 봤지 ㅎㅋ
플랫폼 지원 리스트를 확인해보니 .. 아직 출시되지 않은 6.20+ 버전부터 지원한다고 하네요.
참고로 현재 최신버전 6.0임 설치안됨

그래서 인스턴스 새로 생성하고 처음부터 다시 했답니다.
사실 귀찮은 것보다 원인을 알고나니 얼마나 속이 후련하던지ㅠ
새로 다시 하는 거는 얼마 안걸렸습니다 해삐~~~

다시 이어나가보겠습니다.

4. 서버 실행

npm start
잘 실행되는지 확인하고.. pm2 설치하러 갑시다.

5. pm2

로컬에서 계속 서버를 실행하고 있을 순 없습니다.
그래서 Node.js의 프로세스 매니저 pm2가 필요합니다
프로세스를 계속 실행하게 도와주는 프로세스 매니저!

1) pm2 설치

npm install -g pm2

2) pm2 실행

pm2 start app.js

app.js가 있는 폴더로 이동하여 위 명령어를 통해 서버를 실행합니다.
index.js면 pm2 start src/index.js로

pm2 명령어

  • pm2 list => 리스트 확인
  • pm2 stop [pm2 name] => pm2 중지
  • pm2 restart [pm2 name] => pm2 재시작

이제 배포 서버에서 아주 잘 돌아가는 모습을 보실 수 있을 거예요!

앗차차 aws ec2 인스턴스 보안그룹 설정하는 것도 잊지 마세요
앗차차 mongoDB Network Access에 0.0.0.0/0 추가하는 것도 잊지 마세요
앗차차 사용하신 외부 api가 있다면 허용 IP 설정에 인스턴스 IP추가하는 것도 잊지 마세요

profile
후론트엔드 개발자

0개의 댓글