관리 메뉴

피터의 개발이야기

[Node.js] Express 서버를 Docker에서 PM2로 기동하는 방법 본문

DevOps/Node.js

[Node.js] Express 서버를 Docker에서 PM2로 기동하는 방법

기록하는 백앤드개발자 2024. 10. 17. 10:10
반응형

ㅁ 들어가며

 [Node.js] PM2를 사용한 Node.js 애플리케이션 관리하기에서 PM2의 기능에 대해서 알아보았다. PM2는 Node.js 애플리케이션을 위한 프로세스를 관리하며, 어플의 성능을 모니터링하고 장애 발생 시 자동으로 재시작하는 기능을 제공한다. 이번 글에서는 Node.js 기반의 Express 서버를 Docker에서 PM2로 실행하는 방법을 정리하였다.

 

ㅁ Node.js Express 애플리케이션 설정

mkdir express-docker-pm2
cd express-docker-pm2
npm init -y
npm install express

ㅇ 프로젝트 생성

const express = require('express');
const app = express();
const PORT = process.env.PORT || 3000;

app.get('/', (req, res) => {
  res.send('Hello World!');
});

app.listen(PORT, () => {
  console.log(`Server is running on port ${PORT}`);
});

ㅇ index.js 파일을 생성하고 기본 서버 코드를 작성한다.

 

ㅁ PM2 설치

 

npm install pm2 --save

ㅇ PM2를 프로젝트에 설치한다.

 

ㅁ Dockerfile 작성

ㅇ 이제 Dockerfile을 작성하여 애플리케이션을 Docker 이미지로 생성해야 한다.

# Node.js 공식 이미지 사용
FROM node:14

# 작업 디렉토리 생성
WORKDIR /usr/src/app

# 패키지 파일 복사
COPY package*.json ./

# 패키지 설치
RUN npm install

# 애플리케이션 코드 복사
COPY . .

# PM2를 전역으로 설치
RUN npm install pm2 -g

# PM2를 사용하여 애플리케이션 실행
CMD ["pm2-runtime", "index.js"]

# 컨테이너가 수신할 포트 설정
EXPOSE 3000

프로젝트 루트 디렉토리에 Dockerfile을 생성.

 

ㅁ Docker Compose 설정

Docker Compose을 사용할 수도 있다. 

version: '3'
services:
  app:
    build: .
    ports:
      - "3000:3000"
    restart: always

ㅇ 편의성을 위해 docker-compose.yml 파일을 작성할 수 있다.

 

ㅁ Docker 이미지 빌드 및 실행

# Docker 이미지 빌드
docker build -t express-docker-pm2 .

# Docker Compose를 사용하여 실행
docker compose up

 ㅇ Dockerfile 혹은 Docker compose로 빌드를 수행한다. 

 

ㅇ docker build를 수행하였다.

 

docker run -d -p 3000:3000 express-docker-pm2

ㅇ docker를 실행한다.

 

ㅁ 애플리케이션 테스트

ㅇ 브라우저에서 http://localhost:3000에 접속하여 "Hello World!" 메시지가 나타나면 성공이다. 

 

ㅁ 함께 보면 좋은 사이트

 NGINX + HTTPS + NodeJS + PM2 도커로 만들기

 nodejs express 서버 docker에서 pm2로 기동하기

Docker + PM2 + winston.js를 활용한 무중단 운영 시스템 구축하기

도커와 PM2를 이용한 Node.js scale-out 및 부하 테스트

 

반응형
Comments