This is the final project of the course Cloud Developer from Udacity.
It's built with a distributed microservice architecture separated into a number of services:
- api - a Spring Boot backend api exposing rest and websocket endpoints.
- client - the frontend client featuring an Angular Single Page Application.
- RabbitMQ - message broker used to send p2p chat messages, distributing user online statuses, and pinging other users.
- PostgreSQL - RDMS for persisting user information and chat messages.
- reverseproxy - an NGINX web server which acts like a reverse proxy, routing requests to the relevant service.
It is published on https://bjorkcapstone.codespirit.se/ and is hosted in AWS EKS (Elastic Kubernetes Service.
The Docker images are published at https://hub.docker.com/u/patrikb.
For user signup, authentication and authorization Auth0 is used. Auth0 libraries are used both in the client and the api.
The application has a number of features, such as:
- Signup
- Logging in/out
- See own profile information
- List other users.
- See which users are online.
- Request to chat with a user.
- The other user will get a notice that another user wants to chat.
- The users can then chat with each other.
- Java 11+ (optional)
- Maven (optional)
- Node
- NPM
- Angular CLI
- Docker
From the root of the project execute:
./build-all.sh
Optionally, if Java and Maven isn't install the project can be built with:
./build-all-less-pre-requisites.sh
From the root of the project execute:
./run-docker-compose.sh
Then browse to http://localhost:4200
Execute:
kubectl apply -f k8-yaml/
As code is pushed into the repository one or more workflows are triggered. See .github/workflows
. The workflows build and test the services, builds Docker images which are pushed to Dockerhub, and last deployed to Kubernetes.
E.g. the application logs are logged to AWS CloudWatch via FluentD. See https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Container-Insights-setup-logs.html for the setup instructions that have been followed.