<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Self-Hosted on Margrop Blog</title>
    <link>https://blog.margrop.net/en/tag/self-hosted/</link>
    <description>Recent content in Self-Hosted on Margrop Blog</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>en-US</language>
    <lastBuildDate>Fri, 10 Jul 2026 15:30:00 +0800</lastBuildDate>
    <atom:link href="https://blog.margrop.net/en/tag/self-hosted/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Stop Sprinkling API Keys Everywhere: My Self-Hosted NewAPI Relay Station</title>
      <link>https://blog.margrop.net/en/post/newapi-self-hosted-relay-station/</link>
      <pubDate>Fri, 10 Jul 2026 15:30:00 +0800</pubDate>
      <guid>https://blog.margrop.net/en/post/newapi-self-hosted-relay-station/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;TL;DR&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;NewAPI is not a free-model trick and it is not a mysterious proxy. In my setup, it is the front desk for AI usage: every app talks to one endpoint, while the gateway routes requests to authorized upstream providers and handles tokens, quotas, groups, model limits, logs, and usage accounting. For a personal deployment, the big win is not “one more dashboard”; it is no longer scattering upstream keys across every client, script, and agent.&lt;/p&gt;&#xA;&lt;p&gt;This post explains why I wanted a self-hosted model relay, what people usually misunderstand, how to deploy a minimal Docker Compose version, why I add persistent storage, and how to use one-click scripts for Windows 11, Ubuntu 26.04, and macOS 26. It also includes an agent-driven setup prompt with strict boundaries. No private address, complete machine name, private domain, or real secret is included.&lt;/p&gt;&#xA;&lt;/blockquote&gt;</description>
    </item>
    <item>
      <title>Docker Images, No More Begging: Build Your Own 13 GB Private Registry From Scratch</title>
      <link>https://blog.margrop.net/en/post/build-private-docker-registry-without-hassle/</link>
      <pubDate>Fri, 26 Jun 2026 12:30:00 +0800</pubDate>
      <guid>https://blog.margrop.net/en/post/build-private-docker-registry-without-hassle/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;TL;DR&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;My home server runs a single &lt;code&gt;registry:2&lt;/code&gt; container that currently holds &lt;strong&gt;13 GB of cached blobs across 95 repositories&lt;/strong&gt;. Every NAS, Proxmox node, Mac, and Windows machine on my LAN pulls through it. A cold start of &lt;code&gt;alpine:3.19&lt;/code&gt; finishes in under a second, with zero traffic going out to the public Docker Hub.&lt;/p&gt;&#xA;&lt;p&gt;This isn&amp;rsquo;t a one-line &amp;ldquo;install Docker and run a container&amp;rdquo; tutorial. I&amp;rsquo;ll show you the &lt;strong&gt;production-grade deployment script I actually run&lt;/strong&gt;, walk through the Docker v2 auth flow, and call out the four reverse-proxy pitfalls that turn every &lt;code&gt;docker login&lt;/code&gt; into a 401 mystery. You&amp;rsquo;ll leave able to: ① bring up an authenticated registry in 10 minutes; ② explain why the &lt;code&gt;WWW-Authenticate&lt;/code&gt; header is sacred; ③ describe the whole thing to a non-technical family member without losing accuracy.&lt;/p&gt;&#xA;&lt;/blockquote&gt;</description>
    </item>
  </channel>
</rss>
