<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Docker on Pi Stack</title><link>https://www.pistack.xyz/tags/docker/</link><description>Recent content in Docker on Pi Stack</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Tue, 21 Apr 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://www.pistack.xyz/tags/docker/index.xml" rel="self" type="application/rss+xml"/><item><title>Overseerr vs Jellyseerr vs Ombi: Self-Hosted Media Request Management 2026</title><link>https://www.pistack.xyz/posts/2026-04-21-overseerr-vs-jellyseerr-vs-ombi-self-hosted-media-requests-guide-2026/</link><pubDate>Tue, 21 Apr 2026 00:00:00 +0000</pubDate><guid>https://www.pistack.xyz/posts/2026-04-21-overseerr-vs-jellyseerr-vs-ombi-self-hosted-media-requests-guide-2026/</guid><description>&lt;p>If you run a Plex, &lt;a href="https://jellyfin.org/">jellyfin&lt;/a>, or Emby server for your family, friends, or community, you know the problem: someone always wants something new to watch, and coordinating requests through group chats or text messages quickly becomes unmanageable. You end up playing detective — checking what they mean by &amp;ldquo;that Marvel movie,&amp;rdquo; searching your library to see if you already have it, and manually downloading content. It&amp;rsquo;s a friction-filled experience that makes running a media server feel like customer support.&lt;/p></description></item><item><title>Kube-Bench vs Trivy vs Kubescape: Container &amp; Kubernetes Hardening Guide 2026</title><link>https://www.pistack.xyz/posts/2026-04-20-kube-bench-vs-trivy-vs-kubescape-container-kubernetes-hardening-guide-2026/</link><pubDate>Mon, 20 Apr 2026 00:00:00 +0000</pubDate><guid>https://www.pistack.xyz/posts/2026-04-20-kube-bench-vs-trivy-vs-kubescape-container-kubernetes-hardening-guide-2026/</guid><description>&lt;p>Running containers and &lt;a href="https://kubernetes.io/">kubernetes&lt;/a> clusters in production without security scanning is like leaving your server&amp;rsquo;s front door unlocked. Misconfigurations, outdated base images, overly permissive RBAC policies, and exposed secrets are the top causes of container breaches. The good news: you don&amp;rsquo;t need expensive commercial tools to catch them.&lt;/p></description></item><item><title>containerd vs CRI-O vs Podman: Best Self-Hosted Container Runtimes 2026</title><link>https://www.pistack.xyz/posts/containerd-vs-cri-o-vs-podman-self-hosted-container-runtimes-guide-2026/</link><pubDate>Sat, 18 Apr 2026 00:00:00 +0000</pubDate><guid>https://www.pistack.xyz/posts/containerd-vs-cri-o-vs-podman-self-hosted-container-runtimes-guide-2026/</guid><description>&lt;p>Every container you run — whether it&amp;rsquo;s a web server, database, or microservice — depends on a &lt;strong>container runtime&lt;/strong> underneath. The runtime is the low-level software that actually creates, manages, and tears down containers on your host system.&lt;/p></description></item><item><title>Self-Hosted BitTorrent Trackers 2026: Chihaya vs Torrust vs bittorrent-tracker</title><link>https://www.pistack.xyz/posts/self-hosted-bittorrent-trackers-chihaya-torrust-webtorrent-guide-2026/</link><pubDate>Sat, 18 Apr 2026 00:00:00 +0000</pubDate><guid>https://www.pistack.xyz/posts/self-hosted-bittorrent-trackers-chihaya-torrust-webtorrent-guide-2026/</guid><description>&lt;p>A BitTorrent tracker is the central coordinator that helps peers discover each other in the BitTorrent protocol. Without a tracker, torrent clients rely solely on Distributed Hash Tables (DHT) and peer exchange — which work fine for popular torrents but are unreliable for niche or private content.&lt;/p></description></item><item><title>Self-Hosted Browser Automation Servers: Browserless vs Playwright vs Selenium Grid 2026</title><link>https://www.pistack.xyz/posts/self-hosted-browser-automation-servers-browserless-playwright-selenium-grid-guide-2026/</link><pubDate>Sat, 18 Apr 2026 00:00:00 +0000</pubDate><guid>https://www.pistack.xyz/posts/self-hosted-browser-automation-servers-browserless-playwright-selenium-grid-guide-2026/</guid><description>&lt;p>Running browser automation at scale requires more than just a testing framework — you need reliable browser infrastructure. Whether you&amp;rsquo;re scraping websites, running end-to-end tests, or automating repetitive web tasks, having a self-hosted browser server gives you full control over your automation pipeline without depending on expensive cloud services.&lt;/p></description></item><item><title>CockroachDB vs YugabyteDB vs TiDB: Best Self-Hosted Distributed SQL Database 2026</title><link>https://www.pistack.xyz/posts/cockroachdb-vs-yugabyte-vs-tidb-distributed-sql-guide/</link><pubDate>Fri, 17 Apr 2026 00:00:00 +0000</pubDate><guid>https://www.pistack.xyz/posts/cockroachdb-vs-yugabyte-vs-tidb-distributed-sql-guide/</guid><description>&lt;p>If your application has outgrown a single database node — whether because of write throughput, storage volume, or the need for geographic distribution — you have reached the point where a distributed SQL database is no longer a luxury. It is a necessity.&lt;/p></description></item><item><title>Buildah vs Kaniko vs Earthly: Self-Hosted Container Build Tools Guide 2026</title><link>https://www.pistack.xyz/posts/buildah-vs-kaniko-vs-earthly-self-hosted-container-build-tools-guide-2026/</link><pubDate>Wed, 15 Apr 2026 00:00:00 +0000</pubDate><guid>https://www.pistack.xyz/posts/buildah-vs-kaniko-vs-earthly-self-hosted-container-build-tools-guide-2026/</guid><description>&lt;p>Building container images has become a daily task for developers, DevOps engineers, and platform teams. While &lt;code>[docker](https://www.docker.com/) build&lt;/code> is the most well-known approach, it requires a running Docker daemon and root-level privileges — both of which create security and architectural concerns in production CI/CD environments.&lt;/p></description></item><item><title>Snipe-IT vs Ralph vs NetBox: Best Self-Hosted IT Asset Management 2026</title><link>https://www.pistack.xyz/posts/snipe-it-vs-ralph-vs-netbox-self-hosted-itam-guide-2026/</link><pubDate>Wed, 15 Apr 2026 00:00:00 +0000</pubDate><guid>https://www.pistack.xyz/posts/snipe-it-vs-ralph-vs-netbox-self-hosted-itam-guide-2026/</guid><description>&lt;h2 id="why-self-host-your-it-asset-management">Why Self-Host Your IT Asset Management?&lt;/h2>
&lt;p>Every growing organization — from a homelab enthusiast to a mid-sized engineering team — eventually hits the same wall: spreadsheets stop working for tracking IT equipment. Lost licenses, unaccounted servers, expired warranties, and forgotten network assignments pile up fast when you&amp;rsquo;re managing anything beyond a handful of machines.&lt;/p></description></item><item><title>Best Self-Hosted Database GUI Tools in 2026: CloudBeaver vs Adminer vs DBeaver</title><link>https://www.pistack.xyz/posts/self-hosted-database-gui-tools-cloudbeaver-adminer-dbeaver-guide/</link><pubDate>Tue, 14 Apr 2026 00:00:00 +0000</pubDate><guid>https://www.pistack.xyz/posts/self-hosted-database-gui-tools-cloudbeaver-adminer-dbeaver-guide/</guid><description>&lt;h2 id="why-self-host-a-database-management-gui">Why Self-Host a Database Management GUI&lt;/h2>
&lt;p>Every development team needs a reliable way to inspect, query, and manage databases. Cloud-based tools like DataGrip, TablePlus, or Navicat are polished but come with recurring license costs, vendor lock-in, and the uncomfortable reality of handing your connection credentials to a third-party service.&lt;/p></description></item><item><title>Portainer vs Dockge vs Yacht: Best Container Management Dashboard 2026</title><link>https://www.pistack.xyz/posts/self-hosted-container-management-dashboards-portainer-dockge-yacht-guide/</link><pubDate>Tue, 14 Apr 2026 00:00:00 +0000</pubDate><guid>https://www.pistack.xyz/posts/self-hosted-container-management-dashboards-portainer-dockge-yacht-guide/</guid><description>&lt;p>Managing containers through the command line works fine for a handful of services. But once you are running a dozen containers across multiple hosts — databases, reverse proxies, monitoring stacks, media servers — clicking around a terminal gets exhausting fast.&lt;/p></description></item><item><title>Best Self-Hosted Container Registry 2026: Harbor vs CNCF Distribution vs Zot</title><link>https://www.pistack.xyz/posts/harbor-vs-distribution-vs-zot-self-hosted-container-registry-guide/</link><pubDate>Mon, 13 Apr 2026 00:00:00 +0000</pubDate><guid>https://www.pistack.xyz/posts/harbor-vs-distribution-vs-zot-self-hosted-container-registry-guide/</guid><description>&lt;h2 id="why-self-host-a-container-registry">Why Self-Host a Container Registry?&lt;/h2>
&lt;p>If you run &lt;a href="https://www.docker.com/">docker&lt;/a> containers — whether for a homelab, a small team, or a production environment — you eventually hit the limits of Docker Hub. Rate limits, image size restrictions, privacy concerns, and dependency on an external service make a self-hosted container registry one of the most practical infrastructure decisions you can make.&lt;/p></description></item><item><title>HAProxy vs Envoy vs Nginx: Best Self-Hosted Load Balancer 2026</title><link>https://www.pistack.xyz/posts/haproxy-vs-envoy-vs-nginx-load-balancer-guide/</link><pubDate>Mon, 13 Apr 2026 00:00:00 +0000</pubDate><guid>https://www.pistack.xyz/posts/haproxy-vs-envoy-vs-nginx-load-balancer-guide/</guid><description>&lt;h2 id="why-you-need-a-self-hosted-load-balancer">Why You Need a Self-Hosted Load Balancer&lt;/h2>
&lt;p>A load balancer sits in front of your services and distributes incoming traffic across multiple backend instances. For self-hosted infrastructure, this is essential:&lt;/p></description></item><item><title>Best Self-Hosted Email Server 2026: Stalwart vs Mailcow vs Mailu (Docker Setup)</title><link>https://www.pistack.xyz/posts/stalwart-vs-mailcow-vs-mailu/</link><pubDate>Sun, 12 Apr 2026 00:00:00 +0000</pubDate><guid>https://www.pistack.xyz/posts/stalwart-vs-mailcow-vs-mailu/</guid><description>&lt;h2 id="why-self-host-your-email-server">Why Self-Host Your Email Server?&lt;/h2>
&lt;p>Email is the backbone of digital communication — yet most people hand their entire inbox to Gmail, Outlook, or Yahoo. That means &lt;strong>Google reads every email you send&lt;/strong>, Microsoft scans your attachments for advertising signals, and your metadata becomes a commodity sold to brokers.&lt;/p></description></item><item><title>NocoDB vs Baserow vs Directus: Best Open-Source Airtable Alternatives in 2026</title><link>https://www.pistack.xyz/posts/nocodb-vs-baserow-vs-directus/</link><pubDate>Sun, 12 Apr 2026 00:00:00 +0000</pubDate><guid>https://www.pistack.xyz/posts/nocodb-vs-baserow-vs-directus/</guid><description>&lt;h2 id="why-ditch-airtable">Why Ditch Airtable?&lt;/h2>
&lt;p>Airtable popularized the spreadsheet-database hybrid, but as your data grows, the limits become painful: row caps on free tiers, per-seat pricing, vendor lock-in, and your data living on someone else&amp;rsquo;s servers.&lt;/p></description></item><item><title>Valkey vs DragonflyDB vs Garnet: Best Redis Alternatives in 2026 (Docker Setup)</title><link>https://www.pistack.xyz/posts/valkey-vs-dragonfly-vs-garnet/</link><pubDate>Sun, 12 Apr 2026 00:00:00 +0000</pubDate><guid>https://www.pistack.xyz/posts/valkey-vs-dragonfly-vs-garnet/</guid><description>&lt;h2 id="why-you-need-a-redis-alternative-in-2026">Why You Need a Redis Alternative in 2026&lt;/h2>
&lt;p>When Redis changed its license to dual SSPL/BSDL in March 2024, the open-source community responded with a wave of alternatives. Two years later, the landscape has matured into three serious contenders — each with a fundamentally different architecture:&lt;/p></description></item><item><title>Wiki.js vs BookStack vs Outline: Best Open-Source Wiki &amp; Knowledge Base in 2026</title><link>https://www.pistack.xyz/posts/wiki-js-vs-bookstack-vs-outline/</link><pubDate>Sun, 12 Apr 2026 00:00:00 +0000</pubDate><guid>https://www.pistack.xyz/posts/wiki-js-vs-bookstack-vs-outline/</guid><description>&lt;h2 id="why-self-host-your-wiki">Why Self-Host Your Wiki?&lt;/h2>
&lt;p>Whether you&amp;rsquo;re running a startup, managing an engineering team, or organizing personal research, a centralized knowledge base is essential. Popular hosted options like Notion, Confluence, and Slite lock your data behind subscriptions, have rising per-seat pricing, and can change their terms at any time.&lt;/p></description></item><item><title>Automate Your Home Lab with Watchtower and Ansible</title><link>https://www.pistack.xyz/posts/automation-guide/</link><pubDate>Sat, 11 Apr 2026 00:00:00 +0000</pubDate><guid>https://www.pistack.xyz/posts/automation-guide/</guid><description>&lt;h2 id="why-automate">Why Automate?&lt;/h2>
&lt;p>Self-hosting requires maintenance:&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Updates&lt;/strong>: Keep services secure&lt;/li>
&lt;li>&lt;strong>Backups&lt;/strong>: Prevent data loss&lt;/li>
&lt;li>&lt;strong>Monitoring&lt;/strong>: Detect issues early&lt;/li>
&lt;li>&lt;strong>Scaling&lt;/strong>: Add services easily&lt;/li>
&lt;/ul>
&lt;h2 id="1-watchtower-automatic-docker-updates">1. Watchtower: Automatic &lt;a href="https://www.docker.com/">docker&lt;/a> Updates&lt;/h2>
&lt;p>Watchtower monitors your containers and automatically updates them when new images are available.&lt;/p></description></item><item><title>Best Self-Hosted Object Storage 2026: SeaweedFS vs MinIO vs Garage (Docker Setup)</title><link>https://www.pistack.xyz/posts/seaweedfs-vs-minio-vs-garage/</link><pubDate>Sat, 11 Apr 2026 00:00:00 +0000</pubDate><guid>https://www.pistack.xyz/posts/seaweedfs-vs-minio-vs-garage/</guid><description>&lt;h2 id="why-self-host-object-storage">Why Self-Host Object Storage?&lt;/h2>
&lt;p>Object storage has become the backbone of modern infrastructure. Whether you&amp;rsquo;re backing up servers with &lt;strong>restic&lt;/strong>, syncing files via &lt;strong>rclone&lt;/strong>, or serving media for a web app, the S3 API is the universal standard. But relying on AWS S3 or Cloudflare R2 means ongoing costs, vendor lock-in, and your data living on someone else&amp;rsquo;s hardware.&lt;/p></description></item><item><title>Docker Compose for Beginners: Complete Guide 2026</title><link>https://www.pistack.xyz/posts/docker-compose-guide/</link><pubDate>Sat, 11 Apr 2026 00:00:00 +0000</pubDate><guid>https://www.pistack.xyz/posts/docker-compose-guide/</guid><description>&lt;h2 id="what-is-docker-compose">What is &lt;a href="https://www.docker.com/">docker&lt;/a> Compose?&lt;/h2>
&lt;p>Docker Compose lets you define and run multi-container applications with a single YAML file. Instead of running multiple &lt;code>docker run&lt;/code> commands, you define everything in &lt;code>docker-compose.yml&lt;/code>.&lt;/p>
&lt;h2 id="basic-concepts">Basic Concepts&lt;/h2>
&lt;ul>
&lt;li>&lt;strong>Service&lt;/strong>: A container definition&lt;/li>
&lt;li>&lt;strong>Network&lt;/strong>: How services communicate&lt;/li>
&lt;li>&lt;strong>Volume&lt;/strong>: Persistent data storage&lt;/li>
&lt;li>&lt;strong>Environment&lt;/strong>: Configuration variables&lt;/li>
&lt;/ul>
&lt;h2 id="your-first-docker-composeyml">Your First docker-compose.yml&lt;/h2>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;span class="lnt">4
&lt;/span>&lt;span class="lnt">5
&lt;/span>&lt;span class="lnt">6
&lt;/span>&lt;span class="lnt">7
&lt;/span>&lt;span class="lnt">8
&lt;/span>&lt;span class="lnt">9
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-yaml" data-lang="yaml">&lt;span class="line">&lt;span class="cl">&lt;span class="nt">version&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s1">&amp;#39;3.8&amp;#39;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">s[nginx](https://nginx.org/)es&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">web&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">image&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">nginx:alpine&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">ports&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="s2">&amp;#34;8080:80&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">volumes&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="l">./html:/usr/share/nginx/html&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">restart&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">unless-stopped&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>Run it:&lt;/p></description></item><item><title>Headscale Complete Guide 2026: Self-Host Your Own Tailscale Server (Docker Compose Setup)</title><link>https://www.pistack.xyz/posts/headscale-self-host-tailscale-guide/</link><pubDate>Sat, 11 Apr 2026 00:00:00 +0000</pubDate><guid>https://www.pistack.xyz/posts/headscale-self-host-tailscale-guide/</guid><description>&lt;h2 id="why-self-host-a-mesh-vpn">Why Self-Host a Mesh VPN?&lt;/h2>
&lt;p>Modern infrastructure is distributed. You have servers in the cloud, a homelab in your garage, a laptop at a coffee shop, and maybe a Raspberry Pi monitoring your garden. Connecting all of these securely without opening firewall ports or managing WireGuard by hand is where mesh VPNs shine.&lt;/p></description></item><item><title>Nginx Proxy Manager vs Traefik vs Caddy: Reverse Proxy Comparison</title><link>https://www.pistack.xyz/posts/reverse-proxy-comparison/</link><pubDate>Sat, 11 Apr 2026 00:00:00 +0000</pubDate><guid>https://www.pistack.xyz/posts/reverse-proxy-comparison/</guid><description>&lt;h2 id="why-you-need-a-reverse-proxy">Why You Need a Reverse Proxy&lt;/h2>
&lt;p>A reverse proxy is essential for self-hosting:&lt;/p>
&lt;ul>
&lt;li>&lt;strong>SSL/TLS Termination&lt;/strong>: Automatic HTTPS&lt;/li>
&lt;li>&lt;strong>Routing&lt;/strong>: Direct traffic to multiple services&lt;/li>
&lt;li>&lt;strong>Security&lt;/strong>: Hide internal ports, add auth&lt;/li>
&lt;li>&lt;strong>Load Balancing&lt;/strong>: Distribute traffic&lt;/li>
&lt;/ul>
&lt;h2 id="quick-comparison">Quick Comparison&lt;/h2>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th>Feature&lt;/th>
 &lt;th>&lt;a href="https://nginx.org/">nginx&lt;/a> Prox&lt;a href="https://caddyserver.com/">caddy&lt;/a>ager&lt;/th>
 &lt;th>Traefik&lt;/th>
 &lt;th>Caddy&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td>&lt;strong>Type&lt;/strong>&lt;/td>
 &lt;td>GUI for Nginx&lt;/td>
 &lt;td>Cloud-native&lt;/td>
 &lt;td>Standalone&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;strong>SSL&lt;/strong>&lt;/td>
 &lt;td>Let&amp;rsquo;s Encrypt&lt;/td>
 &lt;td>Let&amp;rsquo;s Encrypt&lt;/td>
 &lt;td>Let&amp;rsquo;s Encrypt (Auto)&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;strong>UI&lt;/strong>&lt;/td>
 &lt;td>✅ Web GUI&lt;/td>
 &lt;td>❌ Dashboard only&lt;/td>
 &lt;td>❌ CLI&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;strong>Config&lt;/strong>&lt;/td>
 &lt;td>Database/JSON&lt;/td>
 &lt;td>YAML/&lt;a href="https://www.docker.com/">docker&lt;/a> labels&lt;/td>
 &lt;td>Caddyfile&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;strong>Auto Discovery&lt;/strong>&lt;/td>
 &lt;td>❌ Manual&lt;/td>
 &lt;td>✅ Docker labels&lt;/td>
 &lt;td>⚠️ Limited&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;strong>HTTP/3&lt;/strong>&lt;/td>
 &lt;td>❌ No&lt;/td>
 &lt;td>✅ Yes&lt;/td>
 &lt;td>✅ Yes&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;strong>Performance&lt;/strong>&lt;/td>
 &lt;td>High&lt;/td>
 &lt;td>High&lt;/td>
 &lt;td>Medium&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;strong>Learning Curve&lt;/strong>&lt;/td>
 &lt;td>Low&lt;/td>
 &lt;td>Medium&lt;/td>
 &lt;td>Low&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;strong>Best For&lt;/strong>&lt;/td>
 &lt;td>Beginners&lt;/td>
 &lt;td>Docker/K8s&lt;/td>
 &lt;td>Simplicity&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>
&lt;hr>
&lt;h2 id="1-nginx-proxy-manager-the-visual-choice">1. Nginx Proxy Manager (The Visual Choice)&lt;/h2>
&lt;p>&lt;strong>Best for&lt;/strong>: Beginners who want a GUI&lt;/p></description></item><item><title>Self-Hosted AI Stack: Complete Local AI Setup Guide 2026</title><link>https://www.pistack.xyz/posts/self-hosted-ai-stack/</link><pubDate>Sat, 11 Apr 2026 00:00:00 +0000</pubDate><guid>https://www.pistack.xyz/posts/self-hosted-ai-stack/</guid><description>&lt;h2 id="why-self-host-your-ai">Why Self-Host Your AI?&lt;/h2>
&lt;ul>
&lt;li>&lt;strong>Privacy&lt;/strong>: Your data never leaves your server&lt;/li>
&lt;li>&lt;strong>Cost&lt;/strong>: No per-token API fees&lt;/li>
&lt;li>&lt;strong>Customization&lt;/strong>: Use any open model&lt;/li>
&lt;li>&lt;strong>Reliability&lt;/strong>: Works offline, no rate limits&lt;/li>
&lt;/ul>
&lt;h2 id="the-self-hosted-ai-architecture">The Self-Hosted AI Architecture&lt;/h2>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;span class="lnt">12
&lt;/span>&lt;span class="lnt">13
&lt;/span>&lt;span class="lnt">14
&lt;/span>&lt;span class="lnt">15
&lt;/span>&lt;span class="lnt">16
&lt;/span>&lt;span class="lnt">17
&lt;/span>&lt;span class="lnt">18
&lt;/span>&lt;span class="lnt">19
&lt;/span>&lt;span class="lnt">20
&lt;/span>&lt;span class="lnt">21
&lt;/span>&lt;span class="lnt">22
&lt;/span>&lt;span class="lnt">23
&lt;/span>&lt;span class="lnt">24
&lt;/span>&lt;span class="lnt">25
&lt;/span>&lt;span class="lnt">26
&lt;/span>&lt;span class="lnt">27
&lt;/span>&lt;span class="lnt">28
&lt;/span>&lt;span class="lnt">29
&lt;/span>&lt;span class="lnt">30
&lt;/span>&lt;span class="lnt">31
&lt;/span>&lt;span class="lnt">32
&lt;/span>&lt;span class="lnt">33
&lt;/span>&lt;span class="lnt">34
&lt;/span>&lt;span class="lnt">35
&lt;/span>&lt;span class="lnt">36
&lt;/span>&lt;span class="lnt">37
&lt;/span>&lt;span class="lnt">38
&lt;/span>&lt;span class="lnt">39
&lt;/span>&lt;span class="lnt">40
&lt;/span>&lt;span class="lnt">41
&lt;/span>&lt;span class="lnt">42
&lt;/span>&lt;span class="lnt">43
&lt;/span>&lt;span class="lnt">44
&lt;/span>&lt;span class="lnt">45
&lt;/span>&lt;span class="lnt">46
&lt;/span>&lt;span class="lnt">47
&lt;/span>&lt;span class="lnt">48
&lt;/span>&lt;span class="lnt">49
&lt;/span>&lt;span class="lnt">50
&lt;/span>&lt;span class="lnt">51
&lt;/span>&lt;span class="lnt">52
&lt;/span>&lt;span class="lnt">53
&lt;/span>&lt;span class="lnt">54
&lt;/span>&lt;span class="lnt">55
&lt;/span>&lt;span class="lnt">56
&lt;/span>&lt;span class="lnt">57
&lt;/span>&lt;span class="lnt">58
&lt;/span>&lt;span class="lnt">59
&lt;/span>&lt;span class="lnt">60
&lt;/span>&lt;span class="lnt">61
&lt;/span>&lt;span class="lnt">62
&lt;/span>&lt;span class="lnt">63
&lt;/span>&lt;span class="lnt">64
&lt;/span>&lt;span class="lnt">65
&lt;/span>&lt;span class="lnt">66
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">User → Open WebUI → [ollama](https://ollama.com/) API → LLM (Llama/Mistral/Qwen)
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↘ Embeddings → Vector DB → RAG
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↘ TTS/STT → Voice Inte[docker](https://www.docker.com/)```
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">## Complete Docker Compose Stack
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">```yaml
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"># ai-stack.yml
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">version: &amp;#39;3.8&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">services:
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> # LLM Inference Engine
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ollama:
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> image: ollama/ollama:latest
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> container_name: ollama
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> restart: unless-stopped
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ports:
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> - &amp;#34;11434:11434&amp;#34;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> volumes:
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> - ollama_data:/root/.ollama
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> deploy:
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> resources:
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> reservations:
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> devices:
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> - driver: nvidia
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> count: 1
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> capabilities: [gpu]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> # Web Interface
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> open-webui:
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> image: ghcr.io/open-webui/open-webui:main
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> container_name: open-webui
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> restart: unless-stopped
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ports:
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> - &amp;#34;3000:8080&amp;#34;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> environment:
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> - OLLAMA_BASE_URL=http://ollama:11434
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> - WEBUI_SECRET_KEY=your-secret-key
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> volumes:
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> - openwebui_data:/app/backend/data
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> # Embedding Model
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> embedding-model:
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> image: ollama/ollama:latest
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> container_name: ollama-embed
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> restart: unless-stopped
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ports:
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> - &amp;#34;11435:11434&amp;#34;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> volumes:
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> - embed_data:/root/.ollama
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> command: ollama serve
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> # Vector Database (Optional)
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> qdrant:
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> image: qdrant/qdrant:latest
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> container_name: qdrant
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> restart: unless-stopped
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ports:
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> - &amp;#34;6333:6333&amp;#34;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> volumes:
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> - qdrant_data:/qdrant/storage
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">volumes:
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ollama_data:
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> openwebui_data:
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> embed_data:
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> qdrant_data:
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h2 id="setup-steps">Setup Steps&lt;/h2>
&lt;h3 id="1-start-the-stack">1. Start the Stack&lt;/h3>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">docker compose -f ai-stack.yml up -d
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h3 id="2-pull-models">2. Pull Models&lt;/h3>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;span class="lnt">4
&lt;/span>&lt;span class="lnt">5
&lt;/span>&lt;span class="lnt">6
&lt;/span>&lt;span class="lnt">7
&lt;/span>&lt;span class="lnt">8
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Main chat model&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">ollama pull llama3.2
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Coding assistant&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">ollama pull qwen2.5-coder
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Embedding model&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">curl http://localhost:11435/api/pull -d &lt;span class="s1">&amp;#39;{&amp;#34;name&amp;#34;: &amp;#34;nomic-embed-text&amp;#34;}&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h3 id="3-access-web-ui">3. Access Web UI&lt;/h3>
&lt;p>Open http://localhost:3000 and create your account.&lt;/p></description></item></channel></rss>