<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Homelab on Umi4Life's Blog</title><link>https://umi4.life/th/tags/homelab/</link><description>Recent content from Umi4Life's Blog</description><generator>Hugo</generator><language>th-th</language><managingEditor>zekamashi@umi4.life (Umi4Life / Zekamashi)</managingEditor><webMaster>zekamashi@umi4.life (Umi4Life / Zekamashi)</webMaster><copyright>บทความทั้งหมดในบล็อกนี้อยู่ภายใต้สัญญาอนุญาต BY-NC-SA เว้นแต่จะระบุไว้เป็นอย่างอื่น กรุณาระบุแหล่งที่มาเมื่อนำไปเผยแพร่ซ้ำ!</copyright><lastBuildDate>Mon, 08 Jun 2026 03:00:00 +0700</lastBuildDate><atom:link href="https://umi4.life/th/tags/homelab/index.xml" rel="self" type="application/rss+xml"/><item><title>สาม Repo หนึ่ง Heatmap: Git Activity ที่ปลอดภัยบน umi4.life</title><link>https://umi4.life/th/posts/git-activity-heatmap-pipeline/</link><pubDate>Mon, 08 Jun 2026 03:00:00 +0700</pubDate><author>zekamashi@umi4.life (Umi4Life / Zekamashi)</author><guid>https://umi4.life/th/posts/git-activity-heatmap-pipeline/</guid><description>
<![CDATA[<h1>สาม Repo หนึ่ง Heatmap: Git Activity ที่ปลอดภัยบน umi4.life</h1><p>ผู้เขียน: Umi4Life / Zekamashi(zekamashi@umi4.life)</p>
        
          <p><img src="/posts/git-activity-heatmap-pipeline/images/vendor-ci-success-redacted.png" alt="Vendor CI workflow สำเร็จหลังเพิ่ม cross-repo token แล้ว รายละเอียดที่ละเอียดอ่อนถูก redact"></p>
<blockquote>
<p><strong>หมายเหตุผู้ปฏิบัติการ:</strong> ภาพในบทความนี้ถูก redact แล้ว token, ส่วนหัวบัญชี และ metadata ของ workflow ถูกเบลอ ตัวอย่าง config ใช้ placeholder เท่านั้น</p>
</blockquote>
<div class="post-icon-row"><img src="https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/hugo.svg" alt="Hugo">
<img src="https://cdn.jsdelivr.net/npm/@lobehub/icons-static-svg@latest/icons/github.svg" alt="Github">
<img src="https://cdn.jsdelivr.net/gh/selfhst/icons/svg/gitea.svg" alt="Gitea">
<img src="https://cdn.jsdelivr.net/gh/selfhst/icons/svg/debian.svg" alt="Deb">
<img src="https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/linux.svg" alt="Linux">
<img src="https://cdn.jsdelivr.net/gh/selfhst/icons/svg/git.svg" alt="Git"></div>

<p>ผมอยากได้กราฟ contribution แบบ GitHub บนหน้า <a href="/th/about/">About</a> — แต่ก็มี Gitea ส่วนตัวสำหรับงาน homelab และ infrastructure การเผยแพร่<em>จำนวน</em>กิจกรรมมีประโยชน์ การเผยแพร่ว่าแตะ private repo ไหน พร้อม commit message และชื่อ branch ไม่ใช่</p>
<p>เลยแบ่งปัญหาเป็นสาม repository ด้วยขอบเขตที่ชัดเจน:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">private exporter  →  public artifact  →  public blog display
</span></span></code></pre></div><p>บล็อกไม่เรียก GitHub หรือ Gitea API เลย แค่ render JSON ที่ commit ไว้ homelab ไม่ต้องมี token สำหรับ <code>umi4.life</code> credential ข้าม repo มีแค่ใน GitHub Actions ของ artifact repo</p>
        
        <hr><p>เผยแพร่เมื่อ 2026-06-08 ที่ <a href='https://umi4.life/'>Umi4Life's Blog</a> แก้ไขล่าสุดเมื่อ 2026-06-08</p>]]></description><category>homelab</category><category>infrastructure</category><category>automation</category></item><item><title>ลดการเรียก GPT Vision ด้วย Gemma Router แบบ Fail-Closed</title><link>https://umi4.life/th/posts/gemma-vision-router/</link><pubDate>Fri, 05 Jun 2026 17:28:00 +0700</pubDate><author>zekamashi@umi4.life (Umi4Life / Zekamashi)</author><guid>https://umi4.life/th/posts/gemma-vision-router/</guid><description>
<![CDATA[<h1>ลดการเรียก GPT Vision ด้วย Gemma Router แบบ Fail-Closed</h1><p>ผู้เขียน: Umi4Life / Zekamashi(zekamashi@umi4.life)</p>
        
          <blockquote>
<p>local multimodal model จะช่วยลดการใช้ GPT/Codex vision ได้ไหม โดยไม่ทำให้ assistant ไม่น่าเชื่อถือ?</p>
</blockquote>
<h2 id="สรป">
<a class="header-anchor" href="#%e0%b8%aa%e0%b8%a3%e0%b8%9b"></a>
สรุป
</h2><p>ผมทดลองว่า local Gemma multimodal model ที่ serve ผ่าน LiteLLM จะทำหน้าที่เป็น image interpretation helper รอบแรกให้ Hermes/Sky Feather ได้แค่ไหน</p>
<p>เป้าหมายไม่ใช่การแทนที่ GPT-5.5/Codex vision ทั้งหมด แต่เป็นคำถามที่ใช้งานจริงมากกว่า:</p>
<blockquote>
<p>ให้ Gemma จัดการคำอธิบายรูปภาพทั่วไปได้ไหม แล้วค่อย escalate รูปที่ไม่มั่นใจ มี text เยอะ หรือมีความเสี่ยงกลับไปหา GPT?</p>
</blockquote>
<p>คำตอบคือ: <strong>ได้ แต่ต้องมี router ที่ conservative และ fail closed เท่านั้น</strong></p>
<p>ใน benchmark 20 รูปแบบ clean run:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">GPT-only baseline:     20 GPT/Codex vision calls
</span></span><span class="line"><span class="cl">Gemma-first router:   20 Gemma calls + 12 GPT/Codex escalations
</span></span><span class="line"><span class="cl">GPT calls avoided:     8 / 20 = 40%
</span></span><span class="line"><span class="cl">Gemma empty outputs:   5 / 20 = 25%
</span></span></code></pre></div><p>Gemma มีประโยชน์สำหรับ visual triage ที่ความเสี่ยงต่ำ แต่ก็มีหลายเคสที่ output ที่มองเห็นได้ว่างเปล่า นั่นทำให้มันไม่ปลอดภัยพอจะเป็น vision backend เดี่ยว ๆ</p>
        
        <hr><p>เผยแพร่เมื่อ 2026-06-05 ที่ <a href='https://umi4.life/'>Umi4Life's Blog</a> แก้ไขล่าสุดเมื่อ 2026-06-05</p>]]></description><category>automation</category><category>ai</category><category>homelab</category></item><item><title>Hermes NAS Storage สำหรับไฟล์ประกอบเอกสาร</title><link>https://umi4.life/th/posts/hermes-nas-storage/</link><pubDate>Thu, 04 Jun 2026 00:00:22 +0700</pubDate><author>zekamashi@umi4.life (Umi4Life / Zekamashi)</author><guid>https://umi4.life/th/posts/hermes-nas-storage/</guid><description>
<![CDATA[<h1>Hermes NAS Storage สำหรับไฟล์ประกอบเอกสาร</h1><p>ผู้เขียน: Umi4Life / Zekamashi(zekamashi@umi4.life)</p>
        
          <blockquote>
<p><strong>หมายเหตุสำหรับผู้ดูแล:</strong> IP ภายในและค่า UID/GID ในโพสต์นี้เป็น placeholder สำหรับบทความสาธารณะ ช่องในตารางใช้ marker แบบ <code>{NAS_IP}</code>, ให้แทนด้วยค่าของระบบคุณเองก่อน copy-paste</p>
</blockquote>
<h2 id="เปาหมาย">
<a class="header-anchor" href="#%e0%b9%80%e0%b8%9b%e0%b8%b2%e0%b8%ab%e0%b8%a1%e0%b8%b2%e0%b8%a2"></a>
เป้าหมาย
</h2><p>Hermes สร้างและจัดการเอกสารที่มักมีไฟล์ประกอบหลายแบบ เช่น:</p>
<ul>
<li>Screenshots</li>
<li>รูปถ่าย</li>
<li>Screen recordings</li>
<li>รูปภาพที่ render แล้ว</li>
<li>Diagram ที่ generate ขึ้นมา</li>
<li>Media assets สำหรับบล็อก</li>
</ul>
<p>ถ้าเก็บไฟล์เหล่านี้ไว้บน VM โดยตรง สุดท้ายจะกินพื้นที่ local disk และทำให้การจัดการ backup ซับซ้อนขึ้น</p>
<p>เป้าหมายคือให้ Hermes เข้าถึง storage กลางบน TrueNAS ได้ แต่ยังใช้งานจากฝั่ง agent เหมือนเป็น directory ปกติบนเครื่อง local</p>
<p>Workflow ที่ต้องการ:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">Hermes VM
</span></span><span class="line"><span class="cl">    ↓
</span></span><span class="line"><span class="cl">/mnt/truenas/hermes
</span></span><span class="line"><span class="cl">    ↓ (NFS)
</span></span><span class="line"><span class="cl">TrueNAS Dataset
</span></span><span class="line"><span class="cl">/mnt/lamia/data/hermes
</span></span></code></pre></div><p>งานนี้ไม่ได้ตั้งใจให้เป็น NAS mount แบบ shared ทั่วไป Hermes เป็น writer เดียวของ dataset นี้ ดังนั้นผมเลือกใช้ Unix ownership แบบตรงไปตรงมา แทน ACL หรือ NFS identity mapping ส่วน subfolder <code>docs-media</code> ด้านล่างเป็น workaround ชั่วคราวเท่านั้น การตั้ง UID/GID ของ dataset ให้ตรงกับ service user ของ Hermes คือ fix ระยะยาวที่ตั้งใจไว้</p>
        
        <hr><p>เผยแพร่เมื่อ 2026-06-04 ที่ <a href='https://umi4.life/'>Umi4Life's Blog</a> แก้ไขล่าสุดเมื่อ 2026-06-04</p>]]></description><category>homelab</category></item><item><title>Untangling Homelab หลังตั้ง Hermes Dashboard แล้วพังเป็นลูกโซ่</title><link>https://umi4.life/th/posts/hermes-litellm-authelia-control-plane/</link><pubDate>Wed, 03 Jun 2026 18:30:00 +0700</pubDate><author>zekamashi@umi4.life (Umi4Life / Zekamashi)</author><guid>https://umi4.life/th/posts/hermes-litellm-authelia-control-plane/</guid><description>
<![CDATA[<h1>Untangling Homelab หลังตั้ง Hermes Dashboard แล้วพังเป็นลูกโซ่</h1><p>ผู้เขียน: Umi4Life / Zekamashi(zekamashi@umi4.life)</p>
        
          <p><strong>คำบรรยาย:</strong> เราแค่อยากเปิด Hermes Dashboard ให้เข้าจาก LAN ได้ แต่ดันไปสะกิด tech debt เก่าใน routing/auth stack จนต้องไล่แก้ปมทั้ง Traefik, Authelia OIDC, split DNS และ LiteLLM</p>
<div class="post-icon-row"><img src="/posts/hermes-litellm-authelia-control-plane/images/icons/traefik-proxy.svg" alt="Traefik Proxy">
<img src="/posts/hermes-litellm-authelia-control-plane/images/icons/cloudflare.svg" alt="Cloudflare">
<img src="/posts/hermes-litellm-authelia-control-plane/images/icons/docker.svg" alt="Docker">
<img src="/posts/hermes-litellm-authelia-control-plane/images/icons/authelia.svg" alt="Authelia">
<img src="/posts/hermes-litellm-authelia-control-plane/images/icons/litellm.svg" alt="LiteLLM"></div>

<p>งานนี้ไม่ได้ควรจะกลายเป็น incident ใหญ่เลย</p>
<p>เป้าหมายแรกเล็กมาก: เปิด Hermes Dashboard ให้ browser ใน LAN เข้าได้ เพื่อให้ Hermes Agent มี web control surface ที่ใช้งานง่ายขึ้น</p>
<p>แต่พอเริ่มแก้จริง มันลากปมเก่าใน homelab ออกมาทีละชั้น</p>
<p>เริ่มจาก dashboard bind อยู่แค่ <code>localhost</code> ต่อด้วย Traefik routing assumption, HTTPS forwarded header ที่ทำให้ OIDC redirect เพี้ยน, Authelia reject token exchange, LiteLLM container resolve hostname ของ LAN-only identity provider ไม่ได้ และสุดท้าย bug ที่เล็กแต่เจ็บมาก: <code>GENERIC_USERINFO_ENDPOINT</code> ดันชี้ไปที่ <code>token</code> endpoint</p>
        
        <hr><p>เผยแพร่เมื่อ 2026-06-03 ที่ <a href='https://umi4.life/'>Umi4Life's Blog</a> แก้ไขล่าสุดเมื่อ 2026-06-03</p>]]></description><category>homelab</category><category>infrastructure</category><category>automation</category></item><item><title>ตั้งค่า WireGuard Network</title><link>https://umi4.life/th/posts/wireguard-network-setup/</link><pubDate>Sun, 19 Apr 2026 15:33:15 +0700</pubDate><author>zekamashi@umi4.life (Umi4Life / Zekamashi)</author><guid>https://umi4.life/th/posts/wireguard-network-setup/</guid><description>
<![CDATA[<h1>ตั้งค่า WireGuard Network</h1><p>ผู้เขียน: Umi4Life / Zekamashi(zekamashi@umi4.life)</p>
        
          <h2 id="the-problem">
<a class="header-anchor" href="#the-problem"></a>
The Problem
</h2><p><img src="/posts/wireguard-network-setup/images/meme.png" alt="มีมเรื่องขีดจำกัดผู้ใช้ Tailscale ทำให้แชร์ VPN ยากเมื่อมีคนเยอะ"></p>
<p>ตอนนี้ผมใช้ Tailscale เป็น VPN สำหรับเข้า homelab จากข้างนอกบ้าน เช่น Wi‑Fi นอกบ้านหรือ cellular สิ่งที่ไม่ชอบใน setup นี้คือ free plan ของ Tailscale scale ผู้ใช้ยากมาก เพราะจำกัดไว้แค่ 6 users ถ้าผมอยากแชร์ internal services ให้กลุ่มเพื่อน ทุกคนต้องสมัครบัญชี Tailscale และผ่าน onboarding ของ Tailscale ก่อน วิธีเดียวที่พอจะเลี่ยง user limit ได้คือเพิ่มเป็นราย device ซึ่ง onboarding ก็ปวดหัวพอกัน: ให้ user login Tailscale จากเครื่องตัวเอง แล้วใช้ auth link เพื่อ sign in เข้าบัญชีของผม</p>
<p>สรุปสั้น ๆ คือ Tailscale ดีมากสำหรับใช้งานส่วนตัว แต่เพิ่ม user ใหม่ลำบาก WireGuard ตรงไปตรงมากว่าเยอะ เพราะแค่ generate QR link แล้วส่งให้เพื่อน เพื่อนติดตั้งแอป WireGuard ก็ใช้งานได้ ไม่ต้องสมัครอะไรเพิ่ม</p>
        
        <hr><p>เผยแพร่เมื่อ 2026-04-19 ที่ <a href='https://umi4.life/'>Umi4Life's Blog</a> แก้ไขล่าสุดเมื่อ 2026-04-19</p>]]></description><category>homelab</category></item><item><title>สร้าง Proxmox Homelab ของตัวเอง</title><link>https://umi4.life/th/posts/building-proxmox-homelab/</link><pubDate>Sat, 04 Apr 2026 10:35:08 +0700</pubDate><author>zekamashi@umi4.life (Umi4Life / Zekamashi)</author><guid>https://umi4.life/th/posts/building-proxmox-homelab/</guid><description>
<![CDATA[<h1>สร้าง Proxmox Homelab ของตัวเอง</h1><p>ผู้เขียน: Umi4Life / Zekamashi(zekamashi@umi4.life)</p>
        
          <h3 id="the-plan">
<a class="header-anchor" href="#the-plan"></a>
The plan
</h3><p>ผมอยาก host bare-metal server ของตัวเองมาสักพักแล้ว จุดเริ่มต้นจริง ๆ คือ PC พื้นที่ใกล้เต็ม เลยคิดจะประกอบ NAS แต่ระหว่างวางแผนก็มีความคิดโผล่มาว่า “ถ้างั้นทำให้มันเป็น home server เต็มรูปแบบสำหรับ host microservices ของตัวเองไปเลยดีไหม”</p>
<pre class="mermaid">
  flowchart TD

    %% Entry
    A[Internet] --> B[Tunneling]
    B --> C[Reverse Proxy]

    %% Core
    subgraph Homelab
        C --> D[Microservices]
        D --> E[Databases]
        F[Network Storage / NAS] --> D
        F --> E
        G[Monitoring / Observibility]
    end

    %% Observability
    G --> C
    G --> D
    G --> E
</pre><p>ช่วงหลังมีข่าว AWS และ Cloudflare outage บ่อยขึ้น ผมเลยรู้สึกว่านี่เป็นสิ่งที่คนควรลองเล่นกันมากขึ้นเหมือนกัน อย่างน้อยก็เพื่อเข้าใจว่า infrastructure ที่เราใช้ทุกวันมันทำงานยังไง</p>
        
        <hr><p>เผยแพร่เมื่อ 2026-04-04 ที่ <a href='https://umi4.life/'>Umi4Life's Blog</a> แก้ไขล่าสุดเมื่อ 2026-04-04</p>]]></description><category>homelab</category></item></channel></rss>