Merge pull request #99 from SWMTheFirstTake/dev #138
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Build and Deploy to EC2 | |
| on: | |
| push: | |
| branches: | |
| - main # main 브랜치에 푸시될 때 실행 | |
| jobs: | |
| build-and-deploy: | |
| runs-on: ubuntu-latest | |
| steps: | |
| # 1. 소스 코드 가져오기 | |
| - name: Checkout source code | |
| uses: actions/checkout@v4 | |
| # 2. Node.js 및 pnpm 환경 설정 (in GitHub Actions Runner) | |
| - name: Setup pnpm and Node.js v22 | |
| uses: pnpm/action-setup@v3 | |
| with: | |
| version: 8 # 사용하시는 pnpm 버전을 적어주세요 | |
| - uses: actions/setup-node@v4 | |
| with: | |
| node-version: 22 | |
| cache: 'pnpm' | |
| # 3. 의존성 설치 및 프로젝트 빌드 (in GitHub Actions Runner) | |
| - name: Install dependencies | |
| run: pnpm install | |
| - name: Build project | |
| run: pnpm build | |
| env: | |
| NEXT_PUBLIC_TFT_BACKEND_URL: ${{ secrets.NEXT_PUBLIC_TFT_BACKEND_URL }} | |
| NEXT_PUBLIC_AUTH_KAKAO_ID: ${{ secrets.NEXT_PUBLIC_AUTH_KAKAO_ID }} | |
| NEXT_PUBLIC_AUTH_KAKAO_REDIRECT_URL: ${{ secrets.NEXT_PUBLIC_AUTH_KAKAO_REDIRECT_URL }} | |
| # 4. 빌드 결과물을 EC2 서버로 복사 | |
| - name: Copy build files to EC2 | |
| uses: appleboy/scp-action@v0.1.7 | |
| with: | |
| host: ${{ secrets.EC2_HOST }} | |
| username: ${{ secrets.EC2_USERNAME }} | |
| key: ${{ secrets.EC2_SSH_KEY }} | |
| source: '.next/, public/, package.json, pnpm-lock.yaml' | |
| target: ${{ secrets.EC2_PROJECT_PATH }} | |
| overwrite: true | |
| # 5. EC2 서버에 런타임용 .env.production 파일 생성 | |
| - name: Create .env.production file on EC2 | |
| uses: appleboy/ssh-action@v1.0.3 | |
| with: | |
| host: ${{ secrets.EC2_HOST }} | |
| username: ${{ secrets.EC2_USERNAME }} | |
| key: ${{ secrets.EC2_SSH_KEY }} | |
| script: | | |
| cd ${{ secrets.EC2_PROJECT_PATH }} | |
| echo "DATABASE_URL=${{ secrets.DATABASE_URL }}" > .env.production | |
| echo "AUTH_SECRET=${{ secrets.AUTH_SECRET }}" >> .env.production | |
| echo "SECRET_API_KEY=${{ secrets.SECRET_API_KEY }}" >> .env.production | |
| # ... 필요한 모든 런타임 환경변수를 여기에 추가 ... | |
| # 6. EC2에서 애플리케이션 재시작 (Simplified) | |
| - name: Restart application on EC2 | |
| uses: appleboy/ssh-action@v1.0.3 | |
| with: | |
| host: ${{ secrets.EC2_HOST }} | |
| username: ${{ secrets.EC2_USERNAME }} | |
| key: ${{ secrets.EC2_SSH_KEY }} | |
| script: | | |
| set -e | |
| cd ${{ secrets.EC2_PROJECT_PATH }} | |
| # 안정성을 위해 fnm 환경 활성화는 유지합니다. | |
| export FNM_DIR="/home/ubuntu/.fnm" | |
| eval "`fnm env --shell bash`" | |
| # 운영에 필요한 의존성만 설치합니다. | |
| pnpm install --prod | |
| # 간단하고 안정적인 명령어로 PM2를 재시작합니다. | |
| pm2 restart the-first-take || pm2 start "pnpm run start" --name the-first-take |