<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>blog.mikejw.co.uk</title>
		<link>http://blog.mikejw.co.uk</link>
		<description>Mike's Blog</description>
		<language>en-us</language>
	<item><title>Garage Sale Stars Fall 2</title><link>http://blog.mikejw.co.uk/2026/may/20/garagesale</link><pubDate>Wed, 20 May 2026 11:28:00 +0100</pubDate><description><![CDATA[<p><iframe title="YouTube video player" src="https://www.youtube.com/embed/videoseries?si=g1GwM2kuvOPdlNWX&list=OLAK5uy_kokfotAdNkgb4Mt9IhH-cOMnT2h1siHXU" width="100%" height="400" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen="allowfullscreen" referrerpolicy="strict-origin-when-cross-origin"></iframe></p>
<p>I've pretty much only been listening to this EP from 2024 by Australians, Garage Sale for the past six weeks.  Check it!</p>]]></description></item><item><title>Empathy Platform Architecture V1</title><link>http://blog.mikejw.co.uk/2026/jan/11/platform-v1</link><pubDate>Sun, 11 Jan 2026 06:19:53 +0000</pubDate><description><![CDATA[<p><img class=" img-fluid" src="http://blog.mikejw.co.uk/uploads/diagram2.jpeg" alt="Empathy Platform Architecture V1" data-payload="eyJpZCI6MTI1LCJibG9nX2lkIjo3MSwiZmlsZW5hbWUiOiJkaWFncmFtMi5qcGVnIiwiaW1hZ2Vfd2lkdGgiOiIyMDAwIiwiaW1hZ2VfaGVpZ2h0IjoiOTU2Iiwic2l6ZSI6IiIsImZsdWlkIjoiaW1nLWZsdWlkIiwiY2VudGVyZWQiOiIiLCJjYXB0aW9uIjoiRW1wYXRoeSBQbGF0Zm9ybSBBcmNoaXRlY3R1cmUgVjEifQ==" data-title="Empathy Platform Architecture V1" /></p>
<p>Coming soon in the form of new <a href="https://empathy.sh">Empathy</a> releases for <a href="https://github.com/mikejw/bdcli">bdcli </a>and <a href="https://github.com/mikejw/base-docker">base-docker.</a> The platform features are using the same philosohy as my orginal Empathy MVC - fun, light, simple.  (KISS, DRY).  It's taken a long time to get to this point but the webiste you are viewing right now is running and deployed in this fashion (the same for my other sites) and some of the platform code is yet to be published on github.  It will probably be under "elib-platform".  I still want to do a slight documentation overhaul for bdcli/base-docker to run a new user through the entire deployment of this setup end-to-end in time for these releases. More info coming soon.</p>
<h3>Overview:</h3>
<p>This architecture is split into four main concerns: build/test, source control and artifacts, edge routing, and production runtime.</p>
<h3>Build / Test Environment</h3>
<p>A <strong>Test/Build server</strong> (currently a Raspberry Pi) runs <strong>Docker</strong>. Inside Docker:</p>
<ul>
<li><strong>Jenkins</strong> is used for CI/CD orchestration.</li>
<li><strong>Web app 1</strong> runs as a test or staging instance.</li>
</ul>
<p>Jenkins is responsible for building, testing, and coordinating deployments, but it does not serve public traffic.</p>
<h3>Source Control</h3>
<p>A <strong>private Git server</strong> hosts the application source code.</p>
<ul>
<li>The Test/Build server accesses the Git server over <strong>SSH</strong>.</li>
<li>No VPN or overlay network is used for Git access.</li>
</ul>
<h3>Container Images and Artifacts</h3>
<p><strong>GitLab</strong> is used as a central artifact store, specifically for Docker images.</p>
<ul>
<li>GitLab hosts a <strong>Docker Container Registry</strong>.</li>
<li>Application images are <strong>built and maintained using Packer</strong>.</li>
<li>Both the Test/Build environment and the Production environment <strong>pull Docker images</strong> from this registry.</li>
<li>The registry acts as the <strong>single source of truth</strong> for deployable artifacts.</li>
</ul>
<h3>Edge and Routing</h3>
<p><strong>Cloudflare</strong> is the public-facing entry point for all external traffic. It owns and manages the following hostnames:</p>
<ul>
<li><code>*.tublr.com</code></li>
<li><code>www.tublr.com</code></li>
<li><code>www.mysite.com</code></li>
</ul>
<p>Depending on the hostname, Cloudflare routes traffic to different backends:</p>
<ul>
<li>Some traffic is routed <strong>directly to the Production server</strong>.</li>
<li>Some traffic is routed to an <strong>AWS EC2 Proxy server</strong>.</li>
</ul>
<p>The Proxy server runs <strong>Caddy</strong> directly on the host (not in Docker). Within Caddy:</p>
<ul>
<li><code>www.tublr.com</code> is explicitly handled.</li>
<li>Requests for that hostname are <strong>reverse-proxied to the Test/Build server</strong>.</li>
</ul>
<p>The reverse proxy connection between the Proxy server and the Test/Build server runs over <strong>Tailscale</strong>. This is the only place Tailscale is currently used in the system.</p>
<h3>Production Environment</h3>
<p>The <strong>Production server</strong> runs on <strong>AWS EC2</strong> and hosts <strong>Docker</strong>.</p>
<ul>
<li>Docker runs <strong>Web app 1</strong> as the production instance.</li>
<li>Production receives:
<ul>
<li><strong>Public HTTP(S) traffic directly from Cloudflare</strong></li>
<li><strong>Deployment actions from the Test/Build server</strong></li>
</ul>
</li>
</ul>
<p>Production does not receive traffic via the Proxy server.</p>
<h3>Deployment Flow</h3>
<p>Deployments are initiated from the Test/Build server:</p>
<ul>
<li>Jenkins coordinates deployments.</li>
<li>Production pulls the required Docker image from the GitLab container registry.</li>
</ul>
<p>Capistrano-style deployments (atomic release switching and fast rollback) are planned, but are not yet implemented.</p>
<h3>Design Principles Reflected</h3>
<ul>
<li><strong>Build, deploy, and runtime concerns are separated</strong>.</li>
<li><strong>Only real network paths are described</strong>.</li>
<li><strong>No aspirational infrastructure is included</strong>.</li>
<li><strong>Artifacts are immutable and centrally managed</strong>.</li>
<li><strong>Public traffic and control traffic are distinct</strong>.</li>
<li>The system is intentionally <strong>v1-focused</strong>, with broader orchestration (e.g., ECS) reserved for a future iteration.</li>
</ul>]]></description></item><item><title>Djrum Meanings Edge</title><link>http://blog.mikejw.co.uk/2026/jan/06/djrum</link><pubDate>Tue, 06 Jan 2026 07:06:45 +0000</pubDate><description><![CDATA[<p><iframe title="YouTube video player" src="https://www.youtube.com/embed/videoseries?si=g1GwM2kuvOPdlNWX&list=PLpGr7x_-mTQdIg-b4MuLXZJxVJKvYgP0f" width="100%" height="400" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen="allowfullscreen" referrerpolicy="strict-origin-when-cross-origin"></iframe><br><br>On the way to Edinburgh and the flight is delayed due to the cold weather.  Happily I am able to geek out in departures to this angular "Aphexey" music I discovered today on Spotify.<br><br>I've just added a <a href="https://github.com/mikejw/dotfiles/commit/cb4d3a69f23c5054ed337193855ff632d772f6de">fix</a> to my dotfiles repo, which hopefully now makes the XDG_CONFIG_HOME environment variable setting much more reliable now.  So that fish always knows where its config lives!  I've been getting some strange behavioiur in fish shell, where fish aliases and things that should be in my PATH keep disappearing.  Mainly on my Macbook. Anyway, as usul, holla.<br><br>  </p>]]></description></item><item><title>Empathy Discord Server</title><link>http://blog.mikejw.co.uk/2026/jan/01/discord</link><pubDate>Thu, 01 Jan 2026 09:41:36 +0000</pubDate><description><![CDATA[<p><img class=" img-fluid" src="http://blog.mikejw.co.uk/uploads/IMG_0506.jpeg" alt="Empathy" data-payload="eyJpZCI6MTI0LCJibG9nX2lkIjo2OSwiZmlsZW5hbWUiOiJJTUdfMDUwNi5qcGVnIiwiaW1hZ2Vfd2lkdGgiOiIxMTY3IiwiaW1hZ2VfaGVpZ2h0IjoiNDEyIiwic2l6ZSI6IiIsImZsdWlkIjoiaW1nLWZsdWlkIiwiY2VudGVyZWQiOiIiLCJjYXB0aW9uIjoiRW1wYXRoeSJ9" data-title="Empathy" /></p>
<p>New Empathy discord server. Come and ask me anything!</p>
<p>Go to <a href="https://empathy.sh">https://empathy.sh</a> and click the community link!</p>]]></description></item><item><title>Voice Actor Lust 1</title><link>http://blog.mikejw.co.uk/2025/dec/23/voiceactor</link><pubDate>Tue, 23 Dec 2025 05:45:34 +0000</pubDate><description><![CDATA[<p>I've been listening to some more contemporary avant-weirdness.  This time from Voice Actor.</p>
<p><iframe title="YouTube video player" src="https://www.youtube.com/embed/videoseries?si=kZjemF3sKfTkFULq&list=PLfxHWwAYSud7f4fw-4wYFjK4oavEiGz2I" width="100%" height="400" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen="allowfullscreen" referrerpolicy="strict-origin-when-cross-origin"></iframe></p>]]></description></item></channel>
</rss>
