<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>homelab - Hamradio.my</title>
	<atom:link href="https://hamradio.my/tag/homelab/feed/" rel="self" type="application/rss+xml" />
	<link></link>
	<description>Amateur Radio, Tech Insights and Product Reviews</description>
	<lastBuildDate>Sat, 12 Jul 2025 11:49:28 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.0</generator>

<image>
	<url>https://hamradio.my/wp-content/uploads/2026/02/cropped-cropped-image-removebg-preview-3-32x32.png</url>
	<title>homelab - Hamradio.my</title>
	<link></link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Dockge: A Sleek, Self-Hosted Docker Stack Manager for Compose Lovers</title>
		<link>https://hamradio.my/2025/08/dockge-a-sleek-self-hosted-docker-stack-manager-for-compose-lovers/</link>
					<comments>https://hamradio.my/2025/08/dockge-a-sleek-self-hosted-docker-stack-manager-for-compose-lovers/#respond</comments>
		
		<dc:creator><![CDATA[9M2PJU]]></dc:creator>
		<pubDate>Sat, 09 Aug 2025 14:51:28 +0000</pubDate>
				<category><![CDATA[container]]></category>
		<category><![CDATA[docker]]></category>
		<category><![CDATA[free open source software]]></category>
		<category><![CDATA[management]]></category>
		<category><![CDATA[composeyaml]]></category>
		<category><![CDATA[containerapps]]></category>
		<category><![CDATA[Containerization]]></category>
		<category><![CDATA[devops]]></category>
		<category><![CDATA[Docker]]></category>
		<category><![CDATA[dockerapps]]></category>
		<category><![CDATA[dockerautomation]]></category>
		<category><![CDATA[dockercompose]]></category>
		<category><![CDATA[dockercomposegui]]></category>
		<category><![CDATA[dockercomposemanager]]></category>
		<category><![CDATA[dockercontainers]]></category>
		<category><![CDATA[dockermanager]]></category>
		<category><![CDATA[dockerorchestration]]></category>
		<category><![CDATA[dockerstack]]></category>
		<category><![CDATA[dockertips]]></category>
		<category><![CDATA[dockerui]]></category>
		<category><![CDATA[dockge]]></category>
		<category><![CDATA[homelab]]></category>
		<category><![CDATA[homelabtools]]></category>
		<category><![CDATA[infrastructureascode]]></category>
		<category><![CDATA[lightweightdocker]]></category>
		<category><![CDATA[linuxserver]]></category>
		<category><![CDATA[opensource]]></category>
		<category><![CDATA[portaineralternative]]></category>
		<category><![CDATA[selfhosted]]></category>
		<category><![CDATA[selfhosting]]></category>
		<category><![CDATA[serverdashboard]]></category>
		<category><![CDATA[servermanagement]]></category>
		<category><![CDATA[SysAdmin]]></category>
		<category><![CDATA[TechBlog]]></category>
		<guid isPermaLink="false">https://hamradio.my/?p=7850</guid>

					<description><![CDATA[<p>If you’ve ever felt overwhelmed managing multiple Docker stacks or wanted a more intuitive interface than raw CLI commands—Dockge might be your new favorite tool. Dockge is a modern, elegant, and fully self-hosted manager built specifically for docker-compose users. It&#8217;s designed for those who want power and simplicity in a single place, without losing control [&#8230;]</p>
<p>The post <a href="https://hamradio.my/2025/08/dockge-a-sleek-self-hosted-docker-stack-manager-for-compose-lovers/">Dockge: A Sleek, Self-Hosted Docker Stack Manager for Compose Lovers</a> appeared on <a href="https://hamradio.my">Hamradio.my - Amateur Radio, Tech Insights and Product Reviews</a> by <a href="https://hamradio.my/author/9m2pju/">9M2PJU</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<h2 class="wp-block-heading"></h2>



<p class="wp-block-paragraph">If you’ve ever felt overwhelmed managing multiple Docker stacks or wanted a more intuitive interface than raw CLI commands—Dockge might be your new favorite tool.</p>



<p class="wp-block-paragraph"><strong>Dockge</strong> is a modern, elegant, and fully self-hosted manager built specifically for <code>docker-compose</code> users. It&#8217;s designed for those who want power and simplicity in a single place, without losing control over their YAML files or containers.</p>



<h3 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2728.png" alt="✨" class="wp-smiley" style="height: 1em; max-height: 1em;" /> What Makes Dockge Special?</h3>



<p class="wp-block-paragraph">Unlike some heavier solutions, Dockge sticks to doing one thing—and does it really well: managing your <code>compose.yaml</code> stacks. Whether you&#8217;re starting, stopping, editing, or updating services, Dockge keeps it real-time and responsive.</p>



<p class="wp-block-paragraph">Here’s what you get out of the box:</p>



<ul class="wp-block-list">
<li><strong>Create, edit, start, stop, and delete your Docker stacks</strong> from a single UI.</li>



<li><strong>Update Docker images</strong> with just a few clicks.</li>



<li><strong>Interactive YAML editor</strong> for hands-on control.</li>



<li><strong>Built-in Web Terminal</strong> for direct command-line access.</li>



<li><strong>Multiple Agent Support</strong> to manage stacks across different hosts (since v1.4.0).</li>



<li><strong>Convert <code>docker run</code> commands into Compose YAML</strong> in seconds.</li>



<li><strong>File-based management</strong> — Dockge never hijacks your files; they&#8217;re still on disk and usable via CLI.</li>
</ul>



<p class="wp-block-paragraph">It’s reactive, lightweight, and honestly—kind of fun to use. Think <em>Uptime Kuma</em>, but for Docker Compose.</p>



<h3 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f6e0.png" alt="🛠" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Easy Installation with Docker</h3>



<p class="wp-block-paragraph">Getting started with Dockge is straightforward:</p>



<pre class="wp-block-code"><code># Create folders for stacks and Dockge's own files
mkdir -p /opt/stacks /opt/dockge
cd /opt/dockge

# Download the default compose.yaml
curl https://raw.githubusercontent.com/louislam/dockge/master/compose.yaml --output compose.yaml

# Start it up
docker compose up -d
</code></pre>



<p class="wp-block-paragraph">Access it via your browser at <a href="http://localhost:5001/">http://localhost:5001</a>, and you’re good to go!</p>



<p class="wp-block-paragraph">You can also generate a custom <code>compose.yaml</code> file with your preferred port and stack directory via the interactive generator here: <a href="https://dockge.kuma.pet/">dockge.kuma.pet</a></p>



<h3 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f91d.png" alt="🤝" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Why Dockge Exists</h3>



<p class="wp-block-paragraph">The developer behind Dockge originally used Portainer but wanted something snappier and more focused on stacks. Dockge doesn’t try to replace Portainer entirely—it just makes managing Docker Compose setups smoother and less frustrating.</p>



<p class="wp-block-paragraph">If all your infrastructure is <code>compose.yaml</code>-driven, Dockge is likely the best fit. But if you need to juggle volumes, networks, or standalone containers, keeping Portainer around might still be helpful.</p>



<h3 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f9e9.png" alt="🧩" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Use Cases and Compatibility</h3>



<p class="wp-block-paragraph">Dockge is a great fit if:</p>



<ul class="wp-block-list">
<li>You&#8217;re self-hosting multiple services with Docker Compose.</li>



<li>You like visual feedback and responsive interfaces.</li>



<li>You want fine control without bloated features.</li>
</ul>



<p class="wp-block-paragraph">Supported OS and platforms include:</p>



<ul class="wp-block-list">
<li><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Ubuntu / Debian Bullseye+ / Raspbian Bullseye+</li>



<li><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> CentOS, Fedora, Arch</li>



<li><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/274c.png" alt="❌" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Not yet supported on Windows</li>



<li><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Architectures: <code>armv7</code>, <code>arm64</code>, <code>amd64</code></li>
</ul>



<h3 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f504.png" alt="🔄" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Updating Dockge</h3>



<p class="wp-block-paragraph">Updating is easy too:</p>



<pre class="wp-block-code"><code>cd /opt/dockge
docker compose pull &amp;&amp; docker compose up -d
</code></pre>



<p class="wp-block-paragraph">Just like that, you&#8217;re on the latest version.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p class="wp-block-paragraph">Whether you&#8217;re a seasoned homelabber or just getting started with Docker, <strong>Dockge brings clarity and simplicity to Compose stack management</strong>. The UI is gorgeous, performance is fast, and setup is a breeze. You’ll wonder why you didn’t use it sooner.</p>



<p class="wp-block-paragraph"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f449.png" alt="👉" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Explore the GitHub repo: <a href="https://github.com/louislam/dockge">github.com/louislam/dockge</a><br><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f3a5.png" alt="🎥" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Watch the overview video: <a href="https://youtu.be/AWAlOQeNpgU?t=48">Dockge Demo</a></p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4ac.png" alt="💬" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Bonus: Frequently Asked Questions</h2>



<ul class="wp-block-list">
<li><strong>Can I use Dockge with Portainer?</strong> Yes, they can run side-by-side.</li>



<li><strong>Can I manage existing stacks?</strong> Absolutely—just move your YAML files into <code>/opt/stacks/&lt;stack-name>/compose.yaml</code> and click <em>Scan Stacks Folder</em>.</li>



<li><strong>Does it support single container management?</strong> Not directly—Dockge is purpose-built for Compose.</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2b50.png" alt="⭐" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Final Thoughts</h2>



<p class="wp-block-paragraph">Dockge is a powerful tool that does one thing extremely well: give you full visual control of your Docker Compose stacks. It doesn’t try to be everything—and that’s what makes it great.</p>
<p>The post <a href="https://hamradio.my/2025/08/dockge-a-sleek-self-hosted-docker-stack-manager-for-compose-lovers/">Dockge: A Sleek, Self-Hosted Docker Stack Manager for Compose Lovers</a> appeared on <a href="https://hamradio.my">Hamradio.my - Amateur Radio, Tech Insights and Product Reviews</a> by <a href="https://hamradio.my/author/9m2pju/">9M2PJU</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://hamradio.my/2025/08/dockge-a-sleek-self-hosted-docker-stack-manager-for-compose-lovers/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>How I Installed Jellyfin on Debian Using Flatpak</title>
		<link>https://hamradio.my/2025/07/how-i-installed-jellyfin-on-debian-using-flatpak/</link>
					<comments>https://hamradio.my/2025/07/how-i-installed-jellyfin-on-debian-using-flatpak/#respond</comments>
		
		<dc:creator><![CDATA[9M2PJU]]></dc:creator>
		<pubDate>Sun, 27 Jul 2025 11:07:46 +0000</pubDate>
				<category><![CDATA[debian]]></category>
		<category><![CDATA[do it yourself]]></category>
		<category><![CDATA[flatpak]]></category>
		<category><![CDATA[free open source software]]></category>
		<category><![CDATA[how to]]></category>
		<category><![CDATA[media server]]></category>
		<category><![CDATA[tips and tricks]]></category>
		<category><![CDATA[debianlinux]]></category>
		<category><![CDATA[diyserver]]></category>
		<category><![CDATA[flathub]]></category>
		<category><![CDATA[homelab]]></category>
		<category><![CDATA[jellyfin]]></category>
		<category><![CDATA[jellyfinsetup]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[linuxserver]]></category>
		<category><![CDATA[mediaorganization]]></category>
		<category><![CDATA[mediaserver]]></category>
		<category><![CDATA[opensource]]></category>
		<category><![CDATA[selfhosted]]></category>
		<guid isPermaLink="false">https://hamradio.my/?p=7792</guid>

					<description><![CDATA[<p>I’ve been looking for a good self-hosted media server, and after trying out a few, I landed on Jellyfin. It’s free, open-source, and doesn&#8217;t nag you with subscriptions or locked features. Exactly what I needed. Instead of going the traditional apt install route, I decided to install Jellyfin using Flatpak — it keeps things clean [&#8230;]</p>
<p>The post <a href="https://hamradio.my/2025/07/how-i-installed-jellyfin-on-debian-using-flatpak/">How I Installed Jellyfin on Debian Using Flatpak</a> appeared on <a href="https://hamradio.my">Hamradio.my - Amateur Radio, Tech Insights and Product Reviews</a> by <a href="https://hamradio.my/author/9m2pju/">9M2PJU</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<h1 class="wp-block-heading"></h1>



<p class="wp-block-paragraph">I’ve been looking for a good self-hosted media server, and after trying out a few, I landed on <strong>Jellyfin</strong>. It’s free, open-source, and doesn&#8217;t nag you with subscriptions or locked features. Exactly what I needed.</p>



<p class="wp-block-paragraph">Instead of going the traditional <code>apt install</code> route, I decided to install Jellyfin using <strong>Flatpak</strong> — it keeps things clean and isolated, which I prefer on my Debian setup. Here’s how I got it up and running, including setting up access to my media folder.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Step 1: Installing Flatpak (if you don’t have it)</h2>



<p class="wp-block-paragraph">Flatpak wasn’t installed on my machine by default, so I ran:</p>



<pre class="wp-block-code"><code>sudo apt update
sudo apt install flatpak -y
</code></pre>



<p class="wp-block-paragraph">After that, I added the Flathub repo:</p>



<pre class="wp-block-code"><code>flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo
</code></pre>



<p class="wp-block-paragraph">Quick tip: After setting up Flatpak, it’s best to log out and log back in — or just reboot — to make sure everything works smoothly.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Step 2: Installing Jellyfin Server via Flatpak</h2>



<p class="wp-block-paragraph">The Flatpak version of Jellyfin is available on Flathub, and installing it was simple:</p>



<pre class="wp-block-code"><code>flatpak install flathub org.jellyfin.JellyfinServer -y
</code></pre>



<p class="wp-block-paragraph">To start the server, I ran:</p>



<pre class="wp-block-code"><code>flatpak run org.jellyfin.JellyfinServer
</code></pre>



<p class="wp-block-paragraph">You’ll see some logs in the terminal, which means Jellyfin is doing its thing. Keep this terminal open for now — or later you can make it run in the background.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Step 3: Open It in Your Browser</h2>



<p class="wp-block-paragraph">Once it’s running, just go to:</p>



<pre class="wp-block-code"><code>http:&#47;&#47;localhost:8096
</code></pre>



<p class="wp-block-paragraph">That’ll open the setup wizard where you pick a language, create your user, and set up your libraries.</p>



<p class="wp-block-paragraph">If you&#8217;re running this on a different machine, just replace <code>localhost</code> with that machine’s IP.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Step 4: Giving Jellyfin Access to Your Media</h2>



<p class="wp-block-paragraph">Here’s where I got stuck for a minute: Jellyfin (via Flatpak) can’t see my media folders by default because of Flatpak’s sandboxing. Took me a second to figure this out.</p>



<p class="wp-block-paragraph">Let’s say your movies are in <code>/mnt/media/movies</code>. You’ll need to give Jellyfin permission to see that folder:</p>



<pre class="wp-block-code"><code>flatpak override org.jellyfin.JellyfinServer --filesystem=/mnt/media:ro
</code></pre>



<p class="wp-block-paragraph">The <code>:ro</code> part means read-only — safe if you don’t want Jellyfin messing with your files.</p>



<p class="wp-block-paragraph">If you want it to write metadata, subtitles, etc., drop the <code>:ro</code>:</p>



<pre class="wp-block-code"><code>flatpak override org.jellyfin.JellyfinServer --filesystem=/mnt/media
</code></pre>



<p class="wp-block-paragraph">Then just restart Jellyfin:</p>



<pre class="wp-block-code"><code>flatpak run org.jellyfin.JellyfinServer
</code></pre>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Step 5: Add Media Libraries</h2>



<p class="wp-block-paragraph">Back in the web interface:</p>



<ul class="wp-block-list">
<li>Go to <strong>Dashboard > Libraries</strong></li>



<li>Click <strong>Add Media Library</strong></li>



<li>Pick what kind of content it is (Movies, TV, Music…)</li>



<li>Point it to your folder, e.g., <code>/mnt/media/movies</code></li>



<li>Save and let Jellyfin do its magic</li>
</ul>



<p class="wp-block-paragraph">It’ll start scanning and building up your media library.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">That’s It!</h2>



<p class="wp-block-paragraph">Jellyfin’s now up and running on my Debian system via Flatpak, and it&#8217;s happily indexing my media. The Flatpak approach keeps everything tidy, and it works great so far.</p>



<p class="wp-block-paragraph">If you&#8217;re like me and prefer simple, no-nonsense tools that respect your setup, Jellyfin’s worth a try. And Flatpak makes it dead simple to install without touching your system packages.</p>
<p>The post <a href="https://hamradio.my/2025/07/how-i-installed-jellyfin-on-debian-using-flatpak/">How I Installed Jellyfin on Debian Using Flatpak</a> appeared on <a href="https://hamradio.my">Hamradio.my - Amateur Radio, Tech Insights and Product Reviews</a> by <a href="https://hamradio.my/author/9m2pju/">9M2PJU</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://hamradio.my/2025/07/how-i-installed-jellyfin-on-debian-using-flatpak/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>What Is Proxmox?</title>
		<link>https://hamradio.my/2025/07/what-is-proxmox/</link>
					<comments>https://hamradio.my/2025/07/what-is-proxmox/#respond</comments>
		
		<dc:creator><![CDATA[9M2PJU]]></dc:creator>
		<pubDate>Sat, 12 Jul 2025 11:49:24 +0000</pubDate>
				<category><![CDATA[free open source software]]></category>
		<category><![CDATA[home lab]]></category>
		<category><![CDATA[home networking]]></category>
		<category><![CDATA[self hosted]]></category>
		<category><![CDATA[virtual machine]]></category>
		<category><![CDATA[virtualization]]></category>
		<category><![CDATA[clustering]]></category>
		<category><![CDATA[datacenter]]></category>
		<category><![CDATA[devops]]></category>
		<category><![CDATA[highavailability]]></category>
		<category><![CDATA[homelab]]></category>
		<category><![CDATA[homelablife]]></category>
		<category><![CDATA[homelabsetup]]></category>
		<category><![CDATA[hypervisor]]></category>
		<category><![CDATA[infosec]]></category>
		<category><![CDATA[itlabs]]></category>
		<category><![CDATA[itprojects]]></category>
		<category><![CDATA[kvm]]></category>
		<category><![CDATA[linuxserver]]></category>
		<category><![CDATA[linuxvirtualization]]></category>
		<category><![CDATA[lxc]]></category>
		<category><![CDATA[open-source]]></category>
		<category><![CDATA[opensourceprojects]]></category>
		<category><![CDATA[opensourcevirtualization]]></category>
		<category><![CDATA[privatecloud]]></category>
		<category><![CDATA[proxmox]]></category>
		<category><![CDATA[proxmoxbackupserver]]></category>
		<category><![CDATA[proxmoxve]]></category>
		<category><![CDATA[selfhosted]]></category>
		<category><![CDATA[servervirtualization]]></category>
		<category><![CDATA[systemadmin]]></category>
		<category><![CDATA[virtualmachines]]></category>
		<category><![CDATA[vmcluster]]></category>
		<category><![CDATA[vmmanagement]]></category>
		<category><![CDATA[vmserver]]></category>
		<guid isPermaLink="false">https://hamradio.my/?p=8332</guid>

					<description><![CDATA[<p>If you’ve ever needed to run multiple operating systems or servers on a single machine — whether for testing, development, or production — you’ve probably come across the idea of virtualization. And if you’ve explored the open-source side of things, chances are you’ve heard of Proxmox. So, what exactly is Proxmox?What can you do with [&#8230;]</p>
<p>The post <a href="https://hamradio.my/2025/07/what-is-proxmox/">What Is Proxmox?</a> appeared on <a href="https://hamradio.my">Hamradio.my - Amateur Radio, Tech Insights and Product Reviews</a> by <a href="https://hamradio.my/author/9m2pju/">9M2PJU</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<h1 class="wp-block-heading"></h1>



<p class="wp-block-paragraph">If you’ve ever needed to run multiple operating systems or servers on a single machine — whether for testing, development, or production — you’ve probably come across the idea of <strong>virtualization</strong>. And if you’ve explored the open-source side of things, chances are you’ve heard of <strong>Proxmox</strong>.</p>



<p class="wp-block-paragraph">So, what exactly is Proxmox?<br>What can you <em>do</em> with it?<br>And why are so many people using it — from home lab tinkerers to big companies?</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f680.png" alt="🚀" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Proxmox in Simple Terms</h2>



<p class="wp-block-paragraph"><strong>Proxmox Virtual Environment (Proxmox VE)</strong> is a free and open-source platform that allows you to <strong>run virtual machines (VMs)</strong> and <strong>containers</strong> on a single server or across multiple servers.</p>



<p class="wp-block-paragraph">Imagine being able to run Windows, Ubuntu, pfSense, and even your media server — all on the same physical machine — each in its own little bubble. That’s what Proxmox lets you do.</p>



<p class="wp-block-paragraph">It comes with a clean web interface, built-in backup tools, clustering support, and lots of flexibility with storage and networking.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f6e0.png" alt="🛠" class="wp-smiley" style="height: 1em; max-height: 1em;" /> What Can You Use Proxmox For?</h2>



<p class="wp-block-paragraph">One of the best things about Proxmox is how <strong>versatile</strong> it is. Here are some real-world examples of how people use it:</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f3e1.png" alt="🏡" class="wp-smiley" style="height: 1em; max-height: 1em;" /> 1. Home Labs &amp; Learning</h3>



<p class="wp-block-paragraph">Proxmox is hugely popular in the home lab community. Whether you&#8217;re studying for IT certifications, testing new software, or just learning how servers work, Proxmox gives you a safe space to experiment.</p>



<p class="wp-block-paragraph">You can spin up virtual machines in minutes, try out different operating systems, and tear them down when you&#8217;re done — all without needing separate computers.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f9d1-200d-1f4bc.png" alt="🧑‍💼" class="wp-smiley" style="height: 1em; max-height: 1em;" /> 2. Small Business Infrastructure</h3>



<p class="wp-block-paragraph">Running a small business? Proxmox can help you do more with less.</p>



<p class="wp-block-paragraph">You can host your:</p>



<ul class="wp-block-list">
<li>Web server</li>



<li>Email system</li>



<li>File sharing services</li>



<li>Internal tools</li>



<li>Backup systems</li>
</ul>



<p class="wp-block-paragraph">&#8230;all on one physical machine, saving money on hardware and power. Plus, it’s open-source — no expensive licensing fees.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f9ea.png" alt="🧪" class="wp-smiley" style="height: 1em; max-height: 1em;" /> 3. Testing &amp; Development</h3>



<p class="wp-block-paragraph">If you’re a developer, tester, or just someone who likes breaking things (on purpose), Proxmox is perfect for setting up test environments.</p>



<p class="wp-block-paragraph">You can:</p>



<ul class="wp-block-list">
<li>Test code in different OS environments</li>



<li>Clone a setup instantly</li>



<li>Roll back to a snapshot if something breaks</li>
</ul>



<p class="wp-block-paragraph">It’s a great tool for agile workflows, automation testing, and staging environments.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f9d1-200d-1f3eb.png" alt="🧑‍🏫" class="wp-smiley" style="height: 1em; max-height: 1em;" /> 4. Education &amp; Training Labs</h3>



<p class="wp-block-paragraph">Schools, universities, and training centers use Proxmox to provide virtual labs for students.</p>



<p class="wp-block-paragraph">Why? Because it’s:</p>



<ul class="wp-block-list">
<li>Cost-effective</li>



<li>Easy to manage</li>



<li>Supports remote access</li>
</ul>



<p class="wp-block-paragraph">It lets students experiment with servers, networking, firewalls, and more — without touching physical machines.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f310.png" alt="🌐" class="wp-smiley" style="height: 1em; max-height: 1em;" /> 5. Self-Hosted Cloud &amp; Services</h3>



<p class="wp-block-paragraph">Want to break free from big cloud providers? With Proxmox, you can build your <strong>own private cloud</strong>.</p>



<p class="wp-block-paragraph">Set up things like:</p>



<ul class="wp-block-list">
<li>Nextcloud for file syncing</li>



<li>Jellyfin or Plex for media streaming</li>



<li>OpenVPN for secure remote access</li>



<li>A custom DNS or firewall with something like pfSense</li>
</ul>



<p class="wp-block-paragraph">It’s your own cloud — under your control.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f9f0.png" alt="🧰" class="wp-smiley" style="height: 1em; max-height: 1em;" /> 6. Enterprise Virtualization &amp; Clusters</h3>



<p class="wp-block-paragraph">Proxmox isn’t just for home users. It’s used in production by companies, too.</p>



<p class="wp-block-paragraph">With features like:</p>



<ul class="wp-block-list">
<li>High availability (HA)</li>



<li>Live VM migration</li>



<li>Multi-node clustering</li>



<li>Integration with Ceph and ZFS storage</li>
</ul>



<p class="wp-block-paragraph">…it’s more than capable of running real business workloads. And since it has an API and command-line tools, it&#8217;s easy to automate and integrate with existing systems.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f512.png" alt="🔒" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Backups, Snapshots &amp; Disaster Recovery</h2>



<p class="wp-block-paragraph">One of the standout features of Proxmox is how it handles <strong>backups and snapshots</strong>. You can take live backups of running machines and schedule regular backups to external storage.</p>



<p class="wp-block-paragraph">Snapshots are great for testing — make one before a risky update, and you can restore everything back if things go wrong.</p>



<p class="wp-block-paragraph">There’s also <strong>Proxmox Backup Server</strong>, a companion tool designed specifically for efficient and encrypted backups.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4a1.png" alt="💡" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Why People Love Proxmox</h2>



<ul class="wp-block-list">
<li><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong>Open-source and free to use</strong></li>



<li><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong>Active community and regular updates</strong></li>



<li><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong>Clean, powerful web interface</strong></li>



<li><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong>Supports both VMs and containers</strong></li>



<li><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong>Flexible storage options (ZFS, Ceph, NFS, etc.)</strong></li>



<li><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong>Can scale from one server to a whole datacenter</strong></li>
</ul>



<p class="wp-block-paragraph">Whether you’re managing just one server or a dozen, Proxmox gives you the tools to keep things under control — and make your infrastructure easier to manage.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f9ed.png" alt="🧭" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Final Thoughts</h2>



<p class="wp-block-paragraph">So, what is Proxmox?</p>



<p class="wp-block-paragraph">It’s a powerful, flexible platform that helps you <strong>do more with the hardware you already have</strong>. From small home labs to enterprise-grade virtualization clusters, Proxmox is one of the best open-source solutions out there for anyone interested in managing virtual machines or containers.</p>



<p class="wp-block-paragraph">And the best part? You can try it for free. Just download the ISO, install it on a spare machine, and start building your own virtual world.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4ce.png" alt="📎" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Resources</h2>



<ul class="wp-block-list">
<li><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f517.png" alt="🔗" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <a href="https://www.proxmox.com">Proxmox Official Site</a></li>



<li><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4d8.png" alt="📘" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <a href="https://pve.proxmox.com/wiki/Main_Page">Proxmox Wiki &amp; Documentation</a></li>



<li><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4ac.png" alt="💬" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <a href="https://forum.proxmox.com">Proxmox Community Forum</a></li>
</ul>
<p>The post <a href="https://hamradio.my/2025/07/what-is-proxmox/">What Is Proxmox?</a> appeared on <a href="https://hamradio.my">Hamradio.my - Amateur Radio, Tech Insights and Product Reviews</a> by <a href="https://hamradio.my/author/9m2pju/">9M2PJU</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://hamradio.my/2025/07/what-is-proxmox/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Viewing SriHome SH025 IP Camera on Linux with MPV</title>
		<link>https://hamradio.my/2025/07/viewing-srihome-sh025-ip-camera-on-linux-with-mpv/</link>
					<comments>https://hamradio.my/2025/07/viewing-srihome-sh025-ip-camera-on-linux-with-mpv/#respond</comments>
		
		<dc:creator><![CDATA[9M2PJU]]></dc:creator>
		<pubDate>Tue, 08 Jul 2025 09:07:10 +0000</pubDate>
				<category><![CDATA[archlinux]]></category>
		<category><![CDATA[cachyos]]></category>
		<category><![CDATA[cctv]]></category>
		<category><![CDATA[free open source software]]></category>
		<category><![CDATA[monitoring]]></category>
		<category><![CDATA[network]]></category>
		<category><![CDATA[ffmpeg]]></category>
		<category><![CDATA[ffplay]]></category>
		<category><![CDATA[homeassistant]]></category>
		<category><![CDATA[homeautomation]]></category>
		<category><![CDATA[homelab]]></category>
		<category><![CDATA[ipcamera]]></category>
		<category><![CDATA[ipcamerastream]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[linuxdesktop]]></category>
		<category><![CDATA[linuxsetup]]></category>
		<category><![CDATA[localstreaming]]></category>
		<category><![CDATA[mpv]]></category>
		<category><![CDATA[nocloud]]></category>
		<category><![CDATA[onvif]]></category>
		<category><![CDATA[openrtsp]]></category>
		<category><![CDATA[privacyfirst]]></category>
		<category><![CDATA[rtsp]]></category>
		<category><![CDATA[rtspstream]]></category>
		<category><![CDATA[sh025]]></category>
		<category><![CDATA[smartcam]]></category>
		<category><![CDATA[sricam]]></category>
		<guid isPermaLink="false">https://hamradio.my/?p=8302</guid>

					<description><![CDATA[<p>I recently installed a SriHome SH025 IP camera and wanted to monitor the live stream from my Arch Linux desktop (CachyOS in my case). While the official app works, I prefer using local tools — no cloud, no mobile app, just clean video over my LAN. After some digging, I got the RTSP stream working [&#8230;]</p>
<p>The post <a href="https://hamradio.my/2025/07/viewing-srihome-sh025-ip-camera-on-linux-with-mpv/">Viewing SriHome SH025 IP Camera on Linux with MPV</a> appeared on <a href="https://hamradio.my">Hamradio.my - Amateur Radio, Tech Insights and Product Reviews</a> by <a href="https://hamradio.my/author/9m2pju/">9M2PJU</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<h1 class="wp-block-heading"></h1>



<p class="wp-block-paragraph">I recently installed a <strong>SriHome SH025</strong> IP camera and wanted to monitor the live stream from my <strong>Arch Linux desktop</strong> (CachyOS in my case). While the official app works, I prefer using local tools — no cloud, no mobile app, just clean video over my LAN.</p>



<p class="wp-block-paragraph">After some digging, I got the RTSP stream working beautifully with <code>mpv</code>, and I even created a launcher icon for quick access.</p>



<p class="wp-block-paragraph">Here’s exactly how I did it — plus how to <strong>find the right RTSP port</strong> using <code>nmap</code>.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f3af.png" alt="🎯" class="wp-smiley" style="height: 1em; max-height: 1em;" /> My Setup Goals</h2>



<ul class="wp-block-list">
<li>Watch the SriHome SH025 stream on my Linux desktop</li>



<li>Skip the cloud and use direct RTSP</li>



<li>Get working video (and ideally audio)</li>



<li>Add a clickable desktop launcher</li>



<li>Find the RTSP port if undocumented</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f50d.png" alt="🔍" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Finding the RTSP Port with Nmap</h2>



<p class="wp-block-paragraph">SriHome cameras often don’t use the <strong>default RTSP port (554)</strong> — mine used <code>8554</code>. If you don’t know your camera’s port, use <code>nmap</code> to scan for open ones:</p>



<h3 class="wp-block-heading">1. Install <code>nmap</code> (if you don&#8217;t already have it):</h3>



<pre class="wp-block-code"><code>sudo pacman -S nmap
</code></pre>



<h3 class="wp-block-heading">2. Scan for common video streaming ports:</h3>



<pre class="wp-block-code"><code>nmap -p 554,8554,10554,7070,6688 192.168.0.11
</code></pre>



<p class="wp-block-paragraph">Replace <code>192.168.0.11</code> with your camera’s actual IP address.</p>



<h3 class="wp-block-heading">Example output:</h3>



<pre class="wp-block-code"><code>PORT      STATE  SERVICE
554/tcp   closed rtsp
8554/tcp  open   rtsp-alt
10554/tcp closed unknown
6688/tcp  open   unknown
</code></pre>



<p class="wp-block-paragraph">In my case, <strong>port 8554 was open</strong>, which matched what <code>ffplay</code> and <code>mpv</code> needed.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Testing the Stream with ffplay</h2>



<p class="wp-block-paragraph">Before setting up anything fancy, I tested the RTSP stream with:</p>



<pre class="wp-block-code"><code>ffplay rtsp://admin:888888@192.168.0.11:8554/profile0
</code></pre>



<p class="wp-block-paragraph">It worked! Full 1080p video and even audio came through. This confirmed the camera was broadcasting fine over RTSP.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/25b6.png" alt="▶" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Daily Viewing with MPV</h2>



<p class="wp-block-paragraph">After confirming the stream worked, I switched to <code>mpv</code> for daily use. It&#8217;s lightweight and integrates better with my desktop.</p>



<pre class="wp-block-code"><code>mpv rtsp://admin:888888@192.168.0.11:8554/profile0
</code></pre>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4c1.png" alt="📁" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Create a Desktop Shortcut</h2>



<p class="wp-block-paragraph">To make launching the camera easy from my app launcher, I made a <code>.desktop</code> file.</p>



<h3 class="wp-block-heading">1. Create the launcher:</h3>



<pre class="wp-block-code"><code>nano ~/.local/share/applications/sricam-view.desktop
</code></pre>



<h3 class="wp-block-heading">2. Paste this:</h3>



<pre class="wp-block-code"><code>&#91;Desktop Entry]
Name=SriHome SH025 Viewer
Comment=Open SriHome IP Camera Stream in MPV
Exec=mpv rtsp://admin:888888@192.168.0.11:8554/profile0
Icon=camera-video
Terminal=false
Type=Application
Categories=Video;AudioVideo;Utility;
</code></pre>



<h3 class="wp-block-heading">3. Make it executable:</h3>



<pre class="wp-block-code"><code>chmod +x ~/.local/share/applications/sricam-view.desktop
</code></pre>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Wrap-up</h2>



<p class="wp-block-paragraph">SriHome doesn’t document these RTSP settings well, but with a little effort — and tools like <code>nmap</code>, <code>ffplay</code>, <code>mpv</code>, and <code>ffmpeg</code> — you can get full, local access to your camera stream.</p>
<p>The post <a href="https://hamradio.my/2025/07/viewing-srihome-sh025-ip-camera-on-linux-with-mpv/">Viewing SriHome SH025 IP Camera on Linux with MPV</a> appeared on <a href="https://hamradio.my">Hamradio.my - Amateur Radio, Tech Insights and Product Reviews</a> by <a href="https://hamradio.my/author/9m2pju/">9M2PJU</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://hamradio.my/2025/07/viewing-srihome-sh025-ip-camera-on-linux-with-mpv/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>How Unraid Works: The Flexible OS for NAS, VMs, and Docker at Home</title>
		<link>https://hamradio.my/2025/07/how-unraid-works-the-flexible-os-for-nas-vms-and-docker-at-home/</link>
					<comments>https://hamradio.my/2025/07/how-unraid-works-the-flexible-os-for-nas-vms-and-docker-at-home/#respond</comments>
		
		<dc:creator><![CDATA[9M2PJU]]></dc:creator>
		<pubDate>Sat, 05 Jul 2025 20:37:12 +0000</pubDate>
				<category><![CDATA[docker]]></category>
		<category><![CDATA[home networking]]></category>
		<category><![CDATA[NAS]]></category>
		<category><![CDATA[operating system]]></category>
		<category><![CDATA[virtual machine]]></category>
		<category><![CDATA[btrfs]]></category>
		<category><![CDATA[cachepool]]></category>
		<category><![CDATA[datarecovery]]></category>
		<category><![CDATA[Docker]]></category>
		<category><![CDATA[dockergui]]></category>
		<category><![CDATA[gpu_passthrough]]></category>
		<category><![CDATA[homeautomation]]></category>
		<category><![CDATA[homelab]]></category>
		<category><![CDATA[homeserver]]></category>
		<category><![CDATA[iommu]]></category>
		<category><![CDATA[kvm]]></category>
		<category><![CDATA[kvmvirtualization]]></category>
		<category><![CDATA[linuxos]]></category>
		<category><![CDATA[mediaarchiving]]></category>
		<category><![CDATA[nasos]]></category>
		<category><![CDATA[openplatform]]></category>
		<category><![CDATA[openstorage]]></category>
		<category><![CDATA[paritydisk]]></category>
		<category><![CDATA[personalcloud]]></category>
		<category><![CDATA[plexserver]]></category>
		<category><![CDATA[raidalternative]]></category>
		<category><![CDATA[selfhosted]]></category>
		<category><![CDATA[selfhostersoftware]]></category>
		<category><![CDATA[storagearray]]></category>
		<category><![CDATA[unraid]]></category>
		<category><![CDATA[unraidvm]]></category>
		<category><![CDATA[virtualization]]></category>
		<category><![CDATA[vmhosting]]></category>
		<category><![CDATA[xfs]]></category>
		<guid isPermaLink="false">https://hamradio.my/?p=8278</guid>

					<description><![CDATA[<p>Unraid is a powerful, Linux-based operating system that lets you build your own custom Network Attached Storage (NAS), Virtual Machine Host, and Docker Application Server—all in one box. Unlike traditional RAID or hypervisor setups, Unraid focuses on simplicity, flexibility, and modularity, making it a favorite among home lab enthusiasts, media hoarders, self-hosters, and even small [&#8230;]</p>
<p>The post <a href="https://hamradio.my/2025/07/how-unraid-works-the-flexible-os-for-nas-vms-and-docker-at-home/">How Unraid Works: The Flexible OS for NAS, VMs, and Docker at Home</a> appeared on <a href="https://hamradio.my">Hamradio.my - Amateur Radio, Tech Insights and Product Reviews</a> by <a href="https://hamradio.my/author/9m2pju/">9M2PJU</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<h2 class="wp-block-heading"></h2>



<p class="wp-block-paragraph"><a href="https://unraid.net/"><strong>Unraid</strong> </a>is a powerful, Linux-based operating system that lets you build your own custom <strong>Network Attached Storage (NAS)</strong>, <strong>Virtual Machine Host</strong>, and <strong>Docker Application Server</strong>—all in one box.</p>



<p class="wp-block-paragraph">Unlike traditional RAID or hypervisor setups, Unraid focuses on <strong>simplicity, flexibility, and modularity</strong>, making it a favorite among home lab enthusiasts, media hoarders, self-hosters, and even small businesses.</p>



<p class="wp-block-paragraph">So how does Unraid work under the hood?</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading">1. Unraid Is Not “RAID”—It’s Better for Mixed Drives</h3>



<p class="wp-block-paragraph">Despite its name, <strong>Unraid doesn’t use traditional RAID</strong> (like RAID 5 or 6). Instead, it uses a <strong>unique hybrid model</strong> based on:</p>



<ul class="wp-block-list">
<li><strong>Individual disk volumes</strong> (each formatted with XFS or Btrfs)</li>



<li><strong>One or two parity disks</strong> for recovery</li>



<li><strong>No striping or data distribution</strong></li>
</ul>



<p class="wp-block-paragraph">This means:</p>



<ul class="wp-block-list">
<li>You can mix and match <strong>any size</strong> drives.</li>



<li>You can <strong>pull a disk</strong> and access its contents directly.</li>



<li>Only the <strong>parity disk(s)</strong> must be equal to or larger than the largest data disk.</li>



<li>Drives spin up only when accessed—saving energy.</li>
</ul>



<h4 class="wp-block-heading">Example:</h4>



<p class="wp-block-paragraph">If you have 4 drives:</p>



<ul class="wp-block-list">
<li>3× data disks (e.g., 4TB, 6TB, 10TB)</li>



<li>1× parity disk (10TB)</li>
</ul>



<p class="wp-block-paragraph">Your array has 20TB usable storage with fault tolerance for <strong>1 disk failure</strong>.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading">2. <strong>The Array and Parity System</strong></h3>



<p class="wp-block-paragraph">Unraid manages storage using an <strong>Array</strong>:</p>



<ul class="wp-block-list">
<li>Each disk is formatted independently (no block-level striping).</li>



<li>The <strong>parity disk</strong> stores checksums to allow for single-disk recovery.</li>



<li>You can add or remove disks <strong>without reformatting the entire array</strong>.</li>
</ul>



<p class="wp-block-paragraph">There’s also a <strong>cache pool</strong> (usually SSDs) to:</p>



<ul class="wp-block-list">
<li>Speed up writes (files are written to cache first, then moved to the array later)</li>



<li>Run virtual machines or Docker containers with high IOPS</li>



<li>Minimize spin-up delays on HDDs</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading">3. <strong>User Shares: Logical Storage Abstraction</strong></h3>



<p class="wp-block-paragraph">Unraid lets you create <strong>User Shares</strong>, which are folders that span across multiple physical disks.</p>



<p class="wp-block-paragraph">For example:</p>



<ul class="wp-block-list">
<li><code>/mnt/user/media</code> might pull data from <code>disk1</code>, <code>disk3</code>, and <code>disk5</code></li>



<li>You can configure how files are distributed: most-free, high-water, fill-up</li>



<li>Exclude/include specific disks per share</li>
</ul>



<p class="wp-block-paragraph">This gives the appearance of a single large folder while keeping physical separation intact.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading">4. <strong>Docker Container Management</strong></h3>



<p class="wp-block-paragraph">Unraid includes <strong>built-in Docker support</strong> with a GUI to:</p>



<ul class="wp-block-list">
<li>Pull images from Docker Hub or custom registries</li>



<li>Define volumes and port mappings</li>



<li>Automatically update containers</li>



<li>Use templates from the <strong>Community Applications</strong> plugin</li>
</ul>



<p class="wp-block-paragraph">Docker runs atop a <strong>Btrfs-formatted cache pool</strong>, so containers benefit from fast SSD speeds.</p>



<p class="wp-block-paragraph">Popular self-hosted apps include:</p>



<ul class="wp-block-list">
<li>Plex, Jellyfin</li>



<li>Nextcloud</li>



<li>Pi-hole</li>



<li>Home Assistant</li>



<li>Nginx Proxy Manager</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading">5. <strong>Virtual Machines (VMs)</strong></h3>



<p class="wp-block-paragraph">Unraid includes a built-in <strong>KVM hypervisor</strong>, allowing you to run full operating systems like:</p>



<ul class="wp-block-list">
<li>Windows 10/11</li>



<li>Ubuntu</li>



<li>macOS (with tweaks)</li>



<li>Other Linux distros</li>
</ul>



<p class="wp-block-paragraph">Features:</p>



<ul class="wp-block-list">
<li>Web-based VM manager</li>



<li>Passthrough support for GPUs, USB controllers, NICs (via IOMMU/VT-d)</li>



<li>Virtual disk and ISO management</li>



<li>VNC remote access</li>
</ul>



<p class="wp-block-paragraph">With proper hardware, you can even <strong>game on a VM</strong> using GPU passthrough.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading">6. <strong>Flash Boot, License, and Security</strong></h3>



<ul class="wp-block-list">
<li><strong>Boots from USB</strong> (persistent license key tied to the USB drive)</li>



<li>Runs in <strong>RAM</strong> after booting, keeping system fast and stateless</li>



<li>GUI accessible via web browser on port <code>80</code></li>



<li>Plugins available for additional monitoring, security, or customization</li>
</ul>



<p class="wp-block-paragraph">Licensing tiers are based on the number of attached storage devices:</p>



<ul class="wp-block-list">
<li><strong>Basic</strong>: up to 6 devices</li>



<li><strong>Plus</strong>: up to 12 devices</li>



<li><strong>Pro</strong>: unlimited devices</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading">7. <strong>Recovery, Snapshots, and Parity Limitations</strong></h3>



<ul class="wp-block-list">
<li>You can recover data from individual disks <strong>even outside of Unraid</strong>, since they use standard filesystems.</li>



<li>Unraid <strong>doesn’t support bitrot protection</strong> or multiple-disk failures unless you configure a second parity disk.</li>



<li>No ZFS support out-of-the-box, but Btrfs cache pools do allow snapshots and checksumming.</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading">Why Unraid?</h3>



<ul class="wp-block-list">
<li><strong>Easier than FreeNAS/TrueNAS</strong></li>



<li><strong>No storage rebalancing or reformatting required</strong></li>



<li><strong>Efficient for mixed disks</strong></li>



<li><strong>Great for self-hosted apps</strong></li>



<li><strong>Flexible VM support</strong></li>



<li><strong>Extremely beginner-friendly web UI</strong></li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading">Final Thoughts</h3>



<p class="wp-block-paragraph">Unraid strikes a balance between <strong>simplicity and power</strong>. It’s ideal for users who want a robust home server with storage, Docker, and VMs—all manageable through a friendly web interface.</p>



<p class="wp-block-paragraph">Whether you&#8217;re running a <strong>media server</strong>, building a <strong>homelab</strong>, or hosting <strong>production apps on a budget</strong>, Unraid gives you control, flexibility, and peace of mind.</p>
<p>The post <a href="https://hamradio.my/2025/07/how-unraid-works-the-flexible-os-for-nas-vms-and-docker-at-home/">How Unraid Works: The Flexible OS for NAS, VMs, and Docker at Home</a> appeared on <a href="https://hamradio.my">Hamradio.my - Amateur Radio, Tech Insights and Product Reviews</a> by <a href="https://hamradio.my/author/9m2pju/">9M2PJU</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://hamradio.my/2025/07/how-unraid-works-the-flexible-os-for-nas-vms-and-docker-at-home/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Best Open Source HR Apps for Self-Hosting</title>
		<link>https://hamradio.my/2025/07/best-open-source-hr-apps-for-self-hosting/</link>
					<comments>https://hamradio.my/2025/07/best-open-source-hr-apps-for-self-hosting/#respond</comments>
		
		<dc:creator><![CDATA[9M2PJU]]></dc:creator>
		<pubDate>Fri, 04 Jul 2025 16:12:06 +0000</pubDate>
				<category><![CDATA[docker]]></category>
		<category><![CDATA[free open source software]]></category>
		<category><![CDATA[management]]></category>
		<category><![CDATA[businessautomation]]></category>
		<category><![CDATA[cloudalternatives]]></category>
		<category><![CDATA[dataprivacy]]></category>
		<category><![CDATA[devops]]></category>
		<category><![CDATA[Docker]]></category>
		<category><![CDATA[dockercompose]]></category>
		<category><![CDATA[erpnext]]></category>
		<category><![CDATA[homelab]]></category>
		<category><![CDATA[hrsoftware]]></category>
		<category><![CDATA[hrtech]]></category>
		<category><![CDATA[icehrm]]></category>
		<category><![CDATA[linuxadmin]]></category>
		<category><![CDATA[odoo]]></category>
		<category><![CDATA[opensource]]></category>
		<category><![CDATA[opensourceapps]]></category>
		<category><![CDATA[opensourcecommunity]]></category>
		<category><![CDATA[opensourceerp]]></category>
		<category><![CDATA[opensourcehr]]></category>
		<category><![CDATA[orangehrm]]></category>
		<category><![CDATA[remotehr]]></category>
		<category><![CDATA[selfhosted]]></category>
		<category><![CDATA[selfhosting]]></category>
		<category><![CDATA[smallbusinesssoftware]]></category>
		<category><![CDATA[teammanagement]]></category>
		<category><![CDATA[webapps]]></category>
		<guid isPermaLink="false">https://hamradio.my/?p=8229</guid>

					<description><![CDATA[<p>When it comes to managing people, spreadsheets eventually fall apart. Whether you&#8217;re a small startup, a non-profit, or just a tech-savvy HR manager tired of SaaS subscriptions, you’ve probably thought: “Can I just self-host my own HR app?” Yes, you can. And if you&#8217;re anything like me, that means Docker is non-negotiable. You want fast [&#8230;]</p>
<p>The post <a href="https://hamradio.my/2025/07/best-open-source-hr-apps-for-self-hosting/">Best Open Source HR Apps for Self-Hosting</a> appeared on <a href="https://hamradio.my">Hamradio.my - Amateur Radio, Tech Insights and Product Reviews</a> by <a href="https://hamradio.my/author/9m2pju/">9M2PJU</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<h1 class="wp-block-heading"></h1>



<p class="wp-block-paragraph">When it comes to managing people, spreadsheets eventually fall apart. Whether you&#8217;re a small startup, a non-profit, or just a tech-savvy HR manager tired of SaaS subscriptions, you’ve probably thought:</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">“Can I just <strong>self-host</strong> my own HR app?”</p>
</blockquote>



<p class="wp-block-paragraph">Yes, you can. And if you&#8217;re anything like me, that means <strong>Docker</strong> is non-negotiable. You want fast deployment, simple updates, container isolation, and most importantly, <strong>full control of your data</strong>.</p>



<p class="wp-block-paragraph">But here&#8217;s the catch: not all open-source HR systems are Docker-ready, and many are clunky, outdated, or abandoned. So I did the dirty work: tested the top contenders, spun up containers, broke a few things, and came away with clear winners and losers.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f947.png" alt="🥇" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Odoo (Community Edition): <strong>Best All-Rounder for Docker + HR</strong></h2>



<figure class="wp-block-image size-large"><img  title="" fetchpriority="high" decoding="async" width="1024" height="768" src="https://hamradio.my/wp-content/uploads/2025/07/image-5-1024x768.png"  alt="image-5-1024x768 Best Open Source HR Apps for Self-Hosting"  class="wp-image-8230" srcset="https://hamradio.my/wp-content/uploads/2025/07/image-5-1024x768.png 1024w, https://hamradio.my/wp-content/uploads/2025/07/image-5-300x225.png 300w, https://hamradio.my/wp-content/uploads/2025/07/image-5-768x576.png 768w, https://hamradio.my/wp-content/uploads/2025/07/image-5.png 1050w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph"><strong>Website</strong>: <a href="https://www.odoo.com">https://www.odoo.com</a><br><strong>HR Module Overview</strong>: <a href="https://www.odoo.com/page/human-resources">https://www.odoo.com/page/human-resources</a><br><strong>Official Docker Image</strong>: <a href="https://hub.docker.com/_/odoo">https://hub.docker.com/_/odoo</a></p>



<p class="wp-block-paragraph">If you only read this far: <strong>Odoo is the one.</strong> Hands down.</p>



<p class="wp-block-paragraph">Odoo is an ERP system. That usually scares people — they think it’s too big, too bloated, too enterprisey. But here’s the thing: <strong>Odoo is modular</strong>, and the Community Edition is free and completely open-source. You can start with just HR modules and ignore the rest. Later on, you can add CRM, invoicing, accounting, and more — if you need them.</p>



<h3 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Why Odoo rocks:</h3>



<ul class="wp-block-list">
<li><strong>Clean, modern web interface</strong></li>



<li><strong>HR features are well-built</strong>: employee records, contracts, leave, attendance, appraisals, timesheets, and basic recruitment</li>



<li><strong>Official Docker image</strong> means no hacks or 10-year-old community images</li>



<li><strong>Big ecosystem</strong> — plugins, docs, community support</li>
</ul>



<h3 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/26a0.png" alt="⚠" class="wp-smiley" style="height: 1em; max-height: 1em;" /> What to watch out for:</h3>



<ul class="wp-block-list">
<li>Built-in payroll only exists in third-party modules or the paid Enterprise edition</li>



<li>Requires PostgreSQL as a backend (easy with Docker Compose, though)</li>
</ul>



<h3 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f6e0.png" alt="🛠" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Real-world Docker setup:</h3>



<pre class="wp-block-code"><code>version: '3'

services:
  db:
    image: postgres:15
    environment:
      POSTGRES_DB: odoo
      POSTGRES_USER: odoo
      POSTGRES_PASSWORD: odoo

  odoo:
    image: odoo:16
    ports:
      - "8069:8069"
    depends_on:
      - db
    environment:
      HOST: db
      USER: odoo
      PASSWORD: odoo
    volumes:
      - odoo-data:/var/lib/odoo

volumes:
  odoo-data:
</code></pre>



<p class="wp-block-paragraph">Just <code>docker compose up -d</code>, go to <code>http://localhost:8069</code>, and you’re in business.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f948.png" alt="🥈" class="wp-smiley" style="height: 1em; max-height: 1em;" /> ERPNext: <strong>Full-Featured HR + Payroll</strong></h2>



<figure class="wp-block-image size-full"><img  title="" decoding="async" width="700" height="194" src="https://hamradio.my/wp-content/uploads/2025/07/image-6.png"  alt="image-6 Best Open Source HR Apps for Self-Hosting"  class="wp-image-8231" srcset="https://hamradio.my/wp-content/uploads/2025/07/image-6.png 700w, https://hamradio.my/wp-content/uploads/2025/07/image-6-300x83.png 300w" sizes="(max-width: 700px) 100vw, 700px" /></figure>



<p class="wp-block-paragraph"><strong>Website</strong>: <a href="https://erpnext.com">https://erpnext.com</a><br><strong>GitHub</strong>: <a href="https://github.com/frappe/frappe_docker">https://github.com/frappe/frappe_docker</a></p>



<p class="wp-block-paragraph">ERPNext is what you get when you take accounting seriously. It was born as an ERP, but its <strong>HR module is surprisingly deep,</strong> and it’s one of the few with <strong>built-in payroll</strong>, which Odoo lacks in its free edition.</p>



<p class="wp-block-paragraph">It covers everything from:</p>



<ul class="wp-block-list">
<li>Recruitment &amp; onboarding</li>



<li>Employee lifecycle</li>



<li>Appraisals &amp; KPIs</li>



<li>Salary slips &amp; payroll</li>



<li>Leave, attendance, and shift planning</li>
</ul>



<h3 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Why ERPNext is powerful:</h3>



<ul class="wp-block-list">
<li>Built-in <strong>payroll engine</strong> with salary structures and tax calculations</li>



<li>Fully open-source and active development</li>



<li>Docker support via <code>frappe_docker</code> is well-documented</li>
</ul>



<h3 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/26a0.png" alt="⚠" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Downsides:</h3>



<ul class="wp-block-list">
<li><strong>Much harder to install</strong> than Odoo</li>



<li>Requires familiarity with the <strong>Frappe framework</strong></li>



<li>You’ll be dealing with a more complex Docker Compose stack (Redis, MariaDB, etc.)</li>
</ul>



<p class="wp-block-paragraph">This is for you if:</p>



<ul class="wp-block-list">
<li>You’re comfortable with complex Docker setups</li>



<li>You need <strong>serious payroll</strong> functionality without paying for a SaaS</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f949.png" alt="🥉" class="wp-smiley" style="height: 1em; max-height: 1em;" /> ICE Hrm: <strong>Quick, Lightweight HR in a Box</strong></h2>



<figure class="wp-block-image size-full is-resized"><img  title="" decoding="async" width="257" height="196" src="https://hamradio.my/wp-content/uploads/2025/07/image-8.png"  alt="image-8 Best Open Source HR Apps for Self-Hosting"  class="wp-image-8233" style="width:640px;height:auto"/></figure>



<p class="wp-block-paragraph"><strong>Website</strong>: <a href="https://icehrm.com">https://icehrm.com</a><br><strong>Docker Image</strong>: <a href="https://hub.docker.com/r/gamonoid/icehrm">https://hub.docker.com/r/gamonoid/icehrm</a></p>



<p class="wp-block-paragraph">ICE Hrm is the fastest one to get up and running. It’s a traditional LAMP stack (PHP + MySQL), but the devs provide a Docker image, and it actually works out of the box.</p>



<p class="wp-block-paragraph">It’s great for:</p>



<ul class="wp-block-list">
<li>Small teams</li>



<li>NGOs</li>



<li>Freelancers with a couple of contractors</li>
</ul>



<p class="wp-block-paragraph">You get:</p>



<ul class="wp-block-list">
<li>Employee directory</li>



<li>Leave tracking</li>



<li>Attendance (even with GPS support)</li>



<li>Time tracking</li>



<li>Document uploads</li>
</ul>



<h3 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f6ab.png" alt="🚫" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Limitations:</h3>



<ul class="wp-block-list">
<li>The <strong>free version is limited</strong> — no advanced payroll, no performance modules</li>



<li>UI is clean but <strong>not as polished</strong> as Odoo</li>



<li>Docker image is community-maintained (but mostly stable)</li>
</ul>



<p class="wp-block-paragraph">Still, if you want to spin something up <strong>in 2 minutes</strong> and track employee leave without paying a dime, this is it.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f7e0.png" alt="🟠" class="wp-smiley" style="height: 1em; max-height: 1em;" /> OrangeHRM: <strong>Popular, But Not Docker-First</strong></h2>



<figure class="wp-block-image size-full"><img  title="" loading="lazy" decoding="async" width="620" height="485" src="https://hamradio.my/wp-content/uploads/2025/07/image-9.png"  alt="image-9 Best Open Source HR Apps for Self-Hosting"  class="wp-image-8234" srcset="https://hamradio.my/wp-content/uploads/2025/07/image-9.png 620w, https://hamradio.my/wp-content/uploads/2025/07/image-9-300x235.png 300w" sizes="auto, (max-width: 620px) 100vw, 620px" /></figure>



<p class="wp-block-paragraph"><strong>Website</strong>: <a href="https://www.orangehrm.com">https://www.orangehrm.com</a><br><strong>GitHub</strong>: <a href="https://github.com/orangehrm/orangehrm">https://github.com/orangehrm/orangehrm</a></p>



<p class="wp-block-paragraph">OrangeHRM is the first open-source HR app many people find. And on paper, it’s solid:</p>



<ul class="wp-block-list">
<li>Employee management</li>



<li>Leave management</li>



<li>Recruitment module</li>



<li>Admin roles and permissions</li>
</ul>



<p class="wp-block-paragraph">But here’s the problem: <strong>Docker support is missing.</strong> No official image. No easy way to containerize it. You’ll have to DIY with Apache, PHP configs, and maybe even wrestle with <code>mod_rewrite</code>.</p>



<p class="wp-block-paragraph">If you’re already running a LAMP stack manually, you might like it. Otherwise, skip it and save yourself the pain.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1fab5.png" alt="🪵" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Summary Table</h2>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>Feature / App</th><th>Odoo</th><th>ERPNext</th><th>ICE Hrm</th><th>OrangeHRM</th></tr></thead><tbody><tr><td>Docker Ready</td><td><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Official</td><td><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Official</td><td><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Community</td><td><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/274c.png" alt="❌" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Manual Only</td></tr><tr><td>HR Features</td><td><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /></td><td><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /></td><td><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /></td><td><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /></td></tr><tr><td>Payroll</td><td><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/274c.png" alt="❌" class="wp-smiley" style="height: 1em; max-height: 1em;" /> (3rd-party)</td><td><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Built-in</td><td><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Basic</td><td><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/274c.png" alt="❌" class="wp-smiley" style="height: 1em; max-height: 1em;" /> (Enterprise)</td></tr><tr><td>Recruitment</td><td><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /></td><td><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /></td><td><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/274c.png" alt="❌" class="wp-smiley" style="height: 1em; max-height: 1em;" /></td><td><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /></td></tr><tr><td>UI/UX</td><td><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Modern</td><td><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Clean</td><td><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Simple</td><td><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/274c.png" alt="❌" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Outdated</td></tr><tr><td>Complexity</td><td><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/26aa.png" alt="⚪" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Moderate</td><td><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f534.png" alt="🔴" class="wp-smiley" style="height: 1em; max-height: 1em;" /> High</td><td><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f7e2.png" alt="🟢" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Easy</td><td><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f7e1.png" alt="🟡" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Manual Setup</td></tr><tr><td>Best For</td><td>Most teams</td><td>Full HR+Finance</td><td>Small setups</td><td>LAMP fans</td></tr></tbody></table></figure>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f9e0.png" alt="🧠" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Final Thoughts</h2>



<p class="wp-block-paragraph">If I had to choose just one open-source HR system to self-host in Docker, <strong>Odoo</strong> would be it — no contest.</p>



<p class="wp-block-paragraph">It’s powerful, modern, Docker-ready, and backed by a massive community. Even if you only use the HR modules, you’re already ahead. And if you ever want to grow into CRM, eCommerce, or Accounting, it’s all there.</p>
<p>The post <a href="https://hamradio.my/2025/07/best-open-source-hr-apps-for-self-hosting/">Best Open Source HR Apps for Self-Hosting</a> appeared on <a href="https://hamradio.my">Hamradio.my - Amateur Radio, Tech Insights and Product Reviews</a> by <a href="https://hamradio.my/author/9m2pju/">9M2PJU</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://hamradio.my/2025/07/best-open-source-hr-apps-for-self-hosting/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Keeping Your Docker Containers Fresh with WUD</title>
		<link>https://hamradio.my/2025/07/keeping-your-docker-containers-fresh-with-wud/</link>
					<comments>https://hamradio.my/2025/07/keeping-your-docker-containers-fresh-with-wud/#respond</comments>
		
		<dc:creator><![CDATA[9M2PJU]]></dc:creator>
		<pubDate>Mon, 30 Jun 2025 16:59:39 +0000</pubDate>
				<category><![CDATA[containerization]]></category>
		<category><![CDATA[docker]]></category>
		<category><![CDATA[maintenance]]></category>
		<category><![CDATA[automation]]></category>
		<category><![CDATA[containers]]></category>
		<category><![CDATA[containersecurity]]></category>
		<category><![CDATA[devops]]></category>
		<category><![CDATA[Docker]]></category>
		<category><![CDATA[dockercompose]]></category>
		<category><![CDATA[dockertools]]></category>
		<category><![CDATA[dockerupdate]]></category>
		<category><![CDATA[homelab]]></category>
		<category><![CDATA[imageupdate]]></category>
		<category><![CDATA[opensource]]></category>
		<category><![CDATA[selfhosted]]></category>
		<category><![CDATA[selfhosting]]></category>
		<category><![CDATA[softwaretools]]></category>
		<category><![CDATA[SysAdmin]]></category>
		<category><![CDATA[whatsupdocker]]></category>
		<guid isPermaLink="false">https://hamradio.my/?p=7573</guid>

					<description><![CDATA[<p>In today&#8217;s fast-paced DevOps world, running applications in containers is the norm. Docker has revolutionized the way we deploy and scale software, but managing those containers—especially ensuring they&#8217;re up to date—can be a manual and tedious task. This is where WUD, short for What&#8217;s Up Docker, steps in as a game-changer. WUD is a lightweight, [&#8230;]</p>
<p>The post <a href="https://hamradio.my/2025/07/keeping-your-docker-containers-fresh-with-wud/">Keeping Your Docker Containers Fresh with WUD</a> appeared on <a href="https://hamradio.my">Hamradio.my - Amateur Radio, Tech Insights and Product Reviews</a> by <a href="https://hamradio.my/author/9m2pju/">9M2PJU</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">In today&#8217;s fast-paced DevOps world, running applications in containers is the norm. Docker has revolutionized the way we deploy and scale software, but managing those containers—especially ensuring they&#8217;re up to date—can be a manual and tedious task.</p>



<p class="wp-block-paragraph">This is where <strong>WUD</strong>, short for <strong>What&#8217;s Up Docker</strong>, steps in as a game-changer.</p>



<p class="wp-block-paragraph">WUD is a lightweight, open-source solution that continuously monitors your running Docker containers and alerts you when new versions of the base images are available. It saves time, ensures better security, and brings automation to your software maintenance workflow. If you&#8217;re running a homelab, hosting your own services, or managing production infrastructure, WUD is an essential tool in your DevOps toolbox.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f9e0.png" alt="🧠" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Why Should You Care About Image Updates?</h2>



<p class="wp-block-paragraph">Let’s face it—container image updates often carry critical fixes:</p>



<ul class="wp-block-list">
<li><strong>Security patches</strong> that close zero-day exploits</li>



<li><strong>Performance improvements</strong> that enhance your service responsiveness</li>



<li><strong>Bug fixes and new features</strong> that your applications benefit from immediately</li>
</ul>



<p class="wp-block-paragraph">Not updating means you’re running outdated, potentially vulnerable software. But manually checking all containers regularly is unrealistic. Automating this check is the smartest move—and that’s exactly what WUD offers.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f680.png" alt="🚀" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Meet WUD: What&#8217;s Up Docker</h2>



<p class="wp-block-paragraph">WUD is a smart container update monitor. It inspects the Docker images behind your currently running containers and checks if newer versions are available in the registries. If it finds updates, WUD notifies you instantly—helping you take immediate action.</p>



<h3 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f527.png" alt="🔧" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Built for Flexibility</h3>



<p class="wp-block-paragraph">WUD integrates beautifully with:</p>



<ul class="wp-block-list">
<li>Docker</li>



<li>Docker Compose</li>



<li>Private or public registries</li>



<li>A wide range of notification platforms (email, Slack, MQTT, webhooks)</li>
</ul>



<p class="wp-block-paragraph">It supports <strong>custom triggers</strong> and <strong>regex filtering</strong>, giving you full control over how you track and react to image updates.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f310.png" alt="🌐" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Web UI: Your Update Control Tower</h2>



<p class="wp-block-paragraph">The included <strong>web interface</strong> is clean, intuitive, and mobile-friendly. From a centralized dashboard, you can:</p>



<ul class="wp-block-list">
<li>View all running containers</li>



<li>See the image version in use</li>



<li>Get update availability in real-time</li>



<li>Customize monitoring preferences</li>
</ul>



<p class="wp-block-paragraph">This turns WUD from just another background service into a powerful UI-driven monitoring assistant.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4e6.png" alt="📦" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Getting Started in 5 Minutes</h2>



<p class="wp-block-paragraph">Deploying WUD is surprisingly simple. Here&#8217;s a basic example using Docker Compose:</p>



<pre class="wp-block-code"><code>version: "3.3"
services:
  wud:
    image: fmartinou/whats-up-docker
    container_name: wud
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    ports:
      - "3000:3000"
    environment:
      - WUD_TRIGGER_EMAIL_TO=you@example.com
      - WUD_TRIGGER_EMAIL_SMTP_HOST=smtp.example.com
      - WUD_TRIGGER_EMAIL_SMTP_PORT=587
      - WUD_TRIGGER_EMAIL_SMTP_USERNAME=your_username
      - WUD_TRIGGER_EMAIL_SMTP_PASSWORD=your_password
</code></pre>



<p class="wp-block-paragraph">Once it&#8217;s running, visit <code>http://localhost:3000</code> (or your server’s IP) to access the web dashboard.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4ac.png" alt="💬" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Notifications: Choose Your Channel</h2>



<p class="wp-block-paragraph">WUD can send notifications via:</p>



<ul class="wp-block-list">
<li><strong>Email</strong>: Ideal for personal servers or smaller teams.</li>



<li><strong>Slack</strong>: Integrates well with DevOps pipelines.</li>



<li><strong>MQTT</strong>: Perfect for IoT/automation setups.</li>



<li><strong>Webhooks</strong>: Trigger custom update workflows (like automatic redeploys or backups).</li>
</ul>



<p class="wp-block-paragraph">You can even set up <strong>multiple triggers per container</strong>.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f6e1.png" alt="🛡" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Stay Secure, Stay Updated</h2>



<p class="wp-block-paragraph">Running outdated containers can expose your system to vulnerabilities. WUD helps you avoid this by:</p>



<ul class="wp-block-list">
<li>Prompting early patching</li>



<li>Monitoring containers 24/7</li>



<li>Supporting multi-arch and registry-compatible images</li>
</ul>



<p class="wp-block-paragraph">It doesn&#8217;t replace update automation tools like Watchtower, but complements them with <strong>granular visibility</strong> before updates are applied.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f525.png" alt="🔥" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Real-World Use Cases</h2>



<p class="wp-block-paragraph">Here are some great examples of WUD in the wild:</p>



<ul class="wp-block-list">
<li><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f510.png" alt="🔐" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong>Self-hosted services</strong>: Running Pi-hole, Home Assistant, Nextcloud? Get alerts before your services become outdated or vulnerable.</li>



<li><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f468-200d-1f4bb.png" alt="👨‍💻" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong>Development environments</strong>: Developers using Docker-based stacks can be notified of new base images (Node, Python, Java) for better consistency and performance.</li>



<li><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f6f0.png" alt="🛰" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong>Production clusters</strong>: Ops teams can integrate WUD with CI/CD pipelines to schedule updates safely.</li>



<li><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f680.png" alt="🚀" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong>Homelab setups</strong>: Perfect for tinkerers and home sysadmins to maintain their containers easily.</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f9e9.png" alt="🧩" class="wp-smiley" style="height: 1em; max-height: 1em;" /> WUD vs. Watchtower</h2>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>Feature</th><th>WUD</th><th>Watchtower</th></tr></thead><tbody><tr><td>Web UI</td><td><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Yes</td><td><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/274c.png" alt="❌" class="wp-smiley" style="height: 1em; max-height: 1em;" /> No</td></tr><tr><td>Notification</td><td><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Flexible</td><td><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Email, Slack</td></tr><tr><td>Auto-updates</td><td><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/274c.png" alt="❌" class="wp-smiley" style="height: 1em; max-height: 1em;" /> No</td><td><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Yes</td></tr><tr><td>Transparency</td><td><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> High control</td><td><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/26a0.png" alt="⚠" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Can be automatic</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">Use <strong>WUD for visibility</strong>, and <strong>Watchtower</strong> if you want automatic image pulls and container redeploys.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f91d.png" alt="🤝" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Community &amp; Support</h2>



<p class="wp-block-paragraph">WUD is open-source and actively developed on GitHub:<br><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f517.png" alt="🔗" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <a href="https://github.com/getwud/wud">https://github.com/getwud/wud</a></p>



<p class="wp-block-paragraph">You’ll find extensive <a href="https://getwud.github.io/wud/">documentation</a> covering everything from basic setup to advanced features, like authentication, registry credentials, and notifications via third-party services.</p>



<p class="wp-block-paragraph">Got issues or feature ideas? Just open an issue and join the community discussions.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f9e0.png" alt="🧠" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Final Thoughts</h2>



<p class="wp-block-paragraph">Keeping containers up to date should never be an afterthought. With WUD, you&#8217;re no longer flying blind when it comes to Docker image updates. Whether you’re a sysadmin, homelabber, DevOps engineer, or a curious tinkerer, WUD gives you real-time visibility and control over what’s running in your infrastructure.</p>



<p class="wp-block-paragraph">Try it once—WUD will become your new best friend in Docker image hygiene.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> TL;DR</h2>



<ul class="wp-block-list">
<li>WUD = “What’s Up Docker”</li>



<li>Monitors Docker containers for image updates</li>



<li>Notifies you via email, Slack, MQTT, or webhook</li>



<li>Has a clean and powerful web UI</li>



<li>Easy to set up and fully customizable</li>
</ul>



<p class="wp-block-paragraph">Keep your containers fresh and your system secure with WUD.</p>
<p>The post <a href="https://hamradio.my/2025/07/keeping-your-docker-containers-fresh-with-wud/">Keeping Your Docker Containers Fresh with WUD</a> appeared on <a href="https://hamradio.my">Hamradio.my - Amateur Radio, Tech Insights and Product Reviews</a> by <a href="https://hamradio.my/author/9m2pju/">9M2PJU</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://hamradio.my/2025/07/keeping-your-docker-containers-fresh-with-wud/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Dockge: The Ultimate Docker Compose Manager for Modern Self-Hosters</title>
		<link>https://hamradio.my/2025/06/dockge-the-ultimate-docker-compose-manager-for-modern-self-hosters/</link>
					<comments>https://hamradio.my/2025/06/dockge-the-ultimate-docker-compose-manager-for-modern-self-hosters/#respond</comments>
		
		<dc:creator><![CDATA[9M2PJU]]></dc:creator>
		<pubDate>Sun, 29 Jun 2025 16:54:39 +0000</pubDate>
				<category><![CDATA[containerization]]></category>
		<category><![CDATA[docker]]></category>
		<category><![CDATA[maintenance]]></category>
		<category><![CDATA[composemanager]]></category>
		<category><![CDATA[containers]]></category>
		<category><![CDATA[devops]]></category>
		<category><![CDATA[Docker]]></category>
		<category><![CDATA[dockercompose]]></category>
		<category><![CDATA[dockertools]]></category>
		<category><![CDATA[dockerui]]></category>
		<category><![CDATA[dockge]]></category>
		<category><![CDATA[homelab]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[opensource]]></category>
		<category><![CDATA[selfhosted]]></category>
		<category><![CDATA[selfhostedapps]]></category>
		<category><![CDATA[selfhosting]]></category>
		<category><![CDATA[servermanagement]]></category>
		<category><![CDATA[softwaretools]]></category>
		<category><![CDATA[SysAdmin]]></category>
		<category><![CDATA[techstack]]></category>
		<category><![CDATA[webui]]></category>
		<category><![CDATA[yaml]]></category>
		<guid isPermaLink="false">https://hamradio.my/?p=7570</guid>

					<description><![CDATA[<p>In the evolving world of containerized infrastructure, managing Docker Compose projects can be either a seamless dream or an administrative nightmare. For those who want power, clarity, and elegance in managing their Docker Compose stacks—without relying on bloated dashboards—meet Dockge. Developed by Louis Lam, the creator of Uptime Kuma, Dockge is a sleek, self-hosted solution [&#8230;]</p>
<p>The post <a href="https://hamradio.my/2025/06/dockge-the-ultimate-docker-compose-manager-for-modern-self-hosters/">Dockge: The Ultimate Docker Compose Manager for Modern Self-Hosters</a> appeared on <a href="https://hamradio.my">Hamradio.my - Amateur Radio, Tech Insights and Product Reviews</a> by <a href="https://hamradio.my/author/9m2pju/">9M2PJU</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">In the evolving world of containerized infrastructure, managing Docker Compose projects can be either a seamless dream or an administrative nightmare. For those who want power, clarity, and elegance in managing their Docker Compose stacks—<strong>without relying on bloated dashboards</strong>—meet <strong>Dockge</strong>.</p>



<p class="wp-block-paragraph">Developed by <strong>Louis Lam</strong>, the creator of Uptime Kuma, Dockge is a sleek, self-hosted solution for managing your <code>docker-compose.yaml</code> files in a user-friendly, modern web UI—directly from your own infrastructure.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f6a2.png" alt="🚢" class="wp-smiley" style="height: 1em; max-height: 1em;" /> What Is Dockge?</h2>



<p class="wp-block-paragraph">Dockge is a <strong>Docker Compose manager</strong> that acts as a control center for all your containerized applications. Unlike heavyweight orchestration platforms like Portainer or Rancher, Dockge <strong>doesn’t abstract away your Compose files</strong>—instead, it embraces them.</p>



<p class="wp-block-paragraph">It runs in your browser, provides a beautiful and responsive interface, and gives you full control over managing, editing, and deploying Docker Compose stacks.</p>



<p class="wp-block-paragraph">If you’ve been manually juggling <code>docker-compose up</code>, <code>down</code>, <code>logs</code>, and <code>pull</code> across multiple folders and terminals, Dockge will feel like a leap into the future.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f527.png" alt="🔧" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Core Features That Make Dockge Shine</h2>



<h3 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f9e9.png" alt="🧩" class="wp-smiley" style="height: 1em; max-height: 1em;" /> File-Centric Management</h3>



<p class="wp-block-paragraph">Dockge doesn’t lock you into a database or an internal config. Your <code>compose.yaml</code> files live on disk, exactly where you put them. Want to edit them outside Dockge? Go ahead. Dockge simply reflects and operates on your actual file structure.</p>



<h3 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f5a5.png" alt="🖥" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Clean, Reactive UI</h3>



<p class="wp-block-paragraph">Built with modern web technologies (likely Vue/React), Dockge’s interface is snappy and beautiful. Navigating your projects, spinning containers up and down, and checking logs feels almost instantaneous.</p>



<h3 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/270d.png" alt="✍" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Built-in YAML Editor</h3>



<p class="wp-block-paragraph">No need to SSH in or fumble through nano. Dockge provides an in-browser YAML editor with syntax highlighting, so you can tweak your Compose files in real-time, from any device.</p>



<h3 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4e6.png" alt="📦" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Manage Container Lifecycle</h3>



<p class="wp-block-paragraph">With just a few clicks, you can:</p>



<ul class="wp-block-list">
<li>Start or stop containers</li>



<li>Restart entire stacks</li>



<li>Pull new images</li>



<li>View live logs</li>



<li>See environment variables</li>
</ul>



<h3 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4c1.png" alt="📁" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Multiple Project Support</h3>



<p class="wp-block-paragraph">Dockge supports multiple projects, each represented as a folder containing a Compose file. Think of it as a workspace manager—ideal for homelabbers running various self-hosted services like Home Assistant, Nextcloud, Pi-hole, Jellyfin, etc.</p>



<h3 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f310.png" alt="🌐" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Web Terminal</h3>



<p class="wp-block-paragraph">Need to run a one-off command inside a container? The integrated web terminal gives you shell access right in the browser, without needing to <code>docker exec</code> manually.</p>



<h3 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f6e0.png" alt="🛠" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Convert Docker Run to Compose</h3>



<p class="wp-block-paragraph">This underrated feature lets you paste a <code>docker run</code> command and convert it into a <code>docker-compose.yaml</code> file. It’s a brilliant way to transition your one-off containers to managed stacks.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f3af.png" alt="🎯" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Who Is Dockge For?</h2>



<p class="wp-block-paragraph">Dockge is tailor-made for:</p>



<ul class="wp-block-list">
<li><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f9d1-200d-1f4bb.png" alt="🧑‍💻" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong>Developers</strong> who want more control over containerized environments.</li>



<li><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f3e0.png" alt="🏠" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong>Self-hosting enthusiasts</strong> looking for clean, no-nonsense management of their homelab apps.</li>



<li><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f9e0.png" alt="🧠" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong>Tech-savvy hobbyists</strong> who don’t want to learn Kubernetes or manage overkill dashboards.</li>



<li><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4e6.png" alt="📦" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong>Minimalists</strong> who believe that good tools should be powerful <em>and</em> elegant.</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f680.png" alt="🚀" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Getting Started with Dockge</h2>



<p class="wp-block-paragraph">Setting up Dockge is incredibly simple—if you already use Docker Compose, you’re halfway there. Here’s a high-level overview:</p>



<h3 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4e6.png" alt="📦" class="wp-smiley" style="height: 1em; max-height: 1em;" /> 1. Clone the Repository</h3>



<pre class="wp-block-code"><code>git clone https://github.com/louislam/dockge /opt/dockge
</code></pre>



<h3 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4c1.png" alt="📁" class="wp-smiley" style="height: 1em; max-height: 1em;" /> 2. Move Into the Directory</h3>



<pre class="wp-block-code"><code>cd /opt/dockge
</code></pre>



<h3 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f3d7.png" alt="🏗" class="wp-smiley" style="height: 1em; max-height: 1em;" /> 3. Start the Service</h3>



<pre class="wp-block-code"><code>docker compose up -d
</code></pre>



<p class="wp-block-paragraph">By default, Dockge runs a web server where you can start managing your Compose projects immediately. It reads your existing file structure, meaning there’s <strong>no database</strong> to configure and <strong>no vendor lock-in</strong>.</p>



<h3 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f510.png" alt="🔐" class="wp-smiley" style="height: 1em; max-height: 1em;" /> 4. Optional: Add Auth and SSL</h3>



<p class="wp-block-paragraph">You can easily integrate it behind a reverse proxy with basic auth or OAuth (via Nginx, Traefik, etc.) to keep your setup secure.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4ac.png" alt="💬" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Community &amp; Support</h2>



<p class="wp-block-paragraph">Dockge is a growing open-source project with an active and supportive community. Here’s how to get involved:</p>



<ul class="wp-block-list">
<li><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f5e3.png" alt="🗣" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Join <a href="https://github.com/louislam/dockge/discussions">GitHub Discussions</a></li>



<li><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f41e.png" alt="🐞" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Report bugs and suggest features via <a href="https://github.com/louislam/dockge/issues">GitHub Issues</a></li>



<li><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f91d.png" alt="🤝" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Contribute code or docs to help the project grow</li>
</ul>



<p class="wp-block-paragraph">Louis Lam has a reputation for responsiveness and quality (just look at Uptime Kuma’s success), so Dockge is in good hands.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f9ed.png" alt="🧭" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Dockge vs Alternatives</h2>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>Feature</th><th>Dockge</th><th>Portainer</th><th>Yacht</th></tr></thead><tbody><tr><td>Compose-first design</td><td><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Yes</td><td><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/274c.png" alt="❌" class="wp-smiley" style="height: 1em; max-height: 1em;" /> No (UI-driven)</td><td><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Yes</td></tr><tr><td>File-based</td><td><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Yes</td><td><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/274c.png" alt="❌" class="wp-smiley" style="height: 1em; max-height: 1em;" /> No</td><td><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Yes</td></tr><tr><td>Lightweight UI</td><td><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Blazing fast</td><td><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/274c.png" alt="❌" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Heavy</td><td><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Moderate</td></tr><tr><td>Conversion Tools</td><td><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> docker run → compose</td><td><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/274c.png" alt="❌" class="wp-smiley" style="height: 1em; max-height: 1em;" /> No</td><td><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/274c.png" alt="❌" class="wp-smiley" style="height: 1em; max-height: 1em;" /> No</td></tr><tr><td>Terminal Access</td><td><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Built-in</td><td><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /></td><td><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/274c.png" alt="❌" class="wp-smiley" style="height: 1em; max-height: 1em;" /> No</td></tr><tr><td>Multi-project</td><td><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Excellent</td><td><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /></td><td><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /></td></tr></tbody></table></figure>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f9e0.png" alt="🧠" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Final Thoughts: Should You Use Dockge?</h2>



<p class="wp-block-paragraph"><strong>Absolutely—especially if you value clean interfaces and control.</strong></p>



<p class="wp-block-paragraph">Dockge bridges the gap between command-line flexibility and modern user interfaces. It’s the perfect tool for self-hosters and developers who want a <strong>non-intrusive</strong>, <strong>elegant</strong>, and <strong>functional</strong> way to manage Docker Compose environments.</p>



<p class="wp-block-paragraph">Whether you&#8217;re managing a fleet of Raspberry Pis, running a mini data center at home, or just hosting your personal blog and media server, Dockge will make your life easier.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f517.png" alt="🔗" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Explore More</h2>



<p class="wp-block-paragraph"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f449.png" alt="👉" class="wp-smiley" style="height: 1em; max-height: 1em;" /> GitHub: <a href="https://github.com/louislam/dockge">https://github.com/louislam/dockge</a></p>



<p class="wp-block-paragraph"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f449.png" alt="👉" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Try it, star it, and join the conversation. Your containers will thank you.</p>
<p>The post <a href="https://hamradio.my/2025/06/dockge-the-ultimate-docker-compose-manager-for-modern-self-hosters/">Dockge: The Ultimate Docker Compose Manager for Modern Self-Hosters</a> appeared on <a href="https://hamradio.my">Hamradio.my - Amateur Radio, Tech Insights and Product Reviews</a> by <a href="https://hamradio.my/author/9m2pju/">9M2PJU</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://hamradio.my/2025/06/dockge-the-ultimate-docker-compose-manager-for-modern-self-hosters/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>PortNote – A Beautiful and Simple Way to Document Your Network Ports</title>
		<link>https://hamradio.my/2025/06/portnote-a-beautiful-and-simple-way-to-document-your-network-ports/</link>
					<comments>https://hamradio.my/2025/06/portnote-a-beautiful-and-simple-way-to-document-your-network-ports/#respond</comments>
		
		<dc:creator><![CDATA[9M2PJU]]></dc:creator>
		<pubDate>Sat, 28 Jun 2025 16:41:08 +0000</pubDate>
				<category><![CDATA[docker]]></category>
		<category><![CDATA[networking]]></category>
		<category><![CDATA[self hosted]]></category>
		<category><![CDATA[devtools]]></category>
		<category><![CDATA[Docker]]></category>
		<category><![CDATA[dockerapps]]></category>
		<category><![CDATA[homelab]]></category>
		<category><![CDATA[homelabsetup]]></category>
		<category><![CDATA[infosec]]></category>
		<category><![CDATA[itmanagement]]></category>
		<category><![CDATA[jsonstorage]]></category>
		<category><![CDATA[lightweightapps]]></category>
		<category><![CDATA[networkmapping]]></category>
		<category><![CDATA[networktools]]></category>
		<category><![CDATA[opensource]]></category>
		<category><![CDATA[portmanagement]]></category>
		<category><![CDATA[portnote]]></category>
		<category><![CDATA[porttracker]]></category>
		<category><![CDATA[selfhosted]]></category>
		<category><![CDATA[selfhostedapps]]></category>
		<category><![CDATA[selfhostedutility]]></category>
		<category><![CDATA[SysAdmin]]></category>
		<category><![CDATA[webapps]]></category>
		<guid isPermaLink="false">https://hamradio.my/?p=7567</guid>

					<description><![CDATA[<p>When you run a self-hosted home lab or manage multiple services on a single machine, it’s easy to lose track of what port is used by what service. You open :3000 and wonder — is that Grafana or some test app you forgot about last year? This is where PortNote comes in — a minimal, [&#8230;]</p>
<p>The post <a href="https://hamradio.my/2025/06/portnote-a-beautiful-and-simple-way-to-document-your-network-ports/">PortNote – A Beautiful and Simple Way to Document Your Network Ports</a> appeared on <a href="https://hamradio.my">Hamradio.my - Amateur Radio, Tech Insights and Product Reviews</a> by <a href="https://hamradio.my/author/9m2pju/">9M2PJU</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">When you run a self-hosted home lab or manage multiple services on a single machine, it’s easy to lose track of what port is used by what service. You open <code>:3000</code> and wonder — is that Grafana or some test app you forgot about last year?</p>



<p class="wp-block-paragraph">This is where <strong>PortNote</strong> comes in — a <strong>minimal, beautiful, and self-hosted tool</strong> to help you track and document all your used ports in one glance.</p>



<p class="wp-block-paragraph">Whether you’re running dozens of Docker containers, VMs, or bare-metal services, <strong>PortNote is a must-have</strong> for keeping your infrastructure tidy and your sanity intact.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f50d.png" alt="🔍" class="wp-smiley" style="height: 1em; max-height: 1em;" /> What is PortNote?</h3>



<p class="wp-block-paragraph"><strong>PortNote</strong> is a web-based app designed to let you quickly and visually document port usages. Think of it as a personal notepad or dashboard specifically built for network and application ports.</p>



<p class="wp-block-paragraph">It’s <strong>completely self-hosted</strong>, requires no external services, and offers a beautiful interface for you to:</p>



<ul class="wp-block-list">
<li>Track which services use which ports</li>



<li>Add meaningful descriptions and links</li>



<li>Group entries by server or IP</li>



<li>Avoid port conflicts</li>



<li>Stay organized, especially in a growing homelab or VPS setup</li>
</ul>



<p class="wp-block-paragraph">PortNote is perfect for:</p>



<ul class="wp-block-list">
<li><strong>Homelab enthusiasts</strong></li>



<li><strong>Sysadmins managing multiple services</strong></li>



<li><strong>Developers juggling local development ports</strong></li>



<li><strong>Anyone using Docker, Proxmox, or VMs</strong></li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2728.png" alt="✨" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Key Features</h3>



<ul class="wp-block-list">
<li><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f9e0.png" alt="🧠" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong>Visual port mapping:</strong> Clean, card-style display of services and ports</li>



<li><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4dd.png" alt="📝" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong>Notes and descriptions:</strong> Add context to each port so you never forget</li>



<li><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f517.png" alt="🔗" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong>Clickable links:</strong> Link to service dashboards or local UIs</li>



<li><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f5a5.png" alt="🖥" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong>Group by server/IP:</strong> Useful when managing multiple machines</li>



<li><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2699.png" alt="⚙" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong>Lightweight &amp; fast:</strong> No database, runs entirely in your browser</li>



<li><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f308.png" alt="🌈" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong>Simple JSON backend:</strong> Data is stored in a local <code>db.json</code> file</li>



<li><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f433.png" alt="🐳" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong>Docker-ready:</strong> Just one container to deploy</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4e6.png" alt="📦" class="wp-smiley" style="height: 1em; max-height: 1em;" /> How to Deploy PortNote (Docker)</h3>



<p class="wp-block-paragraph">Getting PortNote running is super simple. Here’s a quick guide to deploy it using Docker:</p>



<h4 class="wp-block-heading">Step 1: Clone the Repository</h4>



<pre class="wp-block-code"><code>git clone https://github.com/crocofied/PortNote.git
cd PortNote
</code></pre>



<h4 class="wp-block-heading">Step 2: Launch with Docker</h4>



<pre class="wp-block-code"><code>docker compose up -d
</code></pre>



<p class="wp-block-paragraph">That’s it!</p>



<p class="wp-block-paragraph">By default, PortNote runs on port <strong>5173</strong>. Open your browser and head to:</p>



<pre class="wp-block-code"><code>http:&#47;&#47;localhost:5173
</code></pre>



<p class="wp-block-paragraph">You’ll be greeted with a clean and modern interface where you can begin adding your services and their associated ports.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f5c3.png" alt="🗃" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Data Storage</h3>



<p class="wp-block-paragraph">PortNote stores your port notes in a local file called <code>db.json</code>.</p>



<p class="wp-block-paragraph">By default, this file is mounted into the container to persist your data:</p>



<pre class="wp-block-code"><code>volumes:
  - ./db.json:/app/db.json
</code></pre>



<p class="wp-block-paragraph">You can easily back it up, version it with Git, or sync it across devices if needed. It’s that simple.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/270d.png" alt="✍" class="wp-smiley" style="height: 1em; max-height: 1em;" /> How to Use PortNote</h3>



<p class="wp-block-paragraph">Once you&#8217;re inside the web UI, you&#8217;ll see a form to add a new port entry. Here&#8217;s how you might use it:</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>Field</th><th>Example</th></tr></thead><tbody><tr><td>Name</td><td>Grafana</td></tr><tr><td>Port</td><td>3000</td></tr><tr><td>IP/Server</td><td>192.168.1.10</td></tr><tr><td>Description</td><td>Monitoring dashboard for system stats</td></tr><tr><td>Link</td><td><a href="http://192.168.1.10:3000/">http://192.168.1.10:3000</a></td></tr></tbody></table></figure>



<p class="wp-block-paragraph">Click <strong>Add</strong>, and the port is logged and visually displayed on your dashboard.</p>



<p class="wp-block-paragraph">You can edit or delete entries anytime — it’s designed to be fast and intuitive.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f310.png" alt="🌐" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Demo</h3>



<p class="wp-block-paragraph">Want to try before hosting?</p>



<p class="wp-block-paragraph">A live demo is available at:<br><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4ce.png" alt="📎" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <a href="https://portnote-demo.netlify.app/">https://portnote-demo.netlify.app</a></p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">Note: The demo does not save your data between sessions.</p>
</blockquote>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f512.png" alt="🔒" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Privacy and Simplicity</h3>



<p class="wp-block-paragraph">PortNote doesn’t phone home. It’s a <strong>fully static app</strong> with no telemetry, no analytics, and no dependencies beyond your browser and the JSON file. It’s perfect for privacy-focused users.</p>



<p class="wp-block-paragraph">In fact, if you’d prefer to run it without Docker, you can even build and serve it statically via NGINX, Caddy, or any file server.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f6e0.png" alt="🛠" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Advanced Deployment (Static Hosting)</h3>



<p class="wp-block-paragraph">Want to host PortNote without Docker? You can!</p>



<h4 class="wp-block-heading">Build it manually:</h4>



<pre class="wp-block-code"><code>npm install
npm run build
</code></pre>



<p class="wp-block-paragraph">Then copy the contents of the <code>dist/</code> directory to any web server of your choice — it’s just HTML, CSS, and JS.</p>



<p class="wp-block-paragraph">You’ll also need to configure access to <code>db.json</code> or wire it up to a backend of your choice (e.g., Firebase, Supabase, etc.) if you want something more advanced.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4ac.png" alt="💬" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Why PortNote is Useful</h3>



<p class="wp-block-paragraph">In a world where we’re running Grafana on <code>:3000</code>, Portainer on <code>:9000</code>, Prometheus on <code>:9090</code>, your blog on <code>:4000</code>, and who knows what else — it&#8217;s easy to forget.</p>



<p class="wp-block-paragraph">PortNote gives you a single place to document everything and avoid confusion or port conflicts.</p>



<p class="wp-block-paragraph">It also becomes handy when you revisit your homelab setup after a few weeks (or months) and don’t want to reverse-engineer every <code>docker-compose.yml</code>.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f9e0.png" alt="🧠" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Final Thoughts</h3>



<p class="wp-block-paragraph">PortNote is one of those tools that’s <strong>small, but incredibly effective</strong>. If you maintain any sort of local or cloud infrastructure, this is a fantastic addition to your toolbox.</p>



<p class="wp-block-paragraph">No overhead, no login systems, no complex config. Just a clean interface to help you stay organized.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p class="wp-block-paragraph"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f517.png" alt="🔗" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong>Official GitHub:</strong><br><a href="https://github.com/crocofied/PortNote">https://github.com/crocofied/PortNote</a></p>



<p class="wp-block-paragraph"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4a1.png" alt="💡" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong>Created by:</strong> <a href="https://github.com/crocofied">@crocofied</a></p>
<p>The post <a href="https://hamradio.my/2025/06/portnote-a-beautiful-and-simple-way-to-document-your-network-ports/">PortNote – A Beautiful and Simple Way to Document Your Network Ports</a> appeared on <a href="https://hamradio.my">Hamradio.my - Amateur Radio, Tech Insights and Product Reviews</a> by <a href="https://hamradio.my/author/9m2pju/">9M2PJU</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://hamradio.my/2025/06/portnote-a-beautiful-and-simple-way-to-document-your-network-ports/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Why Windows 10 Feels Lighter Than Ubuntu 25.04 (And How to Fix It)</title>
		<link>https://hamradio.my/2025/06/why-windows-10-feels-lighter-than-ubuntu-25-04-and-how-to-fix-it/</link>
					<comments>https://hamradio.my/2025/06/why-windows-10-feels-lighter-than-ubuntu-25-04-and-how-to-fix-it/#respond</comments>
		
		<dc:creator><![CDATA[9M2PJU]]></dc:creator>
		<pubDate>Tue, 24 Jun 2025 07:14:24 +0000</pubDate>
				<category><![CDATA[do it yourself]]></category>
		<category><![CDATA[gnome]]></category>
		<category><![CDATA[microsoft windows]]></category>
		<category><![CDATA[open source operating system]]></category>
		<category><![CDATA[optimization]]></category>
		<category><![CDATA[tips and tricks]]></category>
		<category><![CDATA[tweaks]]></category>
		<category><![CDATA[debianbased]]></category>
		<category><![CDATA[foss]]></category>
		<category><![CDATA[homelab]]></category>
		<category><![CDATA[lightweightlinux]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[linuxperformance]]></category>
		<category><![CDATA[performance]]></category>
		<category><![CDATA[snapsucks]]></category>
		<category><![CDATA[SysAdmin]]></category>
		<category><![CDATA[thinkpad]]></category>
		<category><![CDATA[ubuntu]]></category>
		<category><![CDATA[ubuntu2504]]></category>
		<category><![CDATA[windows10]]></category>
		<category><![CDATA[xfce]]></category>
		<guid isPermaLink="false">https://hamradio.my/?p=7545</guid>

					<description><![CDATA[<p>If you&#8217;ve recently switched to Ubuntu 25.04 from Windows 10 on your laptop—perhaps like mine, a Lenovo ThinkPad T460—you might be surprised to find that Ubuntu feels slower or more sluggish than expected. Isn’t Linux supposed to be faster? Yes… but &#8220;lighter&#8221; doesn’t always mean &#8220;faster&#8221; in daily use. There are several reasons why Ubuntu [&#8230;]</p>
<p>The post <a href="https://hamradio.my/2025/06/why-windows-10-feels-lighter-than-ubuntu-25-04-and-how-to-fix-it/">Why Windows 10 Feels Lighter Than Ubuntu 25.04 (And How to Fix It)</a> appeared on <a href="https://hamradio.my">Hamradio.my - Amateur Radio, Tech Insights and Product Reviews</a> by <a href="https://hamradio.my/author/9m2pju/">9M2PJU</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">If you&#8217;ve recently switched to Ubuntu 25.04 from Windows 10 on your laptop—perhaps like mine, a Lenovo ThinkPad T460—you might be surprised to find that <strong>Ubuntu feels slower</strong> or more sluggish than expected.</p>



<p class="wp-block-paragraph">Isn’t Linux supposed to be faster?</p>



<p class="wp-block-paragraph">Yes… but <strong>&#8220;lighter&#8221; doesn’t always mean &#8220;faster&#8221; in daily use</strong>. There are several reasons why Ubuntu 25.04 might feel heavier than Windows 10 on the same hardware, and the good news is: you can fix most of them.</p>



<p class="wp-block-paragraph">Let’s explore why this happens and how you can tweak Ubuntu for a smoother experience.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-gnome-desktop-beautiful-but-bulky"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f50d.png" alt="🔍" class="wp-smiley" style="height: 1em; max-height: 1em;" /> GNOME Desktop: Beautiful but Bulky</h2>



<p class="wp-block-paragraph">Ubuntu 25.04 ships with the <strong>GNOME desktop environment</strong>, which is modern and visually polished—but not lightweight.</p>



<p class="wp-block-paragraph">Compared to Windows 10&#8217;s UI, GNOME:</p>



<ul class="wp-block-list">
<li>Uses more <strong>RAM</strong> and <strong>CPU</strong></li>



<li>Has <strong>animations</strong> and <strong>background daemons</strong> that run persistently</li>



<li>May struggle on <strong>older or mid-range hardware</strong></li>
</ul>



<p class="wp-block-paragraph"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4a1.png" alt="💡" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong>Fix</strong>: Install a lighter desktop environment like:</p>



<ul class="wp-block-list">
<li><strong>Xfce</strong>: <code>sudo apt install xubuntu-desktop</code></li>



<li><strong>MATE</strong>: <code>sudo apt install ubuntu-mate-desktop</code></li>



<li><strong>LXQt</strong>: <code>sudo apt install lubuntu-desktop</code></li>
</ul>



<p class="wp-block-paragraph">These will drastically improve responsiveness, especially on older systems.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-memory-handling-different-philosophies"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f9e0.png" alt="🧠" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Memory Handling: Different Philosophies</h2>



<p class="wp-block-paragraph">Windows 10 uses aggressive <strong>memory prefetching</strong> and <strong>caching</strong> to make apps launch quickly. Even if the system uses more RAM, it often feels snappier.</p>



<p class="wp-block-paragraph">Ubuntu, on the other hand:</p>



<ul class="wp-block-list">
<li>Prioritizes minimal RAM usage at idle</li>



<li>Loads apps on-demand rather than predicting</li>
</ul>



<p class="wp-block-paragraph">So Linux may feel <strong>slower to launch apps</strong>, but it’s actually using RAM more efficiently. The “snappiness” just needs a few tweaks.</p>



<p class="wp-block-paragraph"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4a1.png" alt="💡" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong>Fix</strong>:</p>



<ul class="wp-block-list">
<li>Install <code>preload</code>: <code>sudo apt install preload</code></li>



<li>Enable zram swap: <code>sudo apt install zram-tools &amp;&amp; sudo systemctl enable --now zramswap.service</code></li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-drivers-windows-has-the-advantage"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f9f1.png" alt="🧱" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Drivers: Windows Has the Advantage</h2>



<p class="wp-block-paragraph">Most laptops come with <strong>OEM-optimized drivers for Windows</strong>. Linux often has to rely on:</p>



<ul class="wp-block-list">
<li>Generic open-source drivers</li>



<li>Community-developed alternatives (e.g. Nouveau for NVIDIA)</li>
</ul>



<p class="wp-block-paragraph">This can affect:</p>



<ul class="wp-block-list">
<li>Graphics performance</li>



<li>Battery life</li>



<li>Touchpad gestures</li>



<li>Wi-Fi stability</li>
</ul>



<p class="wp-block-paragraph"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4a1.png" alt="💡" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong>Fix</strong>:</p>



<ul class="wp-block-list">
<li>Use proprietary drivers where available: <code>sudo ubuntu-drivers autoinstall</code></li>



<li>Reboot and check with <code>lshw -c video</code> to confirm usage.</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-power-management-and-cpu-scaling"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f50b.png" alt="🔋" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Power Management and CPU Scaling</h2>



<p class="wp-block-paragraph">On Windows, manufacturers preload <strong>power profiles</strong>, tuned firmware, and thermal governors.</p>



<p class="wp-block-paragraph">Linux relies on the <strong>CPU governor</strong>, which may default to &#8220;powersave&#8221; or &#8220;ondemand&#8221;—making your laptop feel laggy.</p>



<p class="wp-block-paragraph"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4a1.png" alt="💡" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong>Fix</strong>:</p>



<ul class="wp-block-list">
<li>View profiles: <code>powerprofilesctl list</code></li>



<li>Switch to performance: <code>sudo apt install power-profiles-daemon powerprofilesctl set performance</code></li>
</ul>



<p class="wp-block-paragraph">For older systems, use <code>cpufrequtils</code>:</p>



<pre class="wp-block-code"><code>sudo apt install cpufrequtils
echo 'GOVERNOR="performance"' | sudo tee /etc/default/cpufrequtils
sudo systemctl restart cpufrequtils
</code></pre>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-snap-packages-and-startup-lag"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4e6.png" alt="📦" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Snap Packages and Startup Lag</h2>



<p class="wp-block-paragraph">Ubuntu ships many apps as <strong>Snap packages</strong>. These:</p>



<ul class="wp-block-list">
<li>Are isolated and more secure</li>



<li>But launch slower and consume more disk I/O</li>
</ul>



<p class="wp-block-paragraph"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4a1.png" alt="💡" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong>Fix</strong>:</p>



<ul class="wp-block-list">
<li>Replace with <code>.deb</code> versions when possible: <code>sudo snap remove firefox sudo add-apt-repository ppa:mozillateam/ppa sudo apt install firefox</code></li>
</ul>



<p class="wp-block-paragraph">You can also disable Snap entirely and switch to <strong>Flatpak</strong> or classic APT apps.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-optional-tips-for-a-faster-ubuntu"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f9f0.png" alt="🧰" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Optional Tips for a Faster Ubuntu</h2>



<p class="wp-block-paragraph">Here are a few more tweaks to make Ubuntu faster and lighter:</p>



<h3 class="wp-block-heading" id="h-disable-unused-services"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f9f9.png" alt="🧹" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Disable Unused Services</h3>



<p class="wp-block-paragraph">Use <code>systemd-analyze blame</code> to see slow boot processes. Disable what you don&#8217;t need:</p>



<pre class="wp-block-code"><code>sudo systemctl disable &lt;service&gt;
</code></pre>



<h3 class="wp-block-heading" id="h-use-a-lightweight-file-manager"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4ca.png" alt="📊" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Use a Lightweight File Manager</h3>



<p class="wp-block-paragraph">Replace Nautilus with something faster like:</p>



<pre class="wp-block-code"><code>sudo apt install thunar
</code></pre>



<h3 class="wp-block-heading" id="h-use-a-lightweight-browser"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f310.png" alt="🌐" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Use a Lightweight Browser</h3>



<p class="wp-block-paragraph">Try <strong>Librewolf</strong>, <strong>Falkon</strong>, or <strong>GNOME Web</strong> instead of Firefox or Chrome.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-benchmark-comparison-windows-10-vs-ubuntu-25-04-gnome"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4c8.png" alt="📈" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Benchmark Comparison: Windows 10 vs Ubuntu 25.04 (GNOME)</h2>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>Metric</th><th>Windows 10</th><th>Ubuntu 25.04 (GNOME)</th></tr></thead><tbody><tr><td>Idle RAM Usage</td><td>~2.2 GB</td><td>~1.6 GB</td></tr><tr><td>App Launch Time (Firefox)</td><td>Fast</td><td>Slight delay (Snap)</td></tr><tr><td>Battery Life (ThinkPad T460)</td><td>5.5 hours</td><td>4.5 hours</td></tr><tr><td>UI Responsiveness</td><td>Smooth</td><td>Slight lag</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">With the above tweaks (especially desktop environment change and Snap removal), Ubuntu can outperform Windows 10 in real-world use.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-conclusion-don-t-give-up-on-ubuntu">Conclusion: Don’t Give Up on Ubuntu!</h2>



<p class="wp-block-paragraph">If Ubuntu 25.04 feels heavier than Windows 10, it’s not your hardware—it’s just that <strong>Ubuntu’s default setup is not optimized for every machine out-of-the-box</strong>.</p>



<p class="wp-block-paragraph">The beauty of Linux is in its <strong>customizability</strong>. With a few simple tweaks, you can make Ubuntu faster, lighter, and tailored perfectly to your system.</p>



<p class="wp-block-paragraph">Feel free to share this post with friends facing the same issue—or better yet, give them a hand tuning their Linux box. </p>



<p class="wp-block-paragraph"></p>
<p>The post <a href="https://hamradio.my/2025/06/why-windows-10-feels-lighter-than-ubuntu-25-04-and-how-to-fix-it/">Why Windows 10 Feels Lighter Than Ubuntu 25.04 (And How to Fix It)</a> appeared on <a href="https://hamradio.my">Hamradio.my - Amateur Radio, Tech Insights and Product Reviews</a> by <a href="https://hamradio.my/author/9m2pju/">9M2PJU</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://hamradio.my/2025/06/why-windows-10-feels-lighter-than-ubuntu-25-04-and-how-to-fix-it/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>The Best Open Source NAS Operating Systems</title>
		<link>https://hamradio.my/2025/06/the-best-open-source-nas-operating-systems/</link>
					<comments>https://hamradio.my/2025/06/the-best-open-source-nas-operating-systems/#respond</comments>
		
		<dc:creator><![CDATA[9M2PJU]]></dc:creator>
		<pubDate>Sun, 22 Jun 2025 03:25:19 +0000</pubDate>
				<category><![CDATA[amateur radio]]></category>
		<category><![CDATA[backup]]></category>
		<category><![CDATA[cloud]]></category>
		<category><![CDATA[DIY]]></category>
		<category><![CDATA[do it yourself]]></category>
		<category><![CDATA[free open source software]]></category>
		<category><![CDATA[free operating system]]></category>
		<category><![CDATA[ham radio]]></category>
		<category><![CDATA[Network Attached Storage]]></category>
		<category><![CDATA[btrfs]]></category>
		<category><![CDATA[datastorage]]></category>
		<category><![CDATA[diyserver]]></category>
		<category><![CDATA[Docker]]></category>
		<category><![CDATA[easynas]]></category>
		<category><![CDATA[fileserver]]></category>
		<category><![CDATA[freebsd]]></category>
		<category><![CDATA[homelab]]></category>
		<category><![CDATA[homenas]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[linuxserver]]></category>
		<category><![CDATA[NAS]]></category>
		<category><![CDATA[OpenMediaVault]]></category>
		<category><![CDATA[opensourcenas]]></category>
		<category><![CDATA[RaspberryPi]]></category>
		<category><![CDATA[Rockstor]]></category>
		<category><![CDATA[selfhosted]]></category>
		<category><![CDATA[selfhosting]]></category>
		<category><![CDATA[serverbuild]]></category>
		<category><![CDATA[smb]]></category>
		<category><![CDATA[storage]]></category>
		<category><![CDATA[TechBlog]]></category>
		<category><![CDATA[TrueNAS]]></category>
		<category><![CDATA[XigmaNAS]]></category>
		<category><![CDATA[zfs]]></category>
		<guid isPermaLink="false">https://hamradio.my/?p=7534</guid>

					<description><![CDATA[<p>When it comes to setting up your own network-attached storage (NAS), open-source software offers an incredible range of options—powerful, flexible, and most importantly, free. Whether you&#8217;re building a home media server, backup system, or an advanced data management solution, there&#8217;s an open-source NAS out there for you. In this post, we’ll explore the top 5 [&#8230;]</p>
<p>The post <a href="https://hamradio.my/2025/06/the-best-open-source-nas-operating-systems/">The Best Open Source NAS Operating Systems</a> appeared on <a href="https://hamradio.my">Hamradio.my - Amateur Radio, Tech Insights and Product Reviews</a> by <a href="https://hamradio.my/author/9m2pju/">9M2PJU</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">When it comes to setting up your own network-attached storage (NAS), open-source software offers an incredible range of options—powerful, flexible, and most importantly, <strong>free</strong>. Whether you&#8217;re building a home media server, backup system, or an advanced data management solution, there&#8217;s an open-source NAS out there for you.</p>



<p class="wp-block-paragraph">In this post, we’ll explore the <strong>top 5 open-source NAS operating systems</strong> you can deploy today. Each one is suited to different needs—ranging from powerful enterprise-level setups to simple plug-and-play solutions for beginners.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-1-truenas-core-formerly-freenas-the-zfs-king"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f3c6.png" alt="🏆" class="wp-smiley" style="height: 1em; max-height: 1em;" /> 1. TrueNAS CORE (formerly FreeNAS) – The ZFS King</h2>



<p class="wp-block-paragraph"><strong>Base OS</strong>: FreeBSD<br><strong>Filesystem</strong>: ZFS<br><strong>Best for</strong>: Power users, enterprises, and anyone who values <strong>data integrity</strong></p>



<h3 class="wp-block-heading" id="h-why-truenas-core"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f31f.png" alt="🌟" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Why TrueNAS CORE?</h3>



<p class="wp-block-paragraph">TrueNAS CORE is the gold standard in open-source NAS software. Built on FreeBSD and leveraging the incredibly robust <strong>ZFS</strong> file system, it offers data protection features like checksumming, copy-on-write, and built-in snapshots.</p>



<p class="wp-block-paragraph">It comes with a polished web UI, plugin support (e.g., Nextcloud, Plex, Transmission), replication tools, encryption, and advanced networking. It even supports virtual machines and Docker via its Linux counterpart, <strong>TrueNAS SCALE</strong>.</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Recommended if you have <strong>8GB+ RAM</strong>, preferably ECC, and want bulletproof storage with enterprise-level features.</p>
</blockquote>



<p class="wp-block-paragraph"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f517.png" alt="🔗" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <a href="https://www.truenas.com/truenas-core/">https://www.truenas.com/truenas-core/</a></p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-2-openmediavault-omv-best-for-simplicity-and-home-use"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f7e2.png" alt="🟢" class="wp-smiley" style="height: 1em; max-height: 1em;" /> 2. OpenMediaVault (OMV) – Best for Simplicity and Home Use</h2>



<p class="wp-block-paragraph"><strong>Base OS</strong>: Debian Linux<br><strong>Filesystem</strong>: ext4, XFS, Btrfs, ZFS (via plugin)<br><strong>Best for</strong>: Home servers, Raspberry Pi NAS builds, beginners</p>



<h3 class="wp-block-heading" id="h-why-openmediavault"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f31f.png" alt="🌟" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Why OpenMediaVault?</h3>



<p class="wp-block-paragraph">If you&#8217;re looking for something lightweight and easy to manage, OMV is your go-to. It&#8217;s perfect for home users or beginners wanting to set up a file server, media server, or even a Time Machine backup destination.</p>



<p class="wp-block-paragraph">With Docker and Portainer integration, you can run containers effortlessly. It also has a large ecosystem of plugins and excellent community support.</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Ideal for Raspberry Pi, mini PCs, or old laptops converted into a NAS.</p>
</blockquote>



<p class="wp-block-paragraph"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f517.png" alt="🔗" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <a href="https://www.openmediavault.org/">https://www.openmediavault.org/</a></p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-3-rockstor-linux-based-nas-with-btrfs-power"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f7e1.png" alt="🟡" class="wp-smiley" style="height: 1em; max-height: 1em;" /> 3. Rockstor – Linux-Based NAS with Btrfs Power</h2>



<p class="wp-block-paragraph"><strong>Base OS</strong>: openSUSE (newer versions)<br><strong>Filesystem</strong>: Btrfs<br><strong>Best for</strong>: Developers, Docker fans, modern Linux users</p>



<h3 class="wp-block-heading" id="h-why-rockstor"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f31f.png" alt="🌟" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Why Rockstor?</h3>



<p class="wp-block-paragraph">Rockstor is a lesser-known but powerful NAS option that revolves around <strong>Btrfs</strong>, a modern copy-on-write file system with snapshot and compression capabilities. It features a clean web UI, Docker support, and great storage management features.</p>



<p class="wp-block-paragraph">If you&#8217;re into Linux and want an alternative to ZFS, Rockstor’s Btrfs-first approach is worth trying.</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Perfect for DIYers and devs looking to experiment with containers and Btrfs.</p>
</blockquote>



<p class="wp-block-paragraph"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f517.png" alt="🔗" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <a href="https://rockstor.com/">https://rockstor.com/</a></p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-4-xigmanas-formerly-nas4free-lightweight-bsd-nas"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f7e3.png" alt="🟣" class="wp-smiley" style="height: 1em; max-height: 1em;" /> 4. XigmaNAS (formerly NAS4Free) – Lightweight BSD NAS</h2>



<p class="wp-block-paragraph"><strong>Base OS</strong>: FreeBSD<br><strong>Filesystem</strong>: ZFS, UFS<br><strong>Best for</strong>: Legacy hardware, users who want a BSD NAS without bloat</p>



<h3 class="wp-block-heading" id="h-why-xigmanas"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f31f.png" alt="🌟" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Why XigmaNAS?</h3>



<p class="wp-block-paragraph">Think of XigmaNAS as the simpler cousin of TrueNAS. It’s BSD-based, supports ZFS, and runs well on older hardware. The UI is not as polished, but it gets the job done.</p>



<p class="wp-block-paragraph">It supports all major sharing protocols (SMB, NFS, AFP, FTP, etc.) and can be configured for RAID, iSCSI, and rsync easily.</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Great for repurposing older PCs into reliable NAS boxes.</p>
</blockquote>



<p class="wp-block-paragraph"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f517.png" alt="🔗" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <a href="https://www.xigmanas.com/">https://www.xigmanas.com/</a></p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-5-easynas-minimalist-and-straightforward"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f534.png" alt="🔴" class="wp-smiley" style="height: 1em; max-height: 1em;" /> 5. EasyNAS – Minimalist and Straightforward</h2>



<p class="wp-block-paragraph"><strong>Base OS</strong>: openSUSE<br><strong>Filesystem</strong>: Btrfs<br><strong>Best for</strong>: Total beginners, plug-and-play NAS setups</p>



<h3 class="wp-block-heading" id="h-why-easynas"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f31f.png" alt="🌟" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Why EasyNAS?</h3>



<p class="wp-block-paragraph">True to its name, EasyNAS is built for simplicity. It’s lightweight, quick to install, and has a minimal interface that lets you set up your file server in minutes. It lacks advanced features, but for basic use—like backing up files or sharing over the network—it’s more than capable.</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Best if you want a &#8220;set it and forget it&#8221; NAS with minimal learning curve.</p>
</blockquote>



<p class="wp-block-paragraph"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f517.png" alt="🔗" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <a href="https://easynas.org/">https://easynas.org/</a></p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-comparison-at-a-glance"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4ca.png" alt="📊" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Comparison at a Glance</h2>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>Feature</th><th>TrueNAS CORE</th><th>OpenMediaVault</th><th>Rockstor</th><th>XigmaNAS</th><th>EasyNAS</th></tr></thead><tbody><tr><td>OS Base</td><td>FreeBSD</td><td>Debian</td><td>openSUSE</td><td>FreeBSD</td><td>openSUSE</td></tr><tr><td>Main Filesystem</td><td>ZFS</td><td>ext4/XFS/ZFS</td><td>Btrfs</td><td>ZFS/UFS</td><td>Btrfs</td></tr><tr><td>Web Interface</td><td>Excellent</td><td>Simple</td><td>Modern</td><td>Basic</td><td>Minimal</td></tr><tr><td>Docker Support</td><td>Via SCALE</td><td>Native</td><td>Native</td><td>No</td><td>No</td></tr><tr><td>Minimum RAM</td><td>8GB+</td><td>2GB+</td><td>4GB+</td><td>2GB+</td><td>2GB+</td></tr><tr><td>Ideal For</td><td>Enterprise</td><td>Home NAS</td><td>Devs/Linux</td><td>Legacy HW</td><td>Beginners</td></tr></tbody></table></figure>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-final-thoughts-which-nas-should-you-choose"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f3af.png" alt="🎯" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Final Thoughts: Which NAS Should You Choose?</h2>



<ul class="wp-block-list">
<li><strong>Choose TrueNAS CORE</strong> if you want <strong>maximum reliability</strong> with ZFS, advanced features, and don’t mind the extra learning curve.</li>



<li><strong>Choose OpenMediaVault</strong> for <strong>ease of use</strong>, Raspberry Pi support, and excellent Docker integration.</li>



<li><strong>Choose Rockstor</strong> if you prefer Linux and want to explore <strong>Btrfs with Docker</strong>.</li>



<li><strong>Choose XigmaNAS</strong> for a <strong>light BSD-based NAS</strong> on old or underpowered hardware.</li>



<li><strong>Choose EasyNAS</strong> if you want a <strong>quick and easy local file server</strong> without the fluff.</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p class="wp-block-paragraph">Have questions or need help choosing the right NAS for your setup? Feel free to reach out or drop a comment below. Whether you’re running this on a recycled PC or a Raspberry Pi, there’s never been a better time to go open-source with your storage.</p>
<p>The post <a href="https://hamradio.my/2025/06/the-best-open-source-nas-operating-systems/">The Best Open Source NAS Operating Systems</a> appeared on <a href="https://hamradio.my">Hamradio.my - Amateur Radio, Tech Insights and Product Reviews</a> by <a href="https://hamradio.my/author/9m2pju/">9M2PJU</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://hamradio.my/2025/06/the-best-open-source-nas-operating-systems/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Best Small FreeBSD-Based Systems for Routers &#038; Firewalls (x86 Hardware)</title>
		<link>https://hamradio.my/2025/06/best-small-freebsd-based-systems-for-routers-firewalls-x86-hardware/</link>
					<comments>https://hamradio.my/2025/06/best-small-freebsd-based-systems-for-routers-firewalls-x86-hardware/#respond</comments>
		
		<dc:creator><![CDATA[9M2PJU]]></dc:creator>
		<pubDate>Sun, 15 Jun 2025 06:41:19 +0000</pubDate>
				<category><![CDATA[do it yourself]]></category>
		<category><![CDATA[firewall]]></category>
		<category><![CDATA[free open source software]]></category>
		<category><![CDATA[home brew]]></category>
		<category><![CDATA[internet]]></category>
		<category><![CDATA[networking]]></category>
		<category><![CDATA[open source operating system]]></category>
		<category><![CDATA[router]]></category>
		<category><![CDATA[bsd]]></category>
		<category><![CDATA[embedded]]></category>
		<category><![CDATA[freebsd]]></category>
		<category><![CDATA[homelab]]></category>
		<category><![CDATA[InternetSecurity]]></category>
		<category><![CDATA[itsecurity]]></category>
		<category><![CDATA[miniitx]]></category>
		<category><![CDATA[nanobsd]]></category>
		<category><![CDATA[netgate]]></category>
		<category><![CDATA[networkappliance]]></category>
		<category><![CDATA[opensource]]></category>
		<category><![CDATA[opnsense]]></category>
		<category><![CDATA[pfsense]]></category>
		<category><![CDATA[securehome]]></category>
		<category><![CDATA[SysAdmin]]></category>
		<category><![CDATA[TechDIY]]></category>
		<category><![CDATA[x86]]></category>
		<guid isPermaLink="false">https://hamradio.my/?p=7504</guid>

					<description><![CDATA[<p>Are you planning to build a dedicated firewall or router using x86 hardware? FreeBSD, known for its stability, security, and powerful networking stack, is the foundation for several robust solutions perfect for this task. In this post, we’ll explore the top FreeBSD-based small operating systems you can install on x86 hardware to transform it into [&#8230;]</p>
<p>The post <a href="https://hamradio.my/2025/06/best-small-freebsd-based-systems-for-routers-firewalls-x86-hardware/">Best Small FreeBSD-Based Systems for Routers &amp; Firewalls (x86 Hardware)</a> appeared on <a href="https://hamradio.my">Hamradio.my - Amateur Radio, Tech Insights and Product Reviews</a> by <a href="https://hamradio.my/author/9m2pju/">9M2PJU</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Are you planning to build a <strong>dedicated firewall or router</strong> using x86 hardware? FreeBSD, known for its stability, security, and powerful networking stack, is the foundation for several robust solutions perfect for this task.</p>



<p class="wp-block-paragraph">In this post, we’ll explore the top <strong>FreeBSD-based small operating systems</strong> you can install on x86 hardware to transform it into a powerful, reliable, and secure router or firewall.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading" id="h-why-use-freebsd-for-network-appliances">Why Use FreeBSD for Network Appliances?</h3>



<p class="wp-block-paragraph">FreeBSD is widely respected for its:</p>



<ul class="wp-block-list">
<li>Rock-solid performance</li>



<li>Advanced networking features (like PF, IPFW, and netgraph)</li>



<li>Security-focused architecture</li>



<li>Clean, consistent system design</li>
</ul>



<p class="wp-block-paragraph">These features make it a preferred base for commercial and open-source router/firewall systems.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-1-pfsense-trusted-and-proven">1. <strong>pfSense® – Trusted and Proven</strong></h2>



<p class="wp-block-paragraph"><strong>pfSense</strong> is arguably the most popular FreeBSD-based firewall/router OS in the world. Maintained by Netgate, it combines FreeBSD’s power with a user-friendly web interface, making it suitable for both home users and professionals.</p>



<p class="wp-block-paragraph"><strong>Key Features:</strong></p>



<ul class="wp-block-list">
<li>Web GUI for full control</li>



<li>Stateful firewall with PF</li>



<li>NAT, port forwarding, VLANs</li>



<li>Built-in DHCP, DNS forwarding, and captive portal</li>



<li>VPN support (OpenVPN, IPsec, WireGuard)</li>



<li>High availability (CARP/HA)</li>



<li>Traffic shaping and Quality of Service (QoS)</li>



<li>Add-on packages (Snort, pfBlockerNG, Squid, etc.)</li>
</ul>



<p class="wp-block-paragraph"><strong>Minimum Requirements:</strong></p>



<ul class="wp-block-list">
<li>x86 or x86_64 CPU</li>



<li>1GB RAM (2GB or more recommended)</li>



<li>4GB storage (SSD preferred)</li>



<li>At least two network interfaces (NICs)</li>
</ul>



<p class="wp-block-paragraph"><strong>Best Use Cases:</strong></p>



<ul class="wp-block-list">
<li>Home firewall/router</li>



<li>Small office or business gateway</li>



<li>Educational networks</li>



<li>VPN edge device</li>
</ul>



<p class="wp-block-paragraph"><strong>Official Website:</strong><br><a href="https://www.pfsense.org/">https://www.pfsense.org</a></p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-2-opnsense-modern-and-open-alternative">2. <strong>OPNsense® – Modern and Open Alternative</strong></h2>



<p class="wp-block-paragraph"><strong>OPNsense</strong> is a community-driven, open-source fork of pfSense. Built on FreeBSD, it offers a more modern user interface, frequent updates, and a plugin system designed for flexibility.</p>



<p class="wp-block-paragraph"><strong>What Makes It Different from pfSense?</strong></p>



<ul class="wp-block-list">
<li>Modern and responsive web UI</li>



<li>Faster update cycles (weekly)</li>



<li>HardenedBSD kernel (optional for extra security)</li>



<li>Better plugin framework</li>



<li>Transparent open development model</li>
</ul>



<p class="wp-block-paragraph"><strong>Notable Features:</strong></p>



<ul class="wp-block-list">
<li>IDS/IPS with Suricata</li>



<li>Real-time traffic graphs and reporting</li>



<li>DNS over TLS, DoH, and encrypted DNS options</li>



<li>Built-in 2FA and secure remote management</li>



<li>Easy backup and restore</li>
</ul>



<p class="wp-block-paragraph"><strong>Ideal For:</strong></p>



<ul class="wp-block-list">
<li>Users who want modern UI and faster development</li>



<li>Advanced users who prefer open-source transparency</li>



<li>Businesses that require frequent security updates</li>
</ul>



<p class="wp-block-paragraph"><strong>Official Website:</strong><br><a href="https://opnsense.org/">https://opnsense.org</a></p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-3-nanobsd-minimal-freebsd-for-embedded-systems">3. <strong>NanoBSD – Minimal FreeBSD for Embedded Systems</strong></h2>



<p class="wp-block-paragraph"><strong>NanoBSD</strong> isn’t a separate OS, but a build tool that comes with FreeBSD. It creates <strong>minimal, read-only, embedded FreeBSD images</strong> for use on devices with limited storage or specialized applications (e.g., routers, kiosks, and appliances).</p>



<p class="wp-block-paragraph"><strong>Features:</strong></p>



<ul class="wp-block-list">
<li>Extremely lightweight image (~100–300MB)</li>



<li>Read-only root filesystem (reduces corruption)</li>



<li>Optimized for CF/SD/USB media</li>



<li>Easily upgradable via scripts</li>



<li>Complete control over what goes into the system</li>
</ul>



<p class="wp-block-paragraph"><strong>Important Notes:</strong></p>



<ul class="wp-block-list">
<li>No graphical UI by default</li>



<li>Requires strong FreeBSD knowledge</li>



<li>Manual configuration of services and network interfaces</li>
</ul>



<p class="wp-block-paragraph"><strong>Best For:</strong></p>



<ul class="wp-block-list">
<li>Developers creating custom appliances</li>



<li>Embedded or industrial x86 systems</li>



<li>Learning how FreeBSD works under the hood</li>
</ul>



<p class="wp-block-paragraph"><strong>Documentation:</strong><br><a href="https://docs.freebsd.org/en/articles/nanobsd/">https://docs.freebsd.org/en/articles/nanobsd/</a></p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-comparison-table">Comparison Table</h2>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>Feature</th><th>pfSense</th><th>OPNsense</th><th>NanoBSD</th></tr></thead><tbody><tr><td>Based on FreeBSD</td><td><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Yes</td><td><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Yes</td><td><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Yes</td></tr><tr><td>Web Interface</td><td><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Yes</td><td><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Yes</td><td><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/274c.png" alt="❌" class="wp-smiley" style="height: 1em; max-height: 1em;" /> No</td></tr><tr><td>VPN Support</td><td><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Yes</td><td><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Yes</td><td><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/274c.png" alt="❌" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Manual Only</td></tr><tr><td>IDS/IPS</td><td><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> (Add-ons)</td><td><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> (Suricata)</td><td><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/274c.png" alt="❌" class="wp-smiley" style="height: 1em; max-height: 1em;" /> No</td></tr><tr><td>Plugin System</td><td><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Yes</td><td><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Yes</td><td><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/274c.png" alt="❌" class="wp-smiley" style="height: 1em; max-height: 1em;" /> No</td></tr><tr><td>Beginner Friendly</td><td><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Yes</td><td><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Yes</td><td><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/274c.png" alt="❌" class="wp-smiley" style="height: 1em; max-height: 1em;" /> No</td></tr><tr><td>For Embedded Devices</td><td><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/26a0.png" alt="⚠" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Not ideal</td><td><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/26a0.png" alt="⚠" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Not ideal</td><td><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Yes</td></tr><tr><td>Frequent Updates</td><td><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f501.png" alt="🔁" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Moderate</td><td><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f501.png" alt="🔁" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Weekly</td><td><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f501.png" alt="🔁" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Manual</td></tr></tbody></table></figure>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-hardware-recommendations">Hardware Recommendations</h2>



<p class="wp-block-paragraph">You can run pfSense or OPNsense on many low-power x86 machines, including:</p>



<ul class="wp-block-list">
<li>Intel NUCs and mini PCs</li>



<li>Used thin clients (e.g., HP T620 Plus, Dell Wyse)</li>



<li>PC Engines APU series</li>



<li>Small form factor desktops with 2+ NICs</li>
</ul>



<p class="wp-block-paragraph"><strong>Tip:</strong> For best performance and compatibility, always use <strong>Intel-based network cards (NICs)</strong> — FreeBSD has excellent driver support for them.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-choosing-the-right-one">Choosing the Right One</h2>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>If you want&#8230;</th><th>Choose&#8230;</th></tr></thead><tbody><tr><td>Proven, stable, and well-supported firewall/router</td><td><strong>pfSense</strong></td></tr><tr><td>A more modern UI and frequent updates</td><td><strong>OPNsense</strong></td></tr><tr><td>To build a fully customized embedded FreeBSD image</td><td><strong>NanoBSD</strong></td></tr></tbody></table></figure>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-final-thoughts">Final Thoughts</h2>



<p class="wp-block-paragraph">Building your own firewall or router using FreeBSD-based systems is a rewarding project. It gives you:</p>



<ul class="wp-block-list">
<li>Full control over your network</li>



<li>Better privacy and security</li>



<li>Valuable knowledge in networking and open-source systems</li>
</ul>



<p class="wp-block-paragraph">Whether you choose <strong>pfSense</strong>, <strong>OPNsense</strong>, or go all-in with <strong>NanoBSD</strong>, you&#8217;ll be using a robust foundation trusted by professionals worldwide.</p>



<p class="wp-block-paragraph">All it takes is an old PC or a mini PC, a USB installer, and a bit of time.</p>



<p class="wp-block-paragraph"></p>
<p>The post <a href="https://hamradio.my/2025/06/best-small-freebsd-based-systems-for-routers-firewalls-x86-hardware/">Best Small FreeBSD-Based Systems for Routers &amp; Firewalls (x86 Hardware)</a> appeared on <a href="https://hamradio.my">Hamradio.my - Amateur Radio, Tech Insights and Product Reviews</a> by <a href="https://hamradio.my/author/9m2pju/">9M2PJU</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://hamradio.my/2025/06/best-small-freebsd-based-systems-for-routers-firewalls-x86-hardware/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>How to Use FreeBSD as a Media Server: A Lightweight, Rock-Solid Solution</title>
		<link>https://hamradio.my/2025/06/how-to-use-freebsd-as-a-media-server-a-lightweight-rock-solid-solution/</link>
					<comments>https://hamradio.my/2025/06/how-to-use-freebsd-as-a-media-server-a-lightweight-rock-solid-solution/#respond</comments>
		
		<dc:creator><![CDATA[9M2PJU]]></dc:creator>
		<pubDate>Thu, 05 Jun 2025 21:47:04 +0000</pubDate>
				<category><![CDATA[entertainment]]></category>
		<category><![CDATA[free open source software]]></category>
		<category><![CDATA[freebsd]]></category>
		<category><![CDATA[media server]]></category>
		<category><![CDATA[bsd]]></category>
		<category><![CDATA[digitalminimalism]]></category>
		<category><![CDATA[freenas]]></category>
		<category><![CDATA[homelab]]></category>
		<category><![CDATA[homeserver]]></category>
		<category><![CDATA[jellyfin]]></category>
		<category><![CDATA[linuxalternative]]></category>
		<category><![CDATA[mediaserver]]></category>
		<category><![CDATA[minidlna]]></category>
		<category><![CDATA[networkstorage]]></category>
		<category><![CDATA[opensource]]></category>
		<category><![CDATA[plex]]></category>
		<category><![CDATA[samba]]></category>
		<category><![CDATA[selfhosting]]></category>
		<category><![CDATA[serversetup]]></category>
		<category><![CDATA[smb]]></category>
		<category><![CDATA[streaming]]></category>
		<category><![CDATA[unix]]></category>
		<category><![CDATA[zfs]]></category>
		<guid isPermaLink="false">https://hamradio.my/?p=7467</guid>

					<description><![CDATA[<p>FreeBSD is a powerful and stable UNIX-like operating system renowned for its performance, security, and advanced networking features. While it&#8217;s widely used for servers and firewalls, it also makes an excellent choice for running a home media server. In this guide, I’ll walk you through how to set up FreeBSD as a media server from [&#8230;]</p>
<p>The post <a href="https://hamradio.my/2025/06/how-to-use-freebsd-as-a-media-server-a-lightweight-rock-solid-solution/">How to Use FreeBSD as a Media Server: A Lightweight, Rock-Solid Solution</a> appeared on <a href="https://hamradio.my">Hamradio.my - Amateur Radio, Tech Insights and Product Reviews</a> by <a href="https://hamradio.my/author/9m2pju/">9M2PJU</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">FreeBSD is a powerful and stable UNIX-like operating system renowned for its performance, security, and advanced networking features. While it&#8217;s widely used for servers and firewalls, it also makes an excellent choice for running a <strong>home media server</strong>. In this guide, I’ll walk you through how to set up FreeBSD as a media server from scratch.</p>



<p class="wp-block-paragraph">Whether you’re streaming movies via Plex or Jellyfin, serving audio through DLNA, or just organizing your media over SMB/NFS, FreeBSD offers a clean and minimal platform to build on — free of bloat and with full control.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-prerequisites"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f9f0.png" alt="🧰" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Prerequisites</h2>



<ul class="wp-block-list">
<li>A spare computer or VM with at least:
<ul class="wp-block-list">
<li>2 CPU cores</li>



<li>4GB RAM (8GB+ recommended for transcoding)</li>



<li>100GB+ storage (depending on your media collection)</li>
</ul>
</li>



<li>Internet connection</li>



<li>A basic understanding of terminal commands</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-step-1-installing-freebsd"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f5a5.png" alt="🖥" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Step 1: Installing FreeBSD</h2>



<ol class="wp-block-list">
<li><strong>Download the ISO</strong>
<ul class="wp-block-list">
<li>Visit <a href="https://www.freebsd.org/">https://www.freebsd.org/</a> and download the latest stable release (e.g. FreeBSD 14.0) ISO under the <strong>amd64</strong> architecture.</li>
</ul>
</li>



<li><strong>Create a Bootable USB</strong> <code>sudo dd if=FreeBSD-14.0-RELEASE-amd64-disc1.iso of=/dev/sdX bs=1M</code> <em>(Replace <code>/dev/sdX</code> with your USB device)</em></li>



<li><strong>Boot &amp; Install</strong>
<ul class="wp-block-list">
<li>Boot into the USB.</li>



<li>Follow the guided install:
<ul class="wp-block-list">
<li>Set hostname (e.g. <code>media-server</code>)</li>



<li>Use <strong>ZFS</strong> as the filesystem for features like snapshots</li>



<li>Enable <code>sshd</code>, <code>ntpd</code></li>



<li>Create a user (e.g. <code>piju</code>) and add to the <code>wheel</code> group</li>
</ul>
</li>
</ul>
</li>



<li><strong>Reboot and login</strong></li>
</ol>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-step-2-post-install-setup"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f6e0.png" alt="🛠" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Step 2: Post-Install Setup</h2>



<ol class="wp-block-list">
<li><strong>Update the system</strong> <code>sudo freebsd-update fetch install sudo pkg update &amp;&amp; sudo pkg upgrade</code></li>



<li><strong>Install essential tools</strong> <code>sudo pkg install sudo nano tmux htop</code></li>



<li><strong>Allow your user to use <code>sudo</code></strong> <code>echo 'piju ALL=(ALL) NOPASSWD: ALL' | sudo tee -a /usr/local/etc/sudoers.d/piju</code></li>
</ol>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-step-3-install-media-server-software"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4fa.png" alt="📺" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Step 3: Install Media Server Software</h2>



<h3 class="wp-block-heading" id="h-option-1-plex-media-server-proprietary">Option 1: Plex Media Server (Proprietary)</h3>



<pre class="wp-block-code"><code>sudo pkg install plexmediaserver
sudo sysrc plexmediaserver_enable=YES
sudo service plexmediaserver start
</code></pre>



<p class="wp-block-paragraph">Access via browser:<br><strong>http://&lt;your_ip&gt;:32400/web</strong></p>



<h3 class="wp-block-heading" id="h-option-2-jellyfin-open-source">Option 2: Jellyfin (Open Source)</h3>



<p class="wp-block-paragraph">Install from <strong>packagesite</strong>:</p>



<pre class="wp-block-code"><code>sudo pkg install jellyfin
sudo sysrc jellyfin_enable=YES
sudo service jellyfin start
</code></pre>



<p class="wp-block-paragraph">Access via browser:<br><strong>http://&lt;your_ip&gt;:8096</strong></p>



<h3 class="wp-block-heading" id="h-option-3-emby-optional-alternative">Option 3: Emby (Optional Alternative)</h3>



<p class="wp-block-paragraph">Download <code>.txz</code> package from <a href="https://emby.media/">https://emby.media/</a> and install manually.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-step-4-add-your-media"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4c1.png" alt="📁" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Step 4: Add Your Media</h2>



<ol class="wp-block-list">
<li>Create media directories:</li>
</ol>



<pre class="wp-block-code"><code>sudo mkdir -p /mnt/media/{movies,tv,music}
sudo chown -R media:media /mnt/media
</code></pre>



<ol start="2" class="wp-block-list">
<li>Mount storage (if using a separate drive):<br>Edit <code>/etc/fstab</code> and mount your drive (e.g., <code>/dev/ada1p2</code>) to <code>/mnt/media</code>.</li>



<li>Point your media server (Jellyfin/Plex) to these directories in the web UI.</li>
</ol>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-step-5-optional-enable-sharing-over-network"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4e1.png" alt="📡" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Step 5: Optional – Enable Sharing Over Network</h2>



<h3 class="wp-block-heading" id="h-dlna-server-minidlna">DLNA Server (MiniDLNA)</h3>



<pre class="wp-block-code"><code>sudo pkg install minidlna
sudo sysrc minidlna_enable=YES
sudo service minidlna start
</code></pre>



<p class="wp-block-paragraph">Edit <code>/usr/local/etc/minidlna.conf</code> to point to your media directories.</p>



<h3 class="wp-block-heading" id="h-smb-samba">SMB (Samba)</h3>



<pre class="wp-block-code"><code>sudo pkg install samba413
sudo sysrc samba_server_enable=YES
sudo service samba_server start
</code></pre>



<p class="wp-block-paragraph">Configure <code>/usr/local/etc/smb4.conf</code> and add your user with <code>smbpasswd -a piju</code>.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-step-6-secure-remote-access"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f510.png" alt="🔐" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Step 6: Secure Remote Access</h2>



<ul class="wp-block-list">
<li>Set up <strong>SSH key-based login</strong></li>



<li>Change default SSH port (in <code>/etc/ssh/sshd_config</code>)</li>



<li>Optionally install <strong>fail2ban</strong> (via ports or manually)</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-bonus-tips"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f9fc.png" alt="🧼" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Bonus Tips</h2>



<ul class="wp-block-list">
<li>Set up <strong>ZFS snapshots</strong> for backup and rollback</li>



<li>Install <strong>transmission-daemon</strong> for torrents</li>



<li>Monitor storage with <code>zpool list</code> and <code>df -h</code></li>



<li>Use <code>smartmontools</code> for drive health checks</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-conclusion"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Conclusion</h2>



<p class="wp-block-paragraph">FreeBSD may seem unconventional for a media server, but it provides unmatched control, performance, and security — with no background bloatware. Once you get familiar with its ecosystem, it becomes a solid and long-lasting foundation for any home server project.</p>



<p class="wp-block-paragraph">If you prefer minimalism, stability, and advanced file systems like ZFS, FreeBSD is an excellent choice for your media streaming needs.</p>
<p>The post <a href="https://hamradio.my/2025/06/how-to-use-freebsd-as-a-media-server-a-lightweight-rock-solid-solution/">How to Use FreeBSD as a Media Server: A Lightweight, Rock-Solid Solution</a> appeared on <a href="https://hamradio.my">Hamradio.my - Amateur Radio, Tech Insights and Product Reviews</a> by <a href="https://hamradio.my/author/9m2pju/">9M2PJU</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://hamradio.my/2025/06/how-to-use-freebsd-as-a-media-server-a-lightweight-rock-solid-solution/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Building a Plex Media Server with Raspberry Pi</title>
		<link>https://hamradio.my/2025/06/building-a-plex-media-server-with-raspberry-pi/</link>
					<comments>https://hamradio.my/2025/06/building-a-plex-media-server-with-raspberry-pi/#respond</comments>
		
		<dc:creator><![CDATA[9M2PJU]]></dc:creator>
		<pubDate>Wed, 04 Jun 2025 21:30:17 +0000</pubDate>
				<category><![CDATA[entertainment]]></category>
		<category><![CDATA[raspberry pi]]></category>
		<category><![CDATA[arm]]></category>
		<category><![CDATA[directplay]]></category>
		<category><![CDATA[h264]]></category>
		<category><![CDATA[homeautomation]]></category>
		<category><![CDATA[homelab]]></category>
		<category><![CDATA[homeserver]]></category>
		<category><![CDATA[htpc]]></category>
		<category><![CDATA[LowPower]]></category>
		<category><![CDATA[media]]></category>
		<category><![CDATA[mediacenter]]></category>
		<category><![CDATA[opensource]]></category>
		<category><![CDATA[pi]]></category>
		<category><![CDATA[pi4]]></category>
		<category><![CDATA[pi5]]></category>
		<category><![CDATA[plex]]></category>
		<category><![CDATA[plexserver]]></category>
		<category><![CDATA[RaspberryPi]]></category>
		<category><![CDATA[selfhosted]]></category>
		<category><![CDATA[streaming]]></category>
		<guid isPermaLink="false">https://hamradio.my/?p=7464</guid>

					<description><![CDATA[<p>If you&#8217;re looking for a low-power, always-on solution for streaming your personal media library, the Raspberry Pi makes a great Plex server. It&#8217;s compact, quiet, affordable, and perfect for handling basic media streaming—especially for home use. In this post, I’ll guide you through setting up Plex Media Server on a Raspberry Pi, using Raspberry Pi [&#8230;]</p>
<p>The post <a href="https://hamradio.my/2025/06/building-a-plex-media-server-with-raspberry-pi/">Building a Plex Media Server with Raspberry Pi</a> appeared on <a href="https://hamradio.my">Hamradio.my - Amateur Radio, Tech Insights and Product Reviews</a> by <a href="https://hamradio.my/author/9m2pju/">9M2PJU</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">If you&#8217;re looking for a low-power, always-on solution for streaming your personal media library, the <strong>Raspberry Pi</strong> makes a great Plex server. It&#8217;s compact, quiet, affordable, and perfect for handling basic media streaming—especially for home use.</p>



<p class="wp-block-paragraph">In this post, I’ll guide you through setting up <strong>Plex Media Server</strong> on a <strong>Raspberry Pi</strong>, using Raspberry Pi OS (Lite or Full) or Debian-based distros like Ubuntu Server.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading" id="h-what-you-ll-need"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f9f0.png" alt="🧰" class="wp-smiley" style="height: 1em; max-height: 1em;" /> What You’ll Need</h3>



<ul class="wp-block-list">
<li>Raspberry Pi 4 or 5 (at least 2GB RAM, 4GB+ recommended)</li>



<li>microSD card (32GB+), or SSD via USB 3.0</li>



<li>External storage for media (USB HDD/SSD or NAS)</li>



<li>Ethernet or Wi-Fi connection</li>



<li>Raspberry Pi OS (Lite or Desktop)</li>



<li>A Plex account (free is enough)</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading" id="h-step-1-prepare-the-raspberry-pi"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2699.png" alt="⚙" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Step 1: Prepare the Raspberry Pi</h3>



<ol class="wp-block-list">
<li>Flash Raspberry Pi OS using <a href="https://www.raspberrypi.com/software/">Raspberry Pi Imager</a></li>



<li>Enable SSH and set hostname (optional)</li>



<li>Boot the Pi, log in, and update:</li>
</ol>



<pre class="wp-block-code"><code>sudo apt update &amp;&amp; sudo apt upgrade -y
</code></pre>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading" id="h-step-2-install-plex-media-server"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4e6.png" alt="📦" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Step 2: Install Plex Media Server</h3>



<p class="wp-block-paragraph">Plex is available for ARM-based devices via their official repository.</p>



<ol class="wp-block-list">
<li>Add Plex repo and key:</li>
</ol>



<pre class="wp-block-code"><code>curl https://downloads.plex.tv/plex-keys/PlexSign.key | sudo apt-key add -
echo deb https://downloads.plex.tv/repo/deb public main | sudo tee /etc/apt/sources.list.d/plexmediaserver.list
sudo apt update
</code></pre>



<ol start="2" class="wp-block-list">
<li>Install Plex:</li>
</ol>



<pre class="wp-block-code"><code>sudo apt install plexmediaserver -y
</code></pre>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading" id="h-step-3-enable-and-start-the-service"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f501.png" alt="🔁" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Step 3: Enable and Start the Service</h3>



<p class="wp-block-paragraph">Enable Plex on boot and start the service:</p>



<pre class="wp-block-code"><code>sudo systemctl enable plexmediaserver
sudo systemctl start plexmediaserver
</code></pre>



<p class="wp-block-paragraph">Make sure it&#8217;s running:</p>



<pre class="wp-block-code"><code>sudo systemctl status plexmediaserver
</code></pre>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading" id="h-step-4-access-plex-web-interface"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f310.png" alt="🌐" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Step 4: Access Plex Web Interface</h3>



<p class="wp-block-paragraph">Open your browser and go to:</p>



<pre class="wp-block-code"><code>http:&#47;&#47;&lt;your-pi-ip&gt;:32400/web
</code></pre>



<p class="wp-block-paragraph">Log in with your Plex account and begin the setup wizard.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading" id="h-step-5-add-your-media-library"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4c2.png" alt="📂" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Step 5: Add Your Media Library</h3>



<p class="wp-block-paragraph">Plug in your external HDD or mount a network share, then:</p>



<pre class="wp-block-code"><code>sudo mkdir -p /mnt/media
sudo mount /dev/sda1 /mnt/media
</code></pre>



<p class="wp-block-paragraph">Make sure Plex can access it:</p>



<pre class="wp-block-code"><code>sudo chown -R plex:plex /mnt/media
</code></pre>



<p class="wp-block-paragraph">Add the media folder during the Plex setup under Library &gt; Add Library.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading" id="h-optional-tips"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4a1.png" alt="💡" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Optional Tips</h3>



<ul class="wp-block-list">
<li><strong>Transcoding:</strong> The Pi can handle direct play (no transcoding) well, but struggles with transcoding large files. Use compatible formats like H.264 (MP4).</li>



<li><strong>USB Boot:</strong> For better performance, boot the Pi from an SSD instead of a microSD card.</li>



<li><strong>Power Supply:</strong> Use a proper 5V/3A PSU to avoid crashes under heavy disk load.</li>



<li><strong>Thermal:</strong> Add a heatsink or fan for the Pi if using Plex for long sessions.</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading" id="h-secure-your-server"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f510.png" alt="🔐" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Secure Your Server</h3>



<ul class="wp-block-list">
<li>Use your router to forward port <code>32400</code> only if you want remote access.</li>



<li>Set a strong Plex password.</li>



<li>Enable Tailscale or WireGuard for secure remote access without exposing ports.</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading" id="h-conclusion"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Conclusion</h3>



<p class="wp-block-paragraph">A Raspberry Pi might not replace a full-blown NAS or dedicated server, but for personal use or as a secondary Plex node, it&#8217;s surprisingly capable. With low energy usage and silent operation, it’s the perfect DIY home media solution.</p>



<p class="wp-block-paragraph">If you&#8217;re running other services like Pi-hole or Home Assistant, the Pi can multitask well — just avoid overloading it with too much transcoding.</p>



<p class="wp-block-paragraph"></p>
<p>The post <a href="https://hamradio.my/2025/06/building-a-plex-media-server-with-raspberry-pi/">Building a Plex Media Server with Raspberry Pi</a> appeared on <a href="https://hamradio.my">Hamradio.my - Amateur Radio, Tech Insights and Product Reviews</a> by <a href="https://hamradio.my/author/9m2pju/">9M2PJU</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://hamradio.my/2025/06/building-a-plex-media-server-with-raspberry-pi/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>How to Use Docker on FreeBSD (and the Best Alternatives)</title>
		<link>https://hamradio.my/2025/06/how-to-use-docker-on-freebsd-and-the-best-alternatives/</link>
					<comments>https://hamradio.my/2025/06/how-to-use-docker-on-freebsd-and-the-best-alternatives/#respond</comments>
		
		<dc:creator><![CDATA[9M2PJU]]></dc:creator>
		<pubDate>Mon, 02 Jun 2025 12:01:00 +0000</pubDate>
				<category><![CDATA[container]]></category>
		<category><![CDATA[containerization]]></category>
		<category><![CDATA[docker]]></category>
		<category><![CDATA[freebsd]]></category>
		<category><![CDATA[freebsd jails]]></category>
		<category><![CDATA[virtual machine]]></category>
		<category><![CDATA[virtualization]]></category>
		<category><![CDATA[bastillebsd]]></category>
		<category><![CDATA[bhyve]]></category>
		<category><![CDATA[containers]]></category>
		<category><![CDATA[devops]]></category>
		<category><![CDATA[Docker]]></category>
		<category><![CDATA[freebsdjail]]></category>
		<category><![CDATA[homelab]]></category>
		<category><![CDATA[jail]]></category>
		<category><![CDATA[linuxvm]]></category>
		<category><![CDATA[opensource]]></category>
		<category><![CDATA[podman]]></category>
		<category><![CDATA[selfhosting]]></category>
		<category><![CDATA[serveradmin]]></category>
		<category><![CDATA[SysAdmin]]></category>
		<category><![CDATA[techguide]]></category>
		<category><![CDATA[unix]]></category>
		<category><![CDATA[virtualbox]]></category>
		<guid isPermaLink="false">https://hamradio.my/?p=7454</guid>

					<description><![CDATA[<p>Docker has become the de facto standard for containerization on Linux systems. It provides developers with an easy and reproducible way to deploy applications. But if you&#8217;re a FreeBSD user like me, you&#8217;ve probably discovered that Docker isn’t natively supported. That’s because Docker relies heavily on Linux kernel features such as cgroups, namespaces, and UnionFS, [&#8230;]</p>
<p>The post <a href="https://hamradio.my/2025/06/how-to-use-docker-on-freebsd-and-the-best-alternatives/">How to Use Docker on FreeBSD (and the Best Alternatives)</a> appeared on <a href="https://hamradio.my">Hamradio.my - Amateur Radio, Tech Insights and Product Reviews</a> by <a href="https://hamradio.my/author/9m2pju/">9M2PJU</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">Docker has become the de facto standard for containerization on Linux systems. It provides developers with an easy and reproducible way to deploy applications. But if you&#8217;re a FreeBSD user like me, you&#8217;ve probably discovered that Docker isn’t natively supported. That’s because Docker relies heavily on Linux kernel features such as <strong>cgroups</strong>, <strong>namespaces</strong>, and <strong>UnionFS</strong>, which FreeBSD does not support directly.</p>



<p class="wp-block-paragraph">So, what are our options? Can we still run containers on FreeBSD, or even Docker itself? The answer is yes—with some workarounds and native alternatives.</p>



<p class="wp-block-paragraph">In this blog post, we will walk you through several approaches:</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading" id="h-why-docker-doesn-t-run-natively-on-freebsd"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/26a0.png" alt="⚠" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Why Docker Doesn’t Run Natively on FreeBSD</h3>



<p class="wp-block-paragraph">Docker was built specifically for the Linux kernel. It depends on:</p>



<ul class="wp-block-list">
<li>Linux control groups (cgroups)</li>



<li>Namespaces</li>



<li>AUFS/OverlayFS</li>



<li>A running Docker daemon</li>
</ul>



<p class="wp-block-paragraph">FreeBSD uses different mechanisms, such as <strong>jails</strong> and <strong>ZFS</strong>. Because of this incompatibility, Docker can&#8217;t run on FreeBSD <em>without</em> a Linux layer. However, that doesn’t mean you’re out of luck.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-option-1-use-podman-a-docker-compatible-alternative"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Option 1: Use Podman – A Docker-Compatible Alternative</h2>



<p class="wp-block-paragraph"><a href="https://podman.io/"><strong>Podman</strong></a> is a daemonless container engine that offers a command-line interface similar to Docker. It&#8217;s available in FreeBSD’s package repository and works quite well for many use cases.</p>



<h3 class="wp-block-heading" id="h-installing-podman-on-freebsd"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f527.png" alt="🔧" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Installing Podman on FreeBSD</h3>



<pre class="wp-block-code"><code>pkg install podman
</code></pre>



<p class="wp-block-paragraph">Start the Podman service:</p>



<pre class="wp-block-code"><code>service podman start
</code></pre>



<p class="wp-block-paragraph">Now you can use it just like Docker:</p>



<pre class="wp-block-code"><code>podman pull alpine
podman run -it alpine sh
</code></pre>



<p class="wp-block-paragraph">Podman runs rootless containers, which means better security, but some Docker features like Docker Compose or privileged containers might not be fully supported.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-option-2-run-docker-inside-a-linux-vm"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f5a5.png" alt="🖥" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Option 2: Run Docker Inside a Linux VM</h2>



<p class="wp-block-paragraph">If you absolutely need full Docker functionality, the best solution is to run Docker <em>inside a virtual machine</em>. You can do this using FreeBSD’s native hypervisor <strong>bhyve</strong>, or with <strong>VirtualBox</strong>.</p>



<h3 class="wp-block-heading" id="h-a-using-bhyve-and-vm-bhyve">A. Using bhyve and vm-bhyve</h3>



<ol class="wp-block-list">
<li>Install the required packages:</li>
</ol>



<pre class="wp-block-code"><code>pkg install vm-bhyve grub2-bhyve
</code></pre>



<ol start="2" class="wp-block-list">
<li>Initialize the environment:</li>
</ol>



<pre class="wp-block-code"><code>zfs create -o mountpoint=/vm zroot/vm
vm init
vm switch create public
</code></pre>



<ol start="3" class="wp-block-list">
<li>Download a Linux ISO (e.g., Ubuntu), and create the VM:</li>
</ol>



<pre class="wp-block-code"><code>vm iso https://releases.ubuntu.com/22.04/ubuntu-22.04-live-server-amd64.iso
vm create ubuntuvm
vm install ubuntuvm ubuntu-22.04-live-server-amd64.iso
</code></pre>



<ol start="4" class="wp-block-list">
<li>After installing Ubuntu, log into the VM and install Docker:</li>
</ol>



<pre class="wp-block-code"><code>curl -fsSL https://get.docker.com -o get-docker.sh
sh get-docker.sh
</code></pre>



<p class="wp-block-paragraph">Now you have a full Linux environment running Docker within FreeBSD.</p>



<h3 class="wp-block-heading" id="h-b-using-virtualbox">B. Using VirtualBox</h3>



<p class="wp-block-paragraph">If you prefer a GUI solution, VirtualBox works well on FreeBSD:</p>



<pre class="wp-block-code"><code>pkg install virtualbox-ose
</code></pre>



<p class="wp-block-paragraph">After installation, create a Linux virtual machine (e.g., Ubuntu, Alpine), then install Docker inside it as shown above.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-option-3-use-freebsd-jails-with-bastillebsd"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f510.png" alt="🔐" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Option 3: Use FreeBSD Jails with BastilleBSD</h2>



<p class="wp-block-paragraph">FreeBSD has its own native containerization technology: <strong>jails</strong>. They are extremely lightweight and secure. You can manage jails easily with a tool like <a href="https://bastillebsd.org/"><strong>BastilleBSD</strong></a>.</p>



<h3 class="wp-block-heading" id="h-installing-bastillebsd"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f527.png" alt="🔧" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Installing BastilleBSD</h3>



<pre class="wp-block-code"><code>pkg install bastille
sysrc bastille_enable=YES
service bastille start
</code></pre>



<h3 class="wp-block-heading" id="h-bootstrap-a-freebsd-release"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4e6.png" alt="📦" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Bootstrap a FreeBSD Release</h3>



<pre class="wp-block-code"><code>bastille bootstrap 13.2-RELEASE
</code></pre>



<h3 class="wp-block-heading" id="h-create-and-start-a-jail"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f6e0.png" alt="🛠" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Create and Start a Jail</h3>



<pre class="wp-block-code"><code>bastille create myjail 13.2-RELEASE 10.0.0.10
bastille start myjail
bastille console myjail
</code></pre>



<p class="wp-block-paragraph">Now you’re inside a FreeBSD jail where you can run isolated applications.</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">While this isn’t Docker-compatible, it’s extremely efficient and secure for server deployments.</p>
</blockquote>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-summary-table"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4dd.png" alt="📝" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Summary Table</h2>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>Method</th><th>Docker-Compatible</th><th>FreeBSD Native</th><th>Ideal Use Case</th></tr></thead><tbody><tr><td><strong>Podman</strong></td><td><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Partial</td><td><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Yes</td><td>Development, rootless containers</td></tr><tr><td><strong>Linux VM (bhyve)</strong></td><td><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Full</td><td><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/274c.png" alt="❌" class="wp-smiley" style="height: 1em; max-height: 1em;" /> No</td><td>Full Docker support, CI/CD setups</td></tr><tr><td><strong>VirtualBox</strong></td><td><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Full</td><td><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/274c.png" alt="❌" class="wp-smiley" style="height: 1em; max-height: 1em;" /> No</td><td>Desktop Docker environment</td></tr><tr><td><strong>BastilleBSD</strong></td><td><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/274c.png" alt="❌" class="wp-smiley" style="height: 1em; max-height: 1em;" /> No</td><td><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Yes</td><td>Secure, lightweight FreeBSD jails</td></tr></tbody></table></figure>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-final-thoughts"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f914.png" alt="🤔" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Final Thoughts</h2>



<p class="wp-block-paragraph">While Docker doesn’t run natively on FreeBSD, you still have powerful and flexible options depending on your use case:</p>



<ul class="wp-block-list">
<li>Want to run containers like Docker? <strong>Try Podman.</strong></li>



<li>Need full Docker functionality? <strong>Use a Linux VM with bhyve or VirtualBox.</strong></li>



<li>Want lightweight, secure FreeBSD-native containers? <strong>Go with jails and BastilleBSD.</strong></li>
</ul>



<p class="wp-block-paragraph">Each method has its strengths and trade-offs.</p>



<p class="wp-block-paragraph"></p>
<p>The post <a href="https://hamradio.my/2025/06/how-to-use-docker-on-freebsd-and-the-best-alternatives/">How to Use Docker on FreeBSD (and the Best Alternatives)</a> appeared on <a href="https://hamradio.my">Hamradio.my - Amateur Radio, Tech Insights and Product Reviews</a> by <a href="https://hamradio.my/author/9m2pju/">9M2PJU</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://hamradio.my/2025/06/how-to-use-docker-on-freebsd-and-the-best-alternatives/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>10 Simple and Useful Projects Anyone Can Build with Ubuntu Server</title>
		<link>https://hamradio.my/2025/05/10-simple-and-useful-projects-anyone-can-build-with-ubuntu-server/</link>
					<comments>https://hamradio.my/2025/05/10-simple-and-useful-projects-anyone-can-build-with-ubuntu-server/#respond</comments>
		
		<dc:creator><![CDATA[9M2PJU]]></dc:creator>
		<pubDate>Sat, 31 May 2025 08:07:07 +0000</pubDate>
				<category><![CDATA[9M2PJU]]></category>
		<category><![CDATA[do it yourself]]></category>
		<category><![CDATA[free open source software]]></category>
		<category><![CDATA[open source operating system]]></category>
		<category><![CDATA[project]]></category>
		<category><![CDATA[server]]></category>
		<category><![CDATA[ubuntu]]></category>
		<category><![CDATA[AdBlocker]]></category>
		<category><![CDATA[beginnerserver]]></category>
		<category><![CDATA[cloudserver]]></category>
		<category><![CDATA[Containerization]]></category>
		<category><![CDATA[diyserver]]></category>
		<category><![CDATA[dockerhost]]></category>
		<category><![CDATA[gitea]]></category>
		<category><![CDATA[homeassistant]]></category>
		<category><![CDATA[homelab]]></category>
		<category><![CDATA[homeserver]]></category>
		<category><![CDATA[linuxadmin]]></category>
		<category><![CDATA[linuxguide]]></category>
		<category><![CDATA[linuxserver]]></category>
		<category><![CDATA[mediaserver]]></category>
		<category><![CDATA[minecraftserver]]></category>
		<category><![CDATA[NAS]]></category>
		<category><![CDATA[networkattachedstorage]]></category>
		<category><![CDATA[nextcloud]]></category>
		<category><![CDATA[opensource]]></category>
		<category><![CDATA[PiHole]]></category>
		<category><![CDATA[plexmediaserver]]></category>
		<category><![CDATA[raspberrypiserver]]></category>
		<category><![CDATA[selfhosted]]></category>
		<category><![CDATA[selfhosting]]></category>
		<category><![CDATA[servergames]]></category>
		<category><![CDATA[serverprojects]]></category>
		<category><![CDATA[serversetup]]></category>
		<category><![CDATA[smarthomediy]]></category>
		<category><![CDATA[techprojects]]></category>
		<category><![CDATA[ubuntuprojects]]></category>
		<category><![CDATA[ubuntuserver]]></category>
		<category><![CDATA[ubuntututorial]]></category>
		<category><![CDATA[vpnserver]]></category>
		<category><![CDATA[webhosting]]></category>
		<category><![CDATA[wireguard]]></category>
		<guid isPermaLink="false">https://hamradio.my/?p=7445</guid>

					<description><![CDATA[<p>Are you looking to learn more about servers but don&#8217;t know where to start? Ubuntu Server provides the perfect foundation for beginners and experienced users alike. With its reliability, security features, and extensive community support, Ubuntu Server makes it easy to create useful projects that enhance your home network or provide valuable skills for your [&#8230;]</p>
<p>The post <a href="https://hamradio.my/2025/05/10-simple-and-useful-projects-anyone-can-build-with-ubuntu-server/">10 Simple and Useful Projects Anyone Can Build with Ubuntu Server</a> appeared on <a href="https://hamradio.my">Hamradio.my - Amateur Radio, Tech Insights and Product Reviews</a> by <a href="https://hamradio.my/author/9m2pju/">9M2PJU</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<h1 class="wp-block-heading" id="h-"></h1>



<p class="wp-block-paragraph">Are you looking to learn more about servers but don&#8217;t know where to start? Ubuntu Server provides the perfect foundation for beginners and experienced users alike. With its reliability, security features, and extensive community support, Ubuntu Server makes it easy to create useful projects that enhance your home network or provide valuable skills for your career.</p>



<p class="wp-block-paragraph">In this guide, I&#8217;ll walk you through 10 practical projects that anyone can set up using Ubuntu Server. Each project requires minimal hardware and provides real-world benefits. Let&#8217;s get started!</p>



<h2 class="wp-block-heading" id="h-1-network-attached-storage-nas-server">1. Network-Attached Storage (NAS) Server</h2>



<p class="wp-block-paragraph"><strong>What it is:</strong> A centralized location to store and access your files from any device on your network.</p>



<p class="wp-block-paragraph"><strong>Why Ubuntu Server is perfect:</strong> Ubuntu&#8217;s stability ensures your data remains safe, while its lightweight nature means even older hardware can serve as a reliable NAS.</p>



<p class="wp-block-paragraph"><strong>Setup overview:</strong></p>



<ol class="wp-block-list">
<li>Install Ubuntu Server on your hardware</li>



<li>Install and configure Samba for file sharing:</li>
</ol>



<pre class="wp-block-code"><code>sudo apt update
sudo apt install samba -y
</code></pre>



<ol start="3" class="wp-block-list">
<li>Create a directory for your shared files:</li>
</ol>



<pre class="wp-block-code"><code>sudo mkdir -p /media/nas
sudo chmod 777 /media/nas
</code></pre>



<ol start="4" class="wp-block-list">
<li>Configure Samba by editing its configuration file:</li>
</ol>



<pre class="wp-block-code"><code>sudo nano /etc/samba/smb.conf
</code></pre>



<ol start="5" class="wp-block-list">
<li>Add the following at the end of the file:</li>
</ol>



<pre class="wp-block-code"><code>&#91;NASShare]
path = /media/nas
browseable = yes
read only = no
force create mode = 0660
force directory mode = 2770
valid users = @users
</code></pre>



<ol start="6" class="wp-block-list">
<li>Set a Samba password for your user:</li>
</ol>



<pre class="wp-block-code"><code>sudo smbpasswd -a yourusername
</code></pre>



<ol start="7" class="wp-block-list">
<li>Restart Samba:</li>
</ol>



<pre class="wp-block-code"><code>sudo systemctl restart smbd
</code></pre>



<p class="wp-block-paragraph"><strong>Benefits:</strong> Access your files from any device, centralize your backups, and stream media throughout your home.</p>



<h2 class="wp-block-heading" id="h-2-personal-cloud-storage-nextcloud">2. Personal Cloud Storage (NextCloud)</h2>



<p class="wp-block-paragraph"><strong>What it is:</strong> Your own personal cloud storage solution similar to Dropbox or Google Drive but hosted on your own hardware.</p>



<p class="wp-block-paragraph"><strong>Why Ubuntu Server is perfect:</strong> Ubuntu&#8217;s package management makes installing dependencies straightforward, while LTS releases ensure long-term stability.</p>



<p class="wp-block-paragraph"><strong>Setup overview:</strong></p>



<ol class="wp-block-list">
<li>Install LAMP stack:</li>
</ol>



<pre class="wp-block-code"><code>sudo apt update
sudo apt install apache2 mariadb-server libapache2-mod-php php-gd php-json php-mysql php-curl php-mbstring php-intl php-imagick php-xml php-zip -y
</code></pre>



<ol start="2" class="wp-block-list">
<li>Secure your MariaDB installation:</li>
</ol>



<pre class="wp-block-code"><code>sudo mysql_secure_installation
</code></pre>



<ol start="3" class="wp-block-list">
<li>Create a database:</li>
</ol>



<pre class="wp-block-code"><code>sudo mysql -u root -p
CREATE DATABASE nextcloud;
CREATE USER 'nextclouduser'@'localhost' IDENTIFIED BY 'your_password';
GRANT ALL PRIVILEGES ON nextcloud.* TO 'nextclouduser'@'localhost';
FLUSH PRIVILEGES;
EXIT;
</code></pre>



<ol start="4" class="wp-block-list">
<li>Download and install NextCloud:</li>
</ol>



<pre class="wp-block-code"><code>cd /tmp
wget https://download.nextcloud.com/server/releases/latest.zip
unzip latest.zip
sudo mv nextcloud /var/www/html/
sudo chown -R www-data:www-data /var/www/html/nextcloud/
</code></pre>



<ol start="5" class="wp-block-list">
<li>Configure Apache:</li>
</ol>



<pre class="wp-block-code"><code>sudo nano /etc/apache2/sites-available/nextcloud.conf
</code></pre>



<ol start="6" class="wp-block-list">
<li>Add the following configuration:</li>
</ol>



<pre class="wp-block-code"><code>&lt;VirtualHost *:80&gt;
    DocumentRoot /var/www/html/nextcloud/
    ServerName your_domain_or_IP

    &lt;Directory /var/www/html/nextcloud/&gt;
        Options +FollowSymlinks
        AllowOverride All
        Require all granted
    &lt;/Directory&gt;

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
&lt;/VirtualHost&gt;
</code></pre>



<ol start="7" class="wp-block-list">
<li>Enable the site and required modules:</li>
</ol>



<pre class="wp-block-code"><code>sudo a2ensite nextcloud.conf
sudo a2enmod rewrite headers env dir mime
sudo systemctl restart apache2
</code></pre>



<ol start="8" class="wp-block-list">
<li>Access NextCloud through your browser at http://your_server_IP_or_domain and complete the setup wizard.</li>
</ol>



<p class="wp-block-paragraph"><strong>Benefits:</strong> Maintain control over your data, avoid subscription fees, and get unlimited storage based on your hardware.</p>



<h2 class="wp-block-heading" id="h-3-media-server-with-plex">3. Media Server with Plex</h2>



<p class="wp-block-paragraph"><strong>What it is:</strong> A powerful media server that organizes your movies, TV shows, music, and photos, making them accessible from anywhere.</p>



<p class="wp-block-paragraph"><strong>Why Ubuntu Server is perfect:</strong> Ubuntu&#8217;s efficiency means more resources are available for transcoding media, and its compatibility with Plex is excellent.</p>



<p class="wp-block-paragraph"><strong>Setup overview:</strong></p>



<ol class="wp-block-list">
<li>Add the Plex repository:</li>
</ol>



<pre class="wp-block-code"><code>sudo apt update
sudo apt install apt-transport-https curl -y
curl https://downloads.plex.tv/plex-keys/PlexSign.key | sudo apt-key add -
echo deb https://downloads.plex.tv/repo/deb public main | sudo tee /etc/apt/sources.list.d/plexmediaserver.list
</code></pre>



<ol start="2" class="wp-block-list">
<li>Install Plex Media Server:</li>
</ol>



<pre class="wp-block-code"><code>sudo apt update
sudo apt install plexmediaserver -y
</code></pre>



<ol start="3" class="wp-block-list">
<li>Create directories for your media:</li>
</ol>



<pre class="wp-block-code"><code>sudo mkdir -p /opt/plexmedia/{movies,tv,music,photos}
sudo chown -R plex:plex /opt/plexmedia
</code></pre>



<ol start="4" class="wp-block-list">
<li>Access the Plex web interface at http://your_server_IP:32400/web and follow the setup wizard</li>



<li>Add your media libraries pointing to the directories you created</li>
</ol>



<p class="wp-block-paragraph"><strong>Benefits:</strong> Stream your media collection to any device, automatic metadata fetching, and smart organization of your content.</p>



<h2 class="wp-block-heading" id="h-4-home-automation-server-with-home-assistant">4. Home Automation Server with Home Assistant</h2>



<p class="wp-block-paragraph"><strong>What it is:</strong> A central hub to control and automate your smart home devices.</p>



<p class="wp-block-paragraph"><strong>Why Ubuntu Server is perfect:</strong> Ubuntu&#8217;s reliability ensures your home automation stays running, while its hardware compatibility supports various IoT devices.</p>



<p class="wp-block-paragraph"><strong>Setup overview:</strong></p>



<ol class="wp-block-list">
<li>Install Docker (the easiest way to run Home Assistant):</li>
</ol>



<pre class="wp-block-code"><code>sudo apt update
sudo apt install apt-transport-https ca-certificates curl software-properties-common -y
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb &#91;arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
sudo apt update
sudo apt install docker-ce -y
</code></pre>



<ol start="2" class="wp-block-list">
<li>Install Docker Compose:</li>
</ol>



<pre class="wp-block-code"><code>sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
</code></pre>



<ol start="3" class="wp-block-list">
<li>Create a Docker Compose file:</li>
</ol>



<pre class="wp-block-code"><code>mkdir ~/homeassistant
cd ~/homeassistant
nano docker-compose.yml
</code></pre>



<ol start="4" class="wp-block-list">
<li>Add the following content:</li>
</ol>



<pre class="wp-block-code"><code>version: '3'
services:
  homeassistant:
    container_name: homeassistant
    image: ghcr.io/home-assistant/home-assistant:stable
    volumes:
      - ./config:/config
    environment:
      - TZ=YOUR_TIME_ZONE
    restart: always
    network_mode: host
</code></pre>



<ol start="5" class="wp-block-list">
<li>Start Home Assistant:</li>
</ol>



<pre class="wp-block-code"><code>sudo docker-compose up -d
</code></pre>



<ol start="6" class="wp-block-list">
<li>Access Home Assistant through your browser at http://your_server_IP:8123</li>
</ol>



<p class="wp-block-paragraph"><strong>Benefits:</strong> Centralized control of all smart devices, powerful automation capabilities, and reduced dependence on cloud services.</p>



<h2 class="wp-block-heading" id="h-5-personal-vpn-server-with-wireguard">5. Personal VPN Server with WireGuard</h2>



<p class="wp-block-paragraph"><strong>What it is:</strong> Your own VPN server that allows secure remote access to your home network and protects your privacy when using public Wi-Fi.</p>



<p class="wp-block-paragraph"><strong>Why Ubuntu Server is perfect:</strong> Ubuntu&#8217;s security focus makes it ideal for VPN services, and recent kernels include built-in WireGuard support.</p>



<p class="wp-block-paragraph"><strong>Setup overview:</strong></p>



<ol class="wp-block-list">
<li>Install WireGuard:</li>
</ol>



<pre class="wp-block-code"><code>sudo apt update
sudo apt install wireguard -y
</code></pre>



<ol start="2" class="wp-block-list">
<li>Generate private and public keys:</li>
</ol>



<pre class="wp-block-code"><code>wg genkey | sudo tee /etc/wireguard/private.key
sudo chmod 600 /etc/wireguard/private.key
sudo cat /etc/wireguard/private.key | wg pubkey | sudo tee /etc/wireguard/public.key
</code></pre>



<ol start="3" class="wp-block-list">
<li>Create a WireGuard configuration:</li>
</ol>



<pre class="wp-block-code"><code>sudo nano /etc/wireguard/wg0.conf
</code></pre>



<ol start="4" class="wp-block-list">
<li>Add the following (substituting your own values):</li>
</ol>



<pre class="wp-block-code"><code>&#91;Interface]
PrivateKey = YOUR_SERVER_PRIVATE_KEY
Address = 10.0.0.1/24
ListenPort = 51820
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE

# Client configuration example
&#91;Peer]
PublicKey = CLIENT_PUBLIC_KEY
AllowedIPs = 10.0.0.2/32
</code></pre>



<ol start="5" class="wp-block-list">
<li>Enable IP forwarding:</li>
</ol>



<pre class="wp-block-code"><code>echo "net.ipv4.ip_forward=1" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
</code></pre>



<ol start="6" class="wp-block-list">
<li>Start and enable the WireGuard service:</li>
</ol>



<pre class="wp-block-code"><code>sudo systemctl enable wg-quick@wg0
sudo systemctl start wg-quick@wg0
</code></pre>



<ol start="7" class="wp-block-list">
<li>Generate configurations for your clients and distribute them securely</li>
</ol>



<p class="wp-block-paragraph"><strong>Benefits:</strong> Secure remote access to your home network, enhanced privacy on public networks, and better control over your internet connection.</p>



<h2 class="wp-block-heading" id="h-6-web-server-for-hosting-your-own-website">6. Web Server for Hosting Your Own Website</h2>



<p class="wp-block-paragraph"><strong>What it is:</strong> A server to host your personal website, blog, or web application.</p>



<p class="wp-block-paragraph"><strong>Why Ubuntu Server is perfect:</strong> Ubuntu&#8217;s robust LAMP stack support makes it the go-to choice for web hosting environments.</p>



<p class="wp-block-paragraph"><strong>Setup overview:</strong></p>



<ol class="wp-block-list">
<li>Install LAMP stack:</li>
</ol>



<pre class="wp-block-code"><code>sudo apt update
sudo apt install apache2 mariadb-server php libapache2-mod-php php-mysql -y
</code></pre>



<ol start="2" class="wp-block-list">
<li>Secure MariaDB:</li>
</ol>



<pre class="wp-block-code"><code>sudo mysql_secure_installation
</code></pre>



<ol start="3" class="wp-block-list">
<li>Create a website directory:</li>
</ol>



<pre class="wp-block-code"><code>sudo mkdir -p /var/www/yourwebsite
sudo chown -R $USER:$USER /var/www/yourwebsite
</code></pre>



<ol start="4" class="wp-block-list">
<li>Create a simple index.php file:</li>
</ol>



<pre class="wp-block-code"><code>echo '&lt;?php phpinfo(); ?&gt;' &gt; /var/www/yourwebsite/index.php
</code></pre>



<ol start="5" class="wp-block-list">
<li>Configure Apache virtual host:</li>
</ol>



<pre class="wp-block-code"><code>sudo nano /etc/apache2/sites-available/yourwebsite.conf
</code></pre>



<ol start="6" class="wp-block-list">
<li>Add the following configuration:</li>
</ol>



<pre class="wp-block-code"><code>&lt;VirtualHost *:80&gt;
    ServerName yourwebsite.local
    ServerAlias www.yourwebsite.local
    DocumentRoot /var/www/yourwebsite
    ErrorLog ${APACHE_LOG_DIR}/yourwebsite_error.log
    CustomLog ${APACHE_LOG_DIR}/yourwebsite_access.log combined
&lt;/VirtualHost&gt;
</code></pre>



<ol start="7" class="wp-block-list">
<li>Enable the site and restart Apache:</li>
</ol>



<pre class="wp-block-code"><code>sudo a2ensite yourwebsite.conf
sudo systemctl restart apache2
</code></pre>



<p class="wp-block-paragraph"><strong>Benefits:</strong> Full control over your web presence, no monthly hosting fees, and valuable skills for web development.</p>



<h2 class="wp-block-heading" id="h-7-pi-hole-ad-blocker">7. Pi-hole Ad Blocker</h2>



<p class="wp-block-paragraph"><strong>What it is:</strong> A network-wide ad blocker that improves browsing speed and privacy by blocking ads at the DNS level.</p>



<p class="wp-block-paragraph"><strong>Why Ubuntu Server is perfect:</strong> Ubuntu&#8217;s efficiency means Pi-hole can run alongside other services without issues, making it a perfect addition to any home server.</p>



<p class="wp-block-paragraph"><strong>Setup overview:</strong></p>



<ol class="wp-block-list">
<li>Install required packages:</li>
</ol>



<pre class="wp-block-code"><code>sudo apt update
sudo apt install curl -y
</code></pre>



<ol start="2" class="wp-block-list">
<li>Run the Pi-hole installer:</li>
</ol>



<pre class="wp-block-code"><code>curl -sSL https://install.pi-hole.net | bash
</code></pre>



<ol start="3" class="wp-block-list">
<li>Follow the on-screen instructions (accept most defaults)</li>



<li>Note your admin password at the end of installation</li>



<li>Configure your router to use your Ubuntu Server as the DNS server, or configure individual devices</li>



<li>Access the Pi-hole admin interface at http://your_server_IP/admin</li>
</ol>



<p class="wp-block-paragraph"><strong>Benefits:</strong> Faster browsing, reduced bandwidth usage, enhanced privacy, and protection from malicious domains.</p>



<h2 class="wp-block-heading" id="h-8-git-server-with-gitea">8. Git Server with Gitea</h2>



<p class="wp-block-paragraph"><strong>What it is:</strong> A lightweight, self-hosted Git service similar to GitHub but running on your own hardware.</p>



<p class="wp-block-paragraph"><strong>Why Ubuntu Server is perfect:</strong> Ubuntu&#8217;s package management and system resource efficiency make it ideal for hosting developer tools like Git services.</p>



<p class="wp-block-paragraph"><strong>Setup overview:</strong></p>



<ol class="wp-block-list">
<li>Install required packages:</li>
</ol>



<pre class="wp-block-code"><code>sudo apt update
sudo apt install git curl sqlite3 -y
</code></pre>



<ol start="2" class="wp-block-list">
<li>Create a user for Gitea:</li>
</ol>



<pre class="wp-block-code"><code>sudo adduser --system --group --disabled-password --shell /bin/bash --home /home/git git
</code></pre>



<ol start="3" class="wp-block-list">
<li>Download and install Gitea:</li>
</ol>



<pre class="wp-block-code"><code>VERSION=$(curl -s https://api.github.com/repos/go-gitea/gitea/releases/latest | grep tag_name | cut -d '"' -f 4)
sudo wget -O /tmp/gitea https://dl.gitea.io/gitea/${VERSION}/gitea-${VERSION}-linux-amd64
sudo chmod +x /tmp/gitea
sudo mv /tmp/gitea /usr/local/bin/gitea
</code></pre>



<ol start="4" class="wp-block-list">
<li>Create required directories:</li>
</ol>



<pre class="wp-block-code"><code>sudo mkdir -p /var/lib/gitea/{custom,data,log}
sudo chown -R git:git /var/lib/gitea
sudo chmod -R 750 /var/lib/gitea
sudo mkdir /etc/gitea
sudo chown root:git /etc/gitea
sudo chmod 770 /etc/gitea
</code></pre>



<ol start="5" class="wp-block-list">
<li>Create a systemd service:</li>
</ol>



<pre class="wp-block-code"><code>sudo nano /etc/systemd/system/gitea.service
</code></pre>



<ol start="6" class="wp-block-list">
<li>Add the following content:</li>
</ol>



<pre class="wp-block-code"><code>&#91;Unit]
Description=Gitea (Git with a cup of tea)
After=syslog.target
After=network.target

&#91;Service]
RestartSec=2s
Type=simple
User=git
Group=git
WorkingDirectory=/var/lib/gitea
ExecStart=/usr/local/bin/gitea web --config /etc/gitea/app.ini
Restart=always
Environment=USER=git HOME=/home/git GITEA_WORK_DIR=/var/lib/gitea

&#91;Install]
WantedBy=multi-user.target
</code></pre>



<ol start="7" class="wp-block-list">
<li>Start and enable Gitea:</li>
</ol>



<pre class="wp-block-code"><code>sudo systemctl daemon-reload
sudo systemctl enable --now gitea
</code></pre>



<ol start="8" class="wp-block-list">
<li>Access Gitea through your browser at http://your_server_IP:3000 and complete the initial setup</li>
</ol>



<p class="wp-block-paragraph"><strong>Benefits:</strong> Full control over your code repositories, no limitations on private repositories, and integrated issue tracking.</p>



<h2 class="wp-block-heading" id="h-9-game-server-host">9. Game Server Host</h2>



<p class="wp-block-paragraph"><strong>What it is:</strong> A dedicated server for hosting multiplayer games like Minecraft, Terraria, or Counter-Strike.</p>



<p class="wp-block-paragraph"><strong>Why Ubuntu Server is perfect:</strong> Ubuntu&#8217;s stability and resource efficiency allow game servers to run smoothly and consistently, even on modest hardware.</p>



<p class="wp-block-paragraph"><strong>Setup overview for Minecraft Server:</strong></p>



<ol class="wp-block-list">
<li>Install required packages:</li>
</ol>



<pre class="wp-block-code"><code>sudo apt update
sudo apt install openjdk-17-jre-headless screen -y
</code></pre>



<ol start="2" class="wp-block-list">
<li>Create a minecraft user:</li>
</ol>



<pre class="wp-block-code"><code>sudo adduser --system --home /opt/minecraft-server minecraft
sudo addgroup --system minecraft
sudo adduser minecraft minecraft
</code></pre>



<ol start="3" class="wp-block-list">
<li>Switch to the minecraft user:</li>
</ol>



<pre class="wp-block-code"><code>sudo su - minecraft
</code></pre>



<ol start="4" class="wp-block-list">
<li>Download the Minecraft server:</li>
</ol>



<pre class="wp-block-code"><code>mkdir -p ~/server
cd ~/server
wget https://piston-data.mojang.com/v1/objects/8f3112a1049751cc472ec13e397eade5336ca7ae/server.jar -O minecraft_server.jar
</code></pre>



<ol start="5" class="wp-block-list">
<li>Accept the EULA:</li>
</ol>



<pre class="wp-block-code"><code>echo "eula=true" &gt; eula.txt
</code></pre>



<ol start="6" class="wp-block-list">
<li>Create a start script:</li>
</ol>



<pre class="wp-block-code"><code>echo '#!/bin/sh
cd /opt/minecraft-server/server
java -Xmx2G -Xms1G -jar minecraft_server.jar nogui' &gt; start.sh
chmod +x start.sh
</code></pre>



<ol start="7" class="wp-block-list">
<li>Exit the minecraft user and create a systemd service:</li>
</ol>



<pre class="wp-block-code"><code>exit
sudo nano /etc/systemd/system/minecraft.service
</code></pre>



<ol start="8" class="wp-block-list">
<li>Add the following content:</li>
</ol>



<pre class="wp-block-code"><code>&#91;Unit]
Description=Minecraft Server
After=network.target

&#91;Service]
User=minecraft
Nice=5
KillMode=none
SuccessExitStatus=0 1
InaccessibleDirectories=/root /sys /srv /media -/lost+found
NoNewPrivileges=true
WorkingDirectory=/opt/minecraft-server/server
ReadWriteDirectories=/opt/minecraft-server/server
ExecStart=/opt/minecraft-server/server/start.sh
ExecStop=/usr/bin/screen -p 0 -S minecraft -X eval 'stuff "say SERVER SHUTTING DOWN IN 10 SECONDS. SAVING ALL MAPS..."\015'
ExecStop=/bin/sleep 10
ExecStop=/usr/bin/screen -p 0 -S minecraft -X eval 'stuff "save-all"\015'
ExecStop=/usr/bin/screen -p 0 -S minecraft -X eval 'stuff "stop"\015'

&#91;Install]
WantedBy=multi-user.target
</code></pre>



<ol start="9" class="wp-block-list">
<li>Enable and start the service:</li>
</ol>



<pre class="wp-block-code"><code>sudo systemctl enable minecraft.service
sudo systemctl start minecraft.service
</code></pre>



<p class="wp-block-paragraph"><strong>Benefits:</strong> Host your favorite games with friends without subscription fees, customize server settings, and install mods freely.</p>



<h2 class="wp-block-heading" id="h-10-docker-host-for-containerized-applications">10. Docker Host for Containerized Applications</h2>



<p class="wp-block-paragraph"><strong>What it is:</strong> A platform for running containerized applications, making it easy to deploy and manage various services.</p>



<p class="wp-block-paragraph"><strong>Why Ubuntu Server is perfect:</strong> Ubuntu has excellent Docker support, regular updates, and a well-maintained Docker repository.</p>



<p class="wp-block-paragraph"><strong>Setup overview:</strong></p>



<ol class="wp-block-list">
<li>Install Docker:</li>
</ol>



<pre class="wp-block-code"><code>sudo apt update
sudo apt install apt-transport-https ca-certificates curl software-properties-common -y
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb &#91;arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
sudo apt update
sudo apt install docker-ce -y
</code></pre>



<ol start="2" class="wp-block-list">
<li>Install Docker Compose:</li>
</ol>



<pre class="wp-block-code"><code>sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
</code></pre>



<ol start="3" class="wp-block-list">
<li>Add your user to the Docker group (to avoid using sudo with Docker commands):</li>
</ol>



<pre class="wp-block-code"><code>sudo usermod -aG docker $USER
</code></pre>



<ol start="4" class="wp-block-list">
<li>Log out and back in for the changes to take effect</li>



<li>Test Docker:</li>
</ol>



<pre class="wp-block-code"><code>docker run hello-world
</code></pre>



<ol start="6" class="wp-block-list">
<li>Create a sample Docker Compose project:</li>
</ol>



<pre class="wp-block-code"><code>mkdir ~/docker-test
cd ~/docker-test
nano docker-compose.yml
</code></pre>



<ol start="7" class="wp-block-list">
<li>Add the following content for a simple web server:</li>
</ol>



<pre class="wp-block-code"><code>version: '3'
services:
  web:
    image: nginx:latest
    ports:
      - "8080:80"
    volumes:
      - ./html:/usr/share/nginx/html
    restart: always
</code></pre>



<ol start="8" class="wp-block-list">
<li>Create a test HTML file:</li>
</ol>



<pre class="wp-block-code"><code>mkdir -p html
echo "&lt;html&gt;&lt;body&gt;&lt;h1&gt;My Docker Container is Working!&lt;/h1&gt;&lt;/body&gt;&lt;/html&gt;" &gt; html/index.html
</code></pre>



<ol start="9" class="wp-block-list">
<li>Start the container:</li>
</ol>



<pre class="wp-block-code"><code>docker-compose up -d
</code></pre>



<ol start="10" class="wp-block-list">
<li>Access your test site at http://your_server_IP:8080</li>
</ol>



<p class="wp-block-paragraph"><strong>Benefits:</strong> Easily deploy complex applications, maintain isolated environments, and simplify updates and maintenance.</p>



<h2 class="wp-block-heading" id="h-why-ubuntu-server-is-the-perfect-choice">Why Ubuntu Server is the Perfect Choice</h2>



<p class="wp-block-paragraph">Throughout these projects, Ubuntu Server demonstrates its incredible versatility and power. Here&#8217;s why Ubuntu Server stands out from other options:</p>



<ol class="wp-block-list">
<li><strong>Stability</strong>: Ubuntu Server LTS releases are supported for 5 years, ensuring long-term reliability</li>



<li><strong>Security</strong>: Regular security updates keep your server and data protected</li>



<li><strong>Huge Community</strong>: Extensive documentation and community support make troubleshooting easy</li>



<li><strong>Package Management</strong>: The APT package system simplifies software installation and updates</li>



<li><strong>Resource Efficiency</strong>: Works well even on older or limited hardware</li>



<li><strong>No License Fees</strong>: Completely free to use, even in commercial environments</li>



<li><strong>Regular Updates</strong>: Stay current with the latest technologies and improvements</li>
</ol>



<h2 class="wp-block-heading" id="h-getting-started-with-ubuntu-server">Getting Started with Ubuntu Server</h2>



<p class="wp-block-paragraph">Ready to begin? Here&#8217;s how to get started:</p>



<ol class="wp-block-list">
<li>Download Ubuntu Server from <a href="https://ubuntu.com/download/server">ubuntu.com/download/server</a></li>



<li>Install it on your preferred hardware (old PC, Raspberry Pi, or virtual machine)</li>



<li>Choose one of the projects above and follow the step-by-step instructions</li>



<li>Join the Ubuntu community for support and to share your experiences</li>
</ol>



<p class="wp-block-paragraph">Remember, these projects are just the beginning. As you become more comfortable with Ubuntu Server, you&#8217;ll discover countless more possibilities for creating valuable services for your home or small business.</p>



<p class="wp-block-paragraph">Have you built any interesting projects with Ubuntu Server? Share your experiences in the comments below!</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p class="wp-block-paragraph"><em>This guide was created to help newcomers explore the capabilities of Ubuntu Server. For enterprise environments, consider Ubuntu&#8217;s commercial support options.</em></p>
<p>The post <a href="https://hamradio.my/2025/05/10-simple-and-useful-projects-anyone-can-build-with-ubuntu-server/">10 Simple and Useful Projects Anyone Can Build with Ubuntu Server</a> appeared on <a href="https://hamradio.my">Hamradio.my - Amateur Radio, Tech Insights and Product Reviews</a> by <a href="https://hamradio.my/author/9m2pju/">9M2PJU</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://hamradio.my/2025/05/10-simple-and-useful-projects-anyone-can-build-with-ubuntu-server/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>How to Set Up a Caching Proxy Server to Speed Up Your Local Network</title>
		<link>https://hamradio.my/2025/05/how-to-set-up-a-caching-proxy-server-to-speed-up-your-local-network/</link>
					<comments>https://hamradio.my/2025/05/how-to-set-up-a-caching-proxy-server-to-speed-up-your-local-network/#respond</comments>
		
		<dc:creator><![CDATA[9M2PJU]]></dc:creator>
		<pubDate>Fri, 30 May 2025 06:51:36 +0000</pubDate>
				<category><![CDATA[cache]]></category>
		<category><![CDATA[do it yourself]]></category>
		<category><![CDATA[free open source software]]></category>
		<category><![CDATA[internet]]></category>
		<category><![CDATA[networking]]></category>
		<category><![CDATA[open source operating system]]></category>
		<category><![CDATA[proxy]]></category>
		<category><![CDATA[tips and tricks]]></category>
		<category><![CDATA[ubuntu]]></category>
		<category><![CDATA[bandwidth]]></category>
		<category><![CDATA[caching]]></category>
		<category><![CDATA[DIYNetworking]]></category>
		<category><![CDATA[homeautomation]]></category>
		<category><![CDATA[homelab]]></category>
		<category><![CDATA[homeserver]]></category>
		<category><![CDATA[httpcaching]]></category>
		<category><![CDATA[httpsoptimization]]></category>
		<category><![CDATA[internetoptimization]]></category>
		<category><![CDATA[InternetSecurity]]></category>
		<category><![CDATA[internetspeedup]]></category>
		<category><![CDATA[linuxserver]]></category>
		<category><![CDATA[linuxtutorial]]></category>
		<category><![CDATA[networkadmin]]></category>
		<category><![CDATA[networkhacks]]></category>
		<category><![CDATA[networkperformance]]></category>
		<category><![CDATA[networksecurity]]></category>
		<category><![CDATA[networkspeed]]></category>
		<category><![CDATA[networktips]]></category>
		<category><![CDATA[networktroubleshooting]]></category>
		<category><![CDATA[proxycache]]></category>
		<category><![CDATA[proxyserver]]></category>
		<category><![CDATA[RaspberryPi]]></category>
		<category><![CDATA[selfhosted]]></category>
		<category><![CDATA[serverconfiguration]]></category>
		<category><![CDATA[squid]]></category>
		<category><![CDATA[TechBlog]]></category>
		<category><![CDATA[techguide]]></category>
		<category><![CDATA[webproxy]]></category>
		<guid isPermaLink="false">https://hamradio.my/?p=7442</guid>

					<description><![CDATA[<p>Does your home or office internet feel sluggish, especially when multiple people are browsing? You might be surprised to learn that you can significantly improve your network&#8217;s performance by setting up a caching proxy server. In this guide, I&#8217;ll walk you through the process step-by-step. What is a Caching Proxy Server? A caching proxy server [&#8230;]</p>
<p>The post <a href="https://hamradio.my/2025/05/how-to-set-up-a-caching-proxy-server-to-speed-up-your-local-network/">How to Set Up a Caching Proxy Server to Speed Up Your Local Network</a> appeared on <a href="https://hamradio.my">Hamradio.my - Amateur Radio, Tech Insights and Product Reviews</a> by <a href="https://hamradio.my/author/9m2pju/">9M2PJU</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<h1 class="wp-block-heading" id="h-"></h1>



<p class="wp-block-paragraph">Does your home or office internet feel sluggish, especially when multiple people are browsing? You might be surprised to learn that you can significantly improve your network&#8217;s performance by setting up a caching proxy server. In this guide, I&#8217;ll walk you through the process step-by-step.</p>



<h2 class="wp-block-heading" id="h-what-is-a-caching-proxy-server">What is a Caching Proxy Server?</h2>



<p class="wp-block-paragraph">A caching proxy server sits between your local network devices and the internet. It stores copies of resources (like web pages, images, and videos) that users request. When someone on your network visits a website that another user has already accessed, the proxy server delivers the cached content instead of downloading it again from the internet. This reduces bandwidth usage and improves loading times.</p>



<h2 class="wp-block-heading" id="h-benefits-of-setting-up-a-caching-proxy-server">Benefits of Setting Up a Caching Proxy Server</h2>



<ul class="wp-block-list">
<li>Faster browsing: Cached content loads much quicker than fresh downloads</li>



<li>Reduced bandwidth consumption: The same content isn&#8217;t downloaded multiple times</li>



<li>Lower latency: Local network access is always faster than internet requests</li>



<li>Works for all devices: Benefits every device on your network without configuration</li>



<li>Potential cost savings: If you have a metered connection, this reduces data usage</li>
</ul>



<h2 class="wp-block-heading" id="h-what-you-ll-need">What You&#8217;ll Need</h2>



<ul class="wp-block-list">
<li>A spare computer or Raspberry Pi (with at least 2GB RAM and 32GB storage)</li>



<li>Basic networking knowledge</li>



<li>1-2 hours of setup time</li>



<li>Squid proxy software (free and open-source)</li>
</ul>



<h2 class="wp-block-heading" id="h-step-1-choosing-and-preparing-your-hardware">Step 1: Choosing and Preparing Your Hardware</h2>



<p class="wp-block-paragraph">You don&#8217;t need powerful hardware for a home or small office caching proxy. A Raspberry Pi 4 works great for small networks (up to 10 devices), while a modest PC or old laptop can handle larger networks.</p>



<p class="wp-block-paragraph">For this tutorial, I&#8217;ll use Ubuntu Server as the operating system, but you can use any Linux distribution.</p>



<ol class="wp-block-list">
<li>Download Ubuntu Server from ubuntu.com/download/server</li>



<li>Install it on your device following the installation prompts</li>



<li>Make sure to set a static IP address during installation</li>
</ol>



<h2 class="wp-block-heading" id="h-step-2-installing-squid-proxy-server">Step 2: Installing Squid Proxy Server</h2>



<p class="wp-block-paragraph">Squid is the most popular caching proxy software. It&#8217;s powerful, reliable, and well-documented. Let&#8217;s install it:</p>



<ol class="wp-block-list">
<li>Update your system:</li>
</ol>



<pre class="wp-block-code"><code>sudo apt update
sudo apt upgrade -y
</code></pre>



<ol start="2" class="wp-block-list">
<li>Install Squid:</li>
</ol>



<pre class="wp-block-code"><code>sudo apt install squid -y
</code></pre>



<ol start="3" class="wp-block-list">
<li>Verify the installation:</li>
</ol>



<pre class="wp-block-code"><code>squid -v
</code></pre>



<p class="wp-block-paragraph">This should display the Squid version information.</p>



<h2 class="wp-block-heading" id="h-step-3-configuring-squid-for-caching">Step 3: Configuring Squid for Caching</h2>



<p class="wp-block-paragraph">The default Squid configuration works, but we need to optimize it for caching:</p>



<ol class="wp-block-list">
<li>Back up the original configuration:</li>
</ol>



<pre class="wp-block-code"><code>sudo cp /etc/squid/squid.conf /etc/squid/squid.conf.original
</code></pre>



<ol start="2" class="wp-block-list">
<li>Edit the configuration file:</li>
</ol>



<pre class="wp-block-code"><code>sudo nano /etc/squid/squid.conf
</code></pre>



<ol start="3" class="wp-block-list">
<li>Find and modify these settings (or add them if not present):</li>
</ol>



<pre class="wp-block-code"><code># Define your local network
acl localnet src 192.168.1.0/24  # Change this to match your network

# Allow access from your local network
http_access allow localnet

# Cache settings
cache_mem 512 MB  # Adjust based on your server's RAM
maximum_object_size 50 MB  # Maximum size of objects to cache
cache_dir ufs /var/spool/squid 10000 16 256  # 10GB disk cache

# Refresh patterns for different content types
refresh_pattern ^ftp:           1440    20%     10080
refresh_pattern ^gopher:        1440    0%      1440
refresh_pattern -i (/cgi-bin/|\?) 0     0%      0
refresh_pattern \.(gif|png|jpg|jpeg|ico)$ 10080 90% 43200 override-expire ignore-no-cache ignore-no-store
refresh_pattern \.(css|js)$     10080   90%     43200 override-expire ignore-no-cache ignore-no-store
refresh_pattern .               0       20%     4320
</code></pre>



<ol start="4" class="wp-block-list">
<li>Save and close the file (Ctrl+X, then Y, then Enter in nano)</li>



<li>Create the cache directory:</li>
</ol>



<pre class="wp-block-code"><code>sudo mkdir -p /var/spool/squid
sudo chown proxy:proxy /var/spool/squid
</code></pre>



<ol start="6" class="wp-block-list">
<li>Initialize the cache:</li>
</ol>



<pre class="wp-block-code"><code>sudo squid -z
</code></pre>



<ol start="7" class="wp-block-list">
<li>Restart Squid:</li>
</ol>



<pre class="wp-block-code"><code>sudo systemctl restart squid
</code></pre>



<h2 class="wp-block-heading" id="h-step-4-setting-up-your-network-to-use-the-proxy">Step 4: Setting Up Your Network to Use the Proxy</h2>



<p class="wp-block-paragraph">There are two ways to implement the proxy on your network:</p>



<h3 class="wp-block-heading" id="h-option-1-configure-each-device-manual-method">Option 1: Configure Each Device (Manual Method)</h3>



<p class="wp-block-paragraph">Configure each device to use your proxy server:</p>



<ul class="wp-block-list">
<li>Proxy Address: Your server&#8217;s IP address (e.g., 192.168.1.10)</li>



<li>Port: 3128 (Squid&#8217;s default port)</li>
</ul>



<p class="wp-block-paragraph">This approach requires setting up each device individually but gives you more control.</p>



<h3 class="wp-block-heading" id="h-option-2-configure-your-router-transparent-proxy">Option 2: Configure Your Router (Transparent Proxy)</h3>



<p class="wp-block-paragraph">This method automatically routes all web traffic through your proxy:</p>



<ol class="wp-block-list">
<li>Install additional packages:</li>
</ol>



<pre class="wp-block-code"><code>sudo apt install iptables-persistent -y
</code></pre>



<ol start="2" class="wp-block-list">
<li>Add these lines to squid.conf:</li>
</ol>



<pre class="wp-block-code"><code># Transparent proxy settings
http_port 3128 transparent
</code></pre>



<ol start="3" class="wp-block-list">
<li>Set up IP forwarding:</li>
</ol>



<pre class="wp-block-code"><code>echo "net.ipv4.ip_forward=1" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
</code></pre>



<ol start="4" class="wp-block-list">
<li>Create IPTables rules:</li>
</ol>



<pre class="wp-block-code"><code>sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3128
sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 443 -j REDIRECT --to-port 3128
</code></pre>



<ol start="5" class="wp-block-list">
<li>Save the rules:</li>
</ol>



<pre class="wp-block-code"><code>sudo netfilter-persistent save
</code></pre>



<ol start="6" class="wp-block-list">
<li>On your router, set the default gateway to your proxy server&#8217;s IP address</li>
</ol>



<h2 class="wp-block-heading" id="h-step-5-testing-and-monitoring">Step 5: Testing and Monitoring</h2>



<ol class="wp-block-list">
<li>Test basic functionality by browsing from a device on your network</li>



<li>Monitor cache performance:</li>
</ol>



<pre class="wp-block-code"><code>tail -f /var/log/squid/access.log
</code></pre>



<ol start="3" class="wp-block-list">
<li>Check cache hit rate:</li>
</ol>



<pre class="wp-block-code"><code>squidclient mgr:info | grep "Hit Rate"
</code></pre>



<h2 class="wp-block-heading" id="h-advanced-optimizations">Advanced Optimizations</h2>



<p class="wp-block-paragraph">After you have the basic setup working, consider these optimizations:</p>



<h3 class="wp-block-heading" id="h-increase-cache-size">Increase Cache Size</h3>



<p class="wp-block-paragraph">If you have extra storage, increase the cache size:</p>



<pre class="wp-block-code"><code>cache_dir ufs /var/spool/squid 20000 16 256  # 20GB disk cache
</code></pre>



<h3 class="wp-block-heading" id="h-enable-https-caching">Enable HTTPS Caching</h3>



<p class="wp-block-paragraph">Modern websites use HTTPS. To cache this content:</p>



<ol class="wp-block-list">
<li>Install SSL tools:</li>
</ol>



<pre class="wp-block-code"><code>sudo apt install openssl -y
</code></pre>



<ol start="2" class="wp-block-list">
<li>Generate certificates:</li>
</ol>



<pre class="wp-block-code"><code>sudo mkdir -p /etc/squid/ssl_cert
sudo openssl req -new -newkey rsa:2048 -sha256 -days 365 -nodes -x509 -keyout /etc/squid/ssl_cert/myproxy.pem -out /etc/squid/ssl_cert/myproxy.pem
sudo chown proxy:proxy /etc/squid/ssl_cert/myproxy.pem
</code></pre>



<ol start="3" class="wp-block-list">
<li>Add to squid.conf:</li>
</ol>



<pre class="wp-block-code"><code># HTTPS caching
https_port 3129 cert=/etc/squid/ssl_cert/myproxy.pem ssl-bump intercept
acl SSL_port port 443
acl CONNECT method CONNECT
http_access allow CONNECT SSL_port localnet
ssl_bump server-first all
sslcrtd_program /usr/lib/squid/security_file_certgen -s /var/lib/ssl_db -M 4MB
sslcrtd_children 5
</code></pre>



<ol start="4" class="wp-block-list">
<li>Create the SSL database:</li>
</ol>



<pre class="wp-block-code"><code>sudo mkdir -p /var/lib/ssl_db
sudo chown -R proxy:proxy /var/lib/ssl_db
</code></pre>



<ol start="5" class="wp-block-list">
<li>Restart Squid:</li>
</ol>



<pre class="wp-block-code"><code>sudo systemctl restart squid
</code></pre>



<ol start="6" class="wp-block-list">
<li>Install the generated certificate on your devices as a trusted CA</li>
</ol>



<h2 class="wp-block-heading" id="h-troubleshooting-common-issues">Troubleshooting Common Issues</h2>



<ol class="wp-block-list">
<li>Squid not starting: Check logs with <code>sudo journalctl -u squid</code></li>



<li>Slow performance: Verify disk cache is working with <code>ls -la /var/spool/squid/</code></li>



<li>Websites not loading: Ensure your network configuration is correct</li>



<li>HTTPS issues: Check certificate installation</li>
</ol>



<h2 class="wp-block-heading" id="h-conclusion">Conclusion</h2>



<p class="wp-block-paragraph">Setting up a caching proxy server can significantly improve your network&#8217;s browsing experience. While the initial setup requires some technical knowledge, the long-term benefits are substantial. Your internet will feel faster, especially for frequently visited sites, and you&#8217;ll save bandwidth in the process.</p>



<p class="wp-block-paragraph">Have you set up a caching proxy server? Share your experience in the comments below!</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p class="wp-block-paragraph"><em>Disclaimer: This setup is intended for home or small office networks. For enterprise environments, consider professional solutions with support contracts.</em></p>



<p class="wp-block-paragraph"></p>
<p>The post <a href="https://hamradio.my/2025/05/how-to-set-up-a-caching-proxy-server-to-speed-up-your-local-network/">How to Set Up a Caching Proxy Server to Speed Up Your Local Network</a> appeared on <a href="https://hamradio.my">Hamradio.my - Amateur Radio, Tech Insights and Product Reviews</a> by <a href="https://hamradio.my/author/9m2pju/">9M2PJU</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://hamradio.my/2025/05/how-to-set-up-a-caching-proxy-server-to-speed-up-your-local-network/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>How to Set Up a Local Update Server for Ubuntu Desktops</title>
		<link>https://hamradio.my/2025/05/how-to-set-up-a-local-update-server-for-ubuntu-desktops/</link>
					<comments>https://hamradio.my/2025/05/how-to-set-up-a-local-update-server-for-ubuntu-desktops/#respond</comments>
		
		<dc:creator><![CDATA[9M2PJU]]></dc:creator>
		<pubDate>Thu, 29 May 2025 06:46:41 +0000</pubDate>
				<category><![CDATA[debian]]></category>
		<category><![CDATA[server]]></category>
		<category><![CDATA[ubuntu]]></category>
		<category><![CDATA[update]]></category>
		<category><![CDATA[aptcacherng]]></category>
		<category><![CDATA[aptmirror]]></category>
		<category><![CDATA[bandwidthsaving]]></category>
		<category><![CDATA[devops]]></category>
		<category><![CDATA[homelab]]></category>
		<category><![CDATA[itautomation]]></category>
		<category><![CDATA[linuxadmin]]></category>
		<category><![CDATA[linuxnetworking]]></category>
		<category><![CDATA[linuxserver]]></category>
		<category><![CDATA[linuxsetup]]></category>
		<category><![CDATA[localserver]]></category>
		<category><![CDATA[networkefficiency]]></category>
		<category><![CDATA[opensource]]></category>
		<category><![CDATA[selfhosted]]></category>
		<category><![CDATA[SysAdmin]]></category>
		<category><![CDATA[ubuntuadmin]]></category>
		<category><![CDATA[ubuntuclients]]></category>
		<category><![CDATA[ubuntutips]]></category>
		<category><![CDATA[ubuntuupdates]]></category>
		<guid isPermaLink="false">https://hamradio.my/?p=7439</guid>

					<description><![CDATA[<p>Maintaining multiple Ubuntu desktops in an office, school, or lab environment can become bandwidth-intensive if each machine downloads updates from the internet individually. A more efficient solution is to set up a local update server, which caches packages and distributes them to all local machines. In this guide, we walk through how to set up [&#8230;]</p>
<p>The post <a href="https://hamradio.my/2025/05/how-to-set-up-a-local-update-server-for-ubuntu-desktops/">How to Set Up a Local Update Server for Ubuntu Desktops</a> appeared on <a href="https://hamradio.my">Hamradio.my - Amateur Radio, Tech Insights and Product Reviews</a> by <a href="https://hamradio.my/author/9m2pju/">9M2PJU</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<h1 class="wp-block-heading" id="h-"></h1>



<p class="wp-block-paragraph">Maintaining multiple Ubuntu desktops in an office, school, or lab environment can become bandwidth-intensive if each machine downloads updates from the internet individually. A more efficient solution is to set up a <strong>local update server</strong>, which caches packages and distributes them to all local machines.</p>



<p class="wp-block-paragraph">In this guide, we walk through how to set up a local Ubuntu package mirror using <strong><code>apt-cacher-ng</code></strong>, a lightweight and efficient caching proxy for Debian-based systems.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-prerequisites"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f9f0.png" alt="🧰" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Prerequisites</h2>



<ul class="wp-block-list">
<li>A dedicated Ubuntu server (or one of your desktops) that will act as the cache server.</li>



<li>Internet access on the server.</li>



<li>Static IP or reserved DHCP IP for the cache server.</li>



<li>Ubuntu desktops configured to use the cache.</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-step-1-install-apt-cacher-ng-on-the-server"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f5a5.png" alt="🖥" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Step 1: Install <code>apt-cacher-ng</code> on the Server</h2>



<pre class="wp-block-code"><code>sudo apt update
sudo apt install apt-cacher-ng
</code></pre>



<p class="wp-block-paragraph">Once installed, the service starts automatically. You can check its status with:</p>



<pre class="wp-block-code"><code>sudo systemctl status apt-cacher-ng
</code></pre>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-step-2-configure-apt-cacher-ng-optional"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2699.png" alt="⚙" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Step 2: Configure <code>apt-cacher-ng</code> (Optional)</h2>



<p class="wp-block-paragraph">The default settings are usually fine for most use cases. But if you want to review or tweak the settings:</p>



<pre class="wp-block-code"><code>sudo nano /etc/apt-cacher-ng/acng.conf
</code></pre>



<p class="wp-block-paragraph">Ensure this line is set (it usually is):</p>



<pre class="wp-block-code"><code>PassThroughPattern: .*ubuntu.com/.* 
</code></pre>



<p class="wp-block-paragraph">To allow web access to the stats page, find and set:</p>



<pre class="wp-block-code"><code>ReportPage: acng-report.html
</code></pre>



<p class="wp-block-paragraph">Then restart the service:</p>



<pre class="wp-block-code"><code>sudo systemctl restart apt-cacher-ng
</code></pre>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-step-3-allow-access-through-firewall-if-enabled"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f310.png" alt="🌐" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Step 3: Allow Access Through Firewall (If Enabled)</h2>



<p class="wp-block-paragraph">If UFW is enabled:</p>



<pre class="wp-block-code"><code>sudo ufw allow 3142/tcp
</code></pre>



<p class="wp-block-paragraph">Port 3142 is the default port used by <code>apt-cacher-ng</code>.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-step-4-test-the-server-locally"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f9ea.png" alt="🧪" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Step 4: Test the Server Locally</h2>



<p class="wp-block-paragraph">You can test the server by accessing this URL in a browser on another machine:</p>



<pre class="wp-block-code"><code>http:&#47;&#47;&lt;cache-server-ip&gt;:3142/acng-report.html
</code></pre>



<p class="wp-block-paragraph">You should see the Apt-Cacher NG status page.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-step-5-configure-ubuntu-clients"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f9d1-200d-1f4bb.png" alt="🧑‍💻" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Step 5: Configure Ubuntu Clients</h2>



<p class="wp-block-paragraph">On each Ubuntu desktop, edit or create the file:</p>



<pre class="wp-block-code"><code>sudo nano /etc/apt/apt.conf.d/01proxy
</code></pre>



<p class="wp-block-paragraph">Add this line (replace <code>&lt;cache-server-ip&gt;</code> with your server’s IP address):</p>



<pre class="wp-block-code"><code>Acquire::http::Proxy "http://&lt;cache-server-ip&gt;:3142";
</code></pre>



<p class="wp-block-paragraph">Example:</p>



<pre class="wp-block-code"><code>Acquire::http::Proxy "http://192.168.1.10:3142";
</code></pre>



<p class="wp-block-paragraph">Now, whenever you run:</p>



<pre class="wp-block-code"><code>sudo apt update &amp;&amp; sudo apt upgrade
</code></pre>



<p class="wp-block-paragraph">The desktop will fetch packages from your local cache server, downloading from the internet only if they’re not already cached.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-optional-exclude-certain-packages-or-repositories"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f9f9.png" alt="🧹" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Optional: Exclude Certain Packages or Repositories</h2>



<p class="wp-block-paragraph">You can fine-tune what gets cached in <code>/etc/apt-cacher-ng/acng.conf</code>. Look for directives like:</p>



<pre class="wp-block-code"><code>ExThreshold: 10
</code></pre>



<p class="wp-block-paragraph">Or define blacklist patterns. See the man page for more advanced options:</p>



<pre class="wp-block-code"><code>man acng.conf
</code></pre>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-monitor-usage"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4ca.png" alt="📊" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Monitor Usage</h2>



<p class="wp-block-paragraph">Check the cache statistics and logs via:</p>



<ul class="wp-block-list">
<li>Web UI: <code>http://&lt;cache-server-ip>:3142/acng-report.html</code></li>



<li>Log file: <code>/var/log/apt-cacher-ng/apt-cacher.log</code></li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-final-tips"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Final Tips</h2>



<ul class="wp-block-list">
<li>Regularly monitor disk space. Cache can grow over time.</li>



<li>Use <code>cron</code> or <code>logrotate</code> to manage logs and old cached files.</li>



<li>Works seamlessly for Ubuntu, Debian, and derivatives (Linux Mint, Pop!_OS).</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p class="wp-block-paragraph">Setting up a local update server is a smart move for environments with multiple machines. It reduces internet usage, speeds up updates, and improves reliability during high-traffic times. Once configured, it&#8217;s mostly maintenance-free.</p>



<p class="wp-block-paragraph"></p>
<p>The post <a href="https://hamradio.my/2025/05/how-to-set-up-a-local-update-server-for-ubuntu-desktops/">How to Set Up a Local Update Server for Ubuntu Desktops</a> appeared on <a href="https://hamradio.my">Hamradio.my - Amateur Radio, Tech Insights and Product Reviews</a> by <a href="https://hamradio.my/author/9m2pju/">9M2PJU</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://hamradio.my/2025/05/how-to-set-up-a-local-update-server-for-ubuntu-desktops/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Hosting a Web Server Securely with Cloudflare Zero Trust Tunnel on MikroTik (Using Docker)</title>
		<link>https://hamradio.my/2025/05/hosting-a-web-server-securely-with-cloudflare-zero-trust-tunnel-on-mikrotik-using-docker/</link>
					<comments>https://hamradio.my/2025/05/hosting-a-web-server-securely-with-cloudflare-zero-trust-tunnel-on-mikrotik-using-docker/#respond</comments>
		
		<dc:creator><![CDATA[9M2PJU]]></dc:creator>
		<pubDate>Fri, 23 May 2025 17:07:06 +0000</pubDate>
				<category><![CDATA[cloudflare]]></category>
		<category><![CDATA[mikrotik]]></category>
		<category><![CDATA[cloudflared]]></category>
		<category><![CDATA[cybersecurity]]></category>
		<category><![CDATA[devops]]></category>
		<category><![CDATA[Docker]]></category>
		<category><![CDATA[homelab]]></category>
		<category><![CDATA[networking]]></category>
		<category><![CDATA[opensource]]></category>
		<category><![CDATA[privacy]]></category>
		<category><![CDATA[remotework]]></category>
		<category><![CDATA[reverseproxy]]></category>
		<category><![CDATA[routeros]]></category>
		<category><![CDATA[secureaccess]]></category>
		<category><![CDATA[selfhosted]]></category>
		<category><![CDATA[SysAdmin]]></category>
		<category><![CDATA[techsetup]]></category>
		<category><![CDATA[tunnel]]></category>
		<category><![CDATA[webhosting]]></category>
		<category><![CDATA[zerotrust]]></category>
		<guid isPermaLink="false">https://hamradio.my/?p=7531</guid>

					<description><![CDATA[<p>You have a web server running in your home network — maybe it’s a dashboard, self-hosted site, or internal tool. You want to access it remotely, but without port forwarding or exposing your public IP. This guide shows you how to safely publish your internal website using Cloudflare Tunnel, hosted directly on your MikroTik router [&#8230;]</p>
<p>The post <a href="https://hamradio.my/2025/05/hosting-a-web-server-securely-with-cloudflare-zero-trust-tunnel-on-mikrotik-using-docker/">Hosting a Web Server Securely with Cloudflare Zero Trust Tunnel on MikroTik (Using Docker)</a> appeared on <a href="https://hamradio.my">Hamradio.my - Amateur Radio, Tech Insights and Product Reviews</a> by <a href="https://hamradio.my/author/9m2pju/">9M2PJU</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">You have a web server running in your home network — maybe it’s a dashboard, self-hosted site, or internal tool. You want to <strong>access it remotely</strong>, but without port forwarding or exposing your public IP.</p>



<p class="wp-block-paragraph">This guide shows you how to <strong>safely publish your internal website</strong> using <strong>Cloudflare Tunnel</strong>, hosted <strong>directly on your MikroTik router via Docker</strong>.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading" id="h-scenario"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4d8.png" alt="📘" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Scenario</h3>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>Component</th><th>Value</th></tr></thead><tbody><tr><td>Web Server IP</td><td><code>192.168.0.10</code></td></tr><tr><td>MikroTik Gateway</td><td><code>192.168.0.1</code></td></tr><tr><td>Public Hostname</td><td><code>webserver.domain.com</code></td></tr><tr><td>Tunnel Host</td><td>MikroTik (via Docker)</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">Your router will run the Cloudflare Tunnel and <strong>forward requests securely</strong> to your internal PC running the web server.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading" id="h-prerequisites"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Prerequisites</h3>



<ul class="wp-block-list">
<li>MikroTik router with <strong>Docker support</strong> (e.g. RB5009, CCR2004, CHR)</li>



<li>RouterOS <strong>7.5+</strong></li>



<li>USB flash drive plugged into MikroTik (for container storage)</li>



<li>Web server running at <code>192.168.0.10:80</code></li>



<li>A <strong>Cloudflare account</strong> with your domain added (e.g. <code>domain.com</code>)</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading" id="h-step-1-enable-docker-on-mikrotik"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f527.png" alt="🔧" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Step 1: Enable Docker on MikroTik</h3>



<ol class="wp-block-list">
<li><strong>Install the container package</strong>:<br>Get it from <a href="https://mikrotik.com/download">mikrotik.com/download</a> under RouterOS v7 > Extra packages.</li>



<li><strong>Reboot</strong> after installation.</li>



<li><strong>Set Docker storage</strong>: <code>/container config set root-dir=disk1/docker</code></li>



<li><strong>Enable Docker</strong>: <code>/container set enabled=yes</code></li>
</ol>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading" id="h-step-2-create-tunnel-on-any-pc"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2601.png" alt="☁" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Step 2: Create Tunnel (on any PC)</h3>



<p class="wp-block-paragraph">Only needed once — you can delete the PC tunnel afterward.</p>



<ol class="wp-block-list">
<li>Install Cloudflared: <code>sudo apt install cloudflared</code></li>



<li>Authenticate: <code>cloudflared tunnel login</code> This opens a browser window. Log in and choose your domain.</li>



<li>Create a tunnel: <code>cloudflared tunnel create webserver-tunnel</code> This generates a <code>.json</code> credential file.</li>



<li>Create config file <code>config.yml</code>: <code>tunnel: webserver-tunnel credentials-file: /cloudflared/webserver-tunnel.json ingress: - hostname: webserver.domain.com service: http://192.168.0.10:80 - service: http_status:404</code></li>
</ol>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading" id="h-step-3-transfer-files-to-mikrotik"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4c2.png" alt="📂" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Step 3: Transfer Files to MikroTik</h3>



<p class="wp-block-paragraph">Copy the following files to your MikroTik into <code>/disk1/cloudflared/</code>:</p>



<ul class="wp-block-list">
<li><code>webserver-tunnel.json</code></li>



<li><code>config.yml</code></li>
</ul>



<p class="wp-block-paragraph">Use SCP or drag &amp; drop via Winbox → Files.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading" id="h-step-4-run-cloudflared-docker-container-on-mikrotik"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f433.png" alt="🐳" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Step 4: Run Cloudflared Docker Container on MikroTik</h3>



<ol class="wp-block-list">
<li>Add the container: <code>/container add \ remote-image=cloudflare/cloudflared:latest \ name=cloudflared \ root-dir=disk1/cloudflared \ command="tunnel --config /etc/config.yml run"</code></li>



<li>Start it: <code>/container start cloudflared</code></li>
</ol>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading" id="h-step-5-configure-cloudflare-dashboard-zero-trust"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f310.png" alt="🌐" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Step 5: Configure Cloudflare Dashboard (Zero Trust)</h3>



<p class="wp-block-paragraph">Now go to <a href="https://one.cloudflare.com/">https://one.cloudflare.com</a> and:</p>



<ol class="wp-block-list">
<li>Navigate to <strong>Access → Tunnels</strong>.</li>



<li>Click your tunnel (<code>webserver-tunnel</code>).</li>



<li>Click <strong>&#8220;Add a public hostname&#8221;</strong>.</li>



<li>Fill in:
<ul class="wp-block-list">
<li><strong>Subdomain</strong>: <code>webserver</code></li>



<li><strong>Domain</strong>: <code>domain.com</code></li>



<li><strong>Service</strong>: <code>http://192.168.0.10:80</code></li>
</ul>
</li>



<li>Click <strong>Save</strong>.</li>
</ol>



<p class="wp-block-paragraph">Now Cloudflare knows where to route incoming requests.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading" id="h-done-test-it"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Done! Test It</h3>



<p class="wp-block-paragraph">Visit:</p>



<pre class="wp-block-code"><code>https:&#47;&#47;webserver.domain.com
</code></pre>



<p class="wp-block-paragraph">Your site should load — even if you’re on mobile or outside your home network. All traffic is encrypted and proxied via Cloudflare, <strong>without any port forwarding</strong>.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading" id="h-optional-add-zero-trust-access-policy"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f6e1.png" alt="🛡" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Optional: Add Zero Trust Access Policy</h3>



<p class="wp-block-paragraph">Want to protect the site with a login?</p>



<ol class="wp-block-list">
<li>In Cloudflare dashboard, go to:<br><strong>Access → Applications → Add Application</strong></li>



<li>Choose <strong>Self-hosted</strong>.</li>



<li>Fill in:
<ul class="wp-block-list">
<li>App name: <code>Web Server</code></li>



<li>URL: <code>https://webserver.domain.com</code></li>
</ul>
</li>



<li>Set who can access (e.g. emails, GitHub, etc.)</li>
</ol>



<p class="wp-block-paragraph">Now only authorized users can access your internal site.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading" id="h-summary"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f9e0.png" alt="🧠" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Summary</h3>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>Feature</th><th>Status</th></tr></thead><tbody><tr><td>No port forwarding</td><td><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /></td></tr><tr><td>Works behind NAT</td><td><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /></td></tr><tr><td>Runs on MikroTik</td><td><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /></td></tr><tr><td>Secure Cloudflare Tunnel</td><td><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /></td></tr><tr><td>Access via domain</td><td><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /></td></tr></tbody></table></figure>



<p class="wp-block-paragraph">You’ve now turned your MikroTik router into a <strong>secure gateway</strong> for publishing internal services to the internet — the Cloudflare way.</p>



<p class="wp-block-paragraph"></p>
<p>The post <a href="https://hamradio.my/2025/05/hosting-a-web-server-securely-with-cloudflare-zero-trust-tunnel-on-mikrotik-using-docker/">Hosting a Web Server Securely with Cloudflare Zero Trust Tunnel on MikroTik (Using Docker)</a> appeared on <a href="https://hamradio.my">Hamradio.my - Amateur Radio, Tech Insights and Product Reviews</a> by <a href="https://hamradio.my/author/9m2pju/">9M2PJU</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://hamradio.my/2025/05/hosting-a-web-server-securely-with-cloudflare-zero-trust-tunnel-on-mikrotik-using-docker/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>DockFlare: Securely Expose Docker Services with Cloudflare Tunnels</title>
		<link>https://hamradio.my/2025/05/dockflare-securely-expose-docker-services-with-cloudflare-tunnels/</link>
					<comments>https://hamradio.my/2025/05/dockflare-securely-expose-docker-services-with-cloudflare-tunnels/#respond</comments>
		
		<dc:creator><![CDATA[9M2PJU]]></dc:creator>
		<pubDate>Fri, 23 May 2025 06:55:38 +0000</pubDate>
				<category><![CDATA[cloudflare]]></category>
		<category><![CDATA[cloudflare tunnel]]></category>
		<category><![CDATA[containerization]]></category>
		<category><![CDATA[debian]]></category>
		<category><![CDATA[docker]]></category>
		<category><![CDATA[fedora]]></category>
		<category><![CDATA[free open source software]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[ubuntu]]></category>
		<category><![CDATA[apigateway]]></category>
		<category><![CDATA[automation]]></category>
		<category><![CDATA[cloudflareaccess]]></category>
		<category><![CDATA[cloudflaretunnel]]></category>
		<category><![CDATA[Containerization]]></category>
		<category><![CDATA[cybersecurity]]></category>
		<category><![CDATA[devops]]></category>
		<category><![CDATA[DNS]]></category>
		<category><![CDATA[Docker]]></category>
		<category><![CDATA[dockercompose]]></category>
		<category><![CDATA[dockflare]]></category>
		<category><![CDATA[homelab]]></category>
		<category><![CDATA[networksecurity]]></category>
		<category><![CDATA[opensource]]></category>
		<category><![CDATA[privacy]]></category>
		<category><![CDATA[reverseproxy]]></category>
		<category><![CDATA[securehosting]]></category>
		<category><![CDATA[securewebapps]]></category>
		<category><![CDATA[selfhostedapps]]></category>
		<category><![CDATA[selfhosting]]></category>
		<category><![CDATA[ssl]]></category>
		<category><![CDATA[SysAdmin]]></category>
		<category><![CDATA[tunneling]]></category>
		<category><![CDATA[webhosting]]></category>
		<category><![CDATA[zerotrust]]></category>
		<guid isPermaLink="false">https://hamradio.my/?p=7540</guid>

					<description><![CDATA[<p>🌟 Introduction: What Is DockFlare? Self-hosting applications has become increasingly popular among developers, tech enthusiasts, and homelabbers. However, securely exposing internal services to the internet is often a complicated task. It involves: This is where DockFlare comes in. DockFlare is a lightweight, self-hosted Cloudflare Tunnel automation tool for Docker users. It simplifies the process of [&#8230;]</p>
<p>The post <a href="https://hamradio.my/2025/05/dockflare-securely-expose-docker-services-with-cloudflare-tunnels/">DockFlare: Securely Expose Docker Services with Cloudflare Tunnels</a> appeared on <a href="https://hamradio.my">Hamradio.my - Amateur Radio, Tech Insights and Product Reviews</a> by <a href="https://hamradio.my/author/9m2pju/">9M2PJU</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<h2 class="wp-block-heading" id="h-introduction-what-is-dockflare"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f31f.png" alt="🌟" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Introduction: What Is DockFlare?</h2>



<p class="wp-block-paragraph">Self-hosting applications has become increasingly popular among developers, tech enthusiasts, and homelabbers. However, securely exposing internal services to the internet is often a complicated task. It involves:</p>



<ul class="wp-block-list">
<li>Opening firewall ports</li>



<li>Dealing with dynamic IPs</li>



<li>Managing TLS certificates</li>



<li>Handling reverse proxies</li>



<li>Setting up access control</li>
</ul>



<p class="wp-block-paragraph">This is where <strong>DockFlare</strong> comes in.</p>



<p class="wp-block-paragraph"><strong>DockFlare</strong> is a lightweight, self-hosted <strong>Cloudflare Tunnel automation tool for Docker users</strong>. It simplifies the process of publishing your internal Docker services to the public internet through <strong>Cloudflare Tunnels</strong>, while providing optional <strong>Zero Trust security</strong>, DNS record automation, and a sleek web interface for real-time management.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-objectives-of-dockflare"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f3af.png" alt="🎯" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Objectives of DockFlare</h2>



<p class="wp-block-paragraph">DockFlare was created to solve three key problems:</p>



<ol class="wp-block-list">
<li><strong>Simplicity</strong>: Configure secure public access to your Docker containers using just labels—no reverse proxy, SSL setup, or manual DNS records needed.</li>



<li><strong>Security</strong>: Protect your services behind Cloudflare&#8217;s <strong>Zero Trust Access</strong>, supporting identity-based authentication (Google, GitHub, OTP, and more).</li>



<li><strong>Automation</strong>: Automatically create tunnels, subdomains, and security policies based on your Docker service metadata. No scripting. No re-deploys.</li>
</ol>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-why-use-dockflare"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4a1.png" alt="💡" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Why Use DockFlare?</h2>



<p class="wp-block-paragraph">Here’s how DockFlare benefits its users:</p>



<ul class="wp-block-list">
<li><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f680.png" alt="🚀" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong>Quick Setup</strong>: Set up secure tunnels and expose services in seconds with Docker labels.</li>



<li><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f510.png" alt="🔐" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong>Zero Trust Security</strong>: Enforce authentication for any service using Cloudflare Access.</li>



<li><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f30d.png" alt="🌍" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong>No Public IP Required</strong>: No need to forward ports or expose your home IP—perfect for CG-NAT and mobile ISPs.</li>



<li><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f6e1.png" alt="🛡" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong>Safe by Default</strong>: TLS encryption, no open ports, and access rules built-in.</li>



<li><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f5a5.png" alt="🖥" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong>User-Friendly UI</strong>: Visualize tunnels, view logs, and manage configurations in a web dashboard.</li>



<li><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f9f0.png" alt="🧰" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong>DevOps Ready</strong>: Works seamlessly in CI/CD pipelines or home labs.</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-how-to-install-dockflare"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f6e0.png" alt="🛠" class="wp-smiley" style="height: 1em; max-height: 1em;" /> How to Install DockFlare</h2>



<h3 class="wp-block-heading" id="h-requirements"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f9fe.png" alt="🧾" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Requirements</h3>



<ul class="wp-block-list">
<li>Docker and Docker Compose</li>



<li>A Cloudflare account</li>



<li>A domain connected to Cloudflare</li>



<li>A Cloudflare API Token with:
<ul class="wp-block-list">
<li>Zone DNS edit</li>



<li>Zero Trust policy management</li>



<li>Tunnel management</li>
</ul>
</li>
</ul>



<h3 class="wp-block-heading" id="h-step-1-create-your-project-directory"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4c1.png" alt="📁" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Step 1: Create Your Project Directory</h3>



<pre class="wp-block-code"><code>mkdir dockflare &amp;&amp; cd dockflare
</code></pre>



<h3 class="wp-block-heading" id="h-step-2-create-env-file"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4dd.png" alt="📝" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Step 2: Create <code>.env</code> File</h3>



<p class="wp-block-paragraph">Create a file named <code>.env</code> with the following contents:</p>



<pre class="wp-block-code"><code>CLOUDFLARE_API_TOKEN=your_token_here
CLOUDFLARE_ACCOUNT_ID=your_account_id
CLOUDFLARE_ZONE_ID=your_zone_id
TZ=Asia/Kuala_Lumpur
</code></pre>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f512.png" alt="🔒" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Keep this file private!</p>
</blockquote>



<h3 class="wp-block-heading" id="h-step-3-create-docker-compose-yml"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f433.png" alt="🐳" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Step 3: Create <code>docker-compose.yml</code></h3>



<pre class="wp-block-code"><code>version: '3.8'

services:
  dockflare:
    image: alplat/dockflare:stable
    container_name: dockflare
    restart: unless-stopped
    env_file:
      - .env
    ports:
      - "5000:5000"
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro
      - dockflare_data:/app/data
    labels:
      - cloudflare.tunnel.enable=true
      - cloudflare.tunnel.hostname=dockflare.yourdomain.com
      - cloudflare.tunnel.service=http://dockflare:5000

volumes:
  dockflare_data:
</code></pre>



<h3 class="wp-block-heading" id="h-step-4-deploy-dockflare"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/25b6.png" alt="▶" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Step 4: Deploy DockFlare</h3>



<pre class="wp-block-code"><code>docker compose up -d
</code></pre>



<p class="wp-block-paragraph">Access the UI: <a href="http://localhost:5000/">http://localhost:5000</a></p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-exposing-a-docker-service"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f310.png" alt="🌐" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Exposing a Docker Service</h2>



<p class="wp-block-paragraph">Here’s an example of exposing a service like <code>myapp</code> running on port 8080:</p>



<pre class="wp-block-code"><code>services:
  myapp:
    image: myapp:latest
    labels:
      cloudflare.tunnel.enable: "true"
      cloudflare.tunnel.hostname: "app.yourdomain.com"
      cloudflare.tunnel.service: "http://myapp:8080"
      cloudflare.tunnel.access.policy: "authenticate"
      cloudflare.tunnel.access.allowed_idps: "your-idp-uuid"
</code></pre>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f510.png" alt="🔐" class="wp-smiley" style="height: 1em; max-height: 1em;" /> This will automatically:</p>



<ul class="wp-block-list">
<li>Create a Cloudflare Tunnel</li>



<li>Point your subdomain to it</li>



<li>Enforce secure login</li>
</ul>
</blockquote>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-add-non-docker-services"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f30d.png" alt="🌍" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Add Non-Docker Services</h2>



<p class="wp-block-paragraph">Want to expose your home router or NAS?</p>



<ol class="wp-block-list">
<li>Go to DockFlare UI.</li>



<li>Click <strong>&#8220;Add Hostname&#8221;</strong>.</li>



<li>Enter:
<ul class="wp-block-list">
<li>Hostname (e.g., nas.yourdomain.com)</li>



<li>Internal IP/port</li>



<li>Access policy (bypass/authenticate)</li>
</ul>
</li>



<li>Done!</li>
</ol>



<p class="wp-block-paragraph">This works for <strong>any service</strong>, not just Docker.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-configuring-zero-trust-access"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f510.png" alt="🔐" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Configuring Zero Trust Access</h2>



<p class="wp-block-paragraph">To secure your services:</p>



<ul class="wp-block-list">
<li>Go to <a href="https://dash.teams.cloudflare.com/">Cloudflare Zero Trust dashboard</a></li>



<li>Add an identity provider (Google, GitHub, etc.)</li>



<li>Use the IDP UUID in your container labels</li>



<li>Example:</li>
</ul>



<pre class="wp-block-code"><code>cloudflare.tunnel.access.policy: authenticate
cloudflare.tunnel.access.allowed_idps: abc123-def456
cloudflare.tunnel.access.session_duration: 8h
</code></pre>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-advanced-tips"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f9e0.png" alt="🧠" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Advanced Tips</h2>



<ul class="wp-block-list">
<li>Expose multiple hostnames:<br><code>cloudflare.tunnel.hostname=api.domain.com,admin.domain.com</code></li>



<li>Customize session duration:<br><code>cloudflare.tunnel.access.session_duration=12h</code></li>



<li>Monitor logs via the web UI or <code>docker logs dockflare</code></li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-resources"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4da.png" alt="📚" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Resources</h2>



<ul class="wp-block-list">
<li>GitHub: <a href="https://github.com/ChrispyBacon-dev/DockFlare">ChrispyBacon-dev/DockFlare</a></li>



<li>Docker Compose Docs: <a href="https://docs.docker.com/compose/">docker.com/compose</a></li>



<li>Cloudflare Tunnels Guide: <a href="https://developers.cloudflare.com/cloudflare-one/connections/connect-apps/">developers.cloudflare.com</a></li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-conclusion"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f3c1.png" alt="🏁" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Conclusion</h2>



<p class="wp-block-paragraph">DockFlare is a game-changer for developers, sysadmins, and homelabbers who want an easy, secure, and automated way to expose their applications to the web. With support for Cloudflare Tunnels, Zero Trust Access, DNS automation, and a clean UI—it&#8217;s the only tool you&#8217;ll need to publish your services safely.</p>



<p class="wp-block-paragraph">No more port forwarding. No more SSL headaches.</p>



<p class="wp-block-paragraph"><strong>Just Docker + DockFlare + Cloudflare = Done. <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /></strong></p>
<p>The post <a href="https://hamradio.my/2025/05/dockflare-securely-expose-docker-services-with-cloudflare-tunnels/">DockFlare: Securely Expose Docker Services with Cloudflare Tunnels</a> appeared on <a href="https://hamradio.my">Hamradio.my - Amateur Radio, Tech Insights and Product Reviews</a> by <a href="https://hamradio.my/author/9m2pju/">9M2PJU</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://hamradio.my/2025/05/dockflare-securely-expose-docker-services-with-cloudflare-tunnels/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>How to Set Up Chrony as a Local NTP Server Using Docker</title>
		<link>https://hamradio.my/2025/05/how-to-set-up-chrony-as-a-local-ntp-server-using-docker/</link>
					<comments>https://hamradio.my/2025/05/how-to-set-up-chrony-as-a-local-ntp-server-using-docker/#respond</comments>
		
		<dc:creator><![CDATA[9M2PJU]]></dc:creator>
		<pubDate>Sun, 18 May 2025 14:28:00 +0000</pubDate>
				<category><![CDATA[debian]]></category>
		<category><![CDATA[docker]]></category>
		<category><![CDATA[network time protocol]]></category>
		<category><![CDATA[ubuntu]]></category>
		<category><![CDATA[chrony]]></category>
		<category><![CDATA[chronyd]]></category>
		<category><![CDATA[Docker]]></category>
		<category><![CDATA[ham radio tools]]></category>
		<category><![CDATA[homelab]]></category>
		<category><![CDATA[IoT]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[local network]]></category>
		<category><![CDATA[networking]]></category>
		<category><![CDATA[ntp]]></category>
		<category><![CDATA[raspberry pi]]></category>
		<category><![CDATA[system admin]]></category>
		<category><![CDATA[time server]]></category>
		<category><![CDATA[time sync]]></category>
		<guid isPermaLink="false">https://hamradio.my/?p=7390</guid>

					<description><![CDATA[<p>In a local network where you want to keep your devices synchronized with accurate time, running a lightweight and efficient NTP server is essential. Chrony, a modern alternative to ntpd, is a great choice and in this guide, I’ll show you how to set it up inside a Docker container that fetches time from global [&#8230;]</p>
<p>The post <a href="https://hamradio.my/2025/05/how-to-set-up-chrony-as-a-local-ntp-server-using-docker/">How to Set Up Chrony as a Local NTP Server Using Docker</a> appeared on <a href="https://hamradio.my">Hamradio.my - Amateur Radio, Tech Insights and Product Reviews</a> by <a href="https://hamradio.my/author/9m2pju/">9M2PJU</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">In a local network where you want to keep your devices synchronized with accurate time, running a lightweight and efficient NTP server is essential. <strong>Chrony</strong>, a modern alternative to <code>ntpd</code>, is a great choice and in this guide, I’ll show you how to set it up inside a Docker container that fetches time from global sources and distributes it across your LAN.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading" id="h-why-chrony"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f680.png" alt="🚀" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Why Chrony?</h3>



<p class="wp-block-paragraph">Chrony is:</p>



<ul class="wp-block-list">
<li>More accurate than <code>ntpd</code> in many conditions (especially with intermittent connectivity)</li>



<li>Lightweight and easy to configure</li>



<li>Ideal for both clients and servers</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading" id="h-what-you-ll-set-up"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f433.png" alt="🐳" class="wp-smiley" style="height: 1em; max-height: 1em;" /> What You&#8217;ll Set Up</h3>



<ul class="wp-block-list">
<li>A <strong>Docker container</strong> running Chrony</li>



<li>Configured to <strong>sync with global NTP servers</strong></li>



<li>Act as a <strong>time server for your LAN</strong></li>



<li>With optional <strong>logging and control access</strong></li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-step-1-create-a-dockerfile-for-chrony"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f9f1.png" alt="🧱" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Step 1: Create a Dockerfile for Chrony</h2>



<p class="wp-block-paragraph">Start by creating a simple <code>Dockerfile</code> to build a minimal Chrony container.</p>



<pre class="wp-block-code"><code># Dockerfile
FROM debian:stable-slim

RUN apt-get update &amp;&amp; \
    apt-get install -y chrony &amp;&amp; \
    apt-get clean &amp;&amp; \
    rm -rf /var/lib/apt/lists/*

COPY chrony.conf /etc/chrony/chrony.conf

EXPOSE 123/udp

CMD &#91;"chronyd", "-d", "-f", "/etc/chrony/chrony.conf"]
</code></pre>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-step-2-create-the-chrony-conf"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2699.png" alt="⚙" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Step 2: Create the <code>chrony.conf</code></h2>



<p class="wp-block-paragraph">Here’s a sample <code>chrony.conf</code> tailored for <strong>local server use</strong> and syncing with global time sources:</p>



<pre class="wp-block-code"><code># chrony.conf

# Time sources (use pool.ntp.org or your regional servers)
server 0.pool.ntp.org iburst
server 1.pool.ntp.org iburst
server 2.pool.ntp.org iburst

# Allow all clients on your LAN (edit this according to your subnet)
allow 192.168.1.0/24

# Local stratum fallback if Internet is down
local stratum 10

# Drift file to track clock error over time
driftfile /var/lib/chrony/chrony.drift

# Log tracking data
log tracking measurements statistics

# Log files location
logdir /var/log/chrony

# Optional: control access
cmdport 0  # Use 0 to disable remote control; use 323 if needed
</code></pre>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">Replace <code>192.168.1.0/24</code> with your actual LAN subnet.</p>
</blockquote>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-step-3-build-and-run-the-docker-container"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f9ea.png" alt="🧪" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Step 3: Build and Run the Docker Container</h2>



<pre class="wp-block-code"><code>docker build -t chrony-server .
</code></pre>



<p class="wp-block-paragraph">Now run the container with:</p>



<pre class="wp-block-code"><code>docker run -d \
  --name chrony \
  --restart unless-stopped \
  --network host \
  --cap-add=NET_BIND_SERVICE \
  chrony-server
</code></pre>



<h3 class="wp-block-heading" id="h-explanation"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Explanation:</h3>



<ul class="wp-block-list">
<li><code>--network host</code> allows the container to bind directly to port 123/UDP</li>



<li><code>--cap-add=NET_BIND_SERVICE</code> is required to bind to low-numbered ports like 123</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-step-4-test-your-ntp-server"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f50e.png" alt="🔎" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Step 4: Test Your NTP Server</h2>



<p class="wp-block-paragraph">From a client machine on your LAN:</p>



<pre class="wp-block-code"><code>ntpdate -q &lt;chrony-server-ip&gt;
</code></pre>



<p class="wp-block-paragraph">or</p>



<pre class="wp-block-code"><code>chronyc sources -a
</code></pre>



<p class="wp-block-paragraph">You should see that the time is being served and synchronized.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-optional-run-as-a-local-time-authority"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4cc.png" alt="📌" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Optional: Run as a Local Time Authority</h2>



<p class="wp-block-paragraph">If you want to run <strong>fully offline</strong>, or ensure internal time continuity even without internet:</p>



<ol class="wp-block-list">
<li>Remove the <code>server</code> lines from <code>chrony.conf</code></li>



<li>Set: <code>local stratum 8</code></li>



<li>Start the server with a <strong>stable internal clock source</strong></li>
</ol>



<p class="wp-block-paragraph">This makes your Chrony instance a <strong>local time authority</strong> for your network.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-firewall-notes"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f510.png" alt="🔐" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Firewall Notes</h2>



<p class="wp-block-paragraph">Make sure UDP port <strong>123</strong> is allowed <strong>inbound</strong> from your LAN on your Docker host:</p>



<pre class="wp-block-code"><code>sudo ufw allow proto udp from 192.168.1.0/24 to any port 123
</code></pre>



<p class="wp-block-paragraph">Or for <code>iptables</code>:</p>



<pre class="wp-block-code"><code>iptables -A INPUT -p udp -s 192.168.1.0/24 --dport 123 -j ACCEPT
</code></pre>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-conclusion"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4ce.png" alt="📎" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Conclusion</h2>



<p class="wp-block-paragraph">With this setup, you&#8217;ve created a <strong>portable, containerized NTP server</strong> using Chrony that:</p>



<ul class="wp-block-list">
<li>Syncs with global servers</li>



<li>Serves accurate time to all local devices</li>



<li>Works even if your external internet connection drops</li>
</ul>



<p class="wp-block-paragraph">Perfect for <strong>homelabs</strong>, <strong>IoT networks</strong>, or <strong>offline environments</strong>.</p>



<p class="wp-block-paragraph"></p>
<p>The post <a href="https://hamradio.my/2025/05/how-to-set-up-chrony-as-a-local-ntp-server-using-docker/">How to Set Up Chrony as a Local NTP Server Using Docker</a> appeared on <a href="https://hamradio.my">Hamradio.my - Amateur Radio, Tech Insights and Product Reviews</a> by <a href="https://hamradio.my/author/9m2pju/">9M2PJU</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://hamradio.my/2025/05/how-to-set-up-chrony-as-a-local-ntp-server-using-docker/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Docker vs Virtual Machines: What Every Ham Should Know</title>
		<link>https://hamradio.my/2025/05/docker-vs-virtual-machines-what-every-ham-should-know/</link>
					<comments>https://hamradio.my/2025/05/docker-vs-virtual-machines-what-every-ham-should-know/#respond</comments>
		
		<dc:creator><![CDATA[9M2PJU]]></dc:creator>
		<pubDate>Sat, 03 May 2025 03:16:36 +0000</pubDate>
				<category><![CDATA[amateur radio]]></category>
		<category><![CDATA[container]]></category>
		<category><![CDATA[debian]]></category>
		<category><![CDATA[docker]]></category>
		<category><![CDATA[fedora]]></category>
		<category><![CDATA[ham radio]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[ubuntu]]></category>
		<category><![CDATA[virtual machine]]></category>
		<category><![CDATA[virtualization]]></category>
		<category><![CDATA[amateuradio]]></category>
		<category><![CDATA[APRS]]></category>
		<category><![CDATA[aprsbot]]></category>
		<category><![CDATA[aprsgateway]]></category>
		<category><![CDATA[ci_cd]]></category>
		<category><![CDATA[containers]]></category>
		<category><![CDATA[devops]]></category>
		<category><![CDATA[DigitalModes]]></category>
		<category><![CDATA[Direwolf]]></category>
		<category><![CDATA[Docker]]></category>
		<category><![CDATA[dockercompose]]></category>
		<category><![CDATA[fielddeployment]]></category>
		<category><![CDATA[hamradio]]></category>
		<category><![CDATA[HF]]></category>
		<category><![CDATA[homelab]]></category>
		<category><![CDATA[js8call]]></category>
		<category><![CDATA[lightweightcomputing]]></category>
		<category><![CDATA[openwebrx]]></category>
		<category><![CDATA[patwinlink]]></category>
		<category><![CDATA[radioautomation]]></category>
		<category><![CDATA[radioshack]]></category>
		<category><![CDATA[RaspberryPi]]></category>
		<category><![CDATA[Repeater]]></category>
		<category><![CDATA[rtl_433]]></category>
		<category><![CDATA[sdr]]></category>
		<category><![CDATA[SoftwareDefinedRadio]]></category>
		<category><![CDATA[SysAdmin]]></category>
		<category><![CDATA[techforhams]]></category>
		<category><![CDATA[UHF]]></category>
		<category><![CDATA[VHF]]></category>
		<category><![CDATA[virtualmachine]]></category>
		<category><![CDATA[winlink]]></category>
		<guid isPermaLink="false">https://hamradio.my/?p=7354</guid>

					<description><![CDATA[<p>Before container technologies like Docker came into play, applications were typically run directly on the host operating system—either on bare metal hardware or inside virtual machines (VMs). While this method works, it often leads to frustrating issues, especially when trying to reproduce setups across different environments. This becomes even more relevant in the amateur radio [&#8230;]</p>
<p>The post <a href="https://hamradio.my/2025/05/docker-vs-virtual-machines-what-every-ham-should-know/">Docker vs Virtual Machines: What Every Ham Should Know</a> appeared on <a href="https://hamradio.my">Hamradio.my - Amateur Radio, Tech Insights and Product Reviews</a> by <a href="https://hamradio.my/author/9m2pju/">9M2PJU</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<h1 class="wp-block-heading" id="h-"></h1>



<p class="wp-block-paragraph">Before container technologies like Docker came into play, applications were typically run directly on the host operating system—either on <strong>bare metal</strong> hardware or inside <strong>virtual machines (VMs)</strong>. While this method works, it often leads to frustrating issues, especially when trying to reproduce setups across different environments.</p>



<p class="wp-block-paragraph">This becomes even more relevant in the <strong>amateur radio world</strong>, where we often experiment with digital tools, servers, logging software, APRS gateways, SDR applications, and more. Having a consistent and lightweight deployment method is key when tinkering with limited hardware like Raspberry Pi, small form factor PCs, or cloud VPS systems.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-the-problem-with-traditional-software-deployment">The Problem with Traditional Software Deployment</h2>



<p class="wp-block-paragraph">Let’s say you’ve set up an <strong>APRS iGate</strong>, or maybe you’re experimenting with <strong>WSJT-X for FT8</strong>, and everything runs flawlessly on your laptop. But the moment you try deploying the same setup on a Raspberry Pi or a remote server—suddenly things break.</p>



<p class="wp-block-paragraph">Why?</p>



<p class="wp-block-paragraph">Common culprits include:</p>



<ul class="wp-block-list">
<li>Different versions of the operating system</li>



<li>Mismatched library versions</li>



<li>Varying configurations</li>



<li>Conflicting dependencies</li>
</ul>



<p class="wp-block-paragraph">These issues can be particularly painful in amateur radio projects, where specific software dependencies are critical, and stability matters for long-term operation.</p>



<p class="wp-block-paragraph">You could solve this by running each setup inside a virtual machine, but VMs are often overkill—especially for ham radio gear with <strong>limited resources</strong>.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-enter-docker-the-ham-s-best-friend-for-lightweight-deployment">Enter Docker: The Ham&#8217;s Best Friend for Lightweight Deployment</h2>



<p class="wp-block-paragraph"><strong>Docker</strong> is an open-source platform that allows you to package applications along with everything they need—libraries, configurations, runtimes—into one neat, portable unit called a <strong>container</strong>.</p>



<p class="wp-block-paragraph">Think of it like packaging up your entire ham radio setup (SDR software, packet tools, logging apps, etc.) into a container, then being able to deploy that same exact setup on:</p>



<ul class="wp-block-list">
<li>A Raspberry Pi</li>



<li>A cloud server</li>



<li>A homelab NUC</li>



<li>Another ham’s machine</li>
</ul>



<h3 class="wp-block-heading" id="h-why-it-s-great-for-hams">Why It’s Great for Hams:</h3>



<ul class="wp-block-list">
<li><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f9ca.png" alt="🧊" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong>Lightweight</strong> – great for Raspberry Pi or low-power servers</li>



<li><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f680.png" alt="🚀" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong>Fast startup</strong> – ideal for services that need to restart quickly</li>



<li><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f501.png" alt="🔁" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong>Reproducible environments</strong> – makes sharing setups with fellow hams easier</li>



<li><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f512.png" alt="🔒" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong>Isolation</strong> – keeps different radio tools from interfering with each other</li>
</ul>



<p class="wp-block-paragraph">Many amateur radio tools like <strong>Direwolf</strong>, <strong>Xastir</strong>, <strong>Pat (Winlink)</strong>, and even <strong>JS8Call</strong> can be containerized, making experimentation safer and more efficient.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-virtual-machines-still-relevant-in-the-shack">Virtual Machines: Still Relevant in the Shack</h2>



<p class="wp-block-paragraph">Virtual Machines (VMs) have been around much longer and still play a crucial role. Each VM acts like a complete computer, with its own OS and kernel, running on a <strong>hypervisor</strong> like:</p>



<ul class="wp-block-list">
<li>VirtualBox</li>



<li>VMware</li>



<li>KVM</li>



<li>Hyper-V</li>
</ul>



<p class="wp-block-paragraph">With VMs, you can spin up an entire Windows or Linux machine, perfect for:</p>



<ul class="wp-block-list">
<li>Running legacy ham radio software (e.g., old Windows-only apps)</li>



<li>Simulating different operating systems for testing</li>



<li>Isolating potentially unstable setups from your main system</li>
</ul>



<p class="wp-block-paragraph">However, VMs require more horsepower. They&#8217;re heavy, boot slowly, and take up more disk space—often not ideal for small ham radio PCs or low-powered nodes deployed in the field.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-quick-comparison-docker-vs-virtual-machines-for-hams">Quick Comparison: Docker vs Virtual Machines for Hams</h2>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>Feature</th><th>Docker</th><th>Virtual Machine</th></tr></thead><tbody><tr><td>OS</td><td>Shares host kernel</td><td>Full OS per VM</td></tr><tr><td>Boot Time</td><td>Seconds</td><td>Minutes</td></tr><tr><td>Resource Use</td><td>Low</td><td>High</td></tr><tr><td>Size</td><td>Lightweight</td><td>Heavy (GBs)</td></tr><tr><td>Ideal For</td><td>Modern ham tools, APRS bots, SDR apps</td><td>Legacy systems, OS testing</td></tr><tr><td>Portability</td><td>High</td><td>Moderate</td></tr></tbody></table></figure>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-ham-radio-use-cases-for-docker">Ham Radio Use Cases for Docker</h2>



<p class="wp-block-paragraph">Here’s how Docker fits into amateur radio workflows:</p>



<ul class="wp-block-list">
<li><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f680.png" alt="🚀" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong>Run an APRS iGate</strong> with <strong>Direwolf</strong> and <strong>YAAC</strong> in isolated containers.</li>



<li><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4e1.png" alt="📡" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong>Deploy SDR receivers</strong> like <strong>rtl_433</strong>, <strong>OpenWebRX</strong>, or <strong>CubicSDR</strong> as containerized services.</li>



<li><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4e8.png" alt="📨" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong>Set up a Winlink gateway</strong> using <strong>Pat</strong> + <strong>ax25</strong> tools, all in one container.</li>



<li><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f504.png" alt="🔄" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Automate and scale your <strong>APRS bot</strong>, or <strong>APRS gateway</strong> using Docker + cron + scripts.</li>
</ul>



<p class="wp-block-paragraph">Docker makes it easier to test and share these setups with other hams—just export your Docker Compose file or image.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-when-to-use-docker-when-to-use-a-vm">When to Use Docker, When to Use a VM</h2>



<h3 class="wp-block-heading" id="h-use-docker-if">Use <strong>Docker</strong> if:</h3>



<ul class="wp-block-list">
<li>You’re building or experimenting with <strong>modern ham radio apps</strong></li>



<li>You want to <strong>deploy quickly</strong> and <strong>repeatably</strong></li>



<li>You’re using <strong>Raspberry Pi</strong>, <strong>VPS</strong>, or <strong>low-power hardware</strong></li>



<li>You’re setting up <strong>CI/CD pipelines</strong> for your scripts or bots</li>
</ul>



<h3 class="wp-block-heading" id="h-use-vms-if">Use <strong>VMs</strong> if:</h3>



<ul class="wp-block-list">
<li>You need to run <strong>legacy apps</strong> (e.g., old Windows logging software)</li>



<li>You want to simulate full system environments</li>



<li>You’re working on something that could crash your main system</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading" id="h-final-thoughts">Final Thoughts</h2>



<p class="wp-block-paragraph">Both Docker and VMs are powerful tools that have a place in the modern <strong>ham shack</strong>. Docker offers speed, portability, and resource-efficiency—making it ideal for deploying SDR setups, APRS bots, or automation scripts. VMs, on the other hand, still shine when you need full system emulation or deeper isolation.</p>



<p class="wp-block-paragraph">At the end of the day, being a ham means being an experimenter. And tools like Docker just give us more ways to explore, automate, and share our radio projects with the world.</p>
<p>The post <a href="https://hamradio.my/2025/05/docker-vs-virtual-machines-what-every-ham-should-know/">Docker vs Virtual Machines: What Every Ham Should Know</a> appeared on <a href="https://hamradio.my">Hamradio.my - Amateur Radio, Tech Insights and Product Reviews</a> by <a href="https://hamradio.my/author/9m2pju/">9M2PJU</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://hamradio.my/2025/05/docker-vs-virtual-machines-what-every-ham-should-know/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
