@@ -3,7 +3,7 @@ name: Deploy to EC2
33on :
44 push :
55 branches :
6- - main # main 브랜치에 푸시될 때 트리거됨
6+ - main
77
88jobs :
99 deploy :
@@ -15,36 +15,39 @@ jobs:
1515
1616 - name : Set up SSH key
1717 run : |
18- # ~/.ssh 디렉토리 생성 (기본적으로 없을 수 있음)
1918 mkdir -p ~/.ssh
20- # GitHub secrets에 저장된 PEM 파일을 생성
2119 echo "${{ secrets.EC2_SSH_PEM }}" > ~/.ssh/ec2.pem
22- chmod 600 ~/.ssh/ec2.pem # SSH 키에 적절한 권한 부여
23- # EC2 인스턴스의 호스트 키를 확인하지 않도록 설정 (보안을 강화하려면 이 부분을 수정)
20+ chmod 600 ~/.ssh/ec2.pem
2421 echo -e "Host *\n\tStrictHostKeyChecking no\n" >> ~/.ssh/config
2522
2623 - name : Set up environment variables
2724 run : |
2825 ssh -i ~/.ssh/ec2.pem ec2-user@${{ secrets.EC2_ADDRESS }} "bash -s" << 'EOF'
29- # .env 파일이 존재하는지 확인
3026 if [ ! -f ~/moving-be/.env ]; then
31- # .env 파일이 없으면 새로 생성
32- touch ~/moving-be/.env
27+ touch ~/moving-be/.env
3328 fi
34-
35- # GitHub Actions에서 전달된 .env 파일 내용 시크릿으로 가져오기
3629 echo "${{ secrets.ENV_FILE }}" > ~/moving-be/.env
37-
38- # 파일 내용 확인 (선택 사항)
3930 cat ~/moving-be/.env
4031 EOF
4132
4233 - name : Deploy to EC2
4334 run : |
4435 ssh -i ~/.ssh/ec2.pem -T ec2-user@${{ secrets.EC2_ADDRESS }} << 'EOF'
4536 cd ~/moving-be
46- git pull origin main # GitHub에서 최신 변경 사항을 pull
47- npm install # 필요에 따라 의존성 설치
37+ git fetch origin main
38+ git reset --hard origin/main
39+ npm install
40+ npm audit fix --force
4841 npm run build
49- pm2 start dist/app.js --name my-app || pm2 reload my-app -f # 서버 재시작 (pm2 또는 다른 방법으로)
42+
43+ # 클러스터 모드로 앱이 실행되어 있지 않다면 처음 실행
44+ if ! pm2 list | grep -q "my-app"; then
45+ pm2 start dist/app.js --name my-app -i max
46+ else
47+ # 무중단 배포를 위한 reload
48+ pm2 reload my-app --update-env
49+ fi
50+
51+ # 로그 확인
52+ pm2 logs my-app --lines 10
5053 EOF
0 commit comments