inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

[실습] 확장성을 고려한 프로젝트에서 많이 쓰는 CI/CD 구축 방법

배포는 성공하지만, pm2 list를 확인해보면 에러가 발생이 되어있습니다.

해결된 질문

623

두뇌풀가동

작성한 질문수 7

0

해당 부분을 응용해서, aws linux / next.js를 진행하고 있었습니다.

앞선 강의는 잘 되었으나, 해당 강의해서 어려움을 겪게되어 질문을 남기게 되었습니다.

우서 배포를 확인해보니 성공, s3버킷에는 압춗파일이 잘 올라갔습니다.

ls를 통해서 디렉토리까지 생성이 되는것을 확인하였습니다.

하지만 node_modules가 설치가 안되어 log를 확인해보니,

아래와 같은 에러가 발생합니다. 혹시 설정에 문제가 있을까요?

 

cd: /home/ec2-user/instantgram-server: No such file or directory
2024-08-12 15:00:19 [stderr]npm ERR! Tracker "idealTree" already exists
2024-08-12 15:00:19 [stderr]
2024-08-12 15:00:19 [stderr]npm ERR! A complete log of this run can be found in: /home/ec2-user/.npm/_logs/2024-08-12T15_00_19_547Z-debug-0.log
2024-08-12 15:00:20 [stdout][PM2] Spawning PM2 daemon with pm2_home=/home/ec2-user/.pm2
2024-08-12 15:00:20 [stdout][PM2] PM2 Successfully daemonized
2024-08-12 15:00:20 [stderr][PM2][WARN] No process found
2024-08-12 15:00:20 [stdout][PM2] [v] All Applications Stopped
2024-08-12 15:00:20 [stdout][PM2] [v] PM2 Daemon Stopped
2024-08-12 15:00:21 [stdout][PM2] Spawning PM2 daemon with pm2_home=/home/ec2-user/.pm2
2024-08-12 15:00:21 [stdout][PM2] PM2 Successfully daemonized
2024-08-12 15:00:21 [stdout][PM2] Starting /usr/bin/npm in fork_mode (1 instance)
2024-08-12 15:00:21 [stdout][PM2] Done.
#appspec.yml
version: 0.0
os: linux

files:
  # S3에 저장한 파일들 중 destination(AWS EC2)으로 이동시킬 대상을 지정한다.
  # / 이라고 지정하면 S3에 저장한 전체 파일을 뜻한다.
  - source: /
    # EC2의 어떤 경로에 저장할 지 지정한다. 
    destination: /home/ec2-user/instagram-server

permissions:
  - object: /
    owner: ec2-user
    group: ec2-user

hooks:
  ApplicationStart:
    - location: scripts/start-server.sh
      timeout: 60
      runas: ec2-user
#deploy.yml
name: Deploy To EC2

on:
  push:
    branches:
      - master

jobs:
  Deploy:
    runs-on: ubuntu-latest
    steps:
      - name: Github Repository 파일 불러오기
        uses: actions/checkout@v4 # Github Repository의 파일을 가져오는 Action

      - name: Node.js 설치
        uses: actions/setup-node@v4 # Node.js를 설치하는 Action
        with:
          node-version: 18.x # Node.js 버전

      - name: 의존성(라이브러리) 설치
        run: npm ci # npm ci는 package-lock.json에 있는 의존성을 설치하는 명령어

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

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

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

      - name: 압축하기
        run: tar -zcvf $GITHUB_SHA.tar.gz appspec.yml scripts public .next .env package.json package-lock.json # 압축

      - name: AWS Resource에 접근할 수 있게 AWS credentials 설정
        uses: aws-actions/configure-aws-credentials@v4
        with:
          aws-region: ap-northeast-2
          aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
          aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCRESS_KEY }}

      - name: S3에 프로젝트 폴더 업로드하기
        run: aws s3 cp --region ap-northeast-2 ./$GITHUB_SHA.tar.gz s3://instagram-server-s3/$GITHUB_SHA.tar.gz

      - name: Code Deploy를 활용해 EC2에 프로젝트 코드 배포
        run: aws deploy create-deployment
          --application-name instagram-server
          --deployment-config-name CodeDeployDefault.AllAtOnce
          --deployment-group-name Production
          --s3-location bucket=instagram-server-s3,bundleType=tgz,key=$GITHUB_SHA.tar.gz
#start-server.sh
#!/bin/bash

echo "-----------------서버 바로 배포 시작-----------------"
cd /home/ec2-user/instantgram-server
npm i
pm2 kill
pm2 start npm --name "my-next-app" -- start
echo "-----------------서버 바로 배포 끝-----------------"

aws docker ci/cd github-actions aws-code-deploy infrastructure aws-ec2

답변 2

1

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴입니다.

두뇌풀가동님의 질문과 관련하여, 배포 과정 중에 npm install 시 Tracker "idealTree" already exists와 같은 npm 관련 오류가 발생하는 경우와 PM2 관련하여 프로세스가 정상적으로 찾지 못하는 문제를 겪고 계신 것 같습니다.

문제점 정리:

  1. npm install 오류: 이는 대부분의 경우 하나의 인스턴스에서 여러 npm 프로세스가 동시에 실행되어 발생할 수 있습니다. 또는 특정 오류로 인해 npm 내부적인 충돌이 발생했을 수도 있습니다.
  2. pm2 list에서 에러를 발견: pm2로 Node.js 애플리케이션을 관리하는 과정에서 정상적으로 애플리케이션 실행에 실패하였거나, pm2 설정 자체에 문제가 있는 경우일 수 있습니다.

이와 유사한 문제를 해결한 기존의 답변을 참조하시면 도움이 될 것 같습니다. 아래는 그런 경우에 대한 해결책의 예시입니다:

  1. npm 오류 해결: npm 오류와 관련한 구체적인 해결 방안에 대한 질문은 제가 직접적인 링크를 제공드리기 어렵지만, 일반적으로 npm cache clean --force 명령어 실행 후 다시 npm install 시도를 권장합니다. 이러한 방법은 npm 관련 오류 시 흔히 시도하는 해결책 중 하나입니다.

  2. PM2 문제 해결: PM2와 관련하여, PM2 공식 문서를 참고하시면 기본적인 사용법 및 문제 해결 팁을 얻으실 수 있습니다. 특히, pm2 list에서 에러를 발견하는 경우, pm2 logs를 통해 상세 로그를 확인하고, 올바른 디렉토리에서 PM2를 시작했는지 확인하는 것이 중요합니다.

또한, start-server.sh 스크립트에 나타난 cd /home/ec2-user/instantgram-server 명령어가 있으나, appspec.yml 파일 내 destination 경로는 /home/ec2-user/instagram-server로 설정되어 있습니다. 경로명이 일치하지 않아 발생하는 문제일 수 있으므로, 스크립트와 appspec.yml 파일 내 경로명을 일치시켜 주시기 바랍니다.

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

1

두뇌풀가동

감사합니다~!! 경로도 문제였지만.. cache부분도 문제가 되어서 배포시 ApplicationStart가 무한 진행이 있었습니다. cache clean을 통해 해결하였습니다~!!

0

JSCODE 박재성

안녕하세요 두뇌풀가동님!

해결하셨다니 다행이네요👍

나중에 또 궁금한 점 생기시면 언제든 질문 남겨주세요~

무중단 배포

0

143

2

workflows/deploy.yml 궁금증

0

112

2

.git-credentials 파일이 없이 배포가 성공한 이유가 궁금

0

103

1

(해결 - 정보공유) /home/runner/work/_temp/6be6e~0.sh: line 1: ./gradlew: Permission denied 오류

1

138

2

(확인 완료) git config --global creadential.helper store 후에도 비밀번호 물어보는 현상

1

176

2

질문_ 강의 순서 및 그외

0

112

2

섹션 4 - Docker + 백엔드(Spring Boot)

0

112

2

deploy.yml작성후 원격에 push불가

0

146

2

CodeDeploy 사용시 registration 요구

0

179

3

스프링 종료 명령어

0

100

2

RAM & 스왑메모리 폭증하는 문제

0

149

2

섹션 4, 5와 6, 7은 유사한가요?

0

102

1

code deploy 배포입니다.

0

154

3

사용자 삭제가 안되는 이유

0

150

2

이미지 pull중 no basic auth credentials 문제입니다.

0

163

2

Docker Compose파일을 작성했을때 CI CD와의 연동

0

146

2

보안그룹 생성 오류

0

138

3

AWS 5월에 탈퇴해서 그러는데....

0

111

1

배포 오류

0

134

2

node.js 설치시 에러

0

228

2

appspec.yml, 스크립트 파일 수정요청

0

140

2

appleboy/ssh-action stop_script 대체

1

247

2

Vue.js 파일 배포

0

101

2

aws를완강하고 ci/cd로 넘어왔습니다.

0

121

1