You've already forked microservices
mirror of
https://github.com/ebosas/microservices.git
synced 2025-08-24 20:08:55 +02:00
Add deployment and Redis sections
This commit is contained in:
80
README.md
80
README.md
@@ -6,9 +6,12 @@ A basic example of microservice architecture which demonstrates communication be
|
||||
* Uses RabbitMQ to communicate between services
|
||||
* Uses WebSocket to talk to the front end
|
||||
* Stores data in PostgreSQL
|
||||
* Stores cache in Redis
|
||||
* Uses React for front end development
|
||||
* Uses Redis for cache
|
||||
* Builds and runs with Docker
|
||||
* Deployed on AWS with CloudFormation templates
|
||||
* ECS using EC2
|
||||
* AWS Fargate
|
||||
|
||||

|
||||
|
||||
@@ -24,14 +27,6 @@ cd microservices
|
||||
docker-compose up
|
||||
```
|
||||
|
||||
### Back end
|
||||
|
||||
To access the back end service, attach to its docker container from a separate terminal window. Messages from the front end will show up here. Also, standart input will be sent to the front end for two way communication.
|
||||
|
||||
```bash
|
||||
docker attach microservices_backend
|
||||
```
|
||||
|
||||
### Database
|
||||
|
||||
To inspect the database, launch a new container that will connect to our Postgres database. Then enter the password `demopsw` (see the `.env` file).
|
||||
@@ -49,21 +44,80 @@ Select everything from the messages table:
|
||||
select * from messages;
|
||||
```
|
||||
|
||||
### Redis
|
||||
|
||||
To inspect Redis, connect to its container via redis-cli.
|
||||
|
||||
```bash
|
||||
docker run -it --rm \
|
||||
--network microservices_network \
|
||||
redis:6-alpine \
|
||||
redis-cli -h redis
|
||||
```
|
||||
|
||||
Get all cached messages or show the number of messages.
|
||||
|
||||
```bash
|
||||
lrange messages 0 -1
|
||||
get total
|
||||
```
|
||||
|
||||
### RabbitMQ
|
||||
|
||||
Access the RabbitMQ management interface by visiting `localhost:15672` with `guest` as both username and password.
|
||||
|
||||
### Redis
|
||||
### Back end
|
||||
|
||||
To access the back end service, attach to its docker container from a separate terminal window. Messages from the front end will show up here. Also, standart input will be sent to the front end for two way communication.
|
||||
|
||||
```bash
|
||||
docker run -it --rm --network microservices_network redis:6-alpine redis-cli -h redis
|
||||
docker attach microservices_backend
|
||||
```
|
||||
|
||||
## Deployment on Amazon ECS/AWS Fargate
|
||||
|
||||
### ECR
|
||||
|
||||
To deploy on ECS, the first step is to publish the service images to Amazon ECR. In Makefile, replace the `registry` variable with your own registry. [Login](https://docs.aws.amazon.com/AmazonECR/latest/userguide/registry_auth.html#get-login-password) to ECR. Then run the following command:
|
||||
|
||||
```bash
|
||||
lrange messages 0 -1
|
||||
get count
|
||||
make ecr
|
||||
```
|
||||
|
||||
### CloudFormation stacks
|
||||
|
||||
There are several CloudFormation stacks to create. `cd deployments` and create the network stack:
|
||||
|
||||
```bash
|
||||
aws cloudformation create-stack --stack-name MicroservicesNetwork --template-body file://network.yml
|
||||
```
|
||||
|
||||
Create the following stacks in any order (for an EC2 cluster). To create a Fargate cluster, change the `cluster-ec2.yml` to `cluster-fargate.yml`.
|
||||
|
||||
```bash
|
||||
aws cloudformation create-stack --stack-name MicroservicesResources --template-body file://resources.yml
|
||||
aws cloudformation create-stack --stack-name MicroservicesAlb --template-body file://alb.yml
|
||||
aws cloudformation create-stack --stack-name MicroservicesClusterEC2 --template-body file://cluster-ec2.yml --capabilities CAPABILITY_NAMED_IAM
|
||||
```
|
||||
|
||||
Once done, create the services (for an EC2 cluster). For Fargate, change the `services-ec2` directory to `services-fargate`.
|
||||
|
||||
```bash
|
||||
aws cloudformation create-stack --stack-name MicroservicesServiceServer --template-body file://services-ec2/server.yml
|
||||
aws cloudformation create-stack --stack-name MicroservicesServiceCache --template-body file://services-ec2/cache.yml
|
||||
aws cloudformation create-stack --stack-name MicroservicesServiceDatabase --template-body file://services-ec2/database.yml
|
||||
```
|
||||
|
||||
To visit the website, head to the MicroservicesAlb stack and open the `ExternalUrl` from the Outputs tab.
|
||||
|
||||
### Deleting stacks
|
||||
|
||||
When deleting the `cluster-ec2.yml` stack in CloudFormation, delete the auto scaling group manually from the AWS EC2 console.
|
||||
|
||||
### References
|
||||
|
||||
Deployment is based on these templates: https://github.com/nathanpeck/ecs-cloudformation
|
||||
|
||||
## Development environment
|
||||
|
||||
For development, run the RabbitMQ and Postgres containers with Docker Compose.
|
||||
|
Reference in New Issue
Block a user