chore: 배포 설정 변경 #7
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: Deploy to EC2 | |
| on: | |
| push: | |
| branches: | |
| - main | |
| workflow_dispatch: | |
| env: | |
| EC2_HOST: ${{ secrets.EC2_HOST }} | |
| EC2_USER: ${{ secrets.EC2_USER }} | |
| EC2_SSH_KEY: ${{ secrets.EC2_SSH_KEY }} | |
| jobs: | |
| deploy: | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v4 | |
| - name: Setup SSH | |
| run: | | |
| # SSH 디렉토리 생성 | |
| mkdir -p ~/.ssh | |
| chmod 700 ~/.ssh | |
| # SSH 키 저장 | |
| echo "${{ secrets.EC2_SSH_KEY }}" > ~/.ssh/deploy_key | |
| chmod 600 ~/.ssh/deploy_key | |
| # known_hosts 설정 | |
| ssh-keyscan -H ${{ secrets.EC2_HOST }} >> ~/.ssh/known_hosts 2>/dev/null || true | |
| chmod 644 ~/.ssh/known_hosts || true | |
| echo "✅ SSH setup completed" | |
| echo "EC2_HOST: ${{ secrets.EC2_HOST }}" | |
| echo "EC2_USER: ${{ secrets.EC2_USER }}" | |
| - name: Test SSH Connection | |
| timeout-minutes: 2 | |
| run: | | |
| echo "🔍 SSH 연결 테스트 중..." | |
| echo "EC2_HOST: ${{ secrets.EC2_HOST }}" | |
| echo "EC2_USER: ${{ secrets.EC2_USER }}" | |
| echo "타임아웃: 60초" | |
| echo "" | |
| # 연결 테스트 (타임아웃 60초) | |
| if ssh -o ConnectTimeout=60 -o StrictHostKeyChecking=no -o ServerAliveInterval=10 -i ~/.ssh/deploy_key ${{ secrets.EC2_USER }}@${{ secrets.EC2_HOST }} echo "✅ SSH 연결 성공" 2>&1; then | |
| echo "✅ SSH 연결 테스트 통과" | |
| else | |
| echo "" | |
| echo "❌ SSH 연결 실패" | |
| echo "" | |
| echo "🔧 즉시 확인할 사항:" | |
| echo "" | |
| echo "1. EC2 인스턴스 상태 확인" | |
| echo " - AWS 콘솔 > EC2 > 인스턴스가 'running' 상태인지 확인" | |
| echo "" | |
| echo "2. 보안 그룹 설정 확인" | |
| echo " - AWS 콘솔 > EC2 > 보안 그룹 > 인바운드 규칙" | |
| echo " - 포트 22 (SSH) 규칙이 있어야 함" | |
| echo " - 소스: 0.0.0.0/0 또는 특정 IP 범위" | |
| echo "" | |
| echo "3. 공개 IP 주소 확인" | |
| echo " - AWS 콘솔 > EC2 > 인스턴스 > 네트워킹 탭" | |
| echo " - 공개 IPv4 주소를 확인하고 GitHub Secrets의 EC2_HOST와 비교" | |
| echo "" | |
| echo "4. 로컬에서 SSH 연결 테스트" | |
| echo " ssh -i ~/.ssh/your_key.pem ${{ secrets.EC2_USER }}@${{ secrets.EC2_HOST }}" | |
| echo " (로컬에서도 연결이 안 되면 EC2 설정 문제입니다)" | |
| echo "" | |
| exit 1 | |
| fi | |
| - name: Deploy to EC2 | |
| run: | | |
| set -e | |
| # EC2에서 git pull 및 배포 실행 | |
| ssh -o StrictHostKeyChecking=no -o ServerAliveInterval=60 -o ServerAliveCountMax=3 -o ConnectTimeout=60 -i ~/.ssh/deploy_key ${{ secrets.EC2_USER }}@${{ secrets.EC2_HOST }} << 'EOF' | |
| # 배포 디렉토리로 이동 | |
| cd ~/cinecollector || { | |
| echo "⚠️ 배포 디렉토리가 없습니다. 초기 설정을 진행합니다..." | |
| mkdir -p ~/cinecollector | |
| cd ~/cinecollector | |
| # Git 저장소 클론 (처음 배포인 경우) | |
| if [ ! -d ".git" ]; then | |
| echo "📥 Git 저장소 클론 중..." | |
| git clone https://github.com/${{ github.repository }}.git . | |
| fi | |
| } | |
| # Git pull로 최신 코드 가져오기 | |
| echo "📥 최신 코드 가져오는 중..." | |
| git fetch origin | |
| git reset --hard origin/main | |
| git clean -fd | |
| # 배포 스크립트 실행 | |
| if [ -f "scripts/deploy.sh" ]; then | |
| chmod +x scripts/deploy.sh | |
| ./scripts/deploy.sh | |
| else | |
| echo "⚠️ 배포 스크립트를 찾을 수 없습니다." | |
| exit 1 | |
| fi | |
| EOF | |
| - name: Cleanup | |
| if: always() | |
| run: | | |
| rm -f ~/.ssh/deploy_key |