This article helps you understand how you can automatically deploy your code to AWS EC2 from GitHub. Deployed Resume can be viewed here - http://ec2-13-60-15-196.eu-north-1.compute.amazonaws.com/
-
Create a
.github/workflows
directory in your repository on GitHub if this directory does not already exist. -
In the
.github/workflows
directory, create a file namedgithub-actions-ec2.yml
. -
Start your file by defining jobs:
jobs: deploy: name: Deploy to EC2 runs-on: ubuntu-latest
-
Checkout the files:
steps: - name: Checkout the files uses: actions/checkout@v2
-
Deploy the code to the server:
- name: Deploy to Server 1 uses: easingthemes/ssh-deploy@main env: SSH_PRIVATE_KEY: ${{ secrets.EC2_SSH_KEY }} REMOTE_HOST: ${{ secrets.HOST_DNS }} REMOTE_USER: ${{ secrets.USERNAME }} TARGET: ${{ secrets.TARGET_DIR }}
-
You need to fill in the secrets using GitHub Secrets that you can add in your repo, read GitHub Secrets
-
EC2_SSH_KEY
: This will be your .pem file which you will use to login to the instance -
HOST_DNS
: Public DNS record of the instance, it will look something like thisec2-xx-xxx-xxx-xxx.us-west-2.compute.amazonaws.com
-
USERNAME
: Will be the username of the EC2 instance, usually ubuntu -
TARGET_DIR
: Is where you want to deploy your code.
-
-
-
Once you add all these information your repo will look like thisGitHub Secrets
-
Trigger deployment only on push to master branch:
on: push: branches: - main
-
The final
.github/workflows/github-actions-ec2.yml
should look like the following:name: Push-to-EC2 # Trigger deployment only on push to main branch on: push: branches: - main jobs: deploy: name: Deploy to EC2 on master branch push runs-on: ubuntu-latest steps: - name: Checkout the files uses: actions/checkout@v2 - name: Deploy to Server 1 uses: easingthemes/ssh-deploy@main env: SSH_PRIVATE_KEY: ${{ secrets.EC2_SSH_KEY }} REMOTE_HOST: ${{ secrets.HOST_DNS }} REMOTE_USER: ${{ secrets.USERNAME }} TARGET: ${{ secrets.TARGET_DIR }} - name: Executing remote ssh commands using ssh key uses: appleboy/ssh-action@master with: host: ${{ secrets.HOST_DNS }} username: ${{ secrets.USERNAME }} key: ${{ secrets.EC2_SSH_KEY }} script: | sudo apt-get -y update sudo apt-get install -y apache2 sudo systemctl start apache2 sudo systemctl enable apache2 cd home sudo mv * /var/www/html