인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

송사무엘님의 프로필 이미지

작성한 질문수

비전공자도 이해할 수 있는 CI/CD 입문·실전

[실습] 개인 프로젝트에서 많이 쓰는 CI/CD 구축 방법 - 2

Node로 CI/CD 제작 중 안되는 이유

해결된 질문

작성

·

93

0

강사님 안녕하세요. nest를 완강하고 개인적으로 Node로 만들어보고 있습니다. 근데

Github Actions 까지 무사히 잘 완료가 되었는데요.

image.png


배포가 제대로 되어있는지 확인하려고 하니까 안되고 있습니다.

image.png


이렇게 서버가 살아있고 저는 3000번 포트를 사용해서 https://43.202.202.143:3000/ 이라고 작성했는데 접속이 안되더라고요.

제가 Gpt랑 나름 찾아봐서 작성해본 코드는 아래와 같습니다.
=============================

name: Deploy To EC2

on:
  push:
    branches:
      - dev

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - name: Github Repository 파일 불러오기
        uses: actions/checkout@v4

      - name: Node 설치
        uses: actions/setup-node@v4
        with:
          node-version: "20"

      - name: 의존성(라이브러리) 설치
        run: yarn install --frozen-lockfile

      - name: .env 파일 만들기
        run: |
          echo '${{secrets.ENV}}' > .env

      #   - name: 테스트 코드 실행
      #     run: npm run test

      #   - name: 빌드
      #     run: npm run build

      - name: 압축하기
        run: tar -czvf project.tar.gz .env package.json yarn.lock src

      - name: SCP로 EC2에 빌드된 파일 전송하기
        uses: appleboy/scp-action@v0.1.7
        with:
          host: ${{ secrets.EC2_HOST }}
          username: ${{ secrets.EC2_USERNAME }}
          key: ${{ secrets.EC2_PRIVATE_KEY }}
          source: project.tar.gz
          target: /home/ubuntu/Solo-Resume-Project/tobe

      - name: SSH로 EC2에 접속하기
        uses: appleboy/ssh-action@v1.0.3
        with:
          host: ${{ secrets.EC2_HOST }} # EC2의 퍼블릭 IPv4 주소 = 고정 주소를 말함. 연결 된 상태의 43.202.xxx.xxx <- 이런거
          username: ${{ secrets.EC2_USERNAME }} # EC2 접속 username = 대부분 우분투
          key: ${{ secrets.EC2_PRIVATE_KEY }} # EC2의 key-pair 파일의 내부 텍스트
          script_stop: true
          script: |
            rm -rf /home/ubuntu/Solo-Resume-Project/current
            mkdir /home/ubuntu/Solo-Resume-Project/current
            mv /home/ubuntu/Solo-Resume-Project/tobe/project.tar.gz /home/ubuntu/Solo-Resume-Project/current/project.tar.gz
            cd /home/ubuntu/Solo-Resume-Project/current
            tar -xvf project.tar.gz
            yarn install
            pm2 kill
            pm2 start src/app.js --name "backend-server"


=============================

세팅도 전부 다했고요.

image.png


근데 pm2 logs를 작성하면 아래와 같이 나옵니다.

image.png


제가 env에 서버포트 번호를 넣어놓고 상수값을로 지정한 후에 따로 빼서 사용하는데 그것 때문인가요?

image.pngimage.png

기존의 vs 코드에서는 잘 작동이 됩니다.

image.png


처음 혼자서 node로 작성하는거다보니 너무 질문이 많아서 죄송한데 답을 알려주시옵소서!!!


답변 2

0

JSCODE 박재성님의 프로필 이미지
JSCODE 박재성
지식공유자

안녕하세요 사무엘님! 좋은 시도를 하고 계시네요ㅎㅎㅎ

우선 CI/CD의 과정을 셋팅하기 전에

https://43.202.202.143:3000/ 으로 접속했을 때 접속이 가능하게 만드는 게

우선일 것 같습니다!

여기로 접속이 안 되는 이유는 밑에 댓글을 달아주신 값을 확인해보니

보안그룹의 설정 때문에 적용이 안 됐던 것 같습니다.

보안그룹으로 3000번 포트에 모든 IPv4에 대해 허용하게끔 설정을 추가해보신 뒤에

접속을 시도해보시기 바랍니다!

이 과정을 먼저 해결하신 뒤에 접속이 정상적으로 되는 걸 확인하시면

그 다음에 다시 CI/CD 과정을 이어서 진행해보시기 바랍니다!

이 과정 중에 CI/CD 과정이 다시 막힌다면 또 질문 남겨주세요~~

송사무엘님의 프로필 이미지
송사무엘
질문자

혹시 강의 6-1. 실습1에 나오는 아래의 사진과 같이 포트를 하나 더 열어야하는건가요?!

image.png

 


아래와 같이 포트를 하나 더 인바운드 규칙에 추가하고 ec2 서버를 재부팅하고 다시 push하여 연결했는데도 역시나 접속이 안되고 있습니다.

image.png

 

image.png


송사무엘님의 프로필 이미지
송사무엘
질문자

기존에 서버가 잘 열리는지 express 서버 배포 강의를 참고해서 vi .env를 통해서 .env 내용을 추가해서 우선 서버가 연결되는지 확인하였습니다. 그 후에 추가로 test를 하나씩 추가하면서 오류를 GPT에게 물어보면서 제 파일들과 맞추니 서버가 잘 연결 되었습니다 ^^

혹시나 다른 분들이 제 Q&A를 보실까봐 제 CI/CD 파일 로그를 남겨놓습니다.

name: Deploy To EC2

on:
  push:
    branches:
      - dev

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - name: Github Repository 파일 불러오기
        uses: actions/checkout@v4

      - name: Node 설치
        uses: actions/setup-node@v4
        with:
          node-version: "20"

      - name: 의존성(라이브러리) 설치...
        run: yarn install --frozen-lockfile

      - name: .env 파일 만들기
        run: |
          echo '${{secrets.ENV}}' > .env

      #   - name: 테스트 코드 실행
      #     run: npm run test

      #   - name: 빌드
      #     run: npm run build

      - name: 압축하기
        run: tar -czvf project.tar.gz .env package.json yarn.lock src prisma

      - name: SCP로 EC2에 빌드된 파일 전송하기
        uses: appleboy/scp-action@v0.1.7
        with:
          host: ${{ secrets.EC2_HOST }}
          username: ${{ secrets.EC2_USERNAME }}
          key: ${{ secrets.EC2_PRIVATE_KEY }}
          source: project.tar.gz
          target: /home/ubuntu/Solo-Resume-Project/tobe

      - name: SSH로 EC2에 접속하기
        uses: appleboy/ssh-action@v1.0.3
        with:
          host: ${{ secrets.EC2_HOST }} # EC2의 퍼블릭 IPv4 주소 = 고정 주소를 말함. 연결 된 상태의 43.202.xxx.xxx <- 이런거
          username: ${{ secrets.EC2_USERNAME }} # EC2 접속 username = 대부분 우분투
          key: ${{ secrets.EC2_PRIVATE_KEY }} # EC2의 key-pair 파일의 내부 텍스트
          script_stop: true
          script: |
            rm -rf /home/ubuntu/Solo-Resume-Project/current
            mkdir /home/ubuntu/Solo-Resume-Project/current
            mv /home/ubuntu/Solo-Resume-Project/tobe/project.tar.gz /home/ubuntu/Solo-Resume-Project/current/project.tar.gz
            cd /home/ubuntu/Solo-Resume-Project/current
            tar -xvf project.tar.gz
            yarn install --frozen-lockfile
            yarn prisma generate  
            pm2 kill
            pm2 start src/app.js --name "backend-server"
JSCODE 박재성님의 프로필 이미지
JSCODE 박재성
지식공유자

(1:1 톡방에서 해결하셨다고 답변 받아서 이 질문은 해결로 처리해두겠습니다!)

0

인프런 AI 인턴님의 프로필 이미지

안녕하세요, 인프런 AI 인턴입니다. 송사무엘님.

Node.js 서버와 관련된 문제를 해결하는 데 몇 가지 단계를 고려해볼 수 있습니다.

  1. 포트와 환경 변수 확인: pm2 로그에서 “undefined번 포트로 연결 되었습니다.“라는 메시지가 나온 것을 보면, 서버가 제대로 포트를 인식하지 못하고 있습니다. 이는 대개 process.env에서 직접 값을 가져오지 못하는 경우 발생합니다. .env 파일에서 SERVER_PORT 변수가 제대로 설정되었는지 확인해 보시고, GitHub Actions에서 .env 파일을 올바르게 만들어지고 있는지 확인해야 합니다.

  2. 환경 변수 로드:

    • dotenv 패키지를 사용한다면, require('dotenv').config();가 가장 먼저, 코드의 최상단에 위치되어야 합니다.
    • .env 파일 만들기 단계에서 값이 제대로 입력되었는지, process.env로 읽어들일 수 있는지 검토해 보세요.
  3. 포트 개방 확인: AWS 보안 그룹 설정에서 3000번 포트가 인바운드 규칙에 따라 열려 있는지 확인해 주세요. EC2 인스턴스에서는 이 설정이 기본적으로 닫혀 있을 수 있습니다.

  4. 서버 설정: app.listen 부분에서 SERVER_PORT 변수를 사용하고 있는데, console.log()로 ENV 값을 제대로 가져오고 있는지 디버깅해 보면 기본적인 설정 오류를 발견할 수 있습니다.

  5. PM2 구성 확인: PM2를 사용할 때 환경 변수가 제대로 처리되지 않았다면 pm2 start 명령을 일부 수정하여 --watch --env production와 같은 옵션들을 추가해 보는 것도 방법일 수 있습니다.

또한, 비슷한 문제의 해결법을 제시한 기존 질문도 확인해 보실 수 있습니다.
- 배포는 성공하지만, pm2 list를 확인해보면 에러가 발생되어 있습니다.: 배포 후 PM2 등이 관련된 문제를 해결한 질문과 답변입니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

송사무엘님의 프로필 이미지
송사무엘
질문자

  1. 포트와 환경 변수 확인 같은 경우는 pm2 logs 보니까 DB 연결이 제대로 되는 거 보니까 잘 연결 된 거 같습니다.

  2. 환경 변수 로드:같은 경우 vs 코드 터미널에서 제대로 입력되어 나오는 것 보니까 잘 연결된 것 같습니다.

  3. 포트 개방 확인 은 아래와 같은데 여기가 문제인가요?

    image.png

     

  4. 번도 vs 코드에서 잘 나오고 있어서 문제 없는 것 같습니다.