Skip to content

chore: 배포 설정 변경 #7

chore: 배포 설정 변경

chore: 배포 설정 변경 #7

Workflow file for this run

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