Welcome to ibai.eus domain!
I am Ibai, the creator of this private domain and I would like to give you some insights on the composition of this microscopic part of the internet if you are willing to.
The goal of setting up this domain and configuring the underlaying services was to prove myself that I am ready to run any technical aspect of a project or idea if the occasion is presented. Furthermore, by simulating the technical department of an small company I am able to improve my understandings in different aspects that surround my natural environment as a software engineer.
Three dedicated and self hosted servers form the core architecture of this domain.
The process of releasing them has been entirely handled by myself, from the very first steps such as choosing the hardware, buying it, building the servers, setting/feeding them up (with open source meat of course), until publishing them and maintaining all their illnesses. Hardware, network and software issues are regular visitors in the domain.
Other small instances in Amazon's and Red Hat's clouds serve me in supportive tasks.
I use the cloud to bring high availability and resiliency to my services and for an additional backup layer of my private data.
Some of the AWS services I use include:
|Openshift||Google Cloud Platform, OpenStack|
Terraform and Terragrunt always come in handy at the time of automating infrastructure creation, destruction and maintenance.
Ideal for creating quick prototypes and spawning test environments on the cloud at a very cost efficient way.
External networks can reach this domain only through secure HTTP connections.
For the global purpose I use a wildcard SSL certificate and for every second level subdomain I create specific ones with Letsencrypt.
All dedicated servers and cloud instances are connected to a virtual private network which is used to connect internal services and applications through a secure and private channel.
WireGuard is a modern and robust tool that brings great speed and security to the network scene.
Squid is a caching proxy for the Web which I mainly use as a forwarding highly anonymous proxy.
The proxy is shared with people that needs to evade geographic restrictions.
Very powerful reverse proxy and load balancer used to distribute the requests across the instances and services that form this network.
I use Collectd to gather system metrics about hosts/containers and InfluxDB to persist them.
Then I can visualize individual and aggregated data near real time with Grafana and set alerts easily, which takes the task of monitoring to the next step.
With Spring Boot Actuator and Micrometer I can collect lots of different metrics about the Java applications I deploy, including information such as REST API requests/status/response-times, JVM statistics, custom metrics, etc.
I chose Prometheus as the time series database for collecting application metrics since it integrates seamlessly with Grafana, the tool I use to visualize data, analyze it and set alerts.
The Elasticsearch, Logstash and Kibana stack is a great to centralize logs and make them easier to analyze. File Beats is used to collect the logs from different nodes and to send them to Logstash before their transformation.
Thanks to the lightweight nature of the containers I can deploy multiple applications, services and websites in different nodes in a fairly simple, robust and automated way.
These sandboxed execution environments are ideal to safely expose services to the internet or to create testing environments automatically.
|Vagrant||Puppet, Chef, Ansible||Docker Swarm, Kubernetes|
It is used to run hosted websites and applications. My knowledge in this field is limited, therefore I have only used it at the time of developing simple and dynamic websites or collaborating in projects involving Wordpress or Joomla.
When it comes to relational databases I find MySQL very robust.
I have used it for a very long time and don't have very much to complain about. Powerful integration with third party software with great stability.
For running a server no doubt, linux. But out of all the alternatives CentOS gives me incredible stability and reliability backed up by the community and Red Hat's team.
I am starting to get used to writing scripts to automate tasks such as instance creation and provision, system maintenance and monitoring, build and deployment of applications and websites, etc.
Dear Jenkins, my most loyal servant, always ready to carry out the dirtiest jobs.
Automating all the tasks related to system maintenance and service deployment is the key to spend as less time as possible on repetitive and boring tasks.
Continuous integration and continuous delivery is achieved easily thanks to the extensibility and strength of this great tool.
I have used SVN in the past, but git improves it in every aspect.
Easy and extremely powerful distributed version control system, thanks Linus for another great contribution.
One of the greatest contributions to the Java development process.
Extreme flexibility that allows me to customize and automate the process of handling dependencies, building and deploying applications at will.
Very powerful tool from the Atlassian suite that allows me to apply agile methodologies to the project management process.
It helps me to plan time tables, track issues and offers great integration with Bitbucket git repository solution.
Another product of the Atlassian suite. This time a powerful and centralized wiki solution which offers integration with issue tracking and code repository hosting platform.
Tool to manage my git repositories. Good integration with other products from the Atlassian suite.
Although my public repositories are originally hosted in my servers, a hook mirrors them to GitHub for more visibility.
After ending my studies in Computer Engineering there was a difficult decision to take, which path to choose, and I chose Software Engineering.
I started to develop Android applications in Java for my Master thesis so I continued that way for a time. I realized that I did not like to deal with graphical interface related stuff and that I wanted to focus in the business logic of the applications.
That is how I became a Java backend developer which opened me the gates to the surroundings of the applications and hence, made me a better software engineer.
Modular framework that helps with the integration of Java standards and specifications at an enterprise level.
Very powerful features that allows to put more focus in the business logic.
"Animaliak" is a personal project I developed several years ago.
It involves many different skills such as devices, electronics, server side scripting, java backend and Android app development.
Elasticsearch is an extremely fast and performant search engine with clustering and other advanced capabilities.
Other products from the stack I use include: Logstash (centralized and normalized logs) and Kibana (data analysis)
In order to add more calculation power to my laptop and workstation I am setting up a couple of distributed Spark nodes.
Tons of static code analysis rules to empower cleaner and safer code.
Combined with tools like Checkstyle, FindBugs/SpotBugs, PMD, JaCoCo or Cobertura, helps at the time of developing/testing and allows to set up quality boundaries in the continuous integration pipelines to enforce a build is not deployed unless some quality criteria is met.
I deploy the artifacts I build to this repository to keep track of the different versions and I am currently experimenting with RPM packages to enable an easy installation of them.
This domain and everything related thereto has been build using mostly open source and free software.
It is important to share the knowledge everyone has in order to make a better world. Knowledge should be costless to allow anyone have access to it. Potential inventions could get lost in their ways if no resources are made available to anyone eager to develop an idea or carry on a new project.
Stackoverflow and StackExchange communities are one of the best tools any developer or IT employee can find out there. Clear example of knowledge sharing and collaboration which sometimes helps more than official documentations or at least complements them.
My portfolio describes a little bit my professional career and evolution. Interesting for potential employers or recruiters.