Skip to content

torchcpu3

torchcpu3 #18

Workflow file for this run

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