<?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>Cloud Infrastructure on Vinh Thang's AI Tech Notes</title><link>https://vinhthang.dev/categories/cloud-infrastructure/</link><description>Recent content in Cloud Infrastructure on Vinh Thang's AI Tech Notes</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Thu, 27 Aug 2026 19:45:00 +0700</lastBuildDate><atom:link href="https://vinhthang.dev/categories/cloud-infrastructure/index.xml" rel="self" type="application/rss+xml"/><item><title>🌐 Expanding to Multi-Cloud: Provisioning Oracle Linux 10 on Google Cloud's $0 Always Free Tier &amp; Joining K3s</title><link>https://vinhthang.dev/posts/gcp-always-free-oracle-linux-10-cross-cloud/</link><pubDate>Thu, 27 Aug 2026 19:45:00 +0700</pubDate><guid>https://vinhthang.dev/posts/gcp-always-free-oracle-linux-10-cross-cloud/</guid><description>&lt;p&gt;Why settle for one free cloud provider when you can build an automated, resilient &lt;strong&gt;multi-cloud Kubernetes cluster across Oracle Cloud (OCI) and Google Cloud Platform (GCP)&lt;/strong&gt; — completely for &lt;strong&gt;$0/month&lt;/strong&gt;?&lt;/p&gt;
&lt;p&gt;In this post, I walk through the end-to-end process of:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Provisioning an &lt;strong&gt;Oracle Linux Server 10.1&lt;/strong&gt; instance on Google Cloud&amp;rsquo;s &lt;strong&gt;Always Free Tier (&lt;code&gt;gce10&lt;/code&gt;)&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Applying kernel and daemon memory hardening to reclaim ~250 MB of RAM.&lt;/li&gt;
&lt;li&gt;Joining &lt;code&gt;gce10&lt;/code&gt; as a worker node into our central &lt;strong&gt;K3s Kubernetes cluster&lt;/strong&gt; across a secure &lt;strong&gt;WireGuard mesh&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Running a head-to-head performance benchmark comparing &lt;strong&gt;Apple Silicon M1&lt;/strong&gt;, &lt;strong&gt;OCI Ampere ARM (&lt;code&gt;arm10&lt;/code&gt;)&lt;/strong&gt;, &lt;strong&gt;GCP Intel Xeon (&lt;code&gt;gce10&lt;/code&gt;)&lt;/strong&gt;, and &lt;strong&gt;OCI AMD EPYC (&lt;code&gt;amd10&lt;/code&gt;/&lt;code&gt;amd11&lt;/code&gt;)&lt;/strong&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;h2 id="-1-multi-cloud-k3s-kubernetes-fleet-architecture"&gt;🏛️ 1. Multi-Cloud K3s Kubernetes Fleet Architecture&lt;/h2&gt;
&lt;p&gt;Our fleet previously lived entirely in OCI Tokyo. Adding &lt;strong&gt;&lt;code&gt;gce10&lt;/code&gt;&lt;/strong&gt; in GCP Iowa (&lt;code&gt;us-central1&lt;/code&gt;) creates a geo-distributed cross-cloud presence with a dedicated US edge outpost.&lt;/p&gt;</description></item><item><title>🛠️ Building a Production-Grade Home Cloud on Oracle's $0 Always Free Tier</title><link>https://vinhthang.dev/posts/building-my-always-free-cloud/</link><pubDate>Fri, 21 Aug 2026 00:21:00 +0700</pubDate><guid>https://vinhthang.dev/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><item><title>Supercharging Self-Hosted Cloud Uploads: How Cloudflare WARP Turbocharges File Ingestion</title><link>https://vinhthang.dev/posts/supercharging-uploads-cloudflare-warp/</link><pubDate>Mon, 24 Aug 2026 19:14:00 +0700</pubDate><guid>https://vinhthang.dev/posts/supercharging-uploads-cloudflare-warp/</guid><description>&lt;p&gt;One of the most frustrating bottlenecks in self-hosting is &lt;strong&gt;uploading large files to overseas cloud servers&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Whether you are uploading a 45 GB lossless FLAC music collection to Navidrome, backing up 4K video files to FileBrowser, or transferring gigabytes of PDF datasets to an AI vector store, standard public internet routing often degrades performance to an agonizing crawl.&lt;/p&gt;
&lt;p&gt;In this post, I will explain why international cross-border uploads stall, and how we used &lt;strong&gt;Cloudflare WARP&lt;/strong&gt; and &lt;strong&gt;Anycast Edge Ingestion&lt;/strong&gt; to boost our file upload throughput by &lt;strong&gt;5x to 10x&lt;/strong&gt; directly into our cloud fleet at &lt;a href="https://vinhthang.dev"&gt;&lt;strong&gt;&lt;code&gt;vinhthang.dev&lt;/code&gt;&lt;/strong&gt;&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>How to Snag the Elusive Oracle Cloud Always Free ARM64 Ampere A1 Instance</title><link>https://vinhthang.dev/posts/snagging-oracle-always-free-arm-ampere/</link><pubDate>Mon, 24 Aug 2026 18:45:00 +0700</pubDate><guid>https://vinhthang.dev/posts/snagging-oracle-always-free-arm-ampere/</guid><description>&lt;p&gt;If you have ever tried to launch an &lt;strong&gt;ARM64 Ampere A1 Flex&lt;/strong&gt; compute instance on &lt;strong&gt;Oracle Cloud Infrastructure (OCI) Always Free&lt;/strong&gt;, you have almost certainly encountered this dreaded error message:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;500-InternalError: Out of host capacity for shape VM.Standard.A1.Flex in availability domain...&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Oracle&amp;rsquo;s Always Free tier offers one of the most generous compute allowances in the industry—&lt;strong&gt;up to 4 OCPUs and 24 GB RAM&lt;/strong&gt; on enterprise-grade Ampere Altra ARM64 processors. Because of this, capacity in popular data centers (like Tokyo, Seoul, Ashburn, Frankfurt, and Singapore) is constantly saturated.&lt;/p&gt;</description></item></channel></rss>