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

현석오님의 프로필 이미지

작성한 질문수

AWS 배포 완벽가이드 (feat. Lightsail, Docker, ECS)

배포용 Workflow 만들기

ec2 에 배포 자동화시 참고 코드 올려 봐여

작성

·

231

·

수정됨

0

ec2 에 배포할 경우 아래처럼 deploy.ytml 수정 하면 pm2 프로세스 종료 후 서버 시작까지 잘되요 여기에 뭔가 좀 빼고 더하는 개선이 필요할것 같은데 일단 기본적인 배포 액션은 잘 동작 합니다.

deploy.yml

name: deploy

on:
  push:
    branches:
      - main

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout the code
        uses: actions/checkout@v1

      - name: Setup Node.js
        uses: actions/setup-node@v3
        with:
          node-version: "18.x"

      - name: Create SSH directory
        run: mkdir -p ~/.ssh

      - name: Install pm2
        run: sudo npm install -g pm2

      - name: SSH Commands
        uses: appleboy/ssh-action@v0.1.6
        with:
          host: ${{ secrets.AWS_SSH_HOST }}
          username: ${{ secrets.AWS_SSH_USERNAME }}
          key: ${{ secrets.AWS_SSH_KEY }}
          port: ${{ secrets.AWS_SSH_PORT }}
          script_stop: true
          script: |
            # sudo apt-get update || exit 1
            cd express-redis-server/
            sudo pm2 delete all || true
            sudo git pull || exit 1
            sudo npm install || exit 1
            sudo npm run build || exit 1
            sudo pm2 start npm -- start


답변 1

0

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

현석오님, AWS EC2에 배포 자동화를 위한 GitHub Actions deploy.yml 설정을 공유해주셨군요.

작성하신 코드는 기본적으로 노드 버전 설정, SSH 디렉토리 생성, pm2 설치, 그리고 SSH 커맨드를 통해 EC2에 접속하여 프로젝트의 종속성 설치, 빌드, PM2로 애플리케이션 실행까지의 과정을 자동화하도록 구성되어 있습니다.

더 좋은 자동화를 위해 몇 가지 제안을 드릴 수 있습니다:
- actions/checkout@v1 대신 actions/checkout@v2나 최신 버전을 사용해보세요. 최신 버전이 더 많은 기능과 개선사항을 제공합니다.
- sudo apt-get update 부분은 주석 처리되어 있는데, 필요에 따라 활성화시켜줘도 좋습니다. 의존성 이슈를 방지할 수 있습니다.
- sudo pm2 delete all은 모든 PM2 프로세스를 종료하는데, 특정 애플리케이션만 종료하고자 한다면 해당 프로세스 이름이나 아이디를 지정할 수 있습니다.
- 코드에 오류가 발생했을 때 바로 종료되도록 exit 1을 추가하신 부분은 좋습니다. 이를 통해 배포 상태를 더 명확하게 파악할 수 있습니다.
- GitHub Actions Workflow에서 사용하는 시크릿(예: AWS_SSH_HOST, AWS_SSH_USERNAME 등)은 GitHub 리포지토리 설정에서 미리 설정해두어야 합니다. 확인해보시고 설정되어 있지 않은 시크릿이 없는지 점검하세요.

추가적으로 개선이 필요하다고 느낀 부분이 있다면, 구체적으로 어떤 기능이나 작업을 원하는지 말씀해주시면 좀 더 구체적인 도움을 드릴 수 있을 것 같습니다.