Create README.md #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 HiDaddy Services | |
| on: | |
| push: | |
| branches: | |
| - main | |
| jobs: | |
| deploy: | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v4 | |
| - name: Copy files to EC2 | |
| uses: appleboy/scp-action@v0.1.7 | |
| with: | |
| host: ${{ secrets.EC2_HOST }} | |
| username: ${{ secrets.EC2_USER }} | |
| key: ${{ secrets.EC2_KEY }} | |
| port: 22 | |
| source: "./" | |
| target: "/home/ubuntu/hidaddy-ai" | |
| - name: Upload mission .env file | |
| uses: appleboy/ssh-action@v1.0.3 | |
| with: | |
| host: ${{ secrets.EC2_HOST }} | |
| username: ${{ secrets.EC2_USER }} | |
| key: ${{ secrets.EC2_KEY }} | |
| port: 22 | |
| script: | | |
| echo "${{ secrets.MISSION_ENV_FILE }}" > /home/ubuntu/hidaddy-ai/mission/.env | |
| - name: Upload chatbot .env file | |
| uses: appleboy/ssh-action@v1.0.3 | |
| with: | |
| host: ${{ secrets.EC2_HOST }} | |
| username: ${{ secrets.EC2_USER }} | |
| key: ${{ secrets.EC2_KEY }} | |
| port: 22 | |
| script: | | |
| echo "${{ secrets.CHATBOT_ENV_FILE }}" > /home/ubuntu/hidaddy-ai/chatbot/.env | |
| - name: Install dependencies & restart services | |
| uses: appleboy/ssh-action@v1.0.3 | |
| with: | |
| host: ${{ secrets.EC2_HOST }} | |
| username: ${{ secrets.EC2_USER }} | |
| key: ${{ secrets.EC2_KEY }} | |
| port: 22 | |
| script: | | |
| cd /home/ubuntu/hidaddy-ai | |
| # Mission 서비스 의존성 설치 | |
| cd mission | |
| python3 -m venv venv 2>/dev/null || true | |
| source venv/bin/activate | |
| pip install -r ../requirements.txt | |
| cd .. | |
| # Chatbot 서비스 의존성 설치 | |
| cd chatbot | |
| python3 -m venv venv 2>/dev/null || true | |
| source venv/bin/activate | |
| pip install -r ../requirements.txt | |
| cd .. | |
| # 서비스 재시작 | |
| sudo systemctl restart mission | |
| sudo systemctl restart chatbot | |
| # 서비스 상태 확인 | |
| sudo systemctl status mission --no-pager | |
| sudo systemctl status chatbot --no-pager | |
| - name: Health Check - Mission Service | |
| uses: appleboy/ssh-action@v1.0.3 | |
| with: | |
| host: ${{ secrets.EC2_HOST }} | |
| username: ${{ secrets.EC2_USER }} | |
| key: ${{ secrets.EC2_KEY }} | |
| port: 22 | |
| script: | | |
| echo "Mission 서버 헬스체크 중..." | |
| for i in {1..10}; do | |
| STATUS=$(curl -s -o /dev/null -w "%{http_code}" http://localhost:6000/health || true) | |
| if [ "$STATUS" == "200" ]; then | |
| echo "Mission 서버 헬스체크 성공!" | |
| break | |
| fi | |
| echo "Mission 서버 응답 대기 중... ($i/10)" | |
| sleep 3 | |
| done | |
| if [ "$STATUS" != "200" ]; then | |
| echo "Mission 헬스체크 실패" | |
| exit 1 | |
| fi | |
| - name: Health Check - Chatbot Service | |
| uses: appleboy/ssh-action@v1.0.3 | |
| with: | |
| host: ${{ secrets.EC2_HOST }} | |
| username: ${{ secrets.EC2_USER }} | |
| key: ${{ secrets.EC2_KEY }} | |
| port: 22 | |
| script: | | |
| echo "Chatbot 서버 헬스체크 중..." | |
| for i in {1..10}; do | |
| STATUS=$(curl -s -o /dev/null -w "%{http_code}" http://localhost:8000/health || true) | |
| if [ "$STATUS" == "200" ]; then | |
| echo "Chatbot 서버 헬스체크 성공!" | |
| break | |
| fi | |
| echo "Chatbot 서버 응답 대기 중... ($i/10)" | |
| sleep 3 | |
| done | |
| if [ "$STATUS" != "200" ]; then | |
| echo "Chatbot 헬스체크 실패" | |
| exit 1 | |
| fi | |
| - name: Final Status Report | |
| uses: appleboy/ssh-action@v1.0.3 | |
| with: | |
| host: ${{ secrets.EC2_HOST }} | |
| username: ${{ secrets.EC2_USER }} | |
| key: ${{ secrets.EC2_KEY }} | |
| port: 22 | |
| script: | | |
| echo "========== 배포 완료 ==========" | |
| echo "Mission Service (Port 6000): $(curl -s http://localhost:6000/health | jq -r '.status' 2>/dev/null || echo 'Unknown')" | |
| echo "Chatbot Service (Port 8000): $(curl -s http://localhost:8000/health | jq -r '.status' 2>/dev/null || echo 'Unknown')" | |
| echo "==============================" |