I build Infrastructure

Infrastructure is the environment your software runs in. It covers servers, hosting, deployments, networking, storage, and the tools that keep everything running.

Whether you’re setting up a new project or working with infrastructure that already exists, I can help. That might mean setting up a reliable environment, improving deployments, documenting how things work, or making an existing setup easier to maintain.

I use infrastructure as code and automation where they provide real value. The goal is a setup that is understandable, repeatable, and appropriate for the software it runs.


Configuration Management

Infrastructure becomes easier to manage when its configuration is defined alongside the software that depends on it. Configuration as code makes changes repeatable, reviewable, and easier to reproduce across environments.

I use this approach where it makes sense, from server configuration to application environments and deployment settings.

  1. Ansible

    Ansible automates server configuration through simple, human-readable files. I use it to keep servers consistent and make changes, updates, and deployments repeatable.

    • Playbook
    • Roles
    • Inventory
    • Vault
  2. Bastille

    Bastille manages FreeBSD Jails and makes it easier to create and maintain isolated environments. It provides a practical way to separate services while keeping the underlying system simple to manage.

    • FreeBSD
    • Jails
    • Templates

Good configuration management reduces the amount of knowledge that exists only in someone’s head. It makes systems easier to understand, rebuild, and change when the people, software, or requirements around them change.

I also build Backends

Infrastructure and application code need to work together. I can build or improve the backend running on your infrastructure, whether that means a new system, an integration, or changes to software you already have.

See how I build backends

Advanced Setups

Some applications need more than a server and a deployment script. Containers, jails, and orchestration tools can provide useful isolation and flexibility when the software or environment calls for them.

I choose these tools based on the actual requirements of the application. A more complicated setup is only useful when it solves a real problem.

  1. FreeBSD Jails

    FreeBSD Jails isolate applications and services within a shared host system. They use fewer resources than full virtual machines and work well when several independent environments need to run on the same server.

    • bhyve
    • ZFS
    • Bastille
  2. Docker

    Docker packages applications and their dependencies into containers. This makes environments easier to reproduce across development, testing, and production.

    • Dockerfile
    • Docker Compose
    • Podman
  3. Kubernetes

    Kubernetes manages containerised applications across multiple machines. It can automate deployments, scaling, service discovery, and recovery, making it useful when a system has enough complexity to justify it.

    • Helm
    • Prometheus
    • minikube

Docker, Kubernetes, jails, and similar tools each have their place. The right choice depends on the application, how it is deployed, and how the system needs to be operated over time.

I also build Websites

Infrastructure is only useful when the software running on it works well. I can build or improve the website that sits on top of your existing systems, from a simple site to a more involved web application.

See how I build websites

Automation and Reliability

Reliable infrastructure benefits from removing repetitive manual work. Automated deployments, testing, backups, and monitoring make it easier to see what is happening and recover when something goes wrong.

I automate the parts that are worth automating and keep the rest understandable.

  1. Continuous Integration

    Continuous integration automates tasks such as building and testing software when changes are made. Deployment pipelines can take this further by automating releases and making the path from code change to production more predictable.

    • Forgejo
    • GitHub Actions
    • GitLab CI
  2. Metrics

    Metrics provide a way to see how systems and applications are behaving over time. I use them to understand resource usage, spot unusual behaviour, and make problems easier to investigate.

    • Grafana
    • Prometheus
    • Consul
  3. Alerting

    Alerts turn important changes in system behaviour into something you can act on. Good alerting focuses attention on problems that need a response without turning every small fluctuation into an incident.

    • Alertmanager
    • Prometheus
    • Zabbix

Automation should make the system easier to operate, not create another layer of complexity. The aim is a setup where deployments are repeatable, problems are easier to spot, and routine work takes less effort.

Build your infrastructure

Setting up infrastructure for a new project, improving an existing environment, or trying to make deployments more reliable? Tell me what you have in mind.

You don’t need a technical brief. A description of your current setup, what you want to change, or where things are causing trouble is enough to start.

Tell me about your infrastructure

Photo of Tobias Tom