{"generatedAt":"2026-06-02T19:11:17.252Z","entries":[{"kind":"blog","slug":"create-your-own-llm-chat-where-you-pay-what-you-use","title":"Create your own LLM chat, where you pay what you use","description":"You ever wanted to use better AI Models, but they're just too expensive? In this post, you'll learn how to set up a platform where you pay what you use. Spoiler, it's cheaper than any subscription I know of ^^","tags":["open-webui","openrouter","llm","self-hosting","docker"],"draft":false,"html":"<p>We will use OpenRouter to get usage-based pricing for our LLMs and combine this with Open WebUI to use it.</p>\n<p><a href=\"https://openwebui.com/\">Open WebUI</a> should be a well-known tool for everyone interested in self-hosting LLMs. For everyone else, it's basically an “insert your favorite LLM Platform here” frontend, which looks nearly identical to ChatGPT and others.</p>\n<p>Quick sidenote: this blog post is not about self-hosting an LLM. I don't have a GPU lying around. But we will look at how you can cancel your LLM Subscriptions and still use all of them, or even more at a probably cheaper price.</p>\n<h2 id=\"why-should-i-care\">Why should I care?</h2>\n<p>If you're paying for an AI subscription, you know they can be quite expensive. OpenAI Plus is €23 a month, Google AI Pro is €17 a month and Anthropic is €17 as well. Cheaper solutions surely exist, like t3.chat for $8 a month, which is good value, if you use up all your credits.</p>\n<p>But there it is, IF you use all your credits. And that's exactly what got me started on this project.</p>\n<h2 id=\"what-i-want\">What I want</h2>\n<p>What annoyed me was the pricing model of most AI platforms out there. Pay us a fixed monthly price, you'll get a fixed amount of monthly credits, but every credit you don't use you'll lose.</p>\n<p>I don't use AI often, and I'm satisfied by cheaper models like Gemini 2.5 Flash. So I barely used 1/4 of my available credits.</p>\n<p>So I started looking for a provider which has usage based pricing. Pay what you use, and a little extra for them to stay alive. And that's where <a href=\"https://openrouter.ai/\">OpenRouter</a> comes into play. They're a platform which aggregates access to <a href=\"https://openrouter.ai/models\">over 300 AI Models</a> and pass through the actual price of the Models API. Also, they only charge you for what you use.</p>\n<p>I used my setup for roughly 30 days and used $0.40 in credits. $0.30 of them were used on the first day to test everything, also I tried some expensive models. After that I mostly stuck to Gemini 2.5 Flash which is cheap and “smart” enough for my uses.</p>\n<h2 id=\"the-project\">The Project</h2>\n<p>We now have an API Provider (<a href=\"https://openrouter.ai/\">OpenRouter</a>) and we have a frontend for it (<a href=\"https://openwebui.com/\">Open WebUI</a>). So let's begin the setup, and trust me, it's easy!</p>\n<p>First, create yourself an account on <a href=\"https://openrouter.ai/\">OpenRouter</a>. After registering, navigate to your <a href=\"https://openrouter.ai/settings/credits\">credits settings</a>. There you need to buy some credits. They are displayed in USD.</p>\n<p>After topping up your account, you'll need to generate an <a href=\"https://openrouter.ai/settings/keys\">API Key</a>. You can set a usage limit per key if you want, but it's not required. After creating your token, take note of it, we'll use it later.</p>\n<p>Now to the fun part: to set up Open WebUI we're gonna use Docker Compose.</p>\n<div class=\"markdown-code-block\"><button type=\"button\" class=\"markdown-code-copy\" aria-label=\"Copy code\">Copy</button><div class=\"markdown-code-inner\"><div class=\"markdown-code-gutter\" aria-hidden=\"true\" style=\"--markdown-code-gutter-ch:1ch\"><span class=\"markdown-code-ln\">1</span><span class=\"markdown-code-ln\">2</span><span class=\"markdown-code-ln\">3</span><span class=\"markdown-code-ln\">4</span><span class=\"markdown-code-ln\">5</span><span class=\"markdown-code-ln\">6</span><span class=\"markdown-code-ln\">7</span><span class=\"markdown-code-ln\">8</span></div><div class=\"markdown-code-scroll\"><pre class=\"hljs\"><code class=\"hljs language-yaml\"><span class=\"hljs-attr\">services:</span>\n  <span class=\"hljs-attr\">openwebui:</span>\n    <span class=\"hljs-attr\">image:</span> <span class=\"hljs-string\">ghcr.io/open-webui/open-webui:main</span>\n    <span class=\"hljs-attr\">ports:</span>\n      <span class=\"hljs-bullet\">-</span> <span class=\"hljs-string\">&quot;8080:8080&quot;</span>\n    <span class=\"hljs-attr\">volumes:</span>\n      <span class=\"hljs-bullet\">-</span> <span class=\"hljs-string\">./data:/app/backend/data</span>\n    <span class=\"hljs-attr\">restart:</span> <span class=\"hljs-string\">unless-stopped</span></code></pre></div></div></div>\n<p>After starting the compose file with <code>docker compose up -d</code> you should be able to access it on port 8080 and set up your account.</p>\n<p>The only thing left is to connect Open WebUI with OpenRouter. For this, we'll go into the admin settings. You'll find it in the bottom left by clicking on your name.</p>\n<p>We'll then need to navigate to “Settings > Connections” where we can add a new OpenAI API configuration.</p>\n<p><img src=\"/content/blog/create-your-own-llm-chat-where-you-pay-what-you-use/screenshot-1.webp\" alt=\"Open WebUI connections settings\"></p>\n<p>Here you'll need to enter your previously generated API Key and the API URL, which is <a href=\"https://openrouter.ai/api/v1\">https://openrouter.ai/api/v1</a>.</p>\n<p>The Tag section is optional and up to you.</p>\n<p><img src=\"/content/blog/create-your-own-llm-chat-where-you-pay-what-you-use/screenshot-2.webp\" alt=\"API URL and key configuration\"></p>\n<p>After this, click Save and you should be able to chat with an AI Model of choice.</p>\n<p><img src=\"/content/blog/create-your-own-llm-chat-where-you-pay-what-you-use/screenshot-3.webp\" alt=\"Chat after saving connection\"></p>\n<h2 id=\"advanced-configuration-for-cost-saving\">Advanced configuration for cost saving</h2>\n<p>If everything works as expected, we can configure Open WebUI to save some tokens.</p>\n<p>Chat titles, Tags and message suggestions are generated by the currently selected model. This can get expensive, especially if you use reasoning models. But even if not, a chat title does not need to be generated by a state of the art, top of the line model. A simple, small and cheap model is plenty enough.</p>\n<p>The single most important change is the “External task Model”. This is the model which executes the tasks listed below. By changing this to a cheap model like “Meta Llama 3.2 3B Instruct” you can easily save some credits and use them for actually useful messages. My selected model costs $0.10 per 1 Million tokens, so way less than Gemini or others.</p>\n<p><img src=\"/content/blog/create-your-own-llm-chat-where-you-pay-what-you-use/screenshot-4.webp\" alt=\"External task model and related options\"></p>\n<p>The other settings, like Tag generation or Follow-up generation, are up to you. I personally don't need them, therefore I disabled them. If you let them enabled, they won't break your bank (if you selected a cheap model) so try it out and decide for yourself.</p>\n<h2 id=\"conclusion\">Conclusion</h2>\n<p>Here we are now. We have our very own chat platform to use, which is way cheaper than any subscription could ever be. And even better, we can brag to our friends, although they probably won't understand a thing about it ^^'</p>","href":"/blog/create-your-own-llm-chat-where-you-pay-what-you-use","searchText":"We will use OpenRouter to get usage-based pricing for our LLMs and combine this with Open WebUI to use it. Open WebUI should be a well-known tool for everyone interested in self-hosting LLMs. For everyone else, it's basically an “insert your favorite LLM Platform here” frontend, which looks nearly identical to ChatGPT and others. Quick sidenote: this blog post is not about self-hosting an LLM. I don't have a GPU lying around. But we will look at how you can cancel your LLM Subscriptions and still use all of them, or even more at a probably cheaper price. Why should I care? If you're paying for an AI subscription, you know they can be quite expensive. OpenAI Plus is €23 a month, Google AI Pro is €17 a month and Anthropic is €17 as well. Cheaper solutions surely exist, like t3.chat for $8 a month, which is good value, if you use up all your credits. But there it is, IF you use all your credits. And that's exactly what got me started on this project. What I want What annoyed me was the pricing model of most AI platforms out there. Pay us a fixed monthly price, you'll get a fixed amount of monthly credits, but every credit you don't use you'll lose. I don't use AI often, and I'm satisfied by cheaper models like Gemini 2.5 Flash. So I barely used 1/4 of my available credits. So I started looking for a provider which has usage based pricing. Pay what you use, and a little extra for them to stay alive. And that's where OpenRouter comes into play. They're a platform which aggregates access to over 300 AI Models and pass through the actual price of the Models API. Also, they only charge you for what you use. I used my setup for roughly 30 days and used $0.40 in credits. $0.30 of them were used on the first day to test everything, also I tried some expensive models. After that I mostly stuck to Gemini 2.5 Flash which is cheap and “smart” enough for my uses. The Project We now have an API Provider ( OpenRouter ) and we have a frontend for it ( Open WebUI ). So let's begin the setup, and trust me, it's easy! First, create yourself an account on OpenRouter . After registering, navigate to your credits settings . There you need to buy some credits. They are displayed in USD. After topping up your account, you'll need to generate an API Key . You can set a usage limit per key if you want, but it's not required. After creating your token, take note of it, we'll use it later. Now to the fun part: to set up Open WebUI we're gonna use Docker Compose. Copy 1 2 3 4 5 6 7 8 services: openwebui: image: ghcr.io/open-webui/open-webui:main ports: - 8080:8080 volumes: - ./data:/app/backend/data restart: unless-stopped After starting the compose file with docker compose up -d you should be able to access it on port 8080 and set up your account. The only thing left is to connect Open WebUI with OpenRouter. For this, we'll go into the admin settings. You'll find it in the bottom left by clicking on your name. We'll then need to navigate to “Settings > Connections” where we can add a new OpenAI API configuration. Here you'll need to enter your previously generated API Key and the API URL, which is https://openrouter.ai/api/v1 . The Tag section is optional and up to you. After this, click Save and you should be able to chat with an AI Model of choice. Advanced configuration for cost saving If everything works as expected, we can configure Open WebUI to save some tokens. Chat titles, Tags and message suggestions are generated by the currently selected model. This can get expensive, especially if you use reasoning models. But even if not, a chat title does not need to be generated by a state of the art, top of the line model. A simple, small and cheap model is plenty enough. The single most important change is the “External task Model”. This is the model which executes the tasks listed below. By changing this to a cheap model like “Meta Llama 3.2 3B Instruct” you can easily save some credits and use them for actually useful messages. My selected model costs $0.10 per 1 Million tokens, so way less than Gemini or others. The other settings, like Tag generation or Follow-up generation, are up to you. I personally don't need them, therefore I disabled them. If you let them enabled, they won't break your bank (if you selected a cheap model) so try it out and decide for yourself. Conclusion Here we are now. We have our very own chat platform to use, which is way cheaper than any subscription could ever be. And even better, we can brag to our friends, although they probably won't understand a thing about it ^^'","seo":{"description":"You ever wanted to use better AI Models, but they're just too expensive? In this post, you'll learn how to set up a platform where you pay what you use. Spoiler, it's cheaper than any subscription I know of ^^","ogTitle":"Create your own LLM chat, where you pay what you use · Hutch's rambling corner"},"published":"2025-07-10T00:00:00.000Z","updated":"2026-03-31T00:00:00.000Z"},{"kind":"blog","slug":"im-getting-into-retro-gaming","title":"I'm getting into Retro Gaming","description":"Do you know the feeling of a brand-new interest? Newly discovered through a friend you only know through Discord. And suddenly you spent 500 bucks without even knowing if you're really into it? Well, I do now...","tags":["retro-gaming","handhelds","personal"],"draft":false,"html":"<p>Well, I don't really know who is going to read this, but I might have a problem.</p>\n<p>Do you know the feeling of a brand-new interest? Newly discovered through a friend you only know through Discord. And suddenly you spent 500 bucks without even knowing if you're really into it?</p>\n<p>Well, it just happened to me a few days ago… I got nerd sniped by my friend Mistik. He already tried it once, and I waved it off, but hell did he hit me the second time! To be honest, I don't really know how it happened. All I know is, that I bought the <a href=\"https://www.ayntec.com/products/ayn-thor\">Ayn Thor</a> the same evening.</p>\n<figure class=\"markdown-figure markdown-figure--center\" style=\"--markdown-figure-width: 75%\"><img src=\"/content/blog/im-getting-into-retro-gaming/hero.webp\" alt=\"Retro gaming hero\" loading=\"lazy\"></figure>\n<h2 id=\"the-beginning\">The Beginning</h2>\n<p>For those of you who are not into retro gaming or have never heard of Thor Odinson, God of Thunder, son of Odin, protector of Asgard and Midgard… wait, that's the wrong Thor… Well, basically the <a href=\"https://www.ayntec.com/products/ayn-thor\">Ayn Thor</a> is a modern handheld inspired by the DS/3DS which has quite some power under the hood. And in my opinion, it's really beautiful. AND EXPENSIVE! At least, if you're like me and think “Meh, the Lite one is too weak. And how should I fit all my Games on this thing, despite not knowing how much storage retro games actually need? I'll take the large one!” And so I spent 520$ on this thing… Luckily, I “saved” 100 bucks after converting it to my local currency, but it's still 420 bucks! Also, I might have spent another 70, but we'll come to that later.</p>\n<p>The Ayn Thor is basically the god tier as far as I can tell (with my very limited knowledge). According to reviews I've seen, it's even capable to run full-on Steam desktop games, although only the lighter ones. I mean, what the heck? I can play PC games on the go without having to take a brick, erm, I mean, a Steam Deck with me???</p>\n<figure class=\"markdown-figure markdown-figure--center\" style=\"--markdown-figure-width: 50%\"><img src=\"/content/blog/im-getting-into-retro-gaming/meme.webp\" alt=\"Me whilst buying the Ayn Thor\" loading=\"lazy\"></figure>\n<hr>\n<h2 id=\"i-might-have-a-problem\">I might have a problem</h2>\n<p>But now that I'm out of my pre-delivery Honeymoon phase, reason sets in.</p>\n<p>Have I just spent 420 bucks on a retro handheld, without even knowing if I like it? Yes, yes I did. Are there cheaper options, like an <a href=\"https://anbernic.com/de-de/products/rg35xxsp\">ANBERNIC RG35XXSP</a> for 40 to 70 bucks? Yes, yes there are. Do I kinda regret buying the Ayn Thor? Yes, yes I do… Am I still excited till it finally arrives? HELL YEAH I AM!!!!</p>\n<p>Since the Thor currently is only in pre-order and batch 2 is not yet shipped, I can't show any fancy pictures of it. I don't even know how good it may or may not feel. What I want to say, I'm completely desperate and want something in my hands to play around with!!! Wait… Haven't I just said there are cheaper options? 40 to 70 bucks? Let me look that up. Yeah, 70 bucks, delivered the day after tomorrow. Even from a Swiss retailer. Wait, 70 bucks? I saved 100$ due to conversion from dollar to francs. This is basically free, isn't it?</p>\n<p>You know it… I bought it… It should arrive tomorrow!!!</p>\n<p>Now I'm here. Waiting, desperately wanting to play with something! And then he came. My savior, another dude I know. Out of the shadows he stepped and showed me the magic of <a href=\"https://apps.apple.com/ch/app/delta-game-emulator/id1048524688\">Delta</a>!</p>\n<p>Delta is an iOS/iPadOS/MacOS app to emulate retro games. Well, I could have saved sooo much money… But it wouldn't be the same! I regret NOTHING!!! Ok, well, maybe I regret my decisions a little bit, but meh.</p>\n<h2 id=\"you-want-to-start-retro-gaming-too\">You want to start Retro Gaming too?</h2>\n<p>Well, after all that you really want to start retro gaming? I hope you've got more brain than I do, or a full wallet… If not, stay here and read further ^^</p>\n<p>If I could turn back time by just a week, I would not buy the Thor. I would have done the boring thing and first tried <a href=\"https://apps.apple.com/ch/app/delta-game-emulator/id1048524688\">Delta</a> and then bought the <a href=\"https://anbernic.com/de-de/products/rg35xxsp\">RG35XXSP</a>. Maybe I'd even skip Delta, since 70 bucks aren't that much money for me. Have you seen my HomeLab? This new obsession is nothing against that…</p>\n<h2 id=\"how-i-would-start-now\">How I would start now</h2>\n<p>What I want to tell you is, there are cheaper systems. The Thor is probably, quite literally, a god in the current handheld market. And that comes with its price. But retro gaming does not need an RTX 5090 to run. A Game Boy ran with an 8-Bit 8.388 MHz processor and a whopping 8 KB RAM and VRAM each. And the games were/are still fun to play! As Delta shows, you can even run emulators on your smartphone, the device you already own! And have I told you that you can run emulators on Windows and Linux as well? I don't know of any, but you'll for sure find a YouTube video about it.</p>\n<p>So what's the holdup? You read this whole thing, written by a clearly stupid/crazy person, and are still waiting to try it out? Go on YouTube and search for a tutorial. For handhelds, <a href=\"https://www.youtube.com/@TechDweeb\">TechDweeb</a> has… a special kind of video style but very good content.</p>\n<p>So, have fun! 🤖</p>","href":"/blog/im-getting-into-retro-gaming","searchText":"Well, I don't really know who is going to read this, but I might have a problem. Do you know the feeling of a brand-new interest? Newly discovered through a friend you only know through Discord. And suddenly you spent 500 bucks without even knowing if you're really into it? Well, it just happened to me a few days ago… I got nerd sniped by my friend Mistik. He already tried it once, and I waved it off, but hell did he hit me the second time! To be honest, I don't really know how it happened. All I know is, that I bought the Ayn Thor the same evening. The Beginning For those of you who are not into retro gaming or have never heard of Thor Odinson, God of Thunder, son of Odin, protector of Asgard and Midgard… wait, that's the wrong Thor… Well, basically the Ayn Thor is a modern handheld inspired by the DS/3DS which has quite some power under the hood. And in my opinion, it's really beautiful. AND EXPENSIVE! At least, if you're like me and think “Meh, the Lite one is too weak. And how should I fit all my Games on this thing, despite not knowing how much storage retro games actually need? I'll take the large one!” And so I spent 520$ on this thing… Luckily, I “saved” 100 bucks after converting it to my local currency, but it's still 420 bucks! Also, I might have spent another 70, but we'll come to that later. The Ayn Thor is basically the god tier as far as I can tell (with my very limited knowledge). According to reviews I've seen, it's even capable to run full-on Steam desktop games, although only the lighter ones. I mean, what the heck? I can play PC games on the go without having to take a brick, erm, I mean, a Steam Deck with me??? I might have a problem But now that I'm out of my pre-delivery Honeymoon phase, reason sets in. Have I just spent 420 bucks on a retro handheld, without even knowing if I like it? Yes, yes I did. Are there cheaper options, like an ANBERNIC RG35XXSP for 40 to 70 bucks? Yes, yes there are. Do I kinda regret buying the Ayn Thor? Yes, yes I do… Am I still excited till it finally arrives? HELL YEAH I AM!!!! Since the Thor currently is only in pre-order and batch 2 is not yet shipped, I can't show any fancy pictures of it. I don't even know how good it may or may not feel. What I want to say, I'm completely desperate and want something in my hands to play around with!!! Wait… Haven't I just said there are cheaper options? 40 to 70 bucks? Let me look that up. Yeah, 70 bucks, delivered the day after tomorrow. Even from a Swiss retailer. Wait, 70 bucks? I saved 100$ due to conversion from dollar to francs. This is basically free, isn't it? You know it… I bought it… It should arrive tomorrow!!! Now I'm here. Waiting, desperately wanting to play with something! And then he came. My savior, another dude I know. Out of the shadows he stepped and showed me the magic of Delta ! Delta is an iOS/iPadOS/MacOS app to emulate retro games. Well, I could have saved sooo much money… But it wouldn't be the same! I regret NOTHING!!! Ok, well, maybe I regret my decisions a little bit, but meh. You want to start Retro Gaming too? Well, after all that you really want to start retro gaming? I hope you've got more brain than I do, or a full wallet… If not, stay here and read further ^^ If I could turn back time by just a week, I would not buy the Thor. I would have done the boring thing and first tried Delta and then bought the RG35XXSP . Maybe I'd even skip Delta, since 70 bucks aren't that much money for me. Have you seen my HomeLab? This new obsession is nothing against that… How I would start now What I want to tell you is, there are cheaper systems. The Thor is probably, quite literally, a god in the current handheld market. And that comes with its price. But retro gaming does not need an RTX 5090 to run. A Game Boy ran with an 8-Bit 8.388 MHz processor and a whopping 8 KB RAM and VRAM each. And the games were/are still fun to play! As Delta shows, you can even run emulators on your smartphone, the device you already own! And have I told you that you can run emulators on Windows and Linux as well? I don't know of any, but you'll for sure find a YouTube video about it. So what's the holdup? You read this whole thing, written by a clearly stupid/crazy person, and are still waiting to try it out? Go on YouTube and search for a tutorial. For handhelds, TechDweeb has… a special kind of video style but very good content. So, have fun! 🤖","seo":{"description":"Do you know the feeling of a brand-new interest? Newly discovered through a friend you only know through Discord. And suddenly you spent 500 bucks without even knowing if you're really into it? Well, I do now...","ogTitle":"I'm getting into Retro Gaming · Hutch's rambling corner"},"published":"2026-01-15T00:00:00.000Z","updated":"2026-03-31T00:00:00.000Z"},{"kind":"blog","slug":"self-hosted-git-control-what-happens-to-your-code","title":"Self Hosted Git - Control what happens to your code","description":"Hosted Git options like GitHub or GitLab are great, but what if you don't trust them, or don't want to pay them for your usage of action minutes? Maybe a self-hosted Git instance is right for you?","tags":["forgejo","git","self-hosting","docker"],"draft":false,"html":"<p>Ever since <a href=\"https://github.blog/news-insights/company-news/goodbye-github/\">August 11, when Thomas Dohmke (former CEO of GitHub) announced his departure and GitHub became part of Microsoft's CoreAI organization</a>, I've had a bad taste in my mouth. Will GitHub still be GitHub if they are fully absorbed into Microsoft? Well, now is not the time to discuss that. We'll find out in the future, and I hope Microsoft does not enshitificate GitHub like other products they have.</p>\n<p>But there's another question: Do I Trust the CoreAI Organization with my code? Public repositories yes. There's no difference to me if they scrape the code directly or from my own git server, but private repos? I admit, I don't really trust them not using private code for AI training.</p>\n<p>Another reason for me to Self Host is cost and speed. While GitHub is very generous on public and even private repositories, there are limits. Till now, I've never reached them, mainly because I have a very limited number of private repos, but I also do not wanna test these limits. Also, GitHub runners sometimes take ages to build my stuff, where local builds take a third of the time…</p>\n<p>Whatever your reasons may be, a self-hosted Git instance can make sense, although if all your work is public, you probably don't need one.</p>\n<h2 id=\"which-software\">Which Software?</h2>\n<p>Now we come to the interesting part. Which software should we choose?</p>\n<p>The two main contestants I had were <a href=\"https://about.gitlab.com/\">GitLab</a> and <a href=\"https://forgejo.org/\">Forgejo</a>. I know GitLab from school, but never really liked its UI, and it's quite resource heavy as well. According to the <a href=\"https://docs.gitlab.com/install/requirements/#memory\">official GitLab docs</a>, 8 GB Memory is the least recommended amount for a full installation. There is a way to host a <a href=\"https://docs.gitlab.com/omnibus/settings/memory_constrained_envs/\">memory constrained version of GitLab</a>. But this requires some further configuration, which I'm frankly too lazy to do, since I don't really need the additional features GitLab provides. My Forgejo instance on the other hand currently uses 127 MB and another 42 MB for its Postgres database, after running for 7 days. I have not found minimal requirements for Forgejo (or <a href=\"https://about.gitea.com/\">Gitea</a>, which Forgejo is based on), but the community has already used it on a Raspberry Pi 3, so they can't be that high ^^'</p>\n<p>I think you can already guess which one I chose: Forgejo. It uses significantly less memory, and Forgejo belonging to a Non Profit organization is just another plus for me.</p>\n<h2 id=\"how-to-install-it\">How to install it?</h2>\n<p>The installation is quite easy. We only need one Database and Forgejo itself. We're not installing a runner in this post.</p>\n<p>Forgejo supports SQLite, MySQL and PostgreSQL as database provider. Personally, I choose PostgreSQL.</p>\n<div class=\"markdown-code-block\"><button type=\"button\" class=\"markdown-code-copy\" aria-label=\"Copy code\">Copy</button><div class=\"markdown-code-inner\"><div class=\"markdown-code-gutter\" aria-hidden=\"true\" style=\"--markdown-code-gutter-ch:2ch\"><span class=\"markdown-code-ln\">1</span><span class=\"markdown-code-ln\">2</span><span class=\"markdown-code-ln\">3</span><span class=\"markdown-code-ln\">4</span><span class=\"markdown-code-ln\">5</span><span class=\"markdown-code-ln\">6</span><span class=\"markdown-code-ln\">7</span><span class=\"markdown-code-ln\">8</span><span class=\"markdown-code-ln\">9</span><span class=\"markdown-code-ln\">10</span><span class=\"markdown-code-ln\">11</span><span class=\"markdown-code-ln\">12</span><span class=\"markdown-code-ln\">13</span><span class=\"markdown-code-ln\">14</span><span class=\"markdown-code-ln\">15</span><span class=\"markdown-code-ln\">16</span><span class=\"markdown-code-ln\">17</span><span class=\"markdown-code-ln\">18</span><span class=\"markdown-code-ln\">19</span><span class=\"markdown-code-ln\">20</span><span class=\"markdown-code-ln\">21</span><span class=\"markdown-code-ln\">22</span><span class=\"markdown-code-ln\">23</span><span class=\"markdown-code-ln\">24</span><span class=\"markdown-code-ln\">25</span><span class=\"markdown-code-ln\">26</span><span class=\"markdown-code-ln\">27</span><span class=\"markdown-code-ln\">28</span><span class=\"markdown-code-ln\">29</span><span class=\"markdown-code-ln\">30</span></div><div class=\"markdown-code-scroll\"><pre class=\"hljs\"><code class=\"hljs language-yaml\"><span class=\"hljs-attr\">services:</span>\n  <span class=\"hljs-attr\">server:</span>\n    <span class=\"hljs-attr\">image:</span> <span class=\"hljs-string\">codeberg.org/forgejo/forgejo:12</span>\n    <span class=\"hljs-attr\">restart:</span> <span class=\"hljs-string\">always</span>\n    <span class=\"hljs-attr\">container_name:</span> <span class=\"hljs-string\">forgejo</span>\n    <span class=\"hljs-attr\">environment:</span>\n      <span class=\"hljs-bullet\">-</span> <span class=\"hljs-string\">FORGEJO__database__DB_TYPE=postgres</span>\n      <span class=\"hljs-bullet\">-</span> <span class=\"hljs-string\">FORGEJO__database__HOST=db:5432</span>\n      <span class=\"hljs-bullet\">-</span> <span class=\"hljs-string\">FORGEJO__database__NAME=forgejo</span>\n      <span class=\"hljs-bullet\">-</span> <span class=\"hljs-string\">FORGEJO__database__USER=forgejo</span> <span class=\"hljs-comment\"># Change Me !!!</span>\n      <span class=\"hljs-bullet\">-</span> <span class=\"hljs-string\">FORGEJO__database__PASSWD=forgejo</span> <span class=\"hljs-comment\"># Change Me !!!</span>\n    <span class=\"hljs-attr\">volumes:</span>\n      <span class=\"hljs-bullet\">-</span> <span class=\"hljs-string\">./data/forgejo:/data</span>\n      <span class=\"hljs-bullet\">-</span> <span class=\"hljs-string\">/etc/timezone:/etc/timezone:ro</span>\n      <span class=\"hljs-bullet\">-</span> <span class=\"hljs-string\">/etc/localtime:/etc/localtime:ro</span>\n    <span class=\"hljs-attr\">ports:</span>\n      <span class=\"hljs-bullet\">-</span> <span class=\"hljs-string\">&quot;3000:3000&quot;</span> <span class=\"hljs-comment\"># http port</span>\n      <span class=\"hljs-bullet\">-</span> <span class=\"hljs-string\">&quot;222:22&quot;</span> <span class=\"hljs-comment\"># Used for SSH, can be disabled</span>\n    <span class=\"hljs-attr\">depends_on:</span>\n      <span class=\"hljs-bullet\">-</span> <span class=\"hljs-string\">db</span>\n\n  <span class=\"hljs-attr\">db:</span>\n    <span class=\"hljs-attr\">image:</span> <span class=\"hljs-string\">postgres:17</span>\n    <span class=\"hljs-attr\">restart:</span> <span class=\"hljs-string\">always</span>\n    <span class=\"hljs-attr\">environment:</span>\n      <span class=\"hljs-bullet\">-</span> <span class=\"hljs-string\">POSTGRES_USER=forgejo</span> <span class=\"hljs-comment\"># Change Me !!!</span>\n      <span class=\"hljs-bullet\">-</span> <span class=\"hljs-string\">POSTGRES_PASSWORD=forgejo</span> <span class=\"hljs-comment\"># Change Me !!!</span>\n      <span class=\"hljs-bullet\">-</span> <span class=\"hljs-string\">POSTGRES_DB=forgejo</span>\n    <span class=\"hljs-attr\">volumes:</span>\n      <span class=\"hljs-bullet\">-</span> <span class=\"hljs-string\">./data/postgres:/var/lib/postgresql/data</span></code></pre></div></div></div>\n<blockquote>\n<p><strong>Don't forget to change the default database credentials!</strong></p>\n</blockquote>\n<p>After starting the compose, you can navigate to your server on port 3000 where you go through an initial Setup.</p>\n<h2 id=\"configuration\">Configuration</h2>\n<p>Unfortunately, only very limited configuration can be done through the UI. Most of it is done in the configuration file. So let's open up our data folder and navigate to the config.</p>\n<p>The config is located at <code>data/forgejo/gitea/conf/app.ini</code> — you can use this command to open it in your terminal: <code>nano data/forgejo/gitea/conf/app.ini</code></p>\n<p>I will list some of the most important options here, but Forgejo already has a very detailed docs page which explains all the options in great detail. I'd highly suggest you going through the options provided there.</p>\n<p><a href=\"https://forgejo.org/docs/latest/admin/config-cheat-sheet/\">Configuration Cheat Sheet | Forgejo</a></p>\n<h3 id=\"config-overview\">Config overview</h3>\n<p>If you open up your config, it'll probably look something like this</p>\n<p><img src=\"/content/blog/self-hosted-git-control-what-happens-to-your-code/config-overview.webp\" alt=\"Example Forgejo app.ini overview\"></p>\n<p>The config is divided into different sections like server, database, indexer, sessions, picture or something else. These sections are very important. If you place an option inside the wrong section, it will not be applied to your instance.</p>\n<p>With that in mind, let's go on to the most important settings, at least for me ^^</p>\n<h3 id=\"maybe-important-options\">(maybe) Important options</h3>\n<p><strong>Default root options.</strong> These are not located in a section and should be at the top of your file.</p>\n<ul>\n<li><strong>APP_NAME:</strong> This is the Name of your instance. For example: My super cool Forgejo Instance</li>\n<li><strong>APP_SLOGAN:</strong> This is the big title you see on the start page if you're not logged in.</li>\n</ul>\n<p><strong>Service section:</strong></p>\n<ul>\n<li><strong>DISABLE_REGISTRATION:</strong> If you want your instance for yourself and don't want others to be able to register an account, you can set this option to <code>true</code> to disable the registration of new accounts.</li>\n<li><strong>REQUIRE_SIGNIN_VIEW:</strong> If you want to enforce a Login, you can activate this option. If true, you need to have a Login to see anything. No login, no access.</li>\n<li><strong>ALLOW_ONLY_EXTERNAL_REGISTRATION:</strong> If you use an IDP (Identity Provider) like <a href=\"https://goauthentik.io/\">Authentik</a>, <a href=\"https://tinyauth.app/\">Tinyauth</a> or <a href=\"https://pocket-id.org/\">Pocket ID</a>, you can enable this to only allow registration from your configured providers.</li>\n<li><strong>DEFAULT_KEEP_EMAIL_PRIVATE:</strong> This option sets the default visibility for email addresses on your accounts. If true, the Email is hidden by default.</li>\n<li><strong>DEFAULT_USER_VISIBILITY:</strong> Can be public, limited or private. Public means anyone, even if not logged in, can see a user. Limited requires a Login, and Private means nobody (except admins) can see an account.</li>\n<li><strong>DEFAULT_ORG_VISIBILITY:</strong> Same options and behavior as DEFAULT_USER_VISIBILITY.</li>\n</ul>\n<p><strong>Mail settings</strong></p>\n<div class=\"markdown-code-block\"><button type=\"button\" class=\"markdown-code-copy\" aria-label=\"Copy code\">Copy</button><div class=\"markdown-code-inner\"><div class=\"markdown-code-gutter\" aria-hidden=\"true\" style=\"--markdown-code-gutter-ch:1ch\"><span class=\"markdown-code-ln\">1</span><span class=\"markdown-code-ln\">2</span><span class=\"markdown-code-ln\">3</span><span class=\"markdown-code-ln\">4</span><span class=\"markdown-code-ln\">5</span><span class=\"markdown-code-ln\">6</span><span class=\"markdown-code-ln\">7</span></div><div class=\"markdown-code-scroll\"><pre class=\"hljs\"><code class=\"hljs language-ini\"><span class=\"hljs-section\">[mailer]</span>\n<span class=\"hljs-attr\">ENABLED</span> = <span class=\"hljs-literal\">true</span>\n<span class=\"hljs-attr\">SMTP_ADDR</span> = smtp.example.ch\n<span class=\"hljs-attr\">SMTP_PORT</span> = <span class=\"hljs-number\">465</span>\n<span class=\"hljs-attr\">FROM</span> = forgejo@example.ch\n<span class=\"hljs-attr\">USER</span> = SMTP-USER\n<span class=\"hljs-attr\">PASSWD</span> = SMTP-PASSWORD</code></pre></div></div></div>\n<h2 id=\"well-thats-it\">Well, that's it...</h2>\n<p>… you've now hopefully got a configured instance of Forgejo which you can use as an alternative to GitHub/Lab, where you are in charge of cost, performance, and most crucially, what happens to your code.</p>","href":"/blog/self-hosted-git-control-what-happens-to-your-code","searchText":"Ever since August 11, when Thomas Dohmke (former CEO of GitHub) announced his departure and GitHub became part of Microsoft's CoreAI organization , I've had a bad taste in my mouth. Will GitHub still be GitHub if they are fully absorbed into Microsoft? Well, now is not the time to discuss that. We'll find out in the future, and I hope Microsoft does not enshitificate GitHub like other products they have. But there's another question: Do I Trust the CoreAI Organization with my code? Public repositories yes. There's no difference to me if they scrape the code directly or from my own git server, but private repos? I admit, I don't really trust them not using private code for AI training. Another reason for me to Self Host is cost and speed. While GitHub is very generous on public and even private repositories, there are limits. Till now, I've never reached them, mainly because I have a very limited number of private repos, but I also do not wanna test these limits. Also, GitHub runners sometimes take ages to build my stuff, where local builds take a third of the time… Whatever your reasons may be, a self-hosted Git instance can make sense, although if all your work is public, you probably don't need one. Which Software? Now we come to the interesting part. Which software should we choose? The two main contestants I had were GitLab and Forgejo . I know GitLab from school, but never really liked its UI, and it's quite resource heavy as well. According to the official GitLab docs , 8 GB Memory is the least recommended amount for a full installation. There is a way to host a memory constrained version of GitLab . But this requires some further configuration, which I'm frankly too lazy to do, since I don't really need the additional features GitLab provides. My Forgejo instance on the other hand currently uses 127 MB and another 42 MB for its Postgres database, after running for 7 days. I have not found minimal requirements for Forgejo (or Gitea , which Forgejo is based on), but the community has already used it on a Raspberry Pi 3, so they can't be that high ^^' I think you can already guess which one I chose: Forgejo. It uses significantly less memory, and Forgejo belonging to a Non Profit organization is just another plus for me. How to install it? The installation is quite easy. We only need one Database and Forgejo itself. We're not installing a runner in this post. Forgejo supports SQLite, MySQL and PostgreSQL as database provider. Personally, I choose PostgreSQL. Copy 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 services: server: image: codeberg.org/forgejo/forgejo:12 restart: always container_name: forgejo environment: - FORGEJO__database__DB_TYPE=postgres - FORGEJO__database__HOST=db:5432 - FORGEJO__database__NAME=forgejo - FORGEJO__database__USER=forgejo # Change Me !!! - FORGEJO__database__PASSWD=forgejo # Change Me !!! volumes: - ./data/forgejo:/data - /etc/timezone:/etc/timezone:ro - /etc/localtime:/etc/localtime:ro ports: - 3000:3000 # http port - 222:22 # Used for SSH, can be disabled depends_on: - db db: image: postgres:17 restart: always environment: - POSTGRES_USER=forgejo # Change Me !!! - POSTGRES_PASSWORD=forgejo # Change Me !!! - POSTGRES_DB=forgejo volumes: - ./data/postgres:/var/lib/postgresql/data Don't forget to change the default database credentials! After starting the compose, you can navigate to your server on port 3000 where you go through an initial Setup. Configuration Unfortunately, only very limited configuration can be done through the UI. Most of it is done in the configuration file. So let's open up our data folder and navigate to the config. The config is located at data/forgejo/gitea/conf/app.ini — you can use this command to open it in your terminal: nano data/forgejo/gitea/conf/app.ini I will list some of the most important options here, but Forgejo already has a very detailed docs page which explains all the options in great detail. I'd highly suggest you going through the options provided there. Configuration Cheat Sheet | Forgejo Config overview If you open up your config, it'll probably look something like this The config is divided into different sections like server, database, indexer, sessions, picture or something else. These sections are very important. If you place an option inside the wrong section, it will not be applied to your instance. With that in mind, let's go on to the most important settings, at least for me ^^ (maybe) Important options Default root options. These are not located in a section and should be at the top of your file. APP_NAME: This is the Name of your instance. For example: My super cool Forgejo Instance APP_SLOGAN: This is the big title you see on the start page if you're not logged in. Service section: DISABLE_REGISTRATION: If you want your instance for yourself and don't want others to be able to register an account, you can set this option to true to disable the registration of new accounts. REQUIRE_SIGNIN_VIEW: If you want to enforce a Login, you can activate this option. If true, you need to have a Login to see anything. No login, no access. ALLOW_ONLY_EXTERNAL_REGISTRATION: If you use an IDP (Identity Provider) like Authentik , Tinyauth or Pocket ID , you can enable this to only allow registration from your configured providers. DEFAULT_KEEP_EMAIL_PRIVATE: This option sets the default visibility for email addresses on your accounts. If true, the Email is hidden by default. DEFAULT_USER_VISIBILITY: Can be public, limited or private. Public means anyone, even if not logged in, can see a user. Limited requires a Login, and Private means nobody (except admins) can see an account. DEFAULT_ORG_VISIBILITY: Same options and behavior as DEFAULT_USER_VISIBILITY. Mail settings Copy 1 2 3 4 5 6 7 [mailer] ENABLED = true SMTP_ADDR = smtp.example.ch SMTP_PORT = 465 FROM = forgejo@example.ch USER = SMTP-USER PASSWD = SMTP-PASSWORD Well, that's it... … you've now hopefully got a configured instance of Forgejo which you can use as an alternative to GitHub/Lab, where you are in charge of cost, performance, and most crucially, what happens to your code.","seo":{"description":"Hosted Git options like GitHub or GitLab are great, but what if you don't trust them, or don't want to pay them for your usage of action minutes? Maybe a self-hosted Git instance is right for you?","ogTitle":"Self Hosted Git - Control what happens to your code · Hutch's rambling corner"},"published":"2025-10-11T00:00:00.000Z","updated":"2026-03-31T00:00:00.000Z"},{"kind":"projects","slug":"dns-blm","title":"DNS-BLM","description":"DNS-BLM is a tool that monitors block lists (currently utilizing VirusTotal) to check if your domains are flagged as malicious.","tags":["dns","security","dotnet","tooling"],"draft":false,"html":"<p>Maybe you know the trouble of Block lists. You just want to quickly go to one of your services at school or at work, and it does not load. Maybe you try it with your mobile and then notice your domain is blocked. After digging around a bit, you may figure out it's listed on a Block list. It happened to me twice now, and I hate it. Especially since I noticed it after it's already too late.</p>\n<p>That's why I created DNS-BLM (DNS Block List Monitor). It uses VirusTotal to scan your domains against ~95 Block lists and notify you by mail if they're listed as suspicious or malicious.</p>\n<p>The Tech Stack I used is ASP.NET Core 9, currently with no database or frontend. Everything is configured with environment variables. In the future, I may add an Angular frontend as well as a PostgreSQL database, to configure everything in a Web UI and see a history of all scans. Also, a per domain report receiver would be an option. What's also on my list, are more block list providers. VirusTotal is a great aggregate, but they don't have everything.</p>\n<hr>\n<p>If you're curious and want to try it, you'll find the setup instructions on GitHub.</p>\n<p><a href=\"https://github.com/hutch79/dns-blm\">GitHub — Hutch79/DNS-BLM</a></p>","href":"/projects/dns-blm","searchText":"Maybe you know the trouble of Block lists. You just want to quickly go to one of your services at school or at work, and it does not load. Maybe you try it with your mobile and then notice your domain is blocked. After digging around a bit, you may figure out it's listed on a Block list. It happened to me twice now, and I hate it. Especially since I noticed it after it's already too late. That's why I created DNS-BLM (DNS Block List Monitor). It uses VirusTotal to scan your domains against ~95 Block lists and notify you by mail if they're listed as suspicious or malicious. The Tech Stack I used is ASP.NET Core 9, currently with no database or frontend. Everything is configured with environment variables. In the future, I may add an Angular frontend as well as a PostgreSQL database, to configure everything in a Web UI and see a history of all scans. Also, a per domain report receiver would be an option. What's also on my list, are more block list providers. VirusTotal is a great aggregate, but they don't have everything. If you're curious and want to try it, you'll find the setup instructions on GitHub. GitHub — Hutch79/DNS-BLM","seo":{"description":"DNS-BLM is a tool that monitors block lists (currently utilizing VirusTotal) to check if your domains are flagged as malicious.","ogTitle":"DNS-BLM · Hutch's rambling corner"},"order":5,"published":"2025-06-08T00:00:00.000Z","updated":"2026-03-31T00:00:00.000Z"},{"kind":"projects","slug":"home-lab","title":"Home Lab","description":"My Home Lab, this ever evolving accumulation of Servers and Software. Lets dive into the how and why.","tags":["Home Lab","Proxmox","Docker","Self Hosting"],"draft":true,"html":"<p>This post is not meant to dive into the details of my lab, it should provide an overview of the hardware I'm using and what software i use to run it. So no details regarding specific services I run, this is a topic for a blog post ^^'\nWith that out of the way, let’s start this ^^</p>\n<p>I currently (as of May 2026) own four Servers and have three rental VPS/Dedicated servers. Ok, when writing that last sentence, this starts to seam a bit excessive... Have I mentioned that I plan to expand this?</p>\n<h2 id=\"lets-talk-specs\">Lets talk Specs</h2>\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<table><thead><tr><th>Server</th><th>OS</th><th>CPU</th><th>Memory</th><th>Drives</th><th>Description</th></tr></thead><tbody><tr><td>Synology DS220+<hr>2 Bay storage server</td><td>Synology DSM 7</td><td>Intel Celeron J4025</td><td>6 GB DDR4</td><td>2 x 4 TB Seagate IronWolf</td><td>Used for all Family Data with external Backups to the DS1522+</td></tr><tr><td>Synology DS1522+<hr>5 Bay storage server</td><td>Synology DSM 7</td><td>AMD Ryzen Embedded R1600</td><td>8 GB DDR4</td><td>5 x 4 TB Seagate IronWolf</td><td>Used for External backups (located outside my Home).</td></tr><tr><td>Supermicro SuperStorage 5048R-E1CR36L<hr>36 Bay storage server</td><td>Unraid</td><td>Intel Xeon E5-2630 v4 @ 2.20GHz</td><td>128 GB DDR4 ECC</td><td>4 x 18 TB Seagate Exos x18 (Unraid Array)<hr>4 x 20 TB Seagate Exos x20 (Unraid Array)<hr>1 x 4 TB Seagate IronWolf (Single drive ZFS Pool)<hr>2 x 1 TB WD Red SA500 (Cache Pool)</td><td>Main storage server for everything non critical</td></tr><tr><td>Dell Vostro 3020 SFF</td><td>Proxmox</td><td>Intel i5-13400</td><td>64 GB DDR4</td><td>1 x 1 TB WD Red SN700</td><td>Main server where all localy hosted applications run on</td></tr><tr><td>Hetzner Dedicated Server</td><td>Debian</td><td>AMD Ryzen 9 3900</td><td>128 GB DDR4 ECC</td><td>2 x 2 TB NVMe SSD (Raid 1)</td><td>Gameserver host and in the future potentially also GitLab runners</td></tr><tr><td>VPS 1</td><td>Debian</td><td>6 vCores</td><td>8 GB</td><td>240 GB NVMe</td><td>Main Ingres into my lab running Pangolin</td></tr><tr><td>VPS 2</td><td>Debian</td><td>12 vCores</td><td>24 GB</td><td>720 GB NVMe</td><td>Currently empty, but planed to host public services like this website</td></tr></tbody></table>\n<p>Well, here you have it... The raw specs and the overkill I somehow accumulated over roughly 6 Years.<br>\nThe current state is kinda stable. I plan to expand on the proxmox front and have my eyes out on three Minisfoum MS-A2's but with the current prices? Hell nah! Aspecially when factoring in the 64 or 96 GB Memory and two 1 or 2 TB NVMe SSD's...\nThe reason behind those (rather expensive) plans is the overkill in VM's I run on Proxmox. Some months ago I tought that it would be a smart idea to split up my 3 LXC's into 12 VM's... I definitely underestimated the overhead of running NixOS 12 times ^^'</p>\n<h2 id=\"how-im-splitting-it\">How I'm splitting it</h2>\n<p>Well, those 12 VMs... I split my Lab into different concerns.</p>\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<table><thead><tr><th align=\"center\">No.</th><th align=\"left\">Concern</th><th>Description</th></tr></thead><tbody><tr><td align=\"center\">1</td><td align=\"left\">Management</td><td>Running Komodo, my Docker management tool of choise</td></tr><tr><td align=\"center\">2</td><td align=\"left\">Internal Proxy</td><td>Planed to run an internal reverse proxy, so when my VPS is down Im not completally fucked</td></tr><tr><td align=\"center\">3</td><td align=\"left\">Authentik</td><td>Authentication stuff. Needs access to the Docker socket so it gets its own VM</td></tr><tr><td align=\"center\">4</td><td align=\"left\">Monitoring</td><td>One thing I could probably combine with the next VM</td></tr><tr><td align=\"center\">5</td><td align=\"left\">Critical</td><td>Runs stuff which is either very important for the lab (Secrets Manager) or for me (personal Notes)</td></tr><tr><td align=\"center\">6</td><td align=\"left\">Forgejo</td><td>Since I do GitOps, Forgejo is extremaly important. It is the home to all my Composes and Configs</td></tr><tr><td align=\"center\">7</td><td align=\"left\">Forgejo-Runner</td><td>Runners use a lot of Memory and CPU (especialy if you're building NixOS .-. ). I currently run them on my Unraid server so this VM is stopped and due for deletion</td></tr><tr><td align=\"center\">8</td><td align=\"left\">Jellyfin</td><td>Resource heavy and has a GPU (Intel Arc A310) passed trough to the VM</td></tr><tr><td align=\"center\">9</td><td align=\"left\">Media</td><td>Runns everything non Jellyfin like AudioBookShelf</td></tr><tr><td align=\"center\">10</td><td align=\"left\">Torrenting</td><td>The high seas are calling right? Arr* (Only Linus ISO's of course!)</td></tr><tr><td align=\"center\">11</td><td align=\"left\">NFS-Syno</td><td>Has NFS Access to my DS220+</td></tr><tr><td align=\"center\">12</td><td align=\"left\">Docker General</td><td>Everything which does not fit into one of the others, and does not need docker socker access</td></tr></tbody></table>\n<p>Whilst writing this down I'm starting to notice the overkill...<br>\nI could easaly combine the following VM's:</p>\n<ul>\n<li>Management, Monitoring, Critical, Forgejo, Internal Proxy</li>\n<li>Jellyfin, Media</li>\n</ul>\n<p>7 VM's combined into two. The Memory savings would probably be arroung 5 to 8 GB, which is a lot when you have 64 GB total and are at 80+% usage ^^'<br>\nI promise you, it made sense then I wrote the concept, but in heinsight and due to memory shortages I may need to rethink some decisions. It's an ever evolving project, and this write up started some processes of reflection and rethinking ^^'</p>\n<h2 id=\"how-im-running-it\">How I'm running it</h2>\n<p>A more details version of this will be a separate blog post.</p>\n<p>You probably noticed the mention of Komodo above. To be blunt, its one of the gratest Docker management tools I had the joy to discover!<br>\nDon't be fooled by the very bare bones readme. It took me 3 months to get the motivation to look into Komodo because i just did not get what it actually was and did. But after giving it a shot, I immediately fell in love with it.<br>\nI would describe it as a advanced and more user friendly version of Portainer. It has a lot of features which Portainer either misses, or puts behind the EE version.</p>\n<p>Btw. have I told you about the GitOps features Komodo provides? It integrates very well into any git provider and lets you sync either the complete Komodo config, or a repo containing compose files to run.<br>\nPersonally I created a repo containing all compose stacks in subfolders. When i update one of them, my Forgejo instance sends a webhook to Komodo which then redeploys the changed stack.<br>\nAnd when we then add Renovate to update all stacks and keep them up to date, we have a very nice way to manage all stacks from one central git repo.</p>","href":"/projects/home-lab","searchText":"This post is not meant to dive into the details of my lab, it should provide an overview of the hardware I'm using and what software i use to run it. So no details regarding specific services I run, this is a topic for a blog post ^^' With that out of the way, let’s start this ^^ I currently (as of May 2026) own four Servers and have three rental VPS/Dedicated servers. Ok, when writing that last sentence, this starts to seam a bit excessive... Have I mentioned that I plan to expand this? Lets talk Specs Server OS CPU Memory Drives Description Synology DS220+ 2 Bay storage server Synology DSM 7 Intel Celeron J4025 6 GB DDR4 2 x 4 TB Seagate IronWolf Used for all Family Data with external Backups to the DS1522+ Synology DS1522+ 5 Bay storage server Synology DSM 7 AMD Ryzen Embedded R1600 8 GB DDR4 5 x 4 TB Seagate IronWolf Used for External backups (located outside my Home). Supermicro SuperStorage 5048R-E1CR36L 36 Bay storage server Unraid Intel Xeon E5-2630 v4 @ 2.20GHz 128 GB DDR4 ECC 4 x 18 TB Seagate Exos x18 (Unraid Array) 4 x 20 TB Seagate Exos x20 (Unraid Array) 1 x 4 TB Seagate IronWolf (Single drive ZFS Pool) 2 x 1 TB WD Red SA500 (Cache Pool) Main storage server for everything non critical Dell Vostro 3020 SFF Proxmox Intel i5-13400 64 GB DDR4 1 x 1 TB WD Red SN700 Main server where all localy hosted applications run on Hetzner Dedicated Server Debian AMD Ryzen 9 3900 128 GB DDR4 ECC 2 x 2 TB NVMe SSD (Raid 1) Gameserver host and in the future potentially also GitLab runners VPS 1 Debian 6 vCores 8 GB 240 GB NVMe Main Ingres into my lab running Pangolin VPS 2 Debian 12 vCores 24 GB 720 GB NVMe Currently empty, but planed to host public services like this website Well, here you have it... The raw specs and the overkill I somehow accumulated over roughly 6 Years. The current state is kinda stable. I plan to expand on the proxmox front and have my eyes out on three Minisfoum MS-A2's but with the current prices? Hell nah! Aspecially when factoring in the 64 or 96 GB Memory and two 1 or 2 TB NVMe SSD's... The reason behind those (rather expensive) plans is the overkill in VM's I run on Proxmox. Some months ago I tought that it would be a smart idea to split up my 3 LXC's into 12 VM's... I definitely underestimated the overhead of running NixOS 12 times ^^' How I'm splitting it Well, those 12 VMs... I split my Lab into different concerns. No. Concern Description 1 Management Running Komodo, my Docker management tool of choise 2 Internal Proxy Planed to run an internal reverse proxy, so when my VPS is down Im not completally fucked 3 Authentik Authentication stuff. Needs access to the Docker socket so it gets its own VM 4 Monitoring One thing I could probably combine with the next VM 5 Critical Runs stuff which is either very important for the lab (Secrets Manager) or for me (personal Notes) 6 Forgejo Since I do GitOps, Forgejo is extremaly important. It is the home to all my Composes and Configs 7 Forgejo-Runner Runners use a lot of Memory and CPU (especialy if you're building NixOS .-. ). I currently run them on my Unraid server so this VM is stopped and due for deletion 8 Jellyfin Resource heavy and has a GPU (Intel Arc A310) passed trough to the VM 9 Media Runns everything non Jellyfin like AudioBookShelf 10 Torrenting The high seas are calling right? Arr* (Only Linus ISO's of course!) 11 NFS-Syno Has NFS Access to my DS220+ 12 Docker General Everything which does not fit into one of the others, and does not need docker socker access Whilst writing this down I'm starting to notice the overkill... I could easaly combine the following VM's: Management, Monitoring, Critical, Forgejo, Internal Proxy Jellyfin, Media 7 VM's combined into two. The Memory savings would probably be arroung 5 to 8 GB, which is a lot when you have 64 GB total and are at 80+% usage ^^' I promise you, it made sense then I wrote the concept, but in heinsight and due to memory shortages I may need to rethink some decisions. It's an ever evolving project, and this write up started some processes of reflection and rethinking ^^' How I'm running it A more details version of this will be a separate blog post. You probably noticed the mention of Komodo above. To be blunt, its one of the gratest Docker management tools I had the joy to discover! Don't be fooled by the very bare bones readme. It took me 3 months to get the motivation to look into Komodo because i just did not get what it actually was and did. But after giving it a shot, I immediately fell in love with it. I would describe it as a advanced and more user friendly version of Portainer. It has a lot of features which Portainer either misses, or puts behind the EE version. Btw. have I told you about the GitOps features Komodo provides? It integrates very well into any git provider and lets you sync either the complete Komodo config, or a repo containing compose files to run. Personally I created a repo containing all compose stacks in subfolders. When i update one of them, my Forgejo instance sends a webhook to Komodo which then redeploys the changed stack. And when we then add Renovate to update all stacks and keep them up to date, we have a very nice way to manage all stacks from one central git repo.","seo":{"description":"My Home Lab, this ever evolving accumulation of Servers and Software. Lets dive into the how and why.","ogTitle":"Home Lab · Hutch's rambling corner"},"order":1,"published":"2025-06-08T00:00:00.000Z","updated":"2026-03-31T00:00:00.000Z"}],"shoutouts":[{"name":"PianoNic","href":"https://pianonic.ch/","tagline":"Nic is a guy with 50+ projects, mostly unfinished, nearly all of them interesting","image":"/shoutouts/avatars/pianonic.webp","invertUntilHover":false},{"name":"Reazn","href":"https://ruu.by/","tagline":"God, I love those UI skills! But responsiveness? Let's not talk about it...","image":"/shoutouts/avatars/reazen.webp","invertUntilHover":true},{"name":"Bausteln","href":"https://bausteln.ch/","tagline":"To join them was one of my best decisions!","image":"/shoutouts/avatars/bausteln.svg","invertUntilHover":true},{"name":"Mike","href":"https://mikeditton.ch/","tagline":"Brutally honest and a great guy to talk to - Somehow cracked the code to infinite motivation","image":"/shoutouts/avatars/mike.webp"},{"name":"TestAccount666","href":"https://github.com/Test-Account666","tagline":"Partially responsible for me to have started coding and using NixOS - Sometimes forgets how words work and only uses Emojis","image":"/shoutouts/avatars/testaccount666.webp"}]}