This is a Moleculer microservices demo repo for testing & prototyping
4.2K

This is an example project to try Moleculer with Docker and Kubernetes.
docker run -e SERVICES=services -p 3000:3000 moleculer/demo
In this case you should also start a transporter, e.g. NATS.
docker run -d -e SERVICEDIR=services -e SERVICES=greeter moleculer/demo
docker run -d -e SERVICEDIR=services -e SERVICES=products moleculer/demo
docker run -d -e SERVICEDIR=services -e SERVICES=api -p 3000:3000 moleculer/demo
This command starts all services in individual containers, a NATS server as transporter, a MongoDB server & Traefik as reverse proxy.
docker-compose up -d
This command starts all services in individual containers, a NATS server as transporter, a MongoDB server & Traefik as reverse proxy.
docker stack deploy -c docker-compose.yml moleculer
This command starts all services in individual pods, a NATS server as transporter, a MongoDB server and register an ingress for API service via http://moleculer.127.0.0.1.nip.io/ URL.
kubectl apply -f https://raw.githubusercontent.com/moleculerjs/docker-demo/master/k8s.yaml
Result
NAME READY STATUS RESTARTS AGE
pod/nats-6c745f949b-8g994 1/1 Running 0 23h
pod/moleculer-demo-api-6958b5475b-5qfxx 1/1 Running 0 4h37m
pod/moleculer-demo-greeter-6c875544b6-jbcjf 1/1 Running 0 4h37m
pod/moleculer-demo-greeter-6c875544b6-fx829 1/1 Running 0 4h37m
pod/moleculer-demo-api-6958b5475b-mwbc8 1/1 Running 0 4h36m
pod/mongo-555c4f494f-xjvx8 1/1 Running 0 3h15m
pod/moleculer-demo-products-784446b876-fdlrz 1/1 Running 0 3h8m
pod/moleculer-demo-products-784446b876-5qfrc 1/1 Running 0 3h8m
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/nats ClusterIP 10.43.193.134 <none> 4222/TCP 23h
service/api ClusterIP 10.43.121.57 <none> 3000/TCP 22h
service/mongo ClusterIP 10.43.80.140 <none> 27017/TCP 3h15m
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/nats 1/1 1 1 23h
deployment.apps/moleculer-demo-greeter 2/2 2 2 23h
deployment.apps/moleculer-demo-api 2/2 2 2 23h
deployment.apps/mongo 1/1 1 1 3h15m
deployment.apps/moleculer-demo-products 2/2 2 2 4h37m
NAME DESIRED CURRENT READY AGE
replicaset.apps/nats-6c745f949b 1 1 1 23h
replicaset.apps/moleculer-demo-greeter-6c875544b6 2 2 2 4h37m
replicaset.apps/moleculer-demo-api-6958b5475b 2 2 2 4h37m
replicaset.apps/mongo-555c4f494f 1 1 1 3h15m
replicaset.apps/moleculer-demo-products-784446b876 2 2 2 3h8m
If you don't have installed ingress controller, execute this script to install Nginx Ingress Controller.
If you don't have installed storage controller, execute this script to install Longhorn Storage Controller.
hello and welcome actions.process.env.MONGO_URI is defined, otherwise with NeDB.In case of Docker or Docker Compose
export HOSTNAME=127.0.0.1:3000
In case of Kubernetes
export HOSTNAME=moleculer.127.0.0.1.nip.io
Call the greeter.hello action
curl http://$HOSTNAME/api/hello
Call the greeter.welcome action with params
curl http://$HOSTNAME/api/greeter/welcome?name=Moleculer
Create a product item
curl -X POST -H "Content-Type: application/json" -d '{"name": "Samsung Galaxy S10", "category": "phones", "price": 299.99, "quantity": 10}' http://$HOSTNAME/api/products
List all products
curl http://$HOSTNAME/api/products
kubectl port-forward --address 0.0.0.0 service/nats 4222
If you have firewall, don't forget to allow this port.
moleculer connect nats://<YOUR-CLUSTER-IP-ADDRESS>:4222
The deployment script contains a HorizontalPodAutoscaler definition for the calc service. It scales the number of calc service pod between 2 and 5 by CPU usages.
Benchmark the calc.pi action to increase the CPU usages to trigger the K8s Horizontal Pod Autoscaler:
ab -c 5 -n 500 http://moleculer.127.0.0.1.nip.io/api/pi
This project is available under the MIT license.
Copyright (c) 2016-2020 MoleculerJS
Content type
Image
Digest
Size
52 MB
Last updated
about 6 years ago
docker pull moleculer/demo