torchcpu3 #18
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 AWS EC2 | |
| on: | |
| push: | |
| branches: | |
| - main | |
| - production | |
| workflow_dispatch: | |
| env: | |
| EC2_HOST: ${{ secrets.EC2_HOST }} | |
| EC2_USER: ubuntu | |
| DOCKER_IMAGE: yh0223/void_filter # 여기를 본인 Docker Hub username/repository로 변경 | |
| jobs: | |
| deploy: | |
| name: Build and Deploy to EC2 | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v4 | |
| - name: Login to Docker Hub | |
| uses: docker/login-action@v3 | |
| with: | |
| username: ${{ secrets.DOCKERHUB_USERNAME }} | |
| password: ${{ secrets.DOCKERHUB_TOKEN }} | |
| - name: Build and push Docker image | |
| id: build-image | |
| env: | |
| IMAGE_TAG: ${{ github.sha }} | |
| run: | | |
| docker build -t ${{ env.DOCKER_IMAGE }}:$IMAGE_TAG . | |
| docker tag ${{ env.DOCKER_IMAGE }}:$IMAGE_TAG ${{ env.DOCKER_IMAGE }}:latest | |
| docker push ${{ env.DOCKER_IMAGE }}:$IMAGE_TAG | |
| docker push ${{ env.DOCKER_IMAGE }}:latest | |
| echo "image=${{ env.DOCKER_IMAGE }}:$IMAGE_TAG" >> $GITHUB_OUTPUT | |
| - name: Deploy to EC2 | |
| env: | |
| PRIVATE_KEY: ${{ secrets.EC2_SSH_PRIVATE_KEY }} | |
| IMAGE_URI: ${{ steps.build-image.outputs.image }} | |
| DOCKERHUB_USERNAME: ${{ secrets.DOCKERHUB_USERNAME }} | |
| DOCKERHUB_TOKEN: ${{ secrets.DOCKERHUB_TOKEN }} | |
| run: | | |
| echo "$PRIVATE_KEY" > private_key.pem | |
| chmod 600 private_key.pem | |
| ssh -o StrictHostKeyChecking=no \ | |
| -i private_key.pem \ | |
| $EC2_USER@$EC2_HOST \ | |
| "IMAGE_URI=$IMAGE_URI DOCKERHUB_USERNAME=$DOCKERHUB_USERNAME DOCKERHUB_TOKEN=$DOCKERHUB_TOKEN bash -s" << 'EOF' | |
| echo "🔐 Logging into Docker Hub..." | |
| echo $DOCKERHUB_TOKEN | docker login -u $DOCKERHUB_USERNAME --password-stdin | |
| echo "🛑 Stopping existing container..." | |
| docker stop void_filter 2>/dev/null || true | |
| docker rm void_filter 2>/dev/null || true | |
| echo "📥 Pulling new image from Docker Hub..." | |
| docker pull $IMAGE_URI | |
| echo "🚀 Starting new container..." | |
| docker run -d \ | |
| --name void_filter \ | |
| --restart unless-stopped \ | |
| -p 80:8000 \ | |
| $IMAGE_URI | |
| echo "📊 Container status:" | |
| docker ps | grep void_filter | |
| echo "🧹 Cleaning up old images..." | |
| docker image prune -af | |
| echo "✅ Deployment completed" | |
| EOF | |
| rm -f private_key.pem | |
| - name: Verify deployment | |
| run: | | |
| echo "🚀 Deployment completed!" | |
| echo "🔍 Checking application health..." | |
| sleep 15 | |
| for i in {1..5}; do | |
| if curl -f http://${{ env.EC2_HOST }}/health; then | |
| echo "✅ Application is healthy!" | |
| exit 0 | |
| fi | |
| echo "⏳ Attempt $i/5 failed, retrying..." | |
| sleep 10 | |
| done | |
| echo "❌ Health check failed" | |
| exit 1 |