<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Terraform on Thang's Tech Notes</title><link>https://blog.thang-gcloud.duckdns.org/tags/terraform/</link><description>Recent content in Terraform on Thang's Tech Notes</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Fri, 21 Aug 2026 00:21:00 +0700</lastBuildDate><atom:link href="https://blog.thang-gcloud.duckdns.org/tags/terraform/index.xml" rel="self" type="application/rss+xml"/><item><title>🛠️ Building a Production-Grade Home Cloud on Oracle's $0 Always Free Tier</title><link>https://blog.thang-gcloud.duckdns.org/posts/building-my-always-free-cloud/</link><pubDate>Fri, 21 Aug 2026 00:21:00 +0700</pubDate><guid>https://blog.thang-gcloud.duckdns.org/posts/building-my-always-free-cloud/</guid><description>&lt;p&gt;What can you actually run on a &lt;strong&gt;$0/month Always Free cloud server&lt;/strong&gt;?&lt;/p&gt;
&lt;p&gt;In this post, I document the end-to-end journey of turning an Oracle Cloud &lt;strong&gt;1 GB AMD Micro instance (&lt;code&gt;amd10&lt;/code&gt;)&lt;/strong&gt; in Tokyo into a multi-service personal cloud hub — complete with &lt;strong&gt;Dual-Stack DNS ad-blocking&lt;/strong&gt;, &lt;strong&gt;Google Single Sign-On (SSO)&lt;/strong&gt;, &lt;strong&gt;lossless Hi-Res music streaming&lt;/strong&gt;, a &lt;strong&gt;Rust-powered REST &amp;amp; AI MCP API&lt;/strong&gt;, and a &lt;strong&gt;Hugo static blog&lt;/strong&gt;.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="-architecture--network-blueprint"&gt;🏗️ Architecture &amp;amp; Network Blueprint&lt;/h2&gt;
&lt;pre tabindex="0"&gt;&lt;code class="language-mermaid" data-lang="mermaid"&gt;graph TD
Internet[&amp;#34;🌐 Internet / Home Network / Mobile&amp;#34;] --&amp;gt; Caddy[&amp;#34;🔒 Caddy (Auto Let&amp;#39;s Encrypt SSL)&amp;#34;]
subgraph OCI Cloud Instance (amd10 - Tokyo)
Caddy --&amp;gt;|/| VietCal[&amp;#34;📅 VietCalendar REST &amp;amp; MCP (Rust :8080)&amp;#34;]
Caddy --&amp;gt;|files.*| Oauth[&amp;#34;🔑 OAuth2-Proxy (Google SSO :4180)&amp;#34;]
Oauth --&amp;gt; FileBrowser[&amp;#34;📁 FileBrowser Cloud Drive (:8082)&amp;#34;]
Caddy --&amp;gt;|music.*| Navidrome[&amp;#34;🎵 Navidrome Lossless FLAC (:4533)&amp;#34;]
Caddy --&amp;gt;|blog.*| Hugo[&amp;#34;📝 Hugo Static Site (:443)&amp;#34;]
Caddy --&amp;gt;|adguard.*| AdGuardWeb[&amp;#34;🛡️ AdGuard Dashboard (:3000)&amp;#34;]
Router[&amp;#34;🏠 Home Router (Fiber IPv4 &amp;amp; IPv6)&amp;#34;] --&amp;gt; AdGuardDNS[&amp;#34;🛡️ AdGuard DNS Server (:53 &amp;amp; :853 DoT)&amp;#34;]
end
&lt;/code&gt;&lt;/pre&gt;&lt;hr&gt;
&lt;h2 id="-1-reclaiming-hardware-ram-the-crashkernel-discovery"&gt;⚡ 1. Reclaiming Hardware RAM (The &lt;code&gt;crashkernel&lt;/code&gt; Discovery)&lt;/h2&gt;
&lt;p&gt;On a standard 1 GB VM, Linux kdump can silently reserve up to &lt;strong&gt;448 MB RAM&lt;/strong&gt; (nearly half the server&amp;rsquo;s memory!).&lt;/p&gt;</description></item></channel></rss>