Today: Babiel
About Babiel
Babiel is successfully active in the areas online communication, e-commerce, hosting and customer communication management for over 30 years.
From the beginnings of the Internet to the present day, we have maintained our down-to-earth, agile and innovative approach.
Our team of over 180 employees advises, develops, implements and operates customer solutions from Düsseldorf, Berlin and Vienna as well as remotely.
As a full service provider, we offer our customers managed hosting of web applications, database systems or containers in Kubernetes powered by our own network and infrastructure components.
Open Source
When developing and operating services for our customers or internal tools, we use open source such as Linux, OpenVox (formerly Puppet), HAProxy, Prometheus, Rundeck or PostgreSQL.
We are constantly developing our internal tool stack in order to achieve a high degree of automation.
We support various open source projects through testing or improvements. We also financially support projects such as Debian, Apache, OpenSSL, log4j, Letsencrypt, Renovate or the OpenVox/Puppet community Vox Pupuli.
An Example
We use HAProxy for all our incoming HTTP and other TCP connections.
Its configuration is the most complex we have. That’s why we do not write it by hand, but rather generate it from metadata and includes. Such a generator makes the configuration easier – but it also makes it harder to see what the actual changes will be in the end.
For situations like that, we like tooling that will show us a diff of the generated configuration. Because the HAProxy configuration is a single text file, we could use the diff program to compare two versions. The downside of a textual diff is that it shows meaningless differences, for example if only order or comments change.
For example, if we compare following file:
global log stdout format raw local0 info defaults timeout connect 5s timeout server 10s timeout client 20s # Beispielconfig frontend fe_proxy bind 0.0.0.0:80 default_backend be_proxy backend be_proxy server localhost 127.0.0.1:8080Compared to a new version, in which timeout settings and the order of other configuration sections have been changed:
global log stdout format raw local0 info defaults timeout client 10s timeout server 10s timeout connect 5s backend be_proxy server localhost 127.0.0.1:8080 # Beispielconfig mit anderem Kommentar frontend fe_proxy bind 0.0.0.0:80 default_backend be_proxy
There is a relevant change here – but it’s lost between multiple textual changes that have no effect.
Therefore we have created a small Go program which roughly reads the configuration into data structures and then compares them:
$ go run . examples/old.cfg examples/new.cfg &main.config{ "backend": {"be_proxy": {"server": {"localhost 127.0.0.1:8080"}}}, "defaults": { "": { "timeout": { - "client 20s", + "client 10s", "connect 5s", "server 10s", }, }, }, "frontend": {"fe_proxy": {"bind": {"0.0.0.0:80"}, "default_backend": {"be_proxy"}}}, "global": {"": {"log": {"stdout format raw local0 info"}}}, }
In this output we can clearly see what actually changed.
Of course this is a contrived example – usually you would do these unrelated changes in different commits. But even then the tool can be helpful; to ensure that one did not make actual changes when one just meant to rearrange.
The program can be found on GitHub. Please be advised, that it is only meant as an example.
At the Chemnitz Linux Days 2025, we'll also be showing a demo setup with HAProxy at our booth. Feel free to stop by and chat with us – we look forward to seeing you.
In our tech blog you can find more exciting stories, concepts, and solutions that work well for us.
If you are also interested in finding such solutions and working on them and if you’re located in Germany, we’re hiring ;)