Tangible Bytes

A Web Developer’s Blog

2025 Archive

Posts from 2025

Digital Ocean Kubernetes Load Balancer Configuration

At work I’m using Digital Ocean and their managed Kubernetes offering - DOKS

The cluster is almost entirely managed via Helm charts - and even system components that are installed via the Digital Ocean “1 Click” installers are Helm charts really.

Recently we ran into a problem where we needed real IP addresses available to our application - but these were being lost to the load balancer - and I needed to configure Proxy Protocol to re-enable them.

Read more ...

Laravel Redis Route Binding

I setup Laravel with Redis and made sure all my articles were cached, and still saw a lot of database traffic.

All the route bound parameters get magically injected - but of course behind the scenes these are looked up in the database.

Although these are simple queries that run pretty fast - a lof of them are repeated very frequently so can be efficiently cached.

Read more ...

Laravel Object Validation Closure

I’m using Laravel Inertia and the resulting form submission returns JSON objects - which I wanted to validate.

In my case I have a quiz - which has questions which in turn have answers and those answers have user-submitted responses.

If the CMS editor tries to delete answers which have responses this will result in an SQL referential integrity error - so I want a validation rule for each answer which says

If the answer object has property “deleted” and the database has responses for this answer - fail.

Read more ...

Helm Chart for Multi Domain Tls Cert

I’m running a service on Kubernetes that hosts multiple websites via different domains.

I had followed the default Helm Chart pattern and ended up with one TLS cert for all the sites.

This worked OK - except that I kept getting downtime when I needed to add a new domain.

So I refactored to have a different certificate for each site.

Read more ...

Laravel Frankenphp Octane Sail

My Laravel project is in part a headless CMS - this means it has and API that gets called by a frontend system - with around 10 API requests per page view.

We can cache some of that - but sometimes caches are empty and the site still has to be responsive.

The meant I needed to optimise my Laravel site and after a few experiments I found that using [Laravel Octane]](https://laravel.com/docs/12.x/octane) with FrankenPHP gave me the performance boost I needed without needing any significant code change.

Read more ...