leesulog.

lightdark
가상머신(VM)으로 배포하는 방법
2024-03-284 min read
  • 개발
thumbnail

VM으로 PM2와 Nginx을 활용해 Express.js 백엔드와 React.js 프론트엔드 배포하기

들어가며

지난 프로젝트를 백엔드(cloudtype), 프론트엔드(vercel) 각각 따로 배포하다가 CORS 에러로 인해 Azure VM을 생성해서 한 환경에 새로 배포하였다.

배포하면서 터미널이 익숙해지기도 했고, 특히 vim같은 편집기가 무섭지 않아졌다. 사용했던 명령어들을 정리하고 싶어 기록해본다.


SSH public key

배포 서버 접속하기

ssh -i ~/{SSH public key file} {username}@{ip}

⚠️ 권한 오류 시

change mode 400으로 해당 파일을 소유자에게만 읽을 수 있게 권한을 축소시킨다.

chmod 400 ~/{SSH public key file}

배포 서버 환경 설정

리눅스 시스템 최신화하기

sudo apt update -y && sudo apt upgrade -y

node 설치하기

curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.37.2/install.sh | bash source ~/.bashrc
nvm install 16.14.0
nvm use 16.14.0

# 설치 확인
npm -v
node -v

express 앱 실행

프로젝트 폴더 가져오기

git clone {repository url}
cd {project directory}
npm install

환경 변수 파일 생성하기

nano .env
# 또는
vim .env
nano vim
- Ctrl + O: 저장
- Ctrl + X: 종료
- i: 편집 모드
- esc: 명령모드
- :w: 저장
- :q: 종료
- :wq: 저장과 종료

실행 확인하기

npm run start

PM2 (Process Manager 2) 설치하기

# PM2 - Node.js 애플리케이션의 프로세스 관리 및 실행 도구
npm install --global pm2

# 백엔드 폴더에서 실행
pm2 --name express start npm -- run start

# 현재 실행 중인 프로세스 확인
pm2 list

# 특정 프로세스 종료
pm2 delete {number}

Nginx 설치하기

# Nginx - 웹 서버 소프트웨어
sudo apt install nginx

경로 설정하기

# 설정 파일 수정
sudo nano /etc/nginx/sites-available/default

프론트엔드 경로 설정하기

location / {
  # First attempt to serve request as file, then
  # as directory, then fall back to displaying a 404.

  # 프론트 빌드 파일 경로
  root /home/{username}/{FE directory}/build;
  index index.html index.htm;

  # 새로 고침 시 페이지 유지
  try_files $uri $uri/ /index.html;
}

백엔드 API 경로 설정하기

location /api {
  # proxy_pass 속성으로 백엔드 서버와 연결해주세요.
  proxy_pass http://127.0.0.1:{port 번호};
}

파일 경로 설정하기

location /uploads {
  alias /{실제 경로};

  # 자동 디렉토리 리스트 생성 기능, 보안 문제로 사용하지 않는 것이 안전
  autoindex on;
}

⚠️ 파일 수정 확인 점검

# 문법 오류 없음을 테스트
sudo nginx -t

# nginx 재실행 (재실행해야, 수정된 설정파일이 반영됨)
sudo systemctl reload nginx

# 만약 위 명령어가 안 되는 경우
sudo service nginx restart
sudo service nginx reload

# nginx 서비스 상태 확인
sudo service nginx status
Profile Image

leesul, 이슬

frontend developer
스스로 올바른 선택을 할 수 있는 사람이 될 것

© 2024. leesul all rights reserved.