<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Umami on DevOps von UCLAB</title>
    <link>https://uclab.dev/tags/umami/</link>
    <description>Recent content in Umami on DevOps von UCLAB</description>
    <generator>Hugo</generator>
    <language>en</language>
    <lastBuildDate>Tue, 03 Mar 2026 11:04:08 +0000</lastBuildDate>
    <atom:link href="https://uclab.dev/tags/umami/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Self-hosting Umami Analytics</title>
      <link>https://uclab.dev/posts/umami/</link>
      <pubDate>Tue, 03 Mar 2026 11:04:08 +0000</pubDate>
      <guid>https://uclab.dev/posts/umami/</guid>
      <description>&lt;p&gt;I wanted to add visitor analytics to this blog without relying on Google Analytics or any third-party cloud service. &lt;a href=&#34;https://umami.is&#34;&gt;Umami&lt;/a&gt; is a great fit — it&amp;rsquo;s open source, privacy-friendly, GDPR-compliant, and self-hostable. This post covers how I deployed it on my k3s cluster using Cilium Gateway API and Cloudflare Tunnels, and the one gotcha that had me debugging for longer than I&amp;rsquo;d like to admit.&lt;/p&gt;&#xA;&lt;figure&gt;&lt;img src=&#34;https://uclab.dev/posts/umami/images/gemini4.png&#34;&#xA;    alt=&#34;Analytics&#34;&gt;&#xA;&lt;/figure&gt;&#xA;&#xA;&lt;h2 id=&#34;stack&#34;&gt;Stack&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;k3s&lt;/strong&gt; — lightweight Kubernetes running on a Raspberry Pi 5 cluster&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;CloudNative PG (CNPG)&lt;/strong&gt; — Postgres operator for the Umami database&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Cloudflare Tunnels&lt;/strong&gt; — for exposing services to the internet without opening ports&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Umami 3.0.3&lt;/strong&gt; — the analytics server itself&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;database&#34;&gt;Database&lt;/h2&gt;&#xA;&lt;p&gt;I use CloudNative PG to manage the Postgres cluster. Two instances for HA, with WAL archiving to an object store via the barman-cloud plugin.&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
