Setting Up Keycloak with Docker Compose

September 24, 2025 - Patrick Kerwood

In this post, I’ll guide you through installing Keycloak with Docker Compose, with or without an SQL backend, and configuring it using my default Traefik setup. We’ll set up a dedicated URL for a realm and add a redirect from the realm’s root URL to its admin console.

Read More

Setting Up an HA VPN Between Google Cloud and CentOS 9 with strongSwan and BIRD

September 14, 2025 - Patrick Kerwood

In this guide, I’ll walk through setting up a site-to-site VPN between Google Cloud and a CentOS 9 VM hosted on DigitalOcean. We’ll use strongSwan to establish the IPsec tunnel, and the BIRD Internet Routing Daemon to peer with a Google Cloud Router and exchange routes dynamically using BGP.

Read More

Using Caddy as a Simple HTTP File Server

August 18, 2025 - Patrick Kerwood

Looking for a simple way to serve files over HTTP? In this guide, I'll walk through setting up a file server using Caddy, a modern web server written in Go. With minimal configuration, built-in directory browsing, and optional basic authentication, Caddy makes it easy to share files.

Read More

Single Sign-On with OAuth2 Proxy and Traefik Using Azure Entra ID

May 19, 2025 - Patrick Kerwood

Secure your application with OAuth2 Proxy and Microsoft Entra ID. In this post, I’ll walk you through configuring OAuth2 Proxy to authenticate users via Entra ID, both as a reverse proxy in front of your application and as a forward authentication provider using Traefik.

Read More

Running a Terraform Workflow in GitHub with Slack Notifications

March 11, 2025 - Patrick Kerwood

Automating infrastructure deployments using Terraform and GitHub Actions is a common practice. In this post, we’ll walk through setting up a Terraform workflow in GitHub that runs a Terraform Plan and sends a Slack notification with the diff whenever there are changes detected.

Read More

Traefik v3 Configuration with Let's Encrypt

March 5, 2025 - Patrick Kerwood

In this post, we’ll walk through setting up Traefik as an application proxy with Docker Compose, including automatic provisioning of Let's Encrypt TLS certificates via HTTP and DNS validation.

Read More

Confluence Updater

February 2, 2025 - Patrick Kerwood

If you prefer keeping your documentation in Git, love writing in Markdown, but need to publish it in Confluence, Confluence Updater is the perfect solution. This tool allows you to set up a CI/CD pipeline that automatically converts Markdown to HTML and uploads it to Confluence Cloud whenever changes are made.

Read More

Using multiple SSH keys for Github

December 26, 2024 - Patrick Kerwood

If you use GitHub, you likely rely on an SSH key to clone repositories and sign commits. However, when working with a GitHub Enterprise-managed account, you must set up a separate SSH key because the same key cannot be shared across different accounts. This guide will show you how to create and configure a new SSH key for a second account. Additionally, you'll learn how to configure Git to automatically apply specific settings for repositories that match certain URL patterns.

Read More

Setting up Workload Identity Federation in Google Cloud for Github pipelines

June 6, 2024 - Patrick Kerwood

Setting up authentication for pushing images to Google Artifact Registry from a Github pipeline is usually done by creating a static, forever valid, credential file for at service account, which will probably never be rotated. An alternative to that is to use Workload Identity Federation to exchange a Github issued JWT token with a Google token and use that for authentication.

Read More

Creating a bash script with commandline arguments

May 5, 2024 - Patrick Kerwood

When creating a good bash script for others to use, it's important to create a good user experience. Creating good usage arguments makes all the differnce and really makes your script look proffesional instead of just a list of commands bunced together in a file.

Read More