Skip to content

Instantly share code, notes, and snippets.

@raviagheda
Last active April 6, 2025 09:02
Show Gist options
  • Save raviagheda/c69ae5e884f4490b1af656dbd80c00dd to your computer and use it in GitHub Desktop.
Save raviagheda/c69ae5e884f4490b1af656dbd80c00dd to your computer and use it in GitHub Desktop.
Github Action with EC2 using SSH

Github Action with EC2 using SSH

Check this out on Dev.to

Configure SSH into aws ec2

Declare these git secrets

  • SSH_PRIVATE_KEY
  • HOST_NAME / IP_ADDRESS
  • USER_NAME
name: Deploy

on:
  push:
    branches: [ dev ]

jobs:
  Deploy:
    name: Deploy to EC2
    runs-on: ubuntu-latest
    
    steps:
      - uses: actions/checkout@v2 
      - name: Build & Deploy
        env:
            PRIVATE_KEY: ${{ secrets.SSH_PRIVATE_KEY }}
            HOSTNAME: ${{secrets.SSH_HOST}}
            USER_NAME: ${{secrets.USER_NAME}}
      
        run: |
          echo "$PRIVATE_KEY" > private_key && chmod 600 private_key
          ssh -o StrictHostKeyChecking=no -i private_key ${USER_NAME}@${HOSTNAME} '

              # Now we have got the access of EC2 and we will start the deploy .
              cd /home/ubuntu/<PROJECT_DIRECTORY> &&
              git checkout dev &&
              git fetch --all &&
              git reset --hard origin/dev &&
              git pull origin dev &&
              sudo npm i &&
              sudo npm run build &&
              sudo pm2 stop ./dist/index.js &&
              sudo pm2 start ./dist/index.js
              '
@ritik48
Copy link

ritik48 commented Dec 3, 2024

@raviagheda I want to access the env inside my ssh. how to do this ?
I am hosting my react app, and it requires REACT_APP_BACKEND as env
But, it's now working.


name: Deploy Frontend to EC2

on:
  push:
    branches: [ "deployment" ]

jobs:
  deploy:

    runs-on: ubuntu-latest
    steps:
    - name: Checkout code
      uses: actions/checkout@v3

    - name: Deploy to EC2
      env:
        EC2_HOST: ${{ secrets.EC2_HOST }}
        EC2_USER: ${{ secrets.EC2_USER }}
        EC2_KEY: ${{ secrets.EC2_KEY }}
        REACT_APP_BACKEND: ${{ secrets.BACKEND_URL }}
      run: |
        echo "${EC2_KEY}" > ec2-key.pem
        chmod 600 ec2-key.pem

        ssh -o StrictHostKeyChecking=no -i ec2-key.pem $EC2_USER@$EC2_HOST << 'EOF'

          export NVM_DIR="$HOME/.nvm"
          [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
          
          # Ensure the correct Node version is used
          nvm use 20.17.0

          cd /home/ubuntu/Portfolio/Portfolio-Frontend
  
          git pull origin deployment
          npm install

          npm run build
  
          sudo cp -r build/* /var/www/frontend

        EOF
        
        rm ec2-key.pem

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment