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

두뇌풀가동님의 프로필 이미지
두뇌풀가동

작성한 질문수

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

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

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

해결된 질문

작성

·

165

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 "-----------------서버 바로 배포 끝-----------------"

답변 2

1

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

두뇌풀가동님의 질문과 관련하여, 배포 과정 중에 npm installTracker "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 파일 내 경로명을 일치시켜 주시기 바랍니다.

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

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

0

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

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

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

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

두뇌풀가동님의 프로필 이미지
두뇌풀가동

작성한 질문수

질문하기