added fix for localhost #97
This file contains 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 | |
on: | |
push: | |
branches: [ "main" ] | |
jobs: | |
build-api: | |
name: Build API Docker Image | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v2 | |
- name: Configure AWS ECR credentials | |
uses: aws-actions/configure-aws-credentials@v4 | |
with: | |
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }} | |
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} | |
aws-region: ${{secrets.AWS_REGION}} | |
- name: Login to Amazon ECR | |
id: login-aws-ecr | |
uses: aws-actions/amazon-ecr-login@v2 | |
- name: Build and push API image to ECR | |
env: | |
ECR_REGISTRY: ${{ steps.login-aws-ecr.outputs.registry }} | |
ECR_REPOSITORY: ${{secrets.API_IMAGE_REPO}} | |
IMAGE_TAG: latest | |
run: | | |
docker build -t $ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG ./api | |
docker push $ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG | |
build-frontend: | |
name: Build Frontend Docker Image | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v2 | |
- name: Configure AWS ECR credentials | |
uses: aws-actions/configure-aws-credentials@v4 | |
with: | |
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }} | |
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} | |
aws-region: ${{secrets.AWS_REGION}} | |
- name: Login to Amazon ECR | |
id: login-aws-ecr | |
uses: aws-actions/amazon-ecr-login@v2 | |
- name: Build and push Frontened image to ECR | |
env: | |
ECR_REGISTRY: ${{ steps.login-aws-ecr.outputs.registry }} | |
ECR_REPOSITORY: ${{secrets.FRONTEND_IMAGE_REPO}} | |
IMAGE_TAG: latest | |
run: | | |
docker build -t $ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG ./frontend | |
docker push $ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG | |
deploy-api: | |
name: Deploy API to EC2 | |
runs-on: ubuntu-latest | |
needs: build-api | |
steps: | |
- name: Configure AWS ECR credentials | |
uses: aws-actions/configure-aws-credentials@v4 | |
with: | |
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }} | |
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} | |
aws-region: ${{secrets.AWS_REGION}} | |
- name: Login to Amazon ECR | |
id: login-aws-ecr | |
uses: aws-actions/amazon-ecr-login@v2 | |
- name: Pull and Run Docker Image from ECR | |
run: | | |
command_id=$(aws ssm send-command \ | |
--document-name "AWS-RunShellScript" \ | |
--targets "Key=instanceids,Values=${{ secrets.INSTANCE_ID_1}}, ${{ secrets.INSTANCE_ID_2}}" \ | |
--comment "Pull Docker Image and run it" \ | |
--parameters commands='[ | |
"aws ecr get-login-password --region us-east-2 | docker login --username AWS --password-stdin ${{ steps.login-aws-ecr.outputs.registry }}", | |
"docker stop ${{ vars.API_CONTAINER_NAME }} || true", | |
"docker pull ${{ steps.login-aws-ecr.outputs.registry }}/${{secrets.API_IMAGE_REPO}}:latest", | |
"docker run --rm -d -p 3000:3000 -e DB_HOST=${{ secrets.DB_HOST}} -e DB_USERNAME=${{ secrets.DB_USERNAME}} -e DB_PASSWORD=${{ secrets.DB_PASSWORD}} -e ENVIRONMENT=production --name ${{ vars.API_CONTAINER_NAME }} ${{steps.login-aws-ecr.outputs.registry}}/${{secrets.API_IMAGE_REPO}}:latest"]' --query "Command.CommandId" --output text) | |
echo "command_id=$command_id" >> $GITHUB_ENV | |
- name: Wait for Docker Commands to Complete on Instance 1 | |
run: | | |
echo ${{ env.command_id }} | |
aws ssm wait command-executed \ | |
--command-id ${{ env.command_id }} \ | |
--instance-id ${{ secrets.INSTANCE_ID_1}} || true | |
- name: Wait for Docker Commands to Complete on Instance 2 | |
run: | | |
echo ${{ env.command_id }} | |
aws ssm wait command-executed \ | |
--command-id ${{ env.command_id }} \ | |
--instance-id ${{ secrets.INSTANCE_ID_2}} || true | |
- name: Check Command Status | |
run: | | |
status=$(aws ssm list-commands --command-id ${{ env.command_id }} --query "Commands[0].StatusDetails" --output text) | |
echo "$status" | |
if [ "$status" == "Success" ]; then | |
echo "Your API is running" | |
else | |
echo "Command failed" | |
exit 1 | |
fi | |
deploy-frontend: | |
name: Deploy Frontend to EC2 | |
runs-on: ubuntu-latest | |
needs: build-frontend | |
steps: | |
- name: Configure AWS ECR credentials | |
uses: aws-actions/configure-aws-credentials@v4 | |
with: | |
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }} | |
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} | |
aws-region: ${{secrets.AWS_REGION}} | |
- name: Login to Amazon ECR | |
id: login-aws-ecr | |
uses: aws-actions/amazon-ecr-login@v2 | |
- name: Pull and Run Docker Image from ECR | |
run: | | |
command_id=$(aws ssm send-command \ | |
--document-name "AWS-RunShellScript" \ | |
--targets "Key=instanceids,Values=${{ secrets.INSTANCE_ID_1}}, ${{ secrets.INSTANCE_ID_2}}" \ | |
--comment "Pull Docker Image and run it" \ | |
--parameters commands='[ | |
"aws ecr get-login-password --region us-east-2 | docker login --username AWS --password-stdin ${{ steps.login-aws-ecr.outputs.registry }}", | |
"docker stop ${{ vars.FRONTEND_CONTAINER_NAME }} || true", | |
"docker pull ${{ steps.login-aws-ecr.outputs.registry }}/${{secrets.FRONTEND_IMAGE_REPO}}:latest", | |
"docker run --rm -d -p 80:80 --name ${{ vars.FRONTEND_CONTAINER_NAME }} ${{steps.login-aws-ecr.outputs.registry}}/${{secrets.FRONTEND_IMAGE_REPO}}:latest"]' --query "Command.CommandId" --output text) | |
echo "command_id=$command_id" >> $GITHUB_ENV | |
- name: Wait for Docker Commands to Complete on Instance 1 | |
run: | | |
echo ${{ env.command_id }} | |
aws ssm wait command-executed \ | |
--command-id ${{ env.command_id }} \ | |
--instance-id ${{ secrets.INSTANCE_ID_1}} || true | |
- name: Wait for Docker Commands to Complete on Instance 2 | |
run: | | |
echo ${{ env.command_id }} | |
aws ssm wait command-executed \ | |
--command-id ${{ env.command_id }} \ | |
--instance-id ${{ secrets.INSTANCE_ID_2}} || true | |
- name: Check Command Status | |
run: | | |
status=$(aws ssm list-commands --command-id ${{ env.command_id }} --query "Commands[0].StatusDetails" --output text) | |
echo "$status" | |
if [ "$status" == "Success" ]; then | |
echo "YAY we did it! Your frontend is running" | |
else | |
echo "Command failed" | |
exit 1 | |
fi | |