Skip to content

Merge pull request #99 from SWMTheFirstTake/dev #138

Merge pull request #99 from SWMTheFirstTake/dev

Merge pull request #99 from SWMTheFirstTake/dev #138

Workflow file for this run

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