Skip to content

Fullstack & DevOps Todo app using the PERN Stack. Node.js | Express.js | Docker | AWS | PostgreSQL | React.js | Redux | Playwright (E2E) | Jest (Integration)

Notifications You must be signed in to change notification settings

fabio-miguel/pern-todo-app

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

31 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

About / Overview

This is a full-stack Todo application. The focus of this project was Fullstack & DevOps experience.

This to-do application used the PERN stack (PostgreSQL, Express, React and Node.js) for development.

  • Built a full-stack Todo app using TDD in AWS.
  • Frontend hosted in an S3 bucket.
  • CloudFront used as CDN service to cache website to localised nodes.
  • Used Docker to configure and build a lightweight image.
  • Deployed Docker image on ECR.
  • Autoscaling ECS cluster to accommodate changes to traffic.
  • Highly available by being deployed across multiple availability zones.
  • Integrated a Load Balancer to manage traffic to any given node.
  • RDS used to implement PostgreSQL database.
  • Implemented an automated CI/CD pipeline using GitHub Actions, which deployed frontend assets to an S3 bucket, and built and deployed a new version of the backend image to ECS.
  • Provisioned all the infrastructure in AWS as code using Terraform.
  • Used a Postgres Test Container and Jest to learn integration testing.
  • Used Playwright to learn end-to-end testing.

Current

Currently, I have removed the deployed application and re-doing this step using Infrastructure as Code (Terraform). In parallel, I am also creating migration scripts to create the database on application launch.

Difficulties?

PROBLEM 1:

Container build would fail to execute on AWS.

SOLUTION 1:

Failed exec was due to the way in which Docker images were being built. In my case, I was using an Apple Silicon M1 chip. By default Docker on M1 macbook would create linux/arm64 images, which would work only on the machines that are using ARM cpu architecture. But intel based machines use AMD architecture. As a result docker images built on M1 macbook might not work on intel based machines. So I needed to build docker images using linux/amd64 in order to deploy on AWS ECS.

Check your CPU Architecture:

uname -a

Docker Build Command:

docker buildx build --platform=linux/amd64 -t < image id >.dkr.< region >.amazonaws.com/< image name >:< tag > .

Optimisations

The Dockerfile was designed with layer caching in mind for optimised / faster builds.


Useful Commands (for reference)

Pushing a Docker image AWS Docs

Authenticate your Docker client to the Amazon ECR registry to which you intend to push your image:

aws ecr get-login-password --region region | docker login --username AWS --password-stdin aws_account_id.dkr.ecr.region.amazonaws.com

Push the image using the docker push command:

docker push aws_account_id.dkr.ecr.us-west-2.amazonaws.com/my-repository:tag

About

Fullstack & DevOps Todo app using the PERN Stack. Node.js | Express.js | Docker | AWS | PostgreSQL | React.js | Redux | Playwright (E2E) | Jest (Integration)

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy