Skip to content

deploy4

deploy4 #7

Workflow file for this run

name: Build and Deploy to EC2
on:
push:
branches:
- main # Trigger workflow on pushes to the main branch
jobs:
build-and-push:
runs-on: ubuntu-latest
steps:
# Step 1: Checkout code
- name: Checkout repository
uses: actions/checkout@v3
# Step 2: Log in to Docker Hub
- name: Log in to Docker Hub`
run: echo "${{ secrets.DOCKER_PASSWORD }}" | docker login -u "${{ secrets.DOCKER_USERNAME }}" --password-stdin
# Step 3: Build and push frontend image
- name: Build and push frontend Docker image
run: |
docker build -t ${{ secrets.DOCKER_USERNAME }}/frontend:latest -f Frontend/Dockerfile ./Frontend
docker push ${{ secrets.DOCKER_USERNAME }}/frontend:latest
# Step 4: Build and push backend image
- name: Build and push backend Docker image
run: |
docker build -t ${{ secrets.DOCKER_USERNAME }}/backend:latest -f Backend/Dockerfile ./Frontend
docker push ${{ secrets.DOCKER_USERNAME }}/backend:latest
deploy:
needs: build-and-push
runs-on: ubuntu-latest
steps:
# Step 1: Set up SSH
- name: Set up SSH
run: |
mkdir -p ~/.ssh
echo "${{ secrets.EC2_SSH_KEY }}" > ~/.ssh/id_rsa
chmod 600 ~/.ssh/id_rsa
ssh-keyscan -H ${{ secrets.EC2_HOST }} >> ~/.ssh/known_hosts
# Step 2: Deploy to EC2
- name: Deploy to EC2
run: |
ssh -T -i ~/.ssh/id_rsa ${{ secrets.EC2_USER }}@${{ secrets.EC2_HOST }} << 'EOF'
# Pull the latest images
docker pull ${{ secrets.DOCKER_USERNAME }}/frontend:latest
docker pull ${{ secrets.DOCKER_USERNAME }}/backend:latest
# Stop and remove existing containers (if any)
docker stop frontend || true && docker rm frontend || true
docker stop backend || true && docker rm backend || true
# Run the frontend container
docker run -d --name frontend -p 443:5173 ${{ secrets.DOCKER_USERNAME }}/frontend:latest
# Run the backend container
docker run -d --name backend -p 8080:3000 ${{ secrets.DOCKER_USERNAME }}/backend:latest
EOF