<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Uncloud on Miek Gieben</title>
    <link>https://miek.nl/tags/uncloud/</link>
    <description>Recent content in Uncloud on Miek Gieben</description>
    <generator>Hugo</generator>
    <language>en-us</language>
    <lastBuildDate>Tue, 07 Jul 2026 09:21:52 +0200</lastBuildDate>
    <atom:link href="https://miek.nl/tags/uncloud/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Uncloud Server Setup</title>
      <link>https://miek.nl/2026/july/07/uncloud-server-setup/</link>
      <pubDate>Tue, 07 Jul 2026 09:21:52 +0200</pubDate>
      <guid>https://miek.nl/2026/july/07/uncloud-server-setup/</guid>
      <description>&lt;p&gt;I&amp;rsquo;m thinking about &amp;ldquo;upgrading&amp;rdquo; my server from Ubuntu to Fedora and thereby also making&#xA;&lt;a href=&#34;https://miek.nl/tags/uncloud/&#34;&gt;Uncloud&lt;/a&gt; a part of my routine, &lt;em&gt;but&lt;/em&gt;&amp;hellip;&amp;hellip; This can be done, but doing a container style&#xA;setup, does mean I need some extra infra, like a container registry, also my DNS server needs to set source IP&#xA;addresses for notifies unsure if that will still work.&lt;/p&gt;&#xA;&lt;p&gt;And Caddy with L4 forwarding &lt;em&gt;and&lt;/em&gt; getting TLS certificates can cause issues, because&#xA;it interferes with each other (i.e. Caddy is starting, but not L4-forwarding, aks for a certificate, DNS is&#xA;still not working, cert is not handed out - that kind of thing).&lt;/p&gt;</description>
    </item>
    <item>
      <title>Uncloud Unpush</title>
      <link>https://miek.nl/2026/june/15/uncloud-unpush/</link>
      <pubDate>Mon, 15 Jun 2026 11:21:52 +0200</pubDate>
      <guid>https://miek.nl/2026/june/15/uncloud-unpush/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://github.com/tonyo/unpush/&#34;&gt;Unpush&lt;/a&gt; is an experimental attempt to write automatic CI/CD in Uncloud, it&#xA;either works via web hooks or polls a repository for changes. When seen it redeploys a service via its&#xA;&lt;code&gt;compose.yaml&lt;/code&gt; file from the repository.&lt;/p&gt;&#xA;&lt;p&gt;Now of course this works for GitHub, but we have GitLab &lt;em&gt;and&lt;/em&gt; it reimplements a bunch of code from &lt;em&gt;uncloud&lt;/em&gt;,&#xA;which can all be removed if you just use the &lt;code&gt;uc&lt;/code&gt;-tool.&lt;/p&gt;&#xA;&lt;p&gt;I will probably butcher the code quite a bit, so seems fair to push this to a different repository at some&#xA;point.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Uncloud Tips</title>
      <link>https://miek.nl/2026/june/10/uncloud-tips/</link>
      <pubDate>Wed, 10 Jun 2026 18:38:34 +0200</pubDate>
      <guid>https://miek.nl/2026/june/10/uncloud-tips/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://uncloud.run/docs&#34;&gt;Uncloud&amp;rsquo;s docs&lt;/a&gt; are great, but a few things are buried a bit. Hence a simple list&#xA;of things that can improve your interactions with Uncloud.&lt;/p&gt;&#xA;&lt;h1 id=&#34;ssh-proxyjump&#34;&gt;SSH ProxyJump&lt;/h1&gt;&#xA;&lt;p&gt;Sometimes you can not directly connect to a cluster, you first have to SSH into a host that &lt;em&gt;is&lt;/em&gt; directly&#xA;connected to a cluster. If this is the case use a SSH &lt;em&gt;proxy jump&lt;/em&gt; (see ssh(1)). This allows you to, e.g. use a&#xA;local docker to build images that can then be pushed to the cluster.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Uncloud Prometheus, part II</title>
      <link>https://miek.nl/2026/may/21/uncloud-prometheus-part-ii/</link>
      <pubDate>Thu, 21 May 2026 11:22:52 +0200</pubDate>
      <guid>https://miek.nl/2026/may/21/uncloud-prometheus-part-ii/</guid>
      <description>&lt;p&gt;Had some fun playing with my &lt;a href=&#34;https://github.com/miekg/uncloudplus/&#34;&gt;fork of Uncloud&lt;/a&gt;. And making metrics&#xA;work.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Metrics are now part of Uncloud proper - &lt;em&gt;uncloudplus&lt;/em&gt; can now drop it.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;In prometheus we use &lt;code&gt;dns_sd_configs&lt;/code&gt; to pick up new things automatically:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;- &lt;span style=&#34;color:#f92672&#34;&gt;job_name&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;uncloud&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;dns_sd_configs&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  - &lt;span style=&#34;color:#f92672&#34;&gt;names&lt;/span&gt;: [&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;m.internal&amp;#34;&lt;/span&gt;]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   &lt;span style=&#34;color:#f92672&#34;&gt;type&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;A&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   &lt;span style=&#34;color:#f92672&#34;&gt;port&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;51090&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;- &lt;span style=&#34;color:#f92672&#34;&gt;job_name&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;caddy&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;dns_sd_configs&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  - &lt;span style=&#34;color:#f92672&#34;&gt;names&lt;/span&gt;: [&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;caddy.internal&amp;#34;&lt;/span&gt;]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;type&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;A&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;port&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;2019&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;For caddy metrics, we hack around a little&amp;hellip; in the &lt;code&gt;x-caddy&lt;/code&gt; file we deploy for Caddy add:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-caddyfile&#34; data-lang=&#34;caddyfile&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;metrics {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;per_host&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;But this serves metrics on localhost inside the container. So we need to export this, we can&amp;rsquo;t add this&#xA;snippet:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Uncloud TLS</title>
      <link>https://miek.nl/2026/may/20/uncloud-tls/</link>
      <pubDate>Wed, 20 May 2026 10:11:23 +0200</pubDate>
      <guid>https://miek.nl/2026/may/20/uncloud-tls/</guid>
      <description>&lt;p&gt;Caddy in a distributed setup (i.e. running on more than one machine) is a nightmare together with Let&amp;rsquo;s&#xA;Encrypt ACME challenges&amp;hellip;  What happens is that Caddy &lt;em&gt;A&lt;/em&gt; starts a challenge, which ends up at Caddy &lt;em&gt;B&lt;/em&gt; and this&#xA;can ping-pong for &lt;em&gt;days&lt;/em&gt; before any certificates are given - and then only to a &lt;strong&gt;single&lt;/strong&gt; instance, so the&#xA;other instance will try for even longer. Of course the more of these you have the worse the problem gets.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Uncloud Image Pruning</title>
      <link>https://miek.nl/2026/may/14/uncloud-image-pruning/</link>
      <pubDate>Thu, 14 May 2026 22:04:39 +0200</pubDate>
      <guid>https://miek.nl/2026/may/14/uncloud-image-pruning/</guid>
      <description>&lt;p&gt;Currently &lt;code&gt;uc&lt;/code&gt; doesn&amp;rsquo;t have a &lt;em&gt;prune&lt;/em&gt; subcommand to prune images, and even if it had it would still be a&#xA;manual operation. It would be better to automate this. This post shows how.&lt;/p&gt;&#xA;&lt;p&gt;First create an image with this Dockerfile:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-Dockerfile&#34; data-lang=&#34;Dockerfile&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;FROM&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;--platform=$BUILDPLATFORM&lt;/span&gt; alpine:latest&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;RUN&lt;/span&gt; apk add curl&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;RUN&lt;/span&gt; &amp;lt;&amp;lt;EOF&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;echo &lt;span style=&#34;color:#ae81ff&#34;&gt;\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#/bin/bash&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; ! &lt;span style=&#34;color:#f92672&#34;&gt;[[&lt;/span&gt; -S /var/run/docker.sock &lt;span style=&#34;color:#f92672&#34;&gt;]]&lt;/span&gt;; &lt;span style=&#34;color:#66d9ef&#34;&gt;then&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    echo &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Docker socket /var/run/docker.sock not found&amp;#34;&lt;/span&gt; &amp;gt;&amp;amp;&lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    exit &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;fi&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;while&lt;/span&gt; true; &lt;span style=&#34;color:#66d9ef&#34;&gt;do&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    curl -s -X POST --unix-socket /var/run/docker.sock http://localhost/images/prune&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    sleep 24h&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;done&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;&lt;/span&gt; &amp;gt; /prune&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;EOF&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;RUN&lt;/span&gt; chmod +x /prune&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;WORKDIR /&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;CMD&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;/prune&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Build and push that image to a registry and then use this Uncloud compose.yaml to deploy:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Uncloud Prometheus</title>
      <link>https://miek.nl/2026/april/26/uncloud-prometheus/</link>
      <pubDate>Sun, 26 Apr 2026 18:22:52 +0200</pubDate>
      <guid>https://miek.nl/2026/april/26/uncloud-prometheus/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://github.com/psviderski/uncloud/pull/304&#34;&gt;Prometheus metrics&lt;/a&gt; are being worked on by&#xA;&lt;a href=&#34;https://ratms.nl/projects/uncloud/&#34;&gt;me&lt;/a&gt;, and will hopefully soon be merged in &lt;a href=&#34;https://uncloud.run&#34;&gt;Uncloud&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;The &lt;em&gt;uncloudd&lt;/em&gt; metrics endpoint is exposed into the cluster network, so this makes it possible for a&#xA;Prometheus service running inside the cluster to scrape it. For this it just needs to be able to access the API&#xA;to get all machines in the cluster. This can be done by mounting the uncloud socket inside the container, and&#xA;using &lt;code&gt;uc&lt;/code&gt; with &lt;a href=&#34;https://github.com/psviderski/uncloud/issues/335&#34;&gt;structured output&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Uncloud L4</title>
      <link>https://miek.nl/2026/april/25/uncloud-l4/</link>
      <pubDate>Sat, 25 Apr 2026 13:21:52 +0200</pubDate>
      <guid>https://miek.nl/2026/april/25/uncloud-l4/</guid>
      <description>&lt;p&gt;Natively &lt;a href=&#34;https://uncloud.run&#34;&gt;Uncloud&lt;/a&gt; doesn&amp;rsquo;t do L4 forwarding. This is an &lt;a href=&#34;https://github.com/psviderski/uncloud/issues/108&#34;&gt;open&#xA;issue&lt;/a&gt; as we are figuring out how to actually do this. But&#xA;it turns out you can already do this with the current code - well almost.&lt;/p&gt;&#xA;&lt;p&gt;Buckle up, because there is quite some stuff you may need:&lt;/p&gt;&#xA;&lt;p&gt;&lt;s&gt;1. A patched Uncloud, see &lt;a href=&#34;https://github.com/psviderski/uncloud/pull/358&#34;&gt;this PR&lt;/a&gt; for that.&lt;/s&gt;&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;A custom &lt;a href=&#34;https://caddyserver.com&#34;&gt;Caddy&lt;/a&gt; build, with the &lt;a href=&#34;https://github.com/mholt/caddy-l4&#34;&gt;L4&lt;/a&gt; plugin.&lt;/li&gt;&#xA;&lt;li&gt;A DNS server, I use &lt;a href=&#34;https://atomdns.miek.nl&#34;&gt;atomdns&lt;/a&gt; of course.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h1 id=&#34;caddy&#34;&gt;Caddy&lt;/h1&gt;&#xA;&lt;p&gt;With the following Dockerfile you create a custom caddy image that we will use.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Uncloud Private Registries</title>
      <link>https://miek.nl/2026/april/14/uncloud-private-registries/</link>
      <pubDate>Tue, 14 Apr 2026 19:31:00 +0200</pubDate>
      <guid>https://miek.nl/2026/april/14/uncloud-private-registries/</guid>
      <description>&lt;p&gt;While pushing &lt;a href=&#34;https://github.com/psviderski/uncloud/pull/306&#34;&gt;this PR&lt;/a&gt;, the answer was that this &lt;em&gt;was already&#xA;working&lt;/em&gt;! But kind of unintuitive, but smart as it re-uses whatever docker setup you got (i.e. credentials&#xA;helpers).&lt;/p&gt;&#xA;&lt;p&gt;So to get this working you:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;% docker login registry.science.ru.nl&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Username: bla&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Password:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;And then use &lt;code&gt;uc deploy -f .../compose.yml&lt;/code&gt; just like you did before. Now it should pull from the private repo&#xA;and things &amp;ldquo;just work&amp;rdquo;.&lt;/p&gt;&#xA;&lt;p&gt;See &lt;a href=&#34;https://uncloud.run/docs/guides/deployments/deploy-app/#pull-from-a-private-registry&#34;&gt;this guide&lt;/a&gt; for&#xA;canonical text on this.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Uncloud</title>
      <link>https://miek.nl/2026/march/16/uncloud/</link>
      <pubDate>Mon, 16 Mar 2026 14:00:40 +0100</pubDate>
      <guid>https://miek.nl/2026/march/16/uncloud/</guid>
      <description>&lt;p&gt;I&amp;rsquo;m playing with &lt;a href=&#34;https://uncloud.run&#34;&gt;Uncloud&lt;/a&gt; to see if it is something we can use at $WORK. Pretty&#xA;impressed with it already, as I&amp;rsquo;ve written something worse &lt;a href=&#34;https://github.com/miekg/pgo&#34;&gt;pgo&lt;/a&gt;, that was&#xA;(obviously) not good enough. Uncloud does: implement a subset of the Docker(-compose) API, uses gRPC and&#xA;wireguard to create mini network; just brilliant. Haven&amp;rsquo;t seen prometheus metrics yet, although Caddy is used&#xA;for the proxy, but more prometheus metrics would make sense. (Which you can then observe through a cluster&#xA;hosted prometheus&amp;hellip;?)&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
