About ibai.eus

Personal Project
Challenges
Domain
Me

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.

Architecture

Servers
Dedicated

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.

Amazon Web Services

Servers
Cloud
Web Services

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:

EC2 ECR VPC RDS IAM ParameterStore SQS
Fargate ECS ELB S3 KMS CloudWatch Kinesis

Deprecated Evaluated
Openshift Google Cloud Platform, OpenStack

Terraform

Cloud
Infrastructure
Automation
Pets vs Cattle

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.

SSL Everywhere!!

Network
SSL

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.

WireGuard

Network
VPN

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.

Deprecated Evaluated
OpenVPN IPSec

Squid

Network
Proxy

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.

Nginx

Network
Reverse Proxy
Load Balancer

Very powerful reverse proxy and load balancer used to distribute the requests across the instances and services that form this network.

Grafana

Monitoring
Analytics
Alerting
Dashboard

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.

Deprecated Evaluated
Zabbix Nagios

Prometheus

Monitoring
Analytics
Alerting
Dashboard

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.

Evaluating
InfluxDB

Kibana

Logging
Alerting
Dashboard

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.

Kubernetes

Containers
Virtualization
Hosting
Provisioning

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.

Hosting
Website and application hosting service with limited resource access for me and for close people. Currently is hosting static and PHP websites plus Java applications.

Testing
Instances are started at will to reproduce production environments and launch testing/staging phases of websites and applications.

Deprecated Evaluated Evaluating
Vagrant Docker Swarm, Puppet, Chef, Ansible Consul, Envoy

Docker

Containers
Reproducibility
Portability

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.

MySQL

Hosting
Development
Database

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.

CentOS

Servers
Operating System
SysAdmin

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.

Jenkins CI

Continuous Integration
Maintenance

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.

Git

Development
Code
Repository
Collaboration

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.

Maven

Development
Build
Deploy
Dependencies

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

Project Management
Issues
Code
Version Control
Documentation

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.

Bitbucket

Project Management
Code
Repository

Tool to manage my git repositories. Good integration with other products from the Atlassian suite.

Github

Code
Repository
Public
Share

Although my public repositories are originally hosted in my servers, a hook mirrors them to GitHub for more visibility.

Java

Development
Java
Enterprise
Backend

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.

Spring Framework

Development
Java
Application

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.

Home Domotics

Personal Project
Pet
Domotics

"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

Development
Java
Search Engine
Cluster

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

Messaging
Event Driven
Choreography

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.

Spark

Big Data
Machine Learning
Data Analysis

In order to add more calculation power to my laptop and workstation I am setting up a couple of distributed Spark nodes.

In progress.

SonarQube

Development
Quality Assurance
Continuous Integration

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.

Snyk

DevSecOps
Security
Shift Left

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.

Nexus

Deployment
Repository

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.

Open Mind

Open Source
Share Knowledge

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.

Why .eus?

Basque Country
Euskera

I come from the Basque Country where the pride and the feelings for our land are very strong.

Promoting and preserving the Basque language is one of our duties as Basque citizen, so I take this chance to let others know about this .eus domain and the Basque culture.

ikurriña

Stackoverflow

Collaboration
Share Knowledge

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.

Portfolio

Me
My Work

My portfolio describes a little bit my professional career and evolution. Interesting for potential employers or recruiters.