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.
Kubernetes makes the creation of different environments very easy and maintainable. These sandboxed execution environments are ideal to safely expose services to the internet or to create testing environments automatically.
|Vagrant||Docker Swarm, Puppet, Chef, Ansible||Consul, Envoy|
Containers have been a real game changer in the DevOps scene.
You can find containers everywhere!! Starting from the beginning of the development where you spin up your project dependencies in your local environment for testing, continuing with the embedding of the dependencies during the automated tests in the continuous integration pipelines or even the execution of the continuous integration and delivery pipeline stages themselves in portable multi-environment containers, until the release and deployment of your application and services in containerized cloud/on-premise environments.
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.
Atlassian is a great suite for managing projects with an agile mindset.
Short after I started using tools like Jira, Bitbucket and Confluence, I felt the necessity of extending my knowledge around them in order to reveal the underlying full-power which my unprivileged work account did not allow me to see. That is why I decided to purchase a basic license that would allow me to host these services in my own servers and become an admin with full access to all capabilities.
I extensively use Jira to manage the progress of my personal projects, although I have fallback to Trello for small collaborative projects a few times.
To host my repositories I use Bitbucket which is mirrored to Github.
Confluence is another great product of the suite I use for keeping in one place all the documentation of the applications and services that compose my personal distributed cloud.
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.
"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)
Kafka is a very powerful distributed event streaming platform.
High throughput, scalability, high availability and reliability are a few of the characteristics of this bullet proof middleware that allows microservices to dance as a distributed event driven choreography.
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.
Security has become one of the most challenging areas in the software development lately.
As companies start shifting security to the left it is becoming important to integrate tools throughout the software development lifecycle that allow you to embrace security best practices and protect your system from undesired intrusions.I use Snyk to scan the dependencies and container images of my personal projects, although I will be exploring the IaC capabilities in depth next.
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.