Open source tools to build a solution: from specification to software ; from development to production

Global overview

Here is the graphic result of a first brainstorming about technologies and where it should be used in the stack.

The lower the item is in the graph, the more is related to specification and documentation. The higher the object is, the most is related to Frontend. In the vertical middle, technologies are related to backend.

On the left, tools are more related to development. On the right, they are related to production. In the horizontal middle, it concerns continuous integration or all environment.

This set of technologies isn’t the final one. I will enhance it over the time when I will develop it. Furthermore, some features are missing like alerting tools or mobile related stack.

Choosen technologies

It is a really simple tools to modeling your relational database especially when you are used to use Google Suite because it used the same UX philosophy.

I didn’t need to present you Docker and Docker-compose. I choose these tools to build a development environment and I will use it also in the continuous integration process. this is really important to win time about portability and team work. Build its development and integration environment with docker warranties that everybody use the techno and version and are aligned with integration environment.

Docker will be used as a container provider to be used in Kubernetes in production and preproduction

I will start to document my project on this blog but also on the wiki provided by the github interface. This could change over the time… will see !

To manage code and publish it Git (version control system) and github (platform which implement git) is perfect. I don’t choose other concurrent tool like mercurial because git make the job I need and it much better known by the developer community.

To manage the branches and the development workflow, I would like to use gitflow methodology.

Swagger allow you to define your REST API in a file and expose it as a website. It make a real efficient documentation of your API.

A friend of mine told me that GraphDB can be really cool to build an API. I have to test it and check if it is compatible with Swagger or if it handle the same kind of features.

I am used to work with MySQL. However, PostgreSQL seems much more better on many subject. Let’s use it then.

To build the API, I will use NodeJS and its ecosystem

The choice is pragmatic, these technologies are used a lot and the community is huge. I hesitated to use Go because I am used to develop with Go and it is a really sexy language. However, NodeJS is a highest level language and I will win time using it.

About the frontend, Vue.js is very smart. It is the same architecture and principe than React. However, React is linked to Facebook and is not fully opened : you can’t use React in your stack if you are a direct concurrent of Facebook.

An other pro for Vue.js is that it is compatible with JQuery, but I will not need this feature.

Jenkins is perfect to manage continuous integration and deployment. It’s a shame that its interface sucks

Kubernetes is The Container Orchestration System provide by Google to the open-source community. It is really powerful to deploy, scale and manage containerized applications

It is now obvious to use it in a modern stack to master its applications.

Nginx server is a web server like apache but it handle better performance and is easy to use. it will redirect http request to the API in backend and will serve the static files like image or frontend javascript files.

Hashicorp suite, packer and terraform, helps about build instance and provision it over a Cloud system.

As it is easy to use and well integrated with Hashicorp suite, I choose GCP as a cloud provider. It could be AWS but I am less familiar with this cloud provider.

ELK stack is very use full to index and make visualization to inspect what is going on over the your platform. This stack can be combined with syslog to centralize logs.

The performance of ElasticSearch allow to index all the logs of the application easily. About the log policy, I will write an other specific article later.

And more tools to investigate

Many other tools should be tested and investigated to complete this stack.

  • Prometheus about alerting
  • Consul about health check, discovery and centralized configuration
  • … and a lot more

To be continued…