본문 바로가기

InfoSec Log/WEB

[WEB Server] Node.js로 개발한 앱 로컬머신에서 퍼블릭으로 배포 방법

본 글은 Node.js를 이용하여 개발한 앱을 Dynamic 호스팅 서비스를 이용하지 않고, 로컬 머신(개인 PC)을 이용하여 퍼블릭으로 배포하는 방법에 관한 내용을 다룬다.

 


배포 순서

  1. 개발이 끝난 앱의 루트 디렉토리에 npm install -g pm2 를 통해 pm2 패키지 다운로드
  2. (선택)pm2 환경을 설정 파일을 통해 설정(ecosystem.config.js)
module.exports = {
apps: [
  {
    name: 'your-app-name',
    script: './app.js',
    instances: 0, // CPU 코어 수에 맞게 자동 설정
    autorestart: true,
    watch: false, // 프로덕션 환경에서는 false 권장
    max_memory_restart: '1G', // 메모리 사용 패턴에 따라 설정
    env: {
      NODE_ENV: 'development'
    },
    env_production: {
      NODE_ENV: 'production'
    }
  }
]
};
  1. 메인 앱인 app.js 파일에 포트포워딩 설정 시 필요한 Listening port 지정(여기서는 8080)
  2. 공유기의 관리자 설정 페이지에 접속
    • iptime의 경우, http://192.168.0.1
  3. Public IP인 외부 IP 확인
    • iptime의 경우, 기본 설정 -> 시스템 요약 정보 탭 내 외부 IP 주소
  4. 포트포워딩 설정 페이지로 이동 후, 자신의 내부 IPapp.js에서 지정한 Listening port를 외부 IP 및 특정 포트(여기서는 8080)와 맵핑하여 외부에서 http://<Public_Ip>:<Port> 로의 접속 요청 시, http://<Private_IP>:8080로 요청의 포워딩이 이뤄지도록 설정
    • 포트포워딩 설정 페이지: iptime의 경우, 고급 설정 -> NAT/라우터 관리 -> 포트포워드 설정
    • 내부 IP(Private IP) 확인: windows의 경우, cmd에서 ipconfig를 통해 확인
  5. 설정이 완료되면 로컬 머신에서 pm2를 통해 웹서버를 실행
    • pm2 환경 설정 시 처음 시작 명령어: pm2 start ecosystem.config.js --env production 그 이후부터는 pm2 start [app-name]
  6. (선택) 외부IP는 ISP에서 부여하는데 이는 일정 기간이 지나면 IP주소가 바뀌게 된다. 그리고 내부 IP는 공유기에 의해 할당되고 이또한 DHCP 서버의 임대기간이 끝나면 바뀌게 된다. 따라서 외부IP는 DDNS를 통해 자신의 외부 IP와 도메인을 맵핑시켜, 외부 IP가 바뀌어도 도메인에 자동 적용되도록 하고, 내부 IP는 특정 IP로 고정시키도록 한다.
    • 외부 IP와 도메인 맵핑: iptime의 경우, 고급 설정 -> 특수기능 -> DDNS 설정을 통해 설정
    • 특정 디바이스의 내부 IP 고정: iptime의 경우, 고급 설정 -> 네트워크 관리 -> DHCP 서버 설정을 통해 설정.
iptime 관리자 설정 페이지/포트포워드 설정

 

 

windows의 경우 만약 위의 설정을 하여도 접근이 안된다면, 방화벽 설정을 확인하여 인바운드 규칙에 8080 포트를 허용하도록 추가한다.

 

 

'InfoSec Log > WEB' 카테고리의 다른 글

[WEB] DNS & HTTP 통신 과정  (1) 2024.08.20