Batteries-included blueprint of a comfortable development environment for a heterogenous microservices project.
MIT License
Example local setup for developing heterogeneous microservices.
In this setup we show:
This approach allows developers to easily switch between working on just a specific microservice and a larger "project space".
As systems get large you may want to have more than one project space. That is a decision you would take based on your unique needs. However, this blueprint workspace provides a lot of recipes to get you on the journey of breaking-up and composing work as you see fit and creating an enjoyable, yet simple development workspace.
A working Docker setup, which you can get pretty easily for most major platforms like Mac, Windows and Linux flavors: https://www.docker.com/community-edition#/download
To run the entire project with all microservices and databases:
> git clone https://github.com/inadarei/microservices-workspace.git && cd microservices-workspace
# Bring everything up in daemon mode:
> make
# Make sure everything started fine:
> make ps
To tear-down the project:
> make stop
Once everything is properly installed various microservices can be accessed at sub-routes of the front-end reverse proxy's URI. In the out-of-the-box installation, you get two microservices respectively at:
> curl http://ms-demo-node-ms-workspace-demo.docker.localhost:9080/
# and
> curl http://ms-demo-golang-ms-workspace-demo.docker.localhost:9080/
Please note that "ms-demo-node-ms-workspace-demo" and "ms-demo-golang-ms-workspace-demo"
are the automatically-detected hostnames (subdomains) generated from the microservice
container names (ms-demo-node
and ms-demo-golang
) and the Docker
project namespace: ms-workspace-demo
.
These hostname can be overwritten using more specific labels in the docker-compose
file of corresponding microservices, for example by placing something like the
following in ms-demo-node/docker-compose.yaml
:
labels:
- "traefik.http.routers.ms-demo-node.rule=Host(`demonode.docker.localhost`)"
which would allow demo node microservice to be available by invoking a shorter
URL, along the lines of: curl http://demonode.docker.localhost:9080/
If you want the project to run on a port different from 9080, you can change the value in the topmost dockor-compose.yml. For instance, to make it run on port 80:
ports:
- "80:80"
Q: How are microservices discovered by the front-end proxy?
A: The workspace uses a modern, highly capable proxy: Traefik which automatically discovers services in your project and wires them up to the proper sub-routes.
Once you have the project up, you can access the web UI of the proxy at: http://0.0.0.0:9880/
Edit config/repos.json
Run make update
in the topmost repository to get the new codebase
Edit start.sh and stop.sh scripts under ./bin to add start and stop commands for the new module. Existing commands should be used as a guide.
Make sure the docker-compose file for the service has labels required by Traefik
example: https://github.com/inadarei/microservices-workspace-ms-demo-node/blob/master/docker-compose.yml#L6)
Make sure the docker-compose commands are starting your new service in the same project as the Traefik and the rest of the services
example: https://github.com/inadarei/microservices-workspace-ms-demo-node/blob/master/Makefile#L3