<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title>Homelab on Thomas Schwery</title>
		<link>https://thomas.inf3.ch/topics/homelab/</link>
		<description>Recent content in Homelab on Thomas Schwery</description>
		<generator>Hugo</generator>
		<language>en</language>
		
			<managingEditor>thomas@inf3.ch (Thomas Schwery)</managingEditor>
		
		
			<webMaster>thomas@inf3.ch (Thomas Schwery)</webMaster>
		
		
			<copyright>Thomas Schwery, No rights reserved (CC0).</copyright>
		
		
			<lastBuildDate>Sat, 03 Oct 2026 18:30:00 +0000</lastBuildDate>
		
			<atom:link href="https://thomas.inf3.ch/topics/homelab/index.xml" rel="self" type="application/rss+xml" />
			<item>
				<title>DNS as Code with DNSControl</title>
				<link>https://thomas.inf3.ch/2026-10-03-dns-as-code-dnscontrol/</link>
				<pubDate>Sat, 03 Oct 2026 18:30:00 +0000</pubDate><author>thomas@inf3.ch (Thomas Schwery)</author>
				<guid>https://thomas.inf3.ch/2026-10-03-dns-as-code-dnscontrol/</guid>
				<description>&lt;p&gt;I manage the DNS zones for three domains: inf3.ch, inf3.xyz and schwery.me.&#xA;They hold the records for my servers, my websites, a few personal services&#xA;and of course the email. I don&amp;rsquo;t change them often, maybe a few times a&#xA;year, and that is exactly the problem: every time, I had forgotten how a&#xA;record was configured and why. Since 2017, these zones are in a Git&#xA;repository and are deployed to Amazon Route53 by a GitLab pipeline, so that&#xA;the history and the reason of each change stay next to the configuration.&lt;/p&gt;</description>
			</item>
			<item>
				<title>A Home Lab on Talos and ArgoCD</title>
				<link>https://thomas.inf3.ch/2026-08-23-talos-argocd-homelab/</link>
				<pubDate>Sun, 23 Aug 2026 18:30:00 +0000</pubDate><author>thomas@inf3.ch (Thomas Schwery)</author>
				<guid>https://thomas.inf3.ch/2026-08-23-talos-argocd-homelab/</guid>
				<description>&lt;p&gt;Back in 2017 I wrote about my small Kubernetes cluster in&#xA;&lt;a href=&#34;https://thomas.inf3.ch/2017-08-27-openfaaskubernetes/&#34;&gt;OpenFaaS and Kubernetes&lt;/a&gt; and&#xA;&lt;a href=&#34;https://thomas.inf3.ch/2017-12-03-kubernetes-ceph-rbd/&#34;&gt;Kubernetes Persistent Volumes and RBD&lt;/a&gt;. At&#xA;the time, the nodes were Debian machines that I installed by hand and&#xA;initialised with &lt;code&gt;kubeadm&lt;/code&gt;, and the volumes came from a small Ceph cluster&#xA;at home. The git&#xA;repository behind that cluster is still the same one today, with the first&#xA;commit &amp;ldquo;Initial import&amp;rdquo; from September 2017 and about 2900 commits since.&#xA;Almost everything else has changed.&lt;/p&gt;</description>
			</item>
			<item>
				<title>A WireGuard Hub with Ansible</title>
				<link>https://thomas.inf3.ch/2026-06-28-wireguard-hub-ansible/</link>
				<pubDate>Sun, 28 Jun 2026 18:30:00 +0000</pubDate><author>thomas@inf3.ch (Thomas Schwery)</author>
				<guid>https://thomas.inf3.ch/2026-06-28-wireguard-hub-ansible/</guid>
				<description>&lt;p&gt;My machines are spread over a number of places that are all behind some&#xA;kind of NAT: the home network behind an OPNsense firewall, a Mikrotik&#xA;router on another site, a Raspberry Pi at the chalet, and the laptops that&#xA;move around with me. A few years ago I solved the &amp;ldquo;how do I reach home&amp;rdquo;&#xA;question with an&#xA;&lt;a href=&#34;https://thomas.inf3.ch/2019-03-11-tor-ssh/&#34;&gt;SSH access through a Tor Hidden Service&lt;/a&gt;.&#xA;It worked, but it was slow, it only gave me SSH, and only allowed me to connect&#xA;to a server, not link multiple networks together.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Backup archives migration to Borg</title>
				<link>https://thomas.inf3.ch/2019-11-21-borg-migration/</link>
				<pubDate>Thu, 21 Nov 2019 18:30:00 +0000</pubDate><author>thomas@inf3.ch (Thomas Schwery)</author>
				<guid>https://thomas.inf3.ch/2019-11-21-borg-migration/</guid>
				<description>&lt;p&gt;Last weekend I found a number of encrypted hard-drives that were used to do periodic&#xA;backups from 2006 to 2014. At the time, the backups were made using rsync&#xA;with hard-links to save only one occurrence of the file if it was not changed&#xA;since the last backup.&lt;/p&gt;&#xA;&lt;p&gt;I wanted to check that everything was still there and upgrade this to a&#xA;Borg repository so that I can profit from compression and deduplication&#xA;to reduce these backup size further down and store them in a more secure way.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Automatic deployment on AWS S3 and/or FTP</title>
				<link>https://thomas.inf3.ch/2019-09-24-automatic-deploy-on-aws/</link>
				<pubDate>Tue, 24 Sep 2019 18:30:00 +0000</pubDate><author>thomas@inf3.ch (Thomas Schwery)</author>
				<guid>https://thomas.inf3.ch/2019-09-24-automatic-deploy-on-aws/</guid>
				<description>&lt;p&gt;A number of websites I maintain are built and deployed automatically through&#xA;GitLab pipelines, either on an AWS S3 bucket that is then used by AWS CloudFlare,&#xA;or to an SFTP server of an hosting provider.&lt;/p&gt;&#xA;&lt;p&gt;In this article I will summarize the necessary configuration to GitLab-CI&#xA;and the necessary variables in the CI/CD settings.&lt;/p&gt;&#xA;&lt;h2 id=&#34;deploy-to-aws-s3&#34;&gt;Deploy to AWS S3&lt;/h2&gt;&#xA;&lt;p&gt;We first need to inject the credentials necessary for the GitLab runner to GitLab.&#xA;Go to your project, &lt;code&gt;Settings&lt;/code&gt; -&amp;gt; &lt;code&gt;CI / CD&lt;/code&gt; -&amp;gt; &lt;code&gt;Secret variables&lt;/code&gt; and set two variables:&lt;/p&gt;</description>
			</item>
			<item>
				<title>GitLab runners on Hetzner Cloud</title>
				<link>https://thomas.inf3.ch/2019-09-24-hetzner-cloud-docker-ci/</link>
				<pubDate>Tue, 10 Sep 2019 18:30:00 +0000</pubDate><author>thomas@inf3.ch (Thomas Schwery)</author>
				<guid>https://thomas.inf3.ch/2019-09-24-hetzner-cloud-docker-ci/</guid>
				<description>&lt;p&gt;Because my different projects use a lot of pipelines for tests and deployments,&#xA;I wanted to use the different possibilities of the cloud to reduce the load on&#xA;my GitLab server and instead run these short-lived containers on other&#xA;virtual machines.&lt;/p&gt;&#xA;&lt;p&gt;In this post, I will explain the different steps needed to install a GitLab&#xA;Runner and the necessary adapter for Docker Machine in a container that&#xA;can be deployed on your server, configure the runner to launch new Hetzner Cloud&#xA;servers and deploy a shared cache to centralize the cache storage between&#xA;theses machines. The configuration presented here is based on the official&#xA;GitLab container configured and launched through Docker Compose.&lt;/p&gt;</description>
			</item>
			<item>
				<title>SSH access through Tor Hidden Service</title>
				<link>https://thomas.inf3.ch/2019-03-11-tor-ssh/</link>
				<pubDate>Mon, 11 Mar 2019 18:30:00 +0000</pubDate><author>thomas@inf3.ch (Thomas Schwery)</author>
				<guid>https://thomas.inf3.ch/2019-03-11-tor-ssh/</guid>
				<description>&lt;p&gt;I have a number of computers that are connected to different networks, sometimes&#xA;accessible from the Internet, sometimes behind a NAT that I can configure,&#xA;sometimes behind NAT that I cannot modify and sometimes behind multiple&#xA;obstacles.&lt;/p&gt;&#xA;&lt;p&gt;Recently, I discovered that there is a very easy way of dealing with this:&#xA;Tor Hidden Services. Usually when we think about Tor, we think about the&#xA;anonymity part of the network, but it also provides a connection that is&#xA;unfiltered and thus allow access to our services even if they are behind&#xA;NAT, have a dynamic IP address or are protected by firewalls.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Kubernetes Persistent Volumes and RBD</title>
				<link>https://thomas.inf3.ch/2017-12-03-kubernetes-ceph-rbd/</link>
				<pubDate>Sun, 03 Dec 2017 15:00:00 +0000</pubDate><author>thomas@inf3.ch (Thomas Schwery)</author>
				<guid>https://thomas.inf3.ch/2017-12-03-kubernetes-ceph-rbd/</guid>
				<description>&lt;p&gt;Since the number of stuff I&amp;rsquo;m deploying on my small Kubernetes cluster is&#xA;increasing and manually managing the volumes is beginning to be a pain, I&#xA;decided to start learning about the Storage Classes, Persistent Volumes&#xA;and Volume claims.&lt;/p&gt;&#xA;&lt;p&gt;Even if at first it seems to be intimidating, it was really easy to integrate&#xA;them with my small Ceph cluster that I also play with.&lt;/p&gt;&#xA;&lt;h1 id=&#34;ceph&#34;&gt;Ceph&lt;/h1&gt;&#xA;&lt;p&gt;On the Ceph side, the configuration consists of creating a new pool and&#xA;user that will be used by our Kubernetes cluster.&lt;/p&gt;</description>
			</item>
			<item>
				<title>OpenFaaS and Kubernetes</title>
				<link>https://thomas.inf3.ch/2017-08-27-openfaaskubernetes/</link>
				<pubDate>Sun, 27 Aug 2017 18:30:00 +0000</pubDate><author>thomas@inf3.ch (Thomas Schwery)</author>
				<guid>https://thomas.inf3.ch/2017-08-27-openfaaskubernetes/</guid>
				<description>&lt;p&gt;Recently there has been a lot of news about &lt;a href=&#34;https://github.com/alexellis/faas&#34;&gt;OpenFaaS&lt;/a&gt;&#xA;and I wanted to try it out. As the rest of my tests have been done on&#xA;Kubernetes, I looked more closely to the &lt;a href=&#34;https://github.com/alexellis/faas-netes&#34;&gt;FaaS-Netes&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Everything here was done on a local minikube deployment and using my test&#xA;Docker registry deployed on a server in the local network.&lt;/p&gt;&#xA;&lt;h2 id=&#34;deployment&#34;&gt;Deployment&lt;/h2&gt;&#xA;&lt;p&gt;The first deployment was really easy. Once minikube is operational, it&amp;rsquo;s&#xA;only two commands to deploy everything needed :&#xA;&lt;code&gt;git clone https://github.com/alexellis/faas-netes&lt;/code&gt;&#xA;and then &lt;code&gt;kubectl apply -f ./faas.yml,monitoring.yml,rbac.yml&lt;/code&gt;.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Ubiquiti Unifi at home</title>
				<link>https://thomas.inf3.ch/2017-08-20-unifi-network/</link>
				<pubDate>Sun, 20 Aug 2017 18:00:00 +0000</pubDate><author>thomas@inf3.ch (Thomas Schwery)</author>
				<guid>https://thomas.inf3.ch/2017-08-20-unifi-network/</guid>
				<description>&lt;p&gt;I have been using the same router with OpenWRT installed for now 8 years&#xA;and recently my network was beginning to become somewhat insufficient. I&#xA;have a number of servers in my home, a number of mobile devices connected&#xA;by Wifi and the router is in the living room whereas we both have a desktop&#xA;computer on an another floor, without cabled network in the home.&lt;/p&gt;&#xA;&lt;p&gt;Until now, the network was using a single router in the living room, a&#xA;Devolo dLAN650+ to distribute the network both to the servers in an another&#xA;room and to the office. It worked well in our small appartement but now&#xA;that we are living in a house and the office is upstairs, the power network&#xA;in the house is split and the connectivity between the living room and&#xA;the office is insufficient and connecting every device using the Wifi grinds&#xA;the network to a halt for some reason.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Now with OwnCloud</title>
				<link>https://thomas.inf3.ch/2012-02-07-owncloud/</link>
				<pubDate>Tue, 07 Feb 2012 18:43:05 +0000</pubDate><author>thomas@inf3.ch (Thomas Schwery)</author>
				<guid>https://thomas.inf3.ch/2012-02-07-owncloud/</guid>
				<description>&lt;p&gt;After a long pause in this blog, I just updated the broken edition method. Before, the only method to add new notes&#xA;in this blog was using SVN, which was broken when I migrated to Mercurial.&lt;/p&gt;&#xA;&lt;p&gt;Now, I shared a folder with WebDAV, using ownCloud so that I can access these notes from anywhere using either a mounted&#xA;folder in my home directory or the online interface.&lt;/p&gt;&#xA;&lt;p&gt;As soon as an entry is added or modified, a small watch script launch a blog recompilation :&lt;/p&gt;</description>
			</item>
	</channel>
</rss>
