<?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 Blog.Airat.Top</title><link>https://blog.airat.top/categories/self-hosted/</link><description>Recent content in Self-Hosted on Blog.Airat.Top</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><lastBuildDate>Tue, 17 Mar 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://blog.airat.top/categories/self-hosted/index.xml" rel="self" type="application/rss+xml"/><item><title>When Self-Hosted n8n Is the Better Choice</title><link>https://blog.airat.top/p/n8n-self-hosted/</link><pubDate>Tue, 17 Mar 2026 00:00:00 +0000</pubDate><guid>https://blog.airat.top/p/n8n-self-hosted/</guid><description>&lt;img src="https://blog.airat.top/p/n8n-self-hosted/cover.webp" alt="Featured image of post When Self-Hosted n8n Is the Better Choice" /&gt;&lt;p&gt;Self-hosted n8n is not automatically better than n8n Cloud. If your team has a small number of workflows and wants the fastest path to production, cloud is usually the simpler answer. The decision changes when security boundaries, automation volume, or infrastructure constraints start shaping how you design workflows instead of how you deliver them.&lt;/p&gt;
&lt;p&gt;This is less a hosting preference and more an operating model decision. If you already care about measurable automation outcomes, pair this infrastructure choice with business metrics. I covered the measurement side in &lt;a class="link" href="https://blog.airat.top/p/ai-roi-metrics/" &gt;How to Tell If AI Is Helping Your Business&lt;/a&gt;. This article focuses on when the infrastructure trade-off becomes justified.&lt;/p&gt;
&lt;h2 id="quick-comparison"&gt;Quick comparison
&lt;/h2&gt;&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;If your priority is&lt;/th&gt;
 &lt;th&gt;Cloud usually fits better&lt;/th&gt;
 &lt;th&gt;Self-hosted usually fits better&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;Fastest initial setup&lt;/td&gt;
 &lt;td&gt;Yes&lt;/td&gt;
 &lt;td&gt;No&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Minimal ops ownership&lt;/td&gt;
 &lt;td&gt;Yes&lt;/td&gt;
 &lt;td&gt;No&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Access to private networks and internal systems&lt;/td&gt;
 &lt;td&gt;Limited&lt;/td&gt;
 &lt;td&gt;Yes&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Custom surrounding stack and deployment control&lt;/td&gt;
 &lt;td&gt;Limited&lt;/td&gt;
 &lt;td&gt;Yes&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Scaling with your own infrastructure pattern&lt;/td&gt;
 &lt;td&gt;Limited&lt;/td&gt;
 &lt;td&gt;Yes&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="when-cloud-is-still-enough"&gt;When cloud is still enough
&lt;/h2&gt;&lt;p&gt;Cloud is usually the right starting point when:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;you are just testing n8n or running a handful of workflows;&lt;/li&gt;
&lt;li&gt;your workflows mostly connect to standard SaaS tools;&lt;/li&gt;
&lt;li&gt;nobody on the team wants to own backups, upgrades, and monitoring;&lt;/li&gt;
&lt;li&gt;security or network requirements are still lightweight.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;There is also a product-level advantage on the cloud side. As of April 7, 2026, n8n documents &lt;code&gt;AI Workflow Builder&lt;/code&gt; as a natural-language workflow creation feature and ties its availability to cloud pricing and credits.&lt;sup id="fnref:1"&gt;&lt;a href="#fn:1" class="footnote-ref" role="doc-noteref"&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;sup id="fnref:2"&gt;&lt;a href="#fn:2" class="footnote-ref" role="doc-noteref"&gt;2&lt;/a&gt;&lt;/sup&gt; On the same pricing page, self-hosted Business is marked as &lt;code&gt;AI Workflow Builder coming soon&lt;/code&gt;.&lt;sup id="fnref1:2"&gt;&lt;a href="#fn:2" class="footnote-ref" role="doc-noteref"&gt;2&lt;/a&gt;&lt;/sup&gt; So if your team values prompt-based workflow creation inside the editor today, that is currently a real reason to prefer n8n Cloud.&lt;/p&gt;
&lt;p&gt;That is not a weakness. It is often the fastest way to validate whether automation is useful in the first place. But convenience starts to get expensive when product limits or architecture constraints begin shaping the design of your workflows.&lt;/p&gt;
&lt;h2 id="when-self-hosted-n8n-starts-making-sense"&gt;When self-hosted n8n starts making sense
&lt;/h2&gt;&lt;h3 id="1-you-need-tighter-security-and-network-control"&gt;1. You need tighter security and network control
&lt;/h3&gt;&lt;p&gt;n8n documents self-hosting and security controls for teams that need stronger control over SSL, user access, node restrictions, and instance hardening.&lt;sup id="fnref:3"&gt;&lt;a href="#fn:3" class="footnote-ref" role="doc-noteref"&gt;3&lt;/a&gt;&lt;/sup&gt;&lt;sup id="fnref:4"&gt;&lt;a href="#fn:4" class="footnote-ref" role="doc-noteref"&gt;4&lt;/a&gt;&lt;/sup&gt; This matters when your workflows must reach internal databases, private APIs, or other systems that you do not want routed through a public SaaS setup.&lt;/p&gt;
&lt;p&gt;With self-hosting, you choose where n8n runs, how TLS is terminated, when updates are applied, how backups are handled, and which features or outbound connections should be disabled. That does not make self-hosting automatically more secure. It makes security design your responsibility and gives you more levers to align the platform with your own standards.&lt;/p&gt;
&lt;h3 id="2-cloud-limits-are-starting-to-shape-your-workflow-architecture"&gt;2. Cloud limits are starting to shape your workflow architecture
&lt;/h3&gt;&lt;p&gt;If plan limits, concurrency ceilings, or instance-level restrictions are forcing awkward workarounds, self-hosting becomes attractive. n8n&amp;rsquo;s queue mode uses a main instance, Redis as a message broker, and separate worker processes to execute workflows.&lt;sup id="fnref:5"&gt;&lt;a href="#fn:5" class="footnote-ref" role="doc-noteref"&gt;5&lt;/a&gt;&lt;/sup&gt; Their docs explicitly describe this as a model you can scale up by adding workers as workload grows.&lt;sup id="fnref1:5"&gt;&lt;a href="#fn:5" class="footnote-ref" role="doc-noteref"&gt;5&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;That matters when you have:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;many scheduled jobs and webhooks;&lt;/li&gt;
&lt;li&gt;heavy workflows that should not compete on one small instance;&lt;/li&gt;
&lt;li&gt;multiple teams sharing one automation platform;&lt;/li&gt;
&lt;li&gt;rising execution volume that should be handled operationally, not by redesigning every flow.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Self-hosting does not eliminate cost. It changes the cost model. Instead of paying primarily for a managed product layer, you start paying for servers, storage, observability, and operator time.&lt;/p&gt;
&lt;h3 id="3-you-want-a-stack-you-can-shape-around-your-own-operations"&gt;3. You want a stack you can shape around your own operations
&lt;/h3&gt;&lt;p&gt;Once n8n becomes part of your internal platform, the surrounding services matter almost as much as the workflow editor itself. Teams often want their own reverse proxy, SMTP, database choice, metrics endpoints, health checks, backup routines, and internal service connectivity.&lt;/p&gt;
&lt;p&gt;This is where self-hosting becomes more flexible than a cloud subscription. You can decide whether you want Caddy or another proxy, how you expose metrics, where logs go, how credentials are managed, and how n8n connects to the rest of your infrastructure. In production, those choices are often the difference between a nice demo and a dependable automation service.&lt;/p&gt;
&lt;h3 id="4-you-want-a-clearer-licensing-path"&gt;4. You want a clearer licensing path
&lt;/h3&gt;&lt;p&gt;n8n&amp;rsquo;s Community Edition includes almost the full feature set, with a smaller list of enterprise-only capabilities such as SSO, Git-based version control, external secrets, and multi-main mode.&lt;sup id="fnref:6"&gt;&lt;a href="#fn:6" class="footnote-ref" role="doc-noteref"&gt;6&lt;/a&gt;&lt;/sup&gt; n8n also documents that you can register a community instance to unlock some extra features with a free license key.&lt;sup id="fnref1:6"&gt;&lt;a href="#fn:6" class="footnote-ref" role="doc-noteref"&gt;6&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;If you later need licensed enterprise capabilities on your own infrastructure, n8n supports activating those features on a self-hosted instance with a license key.&lt;sup id="fnref:7"&gt;&lt;a href="#fn:7" class="footnote-ref" role="doc-noteref"&gt;7&lt;/a&gt;&lt;/sup&gt; In practice, that gives teams a cleaner progression:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;start with Community Edition;&lt;/li&gt;
&lt;li&gt;validate workflows and business value;&lt;/li&gt;
&lt;li&gt;move to self-hosted enterprise if governance, collaboration, or enterprise features become necessary.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;That path is often easier than treating the cloud plan as the only long-term upgrade route.&lt;/p&gt;
&lt;h2 id="what-self-hosting-does-not-solve"&gt;What self-hosting does not solve
&lt;/h2&gt;&lt;p&gt;Self-hosting gives you control, but it also gives you more responsibility. You still need:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;backups and restore testing;&lt;/li&gt;
&lt;li&gt;upgrades and maintenance windows;&lt;/li&gt;
&lt;li&gt;secret management;&lt;/li&gt;
&lt;li&gt;monitoring and alerting;&lt;/li&gt;
&lt;li&gt;sizing of database, workers, and storage;&lt;/li&gt;
&lt;li&gt;a plan for binary data if your workflows process files.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That last point matters more than many teams expect. n8n&amp;rsquo;s docs note that queue mode has specific storage considerations for binary data, and filesystem mode is not the supported option there.&lt;sup id="fnref:8"&gt;&lt;a href="#fn:8" class="footnote-ref" role="doc-noteref"&gt;8&lt;/a&gt;&lt;/sup&gt; So self-hosting is not just about &amp;ldquo;running Docker Compose.&amp;rdquo; It is about owning the operational details that keep automation reliable.&lt;/p&gt;
&lt;p&gt;If your team cannot realistically own those basics yet, cloud may still be the better business decision even if self-hosting looks cheaper on paper.&lt;/p&gt;
&lt;h2 id="a-practical-starting-point"&gt;A practical starting point
&lt;/h2&gt;&lt;p&gt;If you want a ready-made foundation, I maintain &lt;a class="link" href="https://github.com/AiratTop/n8n-self-hosted" target="_blank" rel="noopener"
 &gt;&lt;code&gt;n8n-self-hosted&lt;/code&gt;&lt;/a&gt;, a Docker Compose template for running n8n with:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Caddy for reverse proxy and automatic HTTPS;&lt;/li&gt;
&lt;li&gt;PostgreSQL for persistent data;&lt;/li&gt;
&lt;li&gt;Redis for queue mode;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;n8n-master&lt;/code&gt; plus separate &lt;code&gt;n8n-worker&lt;/code&gt; containers;&lt;/li&gt;
&lt;li&gt;backup and update helper scripts;&lt;/li&gt;
&lt;li&gt;security-oriented environment settings;&lt;/li&gt;
&lt;li&gt;health and metrics endpoints enabled.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The goal of that repository is simple: skip the blank-page stage and start from a stack that already includes the surrounding infrastructure, not just a single n8n container. If you want to compare the business side of the decision with the automation outcome itself, also see &lt;a class="link" href="https://blog.airat.top/p/5-reasons-to-use-ai/" &gt;5 Reasons to Use AI for Business&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="a-simple-decision-rule"&gt;A simple decision rule
&lt;/h2&gt;&lt;p&gt;Self-hosted n8n is usually the better choice when all three conditions are true:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;automation is already business-critical;&lt;/li&gt;
&lt;li&gt;cloud limits, security boundaries, or integration constraints are slowing you down;&lt;/li&gt;
&lt;li&gt;you are ready to own operations, not just workflows.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;If only the first condition is true, cloud is probably still enough. If all three are true, self-hosting usually gives you better long-term control.&lt;/p&gt;
&lt;h2 id="summary"&gt;Summary
&lt;/h2&gt;&lt;p&gt;Choose n8n Cloud when speed and low ops overhead matter most. Choose self-hosted n8n when security boundaries, scaling model, architecture flexibility, and licensing path matter more than convenience.&lt;/p&gt;
&lt;p&gt;The right question is not &amp;ldquo;is self-hosted more powerful?&amp;rdquo; The better question is whether your automations are important enough to justify owning the platform they run on.&lt;/p&gt;
&lt;p&gt;If you are working through a similar problem and want help turning it into a practical system, you can contact me through &lt;a class="link" href="https://airat.top" target="_blank" rel="noopener"
 &gt;airat.top&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="sources"&gt;Sources
&lt;/h2&gt;&lt;div class="footnotes" role="doc-endnotes"&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id="fn:1"&gt;
&lt;p&gt;&lt;a class="link" href="https://docs.n8n.io/advanced-ai/ai-workflow-builder/" target="_blank" rel="noopener"
 &gt;AI Workflow Builder | n8n Docs&lt;/a&gt;&amp;#160;&lt;a href="#fnref:1" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="fn:2"&gt;
&lt;p&gt;&lt;a class="link" href="https://n8n.io/pricing/" target="_blank" rel="noopener"
 &gt;n8n Plans and Pricing | n8n&lt;/a&gt;&amp;#160;&lt;a href="#fnref:2" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&amp;#160;&lt;a href="#fnref1:2" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="fn:3"&gt;
&lt;p&gt;&lt;a class="link" href="https://docs.n8n.io/hosting/securing/overview/" target="_blank" rel="noopener"
 &gt;Securing n8n | n8n Docs&lt;/a&gt;&amp;#160;&lt;a href="#fnref:3" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="fn:4"&gt;
&lt;p&gt;&lt;a class="link" href="https://docs.n8n.io/hosting/securing/set-up-ssl/" target="_blank" rel="noopener"
 &gt;Set up SSL | n8n Docs&lt;/a&gt;&amp;#160;&lt;a href="#fnref:4" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="fn:5"&gt;
&lt;p&gt;&lt;a class="link" href="https://docs.n8n.io/hosting/scaling/queue-mode/" target="_blank" rel="noopener"
 &gt;Configuring queue mode | n8n Docs&lt;/a&gt;&amp;#160;&lt;a href="#fnref:5" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&amp;#160;&lt;a href="#fnref1:5" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="fn:6"&gt;
&lt;p&gt;&lt;a class="link" href="https://docs.n8n.io/hosting/community-edition-features/" target="_blank" rel="noopener"
 &gt;Community Edition features | n8n Docs&lt;/a&gt;&amp;#160;&lt;a href="#fnref:6" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&amp;#160;&lt;a href="#fnref1:6" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="fn:7"&gt;
&lt;p&gt;&lt;a class="link" href="https://docs.n8n.io/license-key/" target="_blank" rel="noopener"
 &gt;License key | n8n Docs&lt;/a&gt;&amp;#160;&lt;a href="#fnref:7" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="fn:8"&gt;
&lt;p&gt;&lt;a class="link" href="https://docs.n8n.io/hosting/scaling/binary-data/" target="_blank" rel="noopener"
 &gt;Binary data | n8n Docs&lt;/a&gt;&amp;#160;&lt;a href="#fnref:8" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;</description></item><item><title>When Self-Hosted Qdrant Is the Better Fit for Retrieval and Internal AI Search</title><link>https://blog.airat.top/p/qdrant-self-hosted/</link><pubDate>Sun, 15 Mar 2026 00:01:00 +0300</pubDate><guid>https://blog.airat.top/p/qdrant-self-hosted/</guid><description>&lt;img src="https://blog.airat.top/p/qdrant-self-hosted/cover.webp" alt="Featured image of post When Self-Hosted Qdrant Is the Better Fit for Retrieval and Internal AI Search" /&gt;&lt;p&gt;Vector databases are easy to overuse in AI conversations. They get treated as if every AI project needs one by default.&lt;/p&gt;
&lt;p&gt;That is not true. But there is a clear point where a dedicated retrieval layer becomes useful, and that is where self-hosted Qdrant starts to make sense.&lt;/p&gt;
&lt;h2 id="when-qdrant-is-the-right-fit"&gt;When Qdrant is the right fit
&lt;/h2&gt;&lt;p&gt;Self-hosted Qdrant is worth considering when:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;the system needs semantic search rather than only exact lookup;&lt;/li&gt;
&lt;li&gt;internal AI workflows need retrieval over documents, notes, or knowledge assets;&lt;/li&gt;
&lt;li&gt;agent or assistant workflows need a dedicated vector search layer;&lt;/li&gt;
&lt;li&gt;you want to keep retrieval infrastructure inside your own stack.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This is especially relevant when AI is being applied to real internal information rather than generic prompting.&lt;/p&gt;
&lt;h2 id="what-problem-qdrant-solves"&gt;What problem Qdrant solves
&lt;/h2&gt;&lt;p&gt;Qdrant is useful because it gives retrieval its own dedicated layer.&lt;/p&gt;
&lt;p&gt;That matters when you are trying to support workflows like:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;internal knowledge search;&lt;/li&gt;
&lt;li&gt;document-assisted answers;&lt;/li&gt;
&lt;li&gt;retrieval-augmented generation patterns;&lt;/li&gt;
&lt;li&gt;semantic lookup across unstructured data;&lt;/li&gt;
&lt;li&gt;memory-like retrieval for AI agents or automation flows.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;These are not the jobs of a traditional relational database, and they are not the jobs of Redis either.&lt;/p&gt;
&lt;h2 id="why-qdrant-belongs-in-a-broader-ai-stack"&gt;Why Qdrant belongs in a broader AI stack
&lt;/h2&gt;&lt;p&gt;Qdrant becomes much more practical when you stop treating it as a standalone AI toy.&lt;/p&gt;
&lt;p&gt;Its role becomes clearer beside:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://blog.airat.top/p/ollama-self-hosted/" &gt;When Self-Hosted Ollama Makes Sense for Private AI Workflows&lt;/a&gt; for local inference;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://blog.airat.top/p/n8n-self-hosted/" &gt;When Self-Hosted n8n Is the Better Choice&lt;/a&gt; for orchestration and workflow logic;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://blog.airat.top/p/self-hosted-stack-for-ai-automation/" &gt;A Practical Self-Hosted Stack for AI, Automation, and Internal Tools&lt;/a&gt; for the full architecture view.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That is the useful framing. Qdrant is not “the AI.” It is the retrieval layer that helps the AI stack find relevant context.&lt;/p&gt;
&lt;h2 id="when-qdrant-is-not-needed"&gt;When Qdrant is not needed
&lt;/h2&gt;&lt;p&gt;Qdrant is unnecessary if the workflow does not actually depend on semantic retrieval.&lt;/p&gt;
&lt;p&gt;You probably do not need it yet if:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;search is still mostly exact-match or metadata-based;&lt;/li&gt;
&lt;li&gt;the documents involved are small enough for simpler approaches;&lt;/li&gt;
&lt;li&gt;the AI workflow is still experimental and not yet retrieval-driven;&lt;/li&gt;
&lt;li&gt;there is no real need to index and query vector representations.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In those cases, adding a vector database may create more architecture than value.&lt;/p&gt;
&lt;h2 id="why-the-airattop-template-is-practical"&gt;Why the AiratTop template is practical
&lt;/h2&gt;&lt;p&gt;&lt;a class="link" href="https://github.com/AiratTop/qdrant-self-hosted" target="_blank" rel="noopener"
 &gt;AiratTop/qdrant-self-hosted&lt;/a&gt; is useful because it keeps the deployment model simple:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;standalone Qdrant service;&lt;/li&gt;
&lt;li&gt;external persistent Docker volume;&lt;/li&gt;
&lt;li&gt;API key support;&lt;/li&gt;
&lt;li&gt;telemetry disabled by default;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;shared_network&lt;/code&gt; compatibility for the rest of the stack.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That is a practical baseline for teams that want retrieval infrastructure without overbuilding the first deployment.&lt;/p&gt;
&lt;h2 id="qdrant-versus-other-data-layers"&gt;Qdrant versus other data layers
&lt;/h2&gt;&lt;p&gt;This is where the distinction matters:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;use PostgreSQL or MySQL for relational system data;&lt;/li&gt;
&lt;li&gt;use Redis for fast ephemeral state or queue-related behavior;&lt;/li&gt;
&lt;li&gt;use ClickHouse for analytical workloads;&lt;/li&gt;
&lt;li&gt;use Qdrant when the core requirement is vector search and semantic retrieval.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That is why I treat Qdrant as part of the AI layer, not the general data layer, even though it is clearly a database product.&lt;/p&gt;
&lt;h2 id="a-sensible-rollout-order"&gt;A sensible rollout order
&lt;/h2&gt;&lt;p&gt;Qdrant usually makes sense after:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;you already have a defined retrieval use case;&lt;/li&gt;
&lt;li&gt;the documents or knowledge assets are worth indexing;&lt;/li&gt;
&lt;li&gt;the workflow around answering, searching, or retrieving is already clear enough to justify its own layer.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;That sequence matters because Qdrant is a specialization step, not a universal default.&lt;/p&gt;
&lt;h2 id="summary"&gt;Summary
&lt;/h2&gt;&lt;p&gt;Self-hosted Qdrant is the better fit when an AI system needs a real retrieval layer for semantic search, internal knowledge access, or agent-style workflows.&lt;/p&gt;
&lt;p&gt;If semantic lookup is central to the use case, Qdrant earns its place quickly. If it is not, keep the stack simpler until the retrieval need becomes real.&lt;/p&gt;
&lt;p&gt;If you are working through a similar problem and want help turning it into a practical system, you can contact me through &lt;a class="link" href="https://airat.top" target="_blank" rel="noopener"
 &gt;airat.top&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="sources"&gt;Sources
&lt;/h2&gt;</description></item><item><title>When Self-Hosted Ollama Makes Sense for Private AI Workflows</title><link>https://blog.airat.top/p/ollama-self-hosted/</link><pubDate>Sat, 14 Mar 2026 00:01:00 +0300</pubDate><guid>https://blog.airat.top/p/ollama-self-hosted/</guid><description>&lt;img src="https://blog.airat.top/p/ollama-self-hosted/cover.webp" alt="Featured image of post When Self-Hosted Ollama Makes Sense for Private AI Workflows" /&gt;&lt;p&gt;Running local models is one of the most over-romanticized parts of the current AI stack. It sounds attractive because it promises privacy, independence, and no per-call API bill.&lt;/p&gt;
&lt;p&gt;Those benefits are real, but they only matter if they connect to an actual workflow. That is why the practical question is not “should we run models locally?” The useful question is when self-hosted Ollama becomes the better operating model for the AI work you are actually doing.&lt;/p&gt;
&lt;h2 id="when-ollama-makes-sense"&gt;When Ollama makes sense
&lt;/h2&gt;&lt;p&gt;Self-hosted Ollama makes sense when at least one of these is true:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;prompts or documents should stay inside your own infrastructure;&lt;/li&gt;
&lt;li&gt;predictable local inference cost matters more than using external APIs;&lt;/li&gt;
&lt;li&gt;the workflow should keep working with limited or no internet dependency;&lt;/li&gt;
&lt;li&gt;the team wants tighter control over model choice and runtime location.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This is especially relevant for internal AI use cases:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;document summarization inside private systems;&lt;/li&gt;
&lt;li&gt;internal assistants for teams;&lt;/li&gt;
&lt;li&gt;enrichment or classification steps inside automation flows;&lt;/li&gt;
&lt;li&gt;prototyping retrieval and agent-style workflows around local infrastructure.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="why-ollama-is-useful-in-a-self-hosted-stack"&gt;Why Ollama is useful in a self-hosted stack
&lt;/h2&gt;&lt;h3 id="it-turns-local-inference-into-an-operable-service"&gt;It turns local inference into an operable service
&lt;/h3&gt;&lt;p&gt;The practical value of Ollama is not just that it can run models locally. It is that it exposes that capability in a way other services can use.&lt;/p&gt;
&lt;p&gt;That matters if the AI layer is meant to connect to:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://blog.airat.top/p/n8n-self-hosted/" &gt;When Self-Hosted n8n Is the Better Choice&lt;/a&gt; for orchestration;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://blog.airat.top/p/qdrant-self-hosted/" &gt;When Self-Hosted Qdrant Is the Better Fit for Retrieval and Internal AI Search&lt;/a&gt; for retrieval and embeddings-adjacent workflows;&lt;/li&gt;
&lt;li&gt;internal applications that need a local inference endpoint instead of a direct external API dependency.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="it-gives-you-a-cleaner-privacy-boundary"&gt;It gives you a cleaner privacy boundary
&lt;/h3&gt;&lt;p&gt;Local inference is most compelling when the data boundary is part of the reason for self-hosting in the first place.&lt;/p&gt;
&lt;p&gt;If the workflow touches private documents, internal procedures, support history, or operational data, local execution can be a meaningful architectural choice rather than just a cost experiment.&lt;/p&gt;
&lt;h3 id="it-works-well-as-an-internal-ai-utility-layer"&gt;It works well as an internal AI utility layer
&lt;/h3&gt;&lt;p&gt;In many environments, Ollama is not a product by itself. It is a service other components call.&lt;/p&gt;
&lt;p&gt;That is why the AiratTop repository packages it with Open WebUI and multiple hardware profiles. The goal is not only to chat with a model. The goal is to make local inference usable inside a wider stack.&lt;sup id="fnref:1"&gt;&lt;a href="#fn:1" class="footnote-ref" role="doc-noteref"&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;h2 id="when-ollama-is-not-the-right-move"&gt;When Ollama is not the right move
&lt;/h2&gt;&lt;p&gt;Self-hosted Ollama is not automatically the best AI option.&lt;/p&gt;
&lt;p&gt;It becomes harder to justify when:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;hosted APIs already meet the privacy and latency requirements;&lt;/li&gt;
&lt;li&gt;the workload needs larger or more capable models than the local hardware can run comfortably;&lt;/li&gt;
&lt;li&gt;nobody on the team wants to manage runtime profiles, model downloads, and host sizing;&lt;/li&gt;
&lt;li&gt;the AI workflow is still too vague to justify dedicated infrastructure.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Local inference is useful when the operating model is clear. Without that, it often becomes an expensive curiosity.&lt;/p&gt;
&lt;h2 id="hardware-and-operating-model-matter"&gt;Hardware and operating model matter
&lt;/h2&gt;&lt;p&gt;The AiratTop template is practical because it makes the hardware question explicit. It supports CPU, NVIDIA GPU, and AMD GPU profiles rather than pretending local inference means one universal setup.&lt;sup id="fnref1:1"&gt;&lt;a href="#fn:1" class="footnote-ref" role="doc-noteref"&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;That matters because model quality, latency, and cost are all tied to hardware reality. A local AI stack should be planned around the workflows it must support, not around abstract enthusiasm for self-hosting.&lt;/p&gt;
&lt;h2 id="a-practical-starting-point"&gt;A practical starting point
&lt;/h2&gt;&lt;p&gt;If private or local inference is already part of the roadmap, start with &lt;a class="link" href="https://github.com/AiratTop/ollama-self-hosted" target="_blank" rel="noopener"
 &gt;AiratTop/ollama-self-hosted&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The repository includes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Ollama;&lt;/li&gt;
&lt;li&gt;Open WebUI;&lt;/li&gt;
&lt;li&gt;CPU, NVIDIA, and AMD-oriented profiles;&lt;/li&gt;
&lt;li&gt;persistent model storage;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;shared_network&lt;/code&gt; compatibility for the rest of the stack.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That makes it a useful base for teams who want to move from ad hoc local testing to a reusable local inference service.&lt;/p&gt;
&lt;h2 id="where-ollama-fits-in-the-stack"&gt;Where Ollama fits in the stack
&lt;/h2&gt;&lt;p&gt;Ollama is most useful when it is connected to something else:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://blog.airat.top/p/n8n-self-hosted/" &gt;When Self-Hosted n8n Is the Better Choice&lt;/a&gt; for orchestrated workflows;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://blog.airat.top/p/qdrant-self-hosted/" &gt;When Self-Hosted Qdrant Is the Better Fit for Retrieval and Internal AI Search&lt;/a&gt; for retrieval-oriented AI systems;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://blog.airat.top/p/self-hosted-stack-for-ai-automation/" &gt;A Practical Self-Hosted Stack for AI, Automation, and Internal Tools&lt;/a&gt; for the broader architecture.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That is the key framing: Ollama is not just “run a model locally.” It is the local inference layer inside a larger system.&lt;/p&gt;
&lt;h2 id="summary"&gt;Summary
&lt;/h2&gt;&lt;p&gt;Self-hosted Ollama makes sense when local inference supports a real workflow: privacy-sensitive automation, internal AI utilities, predictable runtime control, or a broader self-hosted AI stack.&lt;/p&gt;
&lt;p&gt;If the workflow is real and the hardware is appropriate, Ollama can be a strong building block. If neither is true yet, external APIs may still be the more practical choice.&lt;/p&gt;
&lt;p&gt;If you are working through a similar problem and want help turning it into a practical system, you can contact me through &lt;a class="link" href="https://airat.top" target="_blank" rel="noopener"
 &gt;airat.top&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="sources"&gt;Sources
&lt;/h2&gt;&lt;div class="footnotes" role="doc-endnotes"&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id="fn:1"&gt;
&lt;p&gt;&lt;a class="link" href="https://github.com/AiratTop/ollama-self-hosted" target="_blank" rel="noopener"
 &gt;AiratTop/ollama-self-hosted&lt;/a&gt;&amp;#160;&lt;a href="#fnref:1" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&amp;#160;&lt;a href="#fnref1:1" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;</description></item><item><title>When Beszel Is the Fastest Way to Monitor a Docker Host</title><link>https://blog.airat.top/p/beszel-self-hosted/</link><pubDate>Thu, 12 Mar 2026 00:01:00 +0300</pubDate><guid>https://blog.airat.top/p/beszel-self-hosted/</guid><description>&lt;img src="https://blog.airat.top/p/beszel-self-hosted/cover.webp" alt="Featured image of post When Beszel Is the Fastest Way to Monitor a Docker Host" /&gt;&lt;p&gt;Some observability problems do not start with dashboards and alert rules. They start with a simpler operational question: what is this host doing right now, and what are the containers on it doing?&lt;/p&gt;
&lt;p&gt;That is where Beszel becomes useful. It gives you a lightweight way to see host and container health without immediately deploying a heavier monitoring stack.&lt;/p&gt;
&lt;h2 id="when-beszel-is-the-right-choice"&gt;When Beszel is the right choice
&lt;/h2&gt;&lt;p&gt;Self-hosted Beszel makes sense when:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;you want visibility into one host or a small number of hosts quickly;&lt;/li&gt;
&lt;li&gt;the main need is container and host insight, not deep time-series observability;&lt;/li&gt;
&lt;li&gt;a full Prometheus-first setup feels heavier than the current problem;&lt;/li&gt;
&lt;li&gt;you want fast operational visibility for Docker environments.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This is especially relevant for solo operators, small teams, homelab-style environments, and practical self-hosted stacks where speed to visibility matters more than building a full observability platform.&lt;/p&gt;
&lt;h2 id="what-beszel-does-well"&gt;What Beszel does well
&lt;/h2&gt;&lt;h3 id="it-focuses-on-host-and-container-reality"&gt;It focuses on host and container reality
&lt;/h3&gt;&lt;p&gt;Beszel is useful because it looks directly at the environment operators often care about first:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;host health;&lt;/li&gt;
&lt;li&gt;container state;&lt;/li&gt;
&lt;li&gt;resource usage;&lt;/li&gt;
&lt;li&gt;basic uptime and activity signals.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That is a very practical starting point for a Docker-heavy stack.&lt;/p&gt;
&lt;h3 id="it-includes-the-hub-and-agent-model-in-one-pattern"&gt;It includes the hub and agent model in one pattern
&lt;/h3&gt;&lt;p&gt;The AiratTop template packages both the hub and agent so you do not have to piece the model together yourself. The agent uses host networking and read-only Docker socket access, which is exactly why the setup can provide useful host and container visibility so quickly.&lt;sup id="fnref:1"&gt;&lt;a href="#fn:1" class="footnote-ref" role="doc-noteref"&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;That design matters because it keeps Beszel focused on real system observation rather than only application-level checks.&lt;/p&gt;
&lt;h3 id="it-is-faster-to-adopt-than-a-full-metrics-stack"&gt;It is faster to adopt than a full metrics stack
&lt;/h3&gt;&lt;p&gt;For many small or medium self-hosted environments, the first observability win is not sophisticated dashboards. It is simply being able to see what is happening on the box and in the containers.&lt;/p&gt;
&lt;p&gt;Beszel gets you there quickly.&lt;/p&gt;
&lt;h2 id="when-beszel-is-better-than-other-monitoring-options"&gt;When Beszel is better than other monitoring options
&lt;/h2&gt;&lt;p&gt;Beszel is better when the problem is primarily:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;“show me the host and container state”;&lt;/li&gt;
&lt;li&gt;“give me a clear view of what is running and how it behaves”;&lt;/li&gt;
&lt;li&gt;“help me inspect this Docker environment without standing up a full observability program.”&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That is a different problem from:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://blog.airat.top/p/gatus-self-hosted/" &gt;When Gatus Is Better Than a Full Monitoring Stack&lt;/a&gt;, which is about uptime and status visibility;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://blog.airat.top/p/monitoring-self-hosted/" &gt;When Self-Hosted Prometheus and Grafana Are the Right Monitoring Stack&lt;/a&gt;, which is about metrics depth and dashboarding.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="when-beszel-is-not-enough"&gt;When Beszel is not enough
&lt;/h2&gt;&lt;p&gt;Beszel is not enough if you need:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;long-term metrics analysis across many services;&lt;/li&gt;
&lt;li&gt;rich dashboarding and queryable metrics history;&lt;/li&gt;
&lt;li&gt;broad alerting and investigation workflows;&lt;/li&gt;
&lt;li&gt;an observability layer that extends far beyond host and container visibility.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In that case, Beszel may still be useful, but it becomes a lightweight complement instead of the main monitoring solution.&lt;/p&gt;
&lt;h2 id="a-practical-starting-point"&gt;A practical starting point
&lt;/h2&gt;&lt;p&gt;If what you need is fast host and container visibility, start with &lt;a class="link" href="https://github.com/AiratTop/beszel-self-hosted" target="_blank" rel="noopener"
 &gt;AiratTop/beszel-self-hosted&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The repository includes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;the Beszel hub;&lt;/li&gt;
&lt;li&gt;the Beszel agent;&lt;/li&gt;
&lt;li&gt;persistent directories for hub and agent state;&lt;/li&gt;
&lt;li&gt;the socket bridge the stack expects;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;shared_network&lt;/code&gt; compatibility for the hub.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That is enough to make Beszel operationally useful very quickly in a Docker environment.&lt;/p&gt;
&lt;h2 id="where-beszel-fits-in-this-ecosystem"&gt;Where Beszel fits in this ecosystem
&lt;/h2&gt;&lt;p&gt;I would position Beszel as the fast-start observability layer for host and container visibility.&lt;/p&gt;
&lt;p&gt;It fits well next to:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://blog.airat.top/p/monitoring-self-hosted/" &gt;When Self-Hosted Prometheus and Grafana Are the Right Monitoring Stack&lt;/a&gt; for deeper metrics later;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://blog.airat.top/p/gatus-self-hosted/" &gt;When Gatus Is Better Than a Full Monitoring Stack&lt;/a&gt; for uptime-focused checks;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://blog.airat.top/p/prometheus-vs-gatus-vs-beszel/" &gt;Prometheus vs Gatus vs Beszel: What Each Tool Actually Solves&lt;/a&gt; for the direct decision framework.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="summary"&gt;Summary
&lt;/h2&gt;&lt;p&gt;Beszel is the fastest way to monitor a Docker host when you need quick visibility into host and container behavior without deploying a heavier metrics stack.&lt;/p&gt;
&lt;p&gt;If your current observability need is operational clarity rather than full-scale monitoring, Beszel is often the most efficient first step.&lt;/p&gt;
&lt;p&gt;If you are working through a similar problem and want help turning it into a practical system, you can contact me through &lt;a class="link" href="https://airat.top" target="_blank" rel="noopener"
 &gt;airat.top&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="sources"&gt;Sources
&lt;/h2&gt;&lt;div class="footnotes" role="doc-endnotes"&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id="fn:1"&gt;
&lt;p&gt;&lt;a class="link" href="https://github.com/AiratTop/beszel-self-hosted" target="_blank" rel="noopener"
 &gt;AiratTop/beszel-self-hosted&lt;/a&gt;&amp;#160;&lt;a href="#fnref:1" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;</description></item><item><title>When Gatus Is Better Than a Full Monitoring Stack</title><link>https://blog.airat.top/p/gatus-self-hosted/</link><pubDate>Wed, 11 Mar 2026 00:01:00 +0300</pubDate><guid>https://blog.airat.top/p/gatus-self-hosted/</guid><description>&lt;img src="https://blog.airat.top/p/gatus-self-hosted/cover.webp" alt="Featured image of post When Gatus Is Better Than a Full Monitoring Stack" /&gt;&lt;p&gt;Sometimes the monitoring question is being asked at the wrong scale. A team says it needs “monitoring,” but the real need is much simpler: know whether services are reachable, show status clearly, and alert when something important goes down.&lt;/p&gt;
&lt;p&gt;That is where Gatus can be the better choice than a full monitoring stack.&lt;/p&gt;
&lt;h2 id="when-gatus-is-the-right-answer"&gt;When Gatus is the right answer
&lt;/h2&gt;&lt;p&gt;Self-hosted Gatus makes sense when:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;the main need is uptime visibility;&lt;/li&gt;
&lt;li&gt;you want simple checks and a readable status page;&lt;/li&gt;
&lt;li&gt;alerting matters more than deep time-series analysis;&lt;/li&gt;
&lt;li&gt;the stack is not yet complex enough to justify Prometheus-first observability.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This is common when a self-hosted environment has several services exposed to users or operators, but the real operational question is still very direct: is the service healthy and reachable right now?&lt;/p&gt;
&lt;h2 id="why-gatus-is-useful"&gt;Why Gatus is useful
&lt;/h2&gt;&lt;h3 id="it-stays-close-to-the-operational-question"&gt;It stays close to the operational question
&lt;/h3&gt;&lt;p&gt;Some tools are powerful because they are broad. Gatus is useful because it stays narrow.&lt;/p&gt;
&lt;p&gt;It focuses on:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;endpoint checks;&lt;/li&gt;
&lt;li&gt;service status visibility;&lt;/li&gt;
&lt;li&gt;health history;&lt;/li&gt;
&lt;li&gt;alerting around failure states.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That makes it easier to adopt when the organization needs signal, not a larger observability program.&lt;/p&gt;
&lt;h3 id="it-gives-you-a-public-or-internal-status-layer"&gt;It gives you a public or internal status layer
&lt;/h3&gt;&lt;p&gt;Status pages are not only for external audiences. They are also useful internally when several services matter and multiple people need to understand whether the stack is healthy without reading container logs.&lt;/p&gt;
&lt;p&gt;That is especially relevant when the environment includes published tools behind &lt;a class="link" href="https://blog.airat.top/p/caddy-self-hosted/" &gt;When Self-Hosted Caddy Is Enough for Your Reverse Proxy Layer&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id="it-fits-well-in-a-connected-docker-environment"&gt;It fits well in a connected Docker environment
&lt;/h3&gt;&lt;p&gt;The AiratTop template uses PostgreSQL for persistent history and is designed to run on the same &lt;code&gt;shared_network&lt;/code&gt; as the services it checks. That is practical because it lets Gatus monitor the rest of the stack without awkward exposure patterns.&lt;sup id="fnref:1"&gt;&lt;a href="#fn:1" class="footnote-ref" role="doc-noteref"&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;h2 id="when-gatus-is-better-than-prometheus-and-grafana"&gt;When Gatus is better than Prometheus and Grafana
&lt;/h2&gt;&lt;p&gt;Gatus is better when your main question is:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;is the service up;&lt;/li&gt;
&lt;li&gt;does the endpoint respond correctly;&lt;/li&gt;
&lt;li&gt;should someone be alerted now;&lt;/li&gt;
&lt;li&gt;can we present current service health cleanly.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If that is the dominant need, &lt;a class="link" href="https://blog.airat.top/p/monitoring-self-hosted/" &gt;When Self-Hosted Prometheus and Grafana Are the Right Monitoring Stack&lt;/a&gt; may be more than you need right now.&lt;/p&gt;
&lt;p&gt;Prometheus and Grafana answer deeper questions about trends, metrics, and system behavior. Gatus answers the simpler but still important question of availability.&lt;/p&gt;
&lt;h2 id="when-gatus-is-not-enough"&gt;When Gatus is not enough
&lt;/h2&gt;&lt;p&gt;Gatus is not enough if you need:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;deep metrics inspection;&lt;/li&gt;
&lt;li&gt;resource trend analysis;&lt;/li&gt;
&lt;li&gt;dashboarding for internal performance signals;&lt;/li&gt;
&lt;li&gt;rich infrastructure investigation during incidents.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That is where Prometheus and Grafana or a broader observability stack become necessary. Gatus is not weaker because it is smaller. It just solves a narrower problem.&lt;/p&gt;
&lt;h2 id="a-practical-starting-point"&gt;A practical starting point
&lt;/h2&gt;&lt;p&gt;If uptime visibility is the priority, start with &lt;a class="link" href="https://github.com/AiratTop/gatus-self-hosted" target="_blank" rel="noopener"
 &gt;AiratTop/gatus-self-hosted&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The repository includes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Gatus itself;&lt;/li&gt;
&lt;li&gt;PostgreSQL for persistent results and history;&lt;/li&gt;
&lt;li&gt;a configuration file for checks and alert rules;&lt;/li&gt;
&lt;li&gt;helper scripts for restart, update, and backup;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;shared_network&lt;/code&gt; compatibility for easier service checks.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That makes it a practical observability layer for teams that want signal fast without rolling out a full metrics stack first.&lt;/p&gt;
&lt;h2 id="where-gatus-fits-in-this-ecosystem"&gt;Where Gatus fits in this ecosystem
&lt;/h2&gt;&lt;p&gt;Gatus fits best as the uptime and status layer beside, not necessarily instead of, other monitoring tools.&lt;/p&gt;
&lt;p&gt;It pairs especially well with:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://blog.airat.top/p/monitoring-self-hosted/" &gt;When Self-Hosted Prometheus and Grafana Are the Right Monitoring Stack&lt;/a&gt; for deeper metrics;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://blog.airat.top/p/beszel-self-hosted/" &gt;When Beszel Is the Fastest Way to Monitor a Docker Host&lt;/a&gt; for lighter host visibility;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://blog.airat.top/p/prometheus-vs-gatus-vs-beszel/" &gt;Prometheus vs Gatus vs Beszel: What Each Tool Actually Solves&lt;/a&gt; for the direct comparison.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="summary"&gt;Summary
&lt;/h2&gt;&lt;p&gt;Gatus is better than a full monitoring stack when the real need is uptime checks, status visibility, and straightforward alerting.&lt;/p&gt;
&lt;p&gt;If your monitoring problem is still mostly about availability, Gatus is often the most efficient first step.&lt;/p&gt;
&lt;p&gt;If you are working through a similar problem and want help turning it into a practical system, you can contact me through &lt;a class="link" href="https://airat.top" target="_blank" rel="noopener"
 &gt;airat.top&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="sources"&gt;Sources
&lt;/h2&gt;&lt;div class="footnotes" role="doc-endnotes"&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id="fn:1"&gt;
&lt;p&gt;&lt;a class="link" href="https://github.com/AiratTop/gatus-self-hosted" target="_blank" rel="noopener"
 &gt;AiratTop/gatus-self-hosted&lt;/a&gt;&amp;#160;&lt;a href="#fnref:1" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;</description></item><item><title>When Self-Hosted Prometheus and Grafana Are the Right Monitoring Stack</title><link>https://blog.airat.top/p/monitoring-self-hosted/</link><pubDate>Tue, 10 Mar 2026 00:01:00 +0300</pubDate><guid>https://blog.airat.top/p/monitoring-self-hosted/</guid><description>&lt;img src="https://blog.airat.top/p/monitoring-self-hosted/cover.webp" alt="Featured image of post When Self-Hosted Prometheus and Grafana Are the Right Monitoring Stack" /&gt;&lt;p&gt;At some point, a self-hosted environment needs more than “the site is up.” It needs visibility into what the system is doing, where pressure is building, and what is drifting before users notice.&lt;/p&gt;
&lt;p&gt;That is where Prometheus and Grafana become the right monitoring stack. They are not the lightest tools you can deploy, but they solve a deeper problem than simple status checks.&lt;/p&gt;
&lt;h2 id="when-a-full-monitoring-stack-is-justified"&gt;When a full monitoring stack is justified
&lt;/h2&gt;&lt;p&gt;Self-hosted Prometheus and Grafana make sense when:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;uptime alone is no longer enough;&lt;/li&gt;
&lt;li&gt;the team needs metrics, not just ping checks;&lt;/li&gt;
&lt;li&gt;capacity, trends, and internal system behavior matter;&lt;/li&gt;
&lt;li&gt;dashboards are becoming part of operational decision-making.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This usually happens once the stack contains several services, background processing, persistent storage, or business workflows that cannot be managed safely by guesswork alone.&lt;/p&gt;
&lt;h2 id="why-prometheus-and-grafana-work-well-together"&gt;Why Prometheus and Grafana work well together
&lt;/h2&gt;&lt;h3 id="prometheus-gives-you-the-metrics-layer"&gt;Prometheus gives you the metrics layer
&lt;/h3&gt;&lt;p&gt;Prometheus is useful when you need to collect and store metrics over time. It turns raw system signals into something you can query, alert on, and inspect historically.&lt;/p&gt;
&lt;p&gt;That matters for questions like:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;is resource usage climbing gradually;&lt;/li&gt;
&lt;li&gt;did request latency change after a deployment;&lt;/li&gt;
&lt;li&gt;are specific services under unusual pressure;&lt;/li&gt;
&lt;li&gt;is a job queue backing up;&lt;/li&gt;
&lt;li&gt;are dashboards showing a trend or just a moment.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="grafana-turns-those-metrics-into-operational-visibility"&gt;Grafana turns those metrics into operational visibility
&lt;/h3&gt;&lt;p&gt;Metrics without a readable surface are often underused. Grafana gives teams the layer that makes those signals visible and shareable.&lt;/p&gt;
&lt;p&gt;In practice, that means dashboards for:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;infrastructure health;&lt;/li&gt;
&lt;li&gt;service behavior;&lt;/li&gt;
&lt;li&gt;workload trends;&lt;/li&gt;
&lt;li&gt;internal KPI overlays when operational data is also exposed.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Together, Prometheus and Grafana form a monitoring stack that is more about visibility and investigation than simple up/down awareness.&lt;/p&gt;
&lt;h2 id="when-this-stack-is-better-than-lighter-tools"&gt;When this stack is better than lighter tools
&lt;/h2&gt;&lt;p&gt;Prometheus and Grafana are better than lighter monitoring options when the question is not just “is it reachable?”&lt;/p&gt;
&lt;p&gt;They win when you need to understand:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;what changed;&lt;/li&gt;
&lt;li&gt;where a resource bottleneck is emerging;&lt;/li&gt;
&lt;li&gt;whether a system is degrading before it fails;&lt;/li&gt;
&lt;li&gt;how multiple services behave together.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That makes them a different class of solution from &lt;a class="link" href="https://blog.airat.top/p/gatus-self-hosted/" &gt;When Gatus Is Better Than a Full Monitoring Stack&lt;/a&gt; or &lt;a class="link" href="https://blog.airat.top/p/beszel-self-hosted/" &gt;When Beszel Is the Fastest Way to Monitor a Docker Host&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="when-this-stack-is-too-much"&gt;When this stack is too much
&lt;/h2&gt;&lt;p&gt;Prometheus and Grafana are not automatically the right first observability move.&lt;/p&gt;
&lt;p&gt;They may be too much if:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;you only need basic uptime visibility;&lt;/li&gt;
&lt;li&gt;the stack is still very small;&lt;/li&gt;
&lt;li&gt;nobody is going to look at metrics dashboards in practice;&lt;/li&gt;
&lt;li&gt;the operational question is simpler than the toolset.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That is why observability should be introduced by problem class, not by prestige.&lt;/p&gt;
&lt;h2 id="a-practical-starting-point"&gt;A practical starting point
&lt;/h2&gt;&lt;p&gt;If you want a reusable baseline, start with &lt;a class="link" href="https://github.com/AiratTop/monitoring-self-hosted" target="_blank" rel="noopener"
 &gt;AiratTop/monitoring-self-hosted&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The repository already includes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Prometheus;&lt;/li&gt;
&lt;li&gt;Grafana;&lt;/li&gt;
&lt;li&gt;a starter Prometheus configuration;&lt;/li&gt;
&lt;li&gt;Grafana provisioning files;&lt;/li&gt;
&lt;li&gt;persistent storage for both services;&lt;/li&gt;
&lt;li&gt;helper scripts for restart and update.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That gives you a clean starting point without forcing you to wire the stack from scratch.&lt;/p&gt;
&lt;h2 id="where-this-fits-in-the-airattop-ecosystem"&gt;Where this fits in the AiratTop ecosystem
&lt;/h2&gt;&lt;p&gt;In this stack, Prometheus and Grafana are the deeper observability layer. They complement other tools rather than replacing them outright.&lt;/p&gt;
&lt;p&gt;For example:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://blog.airat.top/p/gatus-self-hosted/" &gt;When Gatus Is Better Than a Full Monitoring Stack&lt;/a&gt; is stronger when the immediate need is uptime checks and status visibility;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://blog.airat.top/p/beszel-self-hosted/" &gt;When Beszel Is the Fastest Way to Monitor a Docker Host&lt;/a&gt; is useful for lighter host and container visibility;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://blog.airat.top/p/self-hosted-stack-for-ai-automation/" &gt;A Practical Self-Hosted Stack for AI, Automation, and Internal Tools&lt;/a&gt; explains where all three fit at the system level.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I will also tie that together directly in &lt;a class="link" href="https://blog.airat.top/p/prometheus-vs-gatus-vs-beszel/" &gt;Prometheus vs Gatus vs Beszel: What Each Tool Actually Solves&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="summary"&gt;Summary
&lt;/h2&gt;&lt;p&gt;Self-hosted Prometheus and Grafana are the right monitoring stack when you need real operational visibility: metrics, trends, dashboards, and the ability to understand system behavior before failure becomes obvious.&lt;/p&gt;
&lt;p&gt;If your need is deeper than uptime and simple host checks, this stack usually earns its complexity.&lt;/p&gt;
&lt;p&gt;If you are working through a similar problem and want help turning it into a practical system, you can contact me through &lt;a class="link" href="https://airat.top" target="_blank" rel="noopener"
 &gt;airat.top&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="sources"&gt;Sources
&lt;/h2&gt;</description></item><item><title>When Self-Hosted Metabase Is Enough for Business Intelligence</title><link>https://blog.airat.top/p/metabase-self-hosted/</link><pubDate>Mon, 09 Mar 2026 00:01:00 +0300</pubDate><guid>https://blog.airat.top/p/metabase-self-hosted/</guid><description>&lt;img src="https://blog.airat.top/p/metabase-self-hosted/cover.webp" alt="Featured image of post When Self-Hosted Metabase Is Enough for Business Intelligence" /&gt;&lt;p&gt;Most teams do not fail at analytics because they lack a theoretical data strategy. They fail because reporting stays too slow, too fragmented, or too dependent on technical people to answer routine business questions.&lt;/p&gt;
&lt;p&gt;That is where Metabase often becomes useful. It is a practical BI layer for teams that need dashboards, saved questions, and shared reporting without committing to a heavyweight analytics implementation too early.&lt;/p&gt;
&lt;h2 id="when-metabase-is-enough"&gt;When Metabase is enough
&lt;/h2&gt;&lt;p&gt;Self-hosted Metabase is a strong fit when:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;the team needs internal dashboards quickly;&lt;/li&gt;
&lt;li&gt;business users need access to reporting without waiting for custom engineering work;&lt;/li&gt;
&lt;li&gt;SQL-capable data sources already exist;&lt;/li&gt;
&lt;li&gt;the reporting layer should stay simpler than a full-scale enterprise BI rollout.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This is a common point for growing operations teams, founders, and technical business teams that already have data but do not yet have a clean way to turn it into decisions.&lt;/p&gt;
&lt;h2 id="what-metabase-does-well-in-practice"&gt;What Metabase does well in practice
&lt;/h2&gt;&lt;h3 id="it-shortens-the-path-from-data-to-dashboard"&gt;It shortens the path from data to dashboard
&lt;/h3&gt;&lt;p&gt;Some analytics tools are powerful but create a lot of organizational weight around the reporting process. Metabase is often useful because it reduces the time between “we have data” and “someone can see what matters.”&lt;/p&gt;
&lt;p&gt;That helps when reporting needs are practical rather than ceremonial:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;pipeline visibility;&lt;/li&gt;
&lt;li&gt;operational dashboards;&lt;/li&gt;
&lt;li&gt;service metrics;&lt;/li&gt;
&lt;li&gt;financial or activity summaries;&lt;/li&gt;
&lt;li&gt;internal KPI tracking.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="it-works-well-on-top-of-a-stack-you-already-control"&gt;It works well on top of a stack you already control
&lt;/h3&gt;&lt;p&gt;Metabase becomes more compelling in a self-hosted environment because it can sit directly on top of your existing data layer.&lt;/p&gt;
&lt;p&gt;That might mean:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://blog.airat.top/p/postgresql-self-hosted/" &gt;When Self-Hosted PostgreSQL Is the Right Default for Internal Tools&lt;/a&gt; for application and operational data;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://blog.airat.top/p/clickhouse-self-hosted/" &gt;When Self-Hosted ClickHouse Starts Making Sense&lt;/a&gt; for heavier analytical workloads;&lt;/li&gt;
&lt;li&gt;data produced by &lt;a class="link" href="https://blog.airat.top/p/n8n-self-hosted/" &gt;When Self-Hosted n8n Is the Better Choice&lt;/a&gt; and surrounding workflows.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The BI layer becomes more useful when it is part of the same operational system, not an isolated reporting island.&lt;/p&gt;
&lt;h3 id="it-is-often-enough-before-bi-complexity-becomes-political"&gt;It is often enough before BI complexity becomes political
&lt;/h3&gt;&lt;p&gt;Many teams do not need an analytics program. They need visibility.&lt;/p&gt;
&lt;p&gt;Metabase is valuable in that phase because it gives you:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;dashboards;&lt;/li&gt;
&lt;li&gt;filters;&lt;/li&gt;
&lt;li&gt;saved questions;&lt;/li&gt;
&lt;li&gt;scheduled sharing;&lt;/li&gt;
&lt;li&gt;a practical surface for SQL-backed reporting.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That is often enough to improve decision speed materially without overbuilding the analytics function.&lt;/p&gt;
&lt;h2 id="when-metabase-is-not-enough"&gt;When Metabase is not enough
&lt;/h2&gt;&lt;p&gt;Metabase is not the right answer if your reporting environment already requires:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;deeply customized semantic modeling;&lt;/li&gt;
&lt;li&gt;complex enterprise governance requirements;&lt;/li&gt;
&lt;li&gt;a large dedicated analytics team with specialized workflows;&lt;/li&gt;
&lt;li&gt;platform-level BI features beyond practical dashboarding.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;But those are later-stage constraints. For many self-hosted environments, the more common problem is still that reporting is too manual and too slow. Metabase addresses that problem well.&lt;/p&gt;
&lt;h2 id="a-practical-starting-point"&gt;A practical starting point
&lt;/h2&gt;&lt;p&gt;If you want a reusable baseline, start with &lt;a class="link" href="https://github.com/AiratTop/metabase-self-hosted" target="_blank" rel="noopener"
 &gt;AiratTop/metabase-self-hosted&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The repository includes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Metabase itself;&lt;/li&gt;
&lt;li&gt;PostgreSQL as the application metadata database;&lt;/li&gt;
&lt;li&gt;persistent storage for the backing database;&lt;/li&gt;
&lt;li&gt;helper scripts for restart, update, and backup;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;shared_network&lt;/code&gt; compatibility for clean access to other data services.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That makes it a good fit for teams that want the reporting layer to be operationally boring and quick to adopt.&lt;/p&gt;
&lt;h2 id="where-metabase-fits-in-the-stack"&gt;Where Metabase fits in the stack
&lt;/h2&gt;&lt;p&gt;In this ecosystem, Metabase usually sits above the data layer rather than at the center of the architecture.&lt;/p&gt;
&lt;p&gt;Its most useful neighbors are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://blog.airat.top/p/postgresql-self-hosted/" &gt;When Self-Hosted PostgreSQL Is the Right Default for Internal Tools&lt;/a&gt;;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://blog.airat.top/p/clickhouse-self-hosted/" &gt;When Self-Hosted ClickHouse Starts Making Sense&lt;/a&gt;;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://blog.airat.top/p/self-hosted-stack-for-ai-automation/" &gt;A Practical Self-Hosted Stack for AI, Automation, and Internal Tools&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That is the key framing: Metabase is the visibility layer that turns stored data into something operators and decision-makers can actually use.&lt;/p&gt;
&lt;h2 id="summary"&gt;Summary
&lt;/h2&gt;&lt;p&gt;Self-hosted Metabase is enough when the team needs practical business intelligence, internal dashboards, and faster reporting decisions without a heavyweight BI rollout.&lt;/p&gt;
&lt;p&gt;If the reporting need is real but the analytics organization is still small, Metabase is often one of the highest-leverage additions you can make to the stack.&lt;/p&gt;
&lt;p&gt;If you are working through a similar problem and want help turning it into a practical system, you can contact me through &lt;a class="link" href="https://airat.top" target="_blank" rel="noopener"
 &gt;airat.top&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="sources"&gt;Sources
&lt;/h2&gt;</description></item><item><title>When Self-Hosted ClickHouse Starts Making Sense</title><link>https://blog.airat.top/p/clickhouse-self-hosted/</link><pubDate>Sun, 08 Mar 2026 00:01:00 +0300</pubDate><guid>https://blog.airat.top/p/clickhouse-self-hosted/</guid><description>&lt;img src="https://blog.airat.top/p/clickhouse-self-hosted/cover.webp" alt="Featured image of post When Self-Hosted ClickHouse Starts Making Sense" /&gt;&lt;p&gt;ClickHouse is usually not the first database a team should deploy. It becomes interesting later, when reporting and analytical workloads start pushing a general-purpose relational database into a job it was not meant to love.&lt;/p&gt;
&lt;p&gt;That is why the right question is not “should we use ClickHouse because it is fast?” The better question is when the workload has clearly become analytical enough that a columnar engine starts making operational sense.&lt;/p&gt;
&lt;h2 id="when-clickhouse-starts-earning-its-place"&gt;When ClickHouse starts earning its place
&lt;/h2&gt;&lt;p&gt;Self-hosted ClickHouse is worth considering when:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;the workload is heavily analytical rather than transactional;&lt;/li&gt;
&lt;li&gt;queries scan large volumes of events, logs, or time-oriented data;&lt;/li&gt;
&lt;li&gt;reporting pressure is growing faster than the transactional database should absorb;&lt;/li&gt;
&lt;li&gt;you want fast analytical queries without building the whole stack around a managed warehouse.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This is often the point where teams move from “we store data” to “we need to analyze a lot of it repeatedly.”&lt;/p&gt;
&lt;h2 id="what-kind-of-problems-clickhouse-solves-well"&gt;What kind of problems ClickHouse solves well
&lt;/h2&gt;&lt;h3 id="event-heavy-reporting"&gt;Event-heavy reporting
&lt;/h3&gt;&lt;p&gt;If the system produces a lot of operational or product events, ClickHouse becomes more relevant. This can include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;workflow execution data;&lt;/li&gt;
&lt;li&gt;internal activity events;&lt;/li&gt;
&lt;li&gt;reporting streams;&lt;/li&gt;
&lt;li&gt;aggregated operational metrics;&lt;/li&gt;
&lt;li&gt;usage and tracking data that needs to stay queryable at scale.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That is a different problem from the one &lt;a class="link" href="https://blog.airat.top/p/postgresql-self-hosted/" &gt;When Self-Hosted PostgreSQL Is the Right Default for Internal Tools&lt;/a&gt; is best at solving.&lt;/p&gt;
&lt;h3 id="fast-analytical-reads"&gt;Fast analytical reads
&lt;/h3&gt;&lt;p&gt;ClickHouse is useful when the read pattern looks like analytics rather than application behavior. You are asking for summaries, aggregations, grouped trends, and large-scope reporting queries, not mostly row-by-row transactional updates.&lt;/p&gt;
&lt;p&gt;That distinction is what makes columnar engines valuable. They are not “better relational databases.” They are better fits for specific kinds of analytical work.&lt;/p&gt;
&lt;h3 id="a-bridge-between-operational-systems-and-bi"&gt;A bridge between operational systems and BI
&lt;/h3&gt;&lt;p&gt;In a practical self-hosted stack, ClickHouse often sits between automation or event-producing systems and the reporting layer. That makes it a strong companion to &lt;a class="link" href="https://blog.airat.top/p/metabase-self-hosted/" &gt;When Self-Hosted Metabase Is Enough for Business Intelligence&lt;/a&gt; when dashboards and reporting need a faster analytical backend.&lt;/p&gt;
&lt;h2 id="when-clickhouse-is-the-wrong-first-move"&gt;When ClickHouse is the wrong first move
&lt;/h2&gt;&lt;p&gt;ClickHouse is a poor first choice if your real need is still:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;one transactional application database;&lt;/li&gt;
&lt;li&gt;basic CRUD-heavy internal tools;&lt;/li&gt;
&lt;li&gt;modest reporting that a general-purpose database still handles well;&lt;/li&gt;
&lt;li&gt;a system where most complexity is in the application, not the analytical layer.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If that is the current state, PostgreSQL or MySQL are usually the better early decisions.&lt;/p&gt;
&lt;h2 id="why-the-repository-is-useful-in-this-ecosystem"&gt;Why the repository is useful in this ecosystem
&lt;/h2&gt;&lt;p&gt;The AiratTop template is practical because it treats ClickHouse as part of a broader stack instead of an isolated experiment.&lt;/p&gt;
&lt;p&gt;With &lt;a class="link" href="https://github.com/AiratTop/clickhouse-self-hosted" target="_blank" rel="noopener"
 &gt;AiratTop/clickhouse-self-hosted&lt;/a&gt;, you get:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;persistent local storage;&lt;/li&gt;
&lt;li&gt;telemetry disabled by default;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;shared_network&lt;/code&gt; connectivity;&lt;/li&gt;
&lt;li&gt;helper scripts for restart and update;&lt;/li&gt;
&lt;li&gt;a setup designed to connect cleanly with adjacent services.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The repository also notes compatibility-oriented endpoints that make it easier to query from surrounding tooling when needed.&lt;sup id="fnref:1"&gt;&lt;a href="#fn:1" class="footnote-ref" role="doc-noteref"&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;h2 id="where-clickhouse-fits-relative-to-other-data-layers"&gt;Where ClickHouse fits relative to other data layers
&lt;/h2&gt;&lt;p&gt;This is the useful comparison:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;use PostgreSQL or MySQL for operational system data;&lt;/li&gt;
&lt;li&gt;use Redis for fast ephemeral or queue-oriented patterns;&lt;/li&gt;
&lt;li&gt;use Qdrant for vector retrieval;&lt;/li&gt;
&lt;li&gt;use ClickHouse for heavier analytical workloads.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That is why the more useful comparison is not “which database is best?” It is “which database matches the workload we actually have?”&lt;/p&gt;
&lt;p&gt;I will cover that directly in &lt;a class="link" href="https://blog.airat.top/p/postgresql-vs-mysql-vs-clickhouse-vs-redis-vs-qdrant/" &gt;PostgreSQL vs MySQL vs ClickHouse vs Redis vs Qdrant in a Self-Hosted Stack&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="a-practical-rollout-pattern"&gt;A practical rollout pattern
&lt;/h2&gt;&lt;p&gt;ClickHouse usually makes sense after three things are already true:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;operational systems are producing data worth analyzing;&lt;/li&gt;
&lt;li&gt;reporting queries are becoming important enough to deserve their own home;&lt;/li&gt;
&lt;li&gt;the team wants more control than a fully managed analytics product provides.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;That order matters because ClickHouse is not a foundational default. It is a specialization step.&lt;/p&gt;
&lt;h2 id="summary"&gt;Summary
&lt;/h2&gt;&lt;p&gt;Self-hosted ClickHouse starts making sense when the workload is clearly analytical: lots of events, large scans, repeated reporting, and the need for fast aggregated reads.&lt;/p&gt;
&lt;p&gt;If your database job is still mostly transactional, start elsewhere. If analytics is becoming its own concern, ClickHouse is one of the clearest next layers to add.&lt;/p&gt;
&lt;p&gt;If you are working through a similar problem and want help turning it into a practical system, you can contact me through &lt;a class="link" href="https://airat.top" target="_blank" rel="noopener"
 &gt;airat.top&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="sources"&gt;Sources
&lt;/h2&gt;&lt;div class="footnotes" role="doc-endnotes"&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id="fn:1"&gt;
&lt;p&gt;&lt;a class="link" href="https://github.com/AiratTop/clickhouse-self-hosted" target="_blank" rel="noopener"
 &gt;AiratTop/clickhouse-self-hosted&lt;/a&gt;&amp;#160;&lt;a href="#fnref:1" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;</description></item><item><title>When Self-Hosted WordPress Still Makes Business Sense</title><link>https://blog.airat.top/p/wordpress-self-hosted/</link><pubDate>Sat, 07 Mar 2026 00:01:00 +0300</pubDate><guid>https://blog.airat.top/p/wordpress-self-hosted/</guid><description>&lt;img src="https://blog.airat.top/p/wordpress-self-hosted/cover.webp" alt="Featured image of post When Self-Hosted WordPress Still Makes Business Sense" /&gt;&lt;p&gt;WordPress often gets discussed as if the choice is already settled: either you love it, or you believe modern stacks should have replaced it long ago.&lt;/p&gt;
&lt;p&gt;That is not a useful way to evaluate it. The practical question is simpler: when does self-hosted WordPress still solve a real business problem better than the alternatives in front of you?&lt;/p&gt;
&lt;p&gt;In many cases, it still does.&lt;/p&gt;
&lt;h2 id="when-wordpress-is-still-a-practical-choice"&gt;When WordPress is still a practical choice
&lt;/h2&gt;&lt;p&gt;Self-hosted WordPress makes sense when you need:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;a controllable content platform;&lt;/li&gt;
&lt;li&gt;a familiar admin interface for non-technical users;&lt;/li&gt;
&lt;li&gt;broad plugin and theme flexibility;&lt;/li&gt;
&lt;li&gt;ownership of hosting, backups, and surrounding infrastructure;&lt;/li&gt;
&lt;li&gt;the ability to shape the stack around your own operational preferences.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That is especially relevant for small businesses, content-heavy sites, internal publishing teams, and operators who want a mature CMS without turning content management into a custom software project.&lt;/p&gt;
&lt;h2 id="why-self-hosted-wordpress-still-survives"&gt;Why self-hosted WordPress still survives
&lt;/h2&gt;&lt;h3 id="content-teams-can-use-it-without-a-large-implementation-cycle"&gt;Content teams can use it without a large implementation cycle
&lt;/h3&gt;&lt;p&gt;A practical CMS has to be usable by the people who publish content, not just by the people who deploy containers.&lt;/p&gt;
&lt;p&gt;WordPress still works because it lets teams move quickly on content, structure, and plugins without requiring an engineering-heavy workflow for every small change.&lt;/p&gt;
&lt;h3 id="the-ecosystem-is-still-enormous"&gt;The ecosystem is still enormous
&lt;/h3&gt;&lt;p&gt;In infrastructure terms, ecosystem depth is not a weakness. It is one of the reasons WordPress remains operationally useful. There are still many situations where plugin availability, community familiarity, and hosting flexibility outweigh the appeal of moving to a newer platform.&lt;/p&gt;
&lt;h3 id="self-hosting-restores-control-over-the-stack"&gt;Self-hosting restores control over the stack
&lt;/h3&gt;&lt;p&gt;This is where the decision becomes more interesting for infrastructure-minded teams.&lt;/p&gt;
&lt;p&gt;When you self-host WordPress, you control:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;where the site runs;&lt;/li&gt;
&lt;li&gt;how traffic is exposed;&lt;/li&gt;
&lt;li&gt;how backups are handled;&lt;/li&gt;
&lt;li&gt;which reverse proxy or TLS layer sits in front;&lt;/li&gt;
&lt;li&gt;how the database is maintained;&lt;/li&gt;
&lt;li&gt;how the rest of the stack connects to it.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That makes WordPress a better fit when the website is part of a broader infrastructure strategy rather than a standalone SaaS purchase.&lt;/p&gt;
&lt;h2 id="when-wordpress-is-a-bad-fit"&gt;When WordPress is a bad fit
&lt;/h2&gt;&lt;p&gt;Self-hosting WordPress is not automatically the right answer.&lt;/p&gt;
&lt;p&gt;It becomes less attractive when:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;the site should really be static and rarely changes;&lt;/li&gt;
&lt;li&gt;plugin risk and long-term maintenance are unacceptable;&lt;/li&gt;
&lt;li&gt;the organization wants a very constrained publishing model;&lt;/li&gt;
&lt;li&gt;the site is only one small page and a CMS is unnecessary.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In those cases, a static site or another simpler deployment model may be cleaner.&lt;/p&gt;
&lt;h2 id="where-wordpress-fits-in-this-stack"&gt;Where WordPress fits in this stack
&lt;/h2&gt;&lt;p&gt;WordPress becomes more compelling when the rest of the environment is already self-hosted.&lt;/p&gt;
&lt;p&gt;For example, it fits naturally beside:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://blog.airat.top/p/mysql-self-hosted/" &gt;When Self-Hosted MySQL Is Still the Practical Choice&lt;/a&gt; as the application database;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://blog.airat.top/p/caddy-self-hosted/" &gt;When Self-Hosted Caddy Is Enough for Your Reverse Proxy Layer&lt;/a&gt; for clean publishing and TLS;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://blog.airat.top/p/authentik-self-hosted/" &gt;When Self-Hosted Authentik Becomes Worth It&lt;/a&gt; if surrounding admin or internal services need stronger access patterns;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://blog.airat.top/p/n8n-self-hosted/" &gt;When Self-Hosted n8n Is the Better Choice&lt;/a&gt; when you want automation around content or form-driven workflows.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This is where WordPress stops being “just a website” and becomes part of an operational stack.&lt;/p&gt;
&lt;h2 id="a-practical-starting-point"&gt;A practical starting point
&lt;/h2&gt;&lt;p&gt;If you want a reusable baseline, start with &lt;a class="link" href="https://github.com/AiratTop/wordpress-self-hosted" target="_blank" rel="noopener"
 &gt;AiratTop/wordpress-self-hosted&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The repository includes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;WordPress itself;&lt;/li&gt;
&lt;li&gt;MySQL as the database;&lt;/li&gt;
&lt;li&gt;phpMyAdmin for administration;&lt;/li&gt;
&lt;li&gt;WP-CLI for operational and content tasks;&lt;/li&gt;
&lt;li&gt;persistent storage for both WordPress files and database data;&lt;/li&gt;
&lt;li&gt;a sample &lt;code&gt;Caddyfile&lt;/code&gt; for use behind a reverse proxy.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That combination is useful because it supports both day-to-day site management and surrounding infrastructure integration.&lt;/p&gt;
&lt;h2 id="what-the-real-trade-off-looks-like"&gt;What the real trade-off looks like
&lt;/h2&gt;&lt;p&gt;The real trade-off is not “WordPress versus modernity.” It is:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;faster content operations and a mature ecosystem;&lt;/li&gt;
&lt;li&gt;versus plugin discipline, patching, and CMS maintenance responsibility.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If your team can accept that maintenance responsibility, WordPress often remains a very efficient way to run a controllable site.&lt;/p&gt;
&lt;h2 id="summary"&gt;Summary
&lt;/h2&gt;&lt;p&gt;Self-hosted WordPress still makes business sense when you need a mature CMS, want infrastructure control, and value a publishing workflow that non-technical users can operate.&lt;/p&gt;
&lt;p&gt;It is not the right default for every website. But when the site is content-driven and the stack around it already matters, WordPress is still one of the most practical options available.&lt;/p&gt;
&lt;p&gt;If you are working through a similar problem and want help turning it into a practical system, you can contact me through &lt;a class="link" href="https://airat.top" target="_blank" rel="noopener"
 &gt;airat.top&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="sources"&gt;Sources
&lt;/h2&gt;</description></item><item><title>When Self-Hosted MySQL Is Still the Practical Choice</title><link>https://blog.airat.top/p/mysql-self-hosted/</link><pubDate>Fri, 06 Mar 2026 00:01:00 +0300</pubDate><guid>https://blog.airat.top/p/mysql-self-hosted/</guid><description>&lt;img src="https://blog.airat.top/p/mysql-self-hosted/cover.webp" alt="Featured image of post When Self-Hosted MySQL Is Still the Practical Choice" /&gt;&lt;p&gt;MySQL is easy to underestimate in modern infrastructure conversations. It is often treated like the older default that everyone should have moved past by now.&lt;/p&gt;
&lt;p&gt;That is the wrong framing. The real question is not whether MySQL is fashionable. The question is whether it is the practical choice for the applications you actually run.&lt;/p&gt;
&lt;p&gt;In many self-hosted environments, the answer is still yes.&lt;/p&gt;
&lt;h2 id="when-mysql-is-the-right-fit"&gt;When MySQL is the right fit
&lt;/h2&gt;&lt;p&gt;Self-hosted MySQL makes sense when your stack includes applications or patterns that already align with it well:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;CMS workloads;&lt;/li&gt;
&lt;li&gt;legacy or compatibility-driven applications;&lt;/li&gt;
&lt;li&gt;tools that assume MySQL out of the box;&lt;/li&gt;
&lt;li&gt;lightweight relational use cases where familiarity matters more than database differentiation.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That is especially true if your stack includes &lt;a class="link" href="https://blog.airat.top/p/wordpress-self-hosted/" &gt;When Self-Hosted WordPress Still Makes Business Sense&lt;/a&gt;, because WordPress remains one of the clearest examples of a workload where MySQL is not an awkward choice. It is the expected one.&lt;/p&gt;
&lt;h2 id="why-mysql-still-shows-up-in-real-stacks"&gt;Why MySQL still shows up in real stacks
&lt;/h2&gt;&lt;h3 id="compatibility-beats-ideology"&gt;Compatibility beats ideology
&lt;/h3&gt;&lt;p&gt;Infrastructure choices should reduce friction, not prove taste.&lt;/p&gt;
&lt;p&gt;If the application you need already works naturally with MySQL, forcing another database into the picture can create more migration work, more uncertainty, and more moving parts than the situation deserves.&lt;/p&gt;
&lt;h3 id="it-stays-simple-for-common-relational-workloads"&gt;It stays simple for common relational workloads
&lt;/h3&gt;&lt;p&gt;A lot of self-hosted workloads do not need advanced data-layer architecture. They need:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;one database;&lt;/li&gt;
&lt;li&gt;predictable credentials;&lt;/li&gt;
&lt;li&gt;backups;&lt;/li&gt;
&lt;li&gt;stable networking;&lt;/li&gt;
&lt;li&gt;low operational confusion.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;MySQL is often enough for that.&lt;/p&gt;
&lt;h3 id="it-fits-the-supporting-database-role-well"&gt;It fits the “supporting database” role well
&lt;/h3&gt;&lt;p&gt;In some stacks, MySQL is not the central data platform. It is the relational store required by a specific application. That is still a valid role.&lt;/p&gt;
&lt;p&gt;The database layer does not have to be strategic in every case. Sometimes it just needs to support one system well.&lt;/p&gt;
&lt;h2 id="mysql-versus-postgresql-in-this-stack"&gt;MySQL versus PostgreSQL in this stack
&lt;/h2&gt;&lt;p&gt;This is where many teams get stuck, but the practical answer is usually simpler than the internet makes it sound.&lt;/p&gt;
&lt;p&gt;Use MySQL when:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;the application ecosystem around you already expects it;&lt;/li&gt;
&lt;li&gt;the workload is straightforward;&lt;/li&gt;
&lt;li&gt;compatibility is a bigger concern than standardizing everything on one engine.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Use PostgreSQL when:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;you are choosing a general-purpose default for internal tools;&lt;/li&gt;
&lt;li&gt;multiple services in the stack naturally align with Postgres;&lt;/li&gt;
&lt;li&gt;you want one broader relational base for automation and operations.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That is why &lt;a class="link" href="https://blog.airat.top/p/postgresql-self-hosted/" &gt;When Self-Hosted PostgreSQL Is the Right Default for Internal Tools&lt;/a&gt; and this article are not in conflict. PostgreSQL is often the stronger default. MySQL is still the more practical answer in specific, common cases.&lt;/p&gt;
&lt;h2 id="a-practical-starting-point"&gt;A practical starting point
&lt;/h2&gt;&lt;p&gt;If MySQL is the right tool for the workload in front of you, start with &lt;a class="link" href="https://github.com/AiratTop/mysql-self-hosted" target="_blank" rel="noopener"
 &gt;AiratTop/mysql-self-hosted&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The repository includes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;a standalone MySQL container;&lt;/li&gt;
&lt;li&gt;persistent storage under &lt;code&gt;./data/mysql&lt;/code&gt;;&lt;/li&gt;
&lt;li&gt;environment-driven credentials;&lt;/li&gt;
&lt;li&gt;restart, update, and backup helper scripts;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;shared_network&lt;/code&gt; compatibility for services that need direct access.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That makes it easy to use MySQL as a clean supporting service instead of a messy one-off installation.&lt;/p&gt;
&lt;h2 id="where-mysql-fits-in-the-airattop-stack"&gt;Where MySQL fits in the AiratTop stack
&lt;/h2&gt;&lt;p&gt;In this ecosystem, MySQL connects most naturally to:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://blog.airat.top/p/wordpress-self-hosted/" &gt;When Self-Hosted WordPress Still Makes Business Sense&lt;/a&gt;, where it is the natural application database;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://blog.airat.top/p/n8n-self-hosted/" &gt;When Self-Hosted n8n Is the Better Choice&lt;/a&gt;, where workflows may need to read or write MySQL-backed systems;&lt;/li&gt;
&lt;li&gt;the broader comparison planned in &lt;a class="link" href="https://blog.airat.top/p/postgresql-vs-mysql-vs-clickhouse-vs-redis-vs-qdrant/" &gt;PostgreSQL vs MySQL vs ClickHouse vs Redis vs Qdrant in a Self-Hosted Stack&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This is a good example of a database that earns its place by being operationally convenient and application-aligned.&lt;/p&gt;
&lt;h2 id="what-mysql-does-not-justify-by-itself"&gt;What MySQL does not justify by itself
&lt;/h2&gt;&lt;p&gt;MySQL is not automatically the best foundation for every self-hosted environment. If you are building several new internal systems from scratch, standardizing on PostgreSQL may still be cleaner.&lt;/p&gt;
&lt;p&gt;The practical mistake is not choosing MySQL. The practical mistake is choosing MySQL by habit when another engine fits the workload better.&lt;/p&gt;
&lt;h2 id="summary"&gt;Summary
&lt;/h2&gt;&lt;p&gt;Self-hosted MySQL is still the practical choice when your applications already align with it, especially in CMS and compatibility-heavy environments.&lt;/p&gt;
&lt;p&gt;It does not have to be your universal database strategy. It just has to be the right database for the system you are actually running.&lt;/p&gt;
&lt;p&gt;If you are working through a similar problem and want help turning it into a practical system, you can contact me through &lt;a class="link" href="https://airat.top" target="_blank" rel="noopener"
 &gt;airat.top&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="sources"&gt;Sources
&lt;/h2&gt;</description></item><item><title>When Self-Hosted Redis Starts Paying Off</title><link>https://blog.airat.top/p/redis-self-hosted/</link><pubDate>Thu, 05 Mar 2026 00:01:00 +0300</pubDate><guid>https://blog.airat.top/p/redis-self-hosted/</guid><description>&lt;img src="https://blog.airat.top/p/redis-self-hosted/cover.webp" alt="Featured image of post When Self-Hosted Redis Starts Paying Off" /&gt;&lt;p&gt;Redis is one of the easiest services to misunderstand in a self-hosted stack. Many teams know it as “a cache,” then either ignore it completely or add it without a clear reason.&lt;/p&gt;
&lt;p&gt;The better way to evaluate Redis is by role, not by popularity. It becomes useful when your stack needs very fast ephemeral state, queue-friendly behavior, or a lightweight coordination layer that a general-purpose database should not be forced to handle.&lt;/p&gt;
&lt;h2 id="when-redis-is-actually-useful"&gt;When Redis is actually useful
&lt;/h2&gt;&lt;p&gt;Redis starts paying off when at least one of these patterns is real in your environment:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;a workflow engine needs queueing or broker-like behavior;&lt;/li&gt;
&lt;li&gt;response speed matters for temporary state or cached lookups;&lt;/li&gt;
&lt;li&gt;jobs or events should be coordinated outside the main transactional database;&lt;/li&gt;
&lt;li&gt;the stack has grown past “one app, one database, no background load.”&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That is why Redis often appears next to automation tools rather than standalone business apps. In a stack like &lt;a class="link" href="https://blog.airat.top/p/n8n-self-hosted/" &gt;When Self-Hosted n8n Is the Better Choice&lt;/a&gt;, Redis is not decorative. It supports queue mode and helps separate workflow execution behavior from the primary relational store.&lt;/p&gt;
&lt;h2 id="what-redis-is-good-at"&gt;What Redis is good at
&lt;/h2&gt;&lt;h3 id="fast-temporary-state"&gt;Fast temporary state
&lt;/h3&gt;&lt;p&gt;Some data matters a lot for seconds or minutes, not forever. That includes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;short-lived coordination data;&lt;/li&gt;
&lt;li&gt;cached results;&lt;/li&gt;
&lt;li&gt;ephemeral job state;&lt;/li&gt;
&lt;li&gt;temporary locks or counters.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;These are poor fits for systems that should primarily optimize for durable relational data. Redis works well precisely because it handles short-lived, speed-sensitive state without pretending to be your main system of record.&lt;/p&gt;
&lt;h3 id="queue-oriented-workloads"&gt;Queue-oriented workloads
&lt;/h3&gt;&lt;p&gt;Redis becomes more valuable once your stack includes background processing, delayed work, or task distribution patterns.&lt;/p&gt;
&lt;p&gt;That is one reason it fits naturally beside automation and orchestration tools. If workflows need to be scheduled, buffered, or executed across separate workers, Redis often becomes part of the practical operating model.&lt;/p&gt;
&lt;h3 id="lightweight-infrastructure-glue"&gt;Lightweight infrastructure glue
&lt;/h3&gt;&lt;p&gt;Some components in a self-hosted stack need a fast coordination layer more than they need a full database. Redis is frequently useful in that middle zone between “just keep it in memory” and “model it permanently in Postgres.”&lt;/p&gt;
&lt;h2 id="when-redis-is-not-the-right-first-move"&gt;When Redis is not the right first move
&lt;/h2&gt;&lt;p&gt;Redis is easy to add and even easier to add too early.&lt;/p&gt;
&lt;p&gt;If your current system only needs:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;a durable relational database;&lt;/li&gt;
&lt;li&gt;simple application state;&lt;/li&gt;
&lt;li&gt;no background execution model;&lt;/li&gt;
&lt;li&gt;no meaningful cache pressure,&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;then &lt;a class="link" href="https://blog.airat.top/p/postgresql-self-hosted/" &gt;When Self-Hosted PostgreSQL Is the Right Default for Internal Tools&lt;/a&gt; is usually the better first decision.&lt;/p&gt;
&lt;p&gt;Redis should show up when a specific behavior justifies it, not because every modern stack is expected to have one.&lt;/p&gt;
&lt;h2 id="redis-versus-postgresql-in-practical-terms"&gt;Redis versus PostgreSQL in practical terms
&lt;/h2&gt;&lt;p&gt;This comparison matters because teams often ask whether they really need both.&lt;/p&gt;
&lt;p&gt;The short answer is: only when the roles are different.&lt;/p&gt;
&lt;p&gt;Use PostgreSQL when you need:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;durable relational data;&lt;/li&gt;
&lt;li&gt;application state that must survive and stay queryable;&lt;/li&gt;
&lt;li&gt;transactional correctness as a default.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Use Redis when you need:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;fast temporary state;&lt;/li&gt;
&lt;li&gt;queue or broker-like behavior;&lt;/li&gt;
&lt;li&gt;caching that reduces repeated work;&lt;/li&gt;
&lt;li&gt;coordination patterns that should not live in your main relational store.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That distinction becomes clearer as the stack matures.&lt;/p&gt;
&lt;h2 id="a-practical-starting-point"&gt;A practical starting point
&lt;/h2&gt;&lt;p&gt;If Redis already has a clear role in your architecture, start with &lt;a class="link" href="https://github.com/AiratTop/redis-self-hosted" target="_blank" rel="noopener"
 &gt;AiratTop/redis-self-hosted&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The repository gives you:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;a standalone Redis container;&lt;/li&gt;
&lt;li&gt;password-based authentication enabled by default;&lt;/li&gt;
&lt;li&gt;persistent storage under &lt;code&gt;./data/redis&lt;/code&gt;;&lt;/li&gt;
&lt;li&gt;healthchecks for readiness;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;shared_network&lt;/code&gt; compatibility for adjacent services.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;It is a pragmatic way to add Redis without turning it into an overbuilt cluster or a side project.&lt;/p&gt;
&lt;h2 id="where-redis-fits-in-a-stack-like-this"&gt;Where Redis fits in a stack like this
&lt;/h2&gt;&lt;p&gt;In the AiratTop ecosystem, Redis is most naturally connected to:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://blog.airat.top/p/n8n-self-hosted/" &gt;When Self-Hosted n8n Is the Better Choice&lt;/a&gt; for queue-backed automation execution;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://blog.airat.top/p/postgresql-self-hosted/" &gt;When Self-Hosted PostgreSQL Is the Right Default for Internal Tools&lt;/a&gt; as the durable data layer beside it;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://blog.airat.top/p/self-hosted-stack-for-ai-automation/" &gt;A Practical Self-Hosted Stack for AI, Automation, and Internal Tools&lt;/a&gt; as part of the broader system map.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That makes Redis a supporting component, not usually the center of the stack. Its value comes from improving how other services behave.&lt;/p&gt;
&lt;h2 id="the-main-risk-with-redis"&gt;The main risk with Redis
&lt;/h2&gt;&lt;p&gt;The biggest mistake is treating Redis like a general-purpose answer to every performance problem.&lt;/p&gt;
&lt;p&gt;If a team starts putting critical durable data into a service that was introduced for speed and coordination, the architecture usually becomes harder to reason about. Redis is excellent within its role. Outside that role, it often creates unnecessary complexity.&lt;/p&gt;
&lt;h2 id="summary"&gt;Summary
&lt;/h2&gt;&lt;p&gt;Self-hosted Redis starts paying off when your stack needs fast ephemeral state, queue support, or lightweight coordination that a relational database should not be forced to handle.&lt;/p&gt;
&lt;p&gt;If you do not have that need yet, skip it. If you do, Redis is one of the cleanest supporting layers you can add around automation and internal systems.&lt;/p&gt;
&lt;p&gt;If you are working through a similar problem and want help turning it into a practical system, you can contact me through &lt;a class="link" href="https://airat.top" target="_blank" rel="noopener"
 &gt;airat.top&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="sources"&gt;Sources
&lt;/h2&gt;</description></item><item><title>When Self-Hosted PostgreSQL Is the Right Default for Internal Tools</title><link>https://blog.airat.top/p/postgresql-self-hosted/</link><pubDate>Wed, 04 Mar 2026 00:01:00 +0300</pubDate><guid>https://blog.airat.top/p/postgresql-self-hosted/</guid><description>&lt;img src="https://blog.airat.top/p/postgresql-self-hosted/cover.webp" alt="Featured image of post When Self-Hosted PostgreSQL Is the Right Default for Internal Tools" /&gt;&lt;p&gt;When teams start building internal tools, automation workflows, or operational dashboards, the first database decision usually does not need to be clever. It needs to be dependable.&lt;/p&gt;
&lt;p&gt;That is why PostgreSQL is often the right default. It gives you a mature transactional database, broad ecosystem support, and a predictable fit for the kind of systems that sit underneath automation, analytics, and business operations.&lt;/p&gt;
&lt;h2 id="why-postgresql-is-such-a-common-default"&gt;Why PostgreSQL is such a common default
&lt;/h2&gt;&lt;p&gt;The main reason is not hype. It is versatility.&lt;/p&gt;
&lt;p&gt;PostgreSQL fits a wide range of workloads that show up in practical systems:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;application state for internal tools;&lt;/li&gt;
&lt;li&gt;metadata and workflow storage for automation platforms;&lt;/li&gt;
&lt;li&gt;backing storage for dashboards and BI tools;&lt;/li&gt;
&lt;li&gt;transactional data for line-of-business systems;&lt;/li&gt;
&lt;li&gt;integration-heavy projects where correctness matters more than novelty.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That range matters because most teams do not want a different database for every new project. They want one database they can trust while the system is still evolving.&lt;/p&gt;
&lt;h2 id="when-postgresql-is-the-better-choice"&gt;When PostgreSQL is the better choice
&lt;/h2&gt;&lt;p&gt;Self-hosted PostgreSQL becomes the right answer when:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;you need a general-purpose operational database;&lt;/li&gt;
&lt;li&gt;your stack includes tools that already work well with Postgres;&lt;/li&gt;
&lt;li&gt;reliability and ecosystem compatibility matter more than engine specialization;&lt;/li&gt;
&lt;li&gt;you want one familiar foundation for multiple internal services.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;This is especially relevant if your environment already includes or will likely include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://blog.airat.top/p/n8n-self-hosted/" &gt;When Self-Hosted n8n Is the Better Choice&lt;/a&gt;;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://blog.airat.top/p/metabase-self-hosted/" &gt;When Self-Hosted Metabase Is Enough for Business Intelligence&lt;/a&gt;;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://blog.airat.top/p/authentik-self-hosted/" &gt;When Self-Hosted Authentik Becomes Worth It&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In those cases, Postgres is not just “a database.” It becomes one of the practical default building blocks in the stack.&lt;/p&gt;
&lt;h2 id="what-postgresql-does-well-in-this-ecosystem"&gt;What PostgreSQL does well in this ecosystem
&lt;/h2&gt;&lt;h3 id="it-supports-operational-workloads-cleanly"&gt;It supports operational workloads cleanly
&lt;/h3&gt;&lt;p&gt;A lot of internal systems do not need exotic scale on day one. They need transactional consistency, predictable behavior, and a data model that can survive changing requirements.&lt;/p&gt;
&lt;p&gt;PostgreSQL is good at that. It gives you a stable base for tools that handle real workflows, user state, scheduled jobs, or business records.&lt;/p&gt;
&lt;h3 id="it-integrates-well-with-other-self-hosted-services"&gt;It integrates well with other self-hosted services
&lt;/h3&gt;&lt;p&gt;The value of PostgreSQL increases when your stack is already service-oriented. A shared Docker network and a clear container name make it easy for adjacent services to use the same database layer without awkward networking.&lt;/p&gt;
&lt;p&gt;That matters in an environment where tools are intentionally composed rather than bought as one SaaS bundle.&lt;/p&gt;
&lt;h3 id="it-is-easier-to-justify-than-a-specialized-engine-too-early"&gt;It is easier to justify than a specialized engine too early
&lt;/h3&gt;&lt;p&gt;Teams sometimes reach for specialized databases before the workload demands it. That can be reasonable later, but it is often premature at the start.&lt;/p&gt;
&lt;p&gt;If your problem is still “we need a solid relational store for internal systems,” PostgreSQL is usually the disciplined answer.&lt;/p&gt;
&lt;h2 id="what-postgresql-does-not-solve"&gt;What PostgreSQL does not solve
&lt;/h2&gt;&lt;p&gt;Choosing PostgreSQL does not remove the rest of the operational responsibility.&lt;/p&gt;
&lt;p&gt;You still need:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;backups and restore testing;&lt;/li&gt;
&lt;li&gt;health checks and startup sequencing;&lt;/li&gt;
&lt;li&gt;credential management;&lt;/li&gt;
&lt;li&gt;performance tuning only when workload actually requires it;&lt;/li&gt;
&lt;li&gt;observability around storage growth and query behavior.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;It also does not replace engines that exist for very different jobs. For example:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://blog.airat.top/p/clickhouse-self-hosted/" &gt;When Self-Hosted ClickHouse Starts Making Sense&lt;/a&gt; is about analytical workloads, not transactional defaults;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://blog.airat.top/p/redis-self-hosted/" &gt;When Self-Hosted Redis Starts Paying Off&lt;/a&gt; is about ephemeral state, queueing, and speed-sensitive patterns;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://blog.airat.top/p/qdrant-self-hosted/" &gt;When Self-Hosted Qdrant Is the Better Fit for Retrieval and Internal AI Search&lt;/a&gt; is about vector retrieval.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The point is not that PostgreSQL wins every comparison. The point is that it wins many default decisions before specialization is justified.&lt;/p&gt;
&lt;h2 id="a-practical-starting-point"&gt;A practical starting point
&lt;/h2&gt;&lt;p&gt;If you want a clean Docker baseline, start with &lt;a class="link" href="https://github.com/AiratTop/postgresql-self-hosted" target="_blank" rel="noopener"
 &gt;AiratTop/postgresql-self-hosted&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The repository gives you:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;a standalone PostgreSQL container;&lt;/li&gt;
&lt;li&gt;persistent storage under &lt;code&gt;./data/psql&lt;/code&gt;;&lt;/li&gt;
&lt;li&gt;helper scripts for restart, update, and backup;&lt;/li&gt;
&lt;li&gt;a healthcheck for better startup behavior;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;shared_network&lt;/code&gt; compatibility so other services can connect using the container name.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The host port mapping is also explicit: port &lt;code&gt;5433&lt;/code&gt; on the host maps to PostgreSQL &lt;code&gt;5432&lt;/code&gt; in the container. That is a practical detail when the same machine may already have another local PostgreSQL instance.&lt;sup id="fnref:1"&gt;&lt;a href="#fn:1" class="footnote-ref" role="doc-noteref"&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;h2 id="where-postgresql-usually-fits-in-rollout-order"&gt;Where PostgreSQL usually fits in rollout order
&lt;/h2&gt;&lt;p&gt;I would usually introduce PostgreSQL early in a self-hosted stack if any of the following are true:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;you are building multiple small internal tools;&lt;/li&gt;
&lt;li&gt;automation workflows need reliable application storage;&lt;/li&gt;
&lt;li&gt;another service in the stack already depends on Postgres;&lt;/li&gt;
&lt;li&gt;you want to keep the initial data layer boring and dependable.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That is often a better move than waiting until three services each need their own improvised storage choice.&lt;/p&gt;
&lt;h2 id="summary"&gt;Summary
&lt;/h2&gt;&lt;p&gt;Self-hosted PostgreSQL is usually the right default when you need one reliable relational database for internal tools, automation backends, and operational systems.&lt;/p&gt;
&lt;p&gt;It is not the answer to every data problem, but it is one of the best first answers in a self-hosted stack. Start there when the workload is general-purpose, then specialize only when the next layer has a clear reason to exist.&lt;/p&gt;
&lt;p&gt;If you are working through a similar problem and want help turning it into a practical system, you can contact me through &lt;a class="link" href="https://airat.top" target="_blank" rel="noopener"
 &gt;airat.top&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="sources"&gt;Sources
&lt;/h2&gt;&lt;div class="footnotes" role="doc-endnotes"&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id="fn:1"&gt;
&lt;p&gt;&lt;a class="link" href="https://github.com/AiratTop/postgresql-self-hosted" target="_blank" rel="noopener"
 &gt;AiratTop/postgresql-self-hosted&lt;/a&gt;&amp;#160;&lt;a href="#fnref:1" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;</description></item><item><title>When Self-Hosted Authentik Becomes Worth It</title><link>https://blog.airat.top/p/authentik-self-hosted/</link><pubDate>Tue, 03 Mar 2026 00:01:00 +0300</pubDate><guid>https://blog.airat.top/p/authentik-self-hosted/</guid><description>&lt;img src="https://blog.airat.top/p/authentik-self-hosted/cover.webp" alt="Featured image of post When Self-Hosted Authentik Becomes Worth It" /&gt;&lt;p&gt;Identity infrastructure is easy to postpone when you only have one or two services. It becomes much harder to ignore once internal dashboards, automation tools, admin panels, and public-facing apps start multiplying.&lt;/p&gt;
&lt;p&gt;That is the point where self-hosted Authentik becomes interesting. Not because every stack needs enterprise-grade IAM, but because there is a moment when ad hoc credentials, scattered login rules, and inconsistent access patterns stop being acceptable.&lt;/p&gt;
&lt;h2 id="when-authentik-starts-solving-a-real-problem"&gt;When Authentik starts solving a real problem
&lt;/h2&gt;&lt;p&gt;Authentik is worth evaluating when at least one of these conditions is already true:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;several internal services need a consistent login experience;&lt;/li&gt;
&lt;li&gt;access control is becoming difficult to manage service by service;&lt;/li&gt;
&lt;li&gt;you need stronger authentication for administrative or sensitive tools;&lt;/li&gt;
&lt;li&gt;you want identity to be part of your own infrastructure instead of an external dependency.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This is common in self-hosted environments that already include automation, dashboards, and internal apps. A stack with n8n, Metabase, WordPress admin, internal tools, or monitoring surfaces eventually needs a cleaner identity layer than “everyone has local accounts everywhere.”&lt;/p&gt;
&lt;h2 id="why-identity-matters-more-in-a-self-hosted-stack"&gt;Why identity matters more in a self-hosted stack
&lt;/h2&gt;&lt;p&gt;Self-hosting gives you control, but it also gives you responsibility. The moment you publish services under your own domain, you are deciding how users reach them, how sessions are managed, and how access is revoked.&lt;/p&gt;
&lt;p&gt;That is why identity is not just a login screen problem. It affects:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;operational risk;&lt;/li&gt;
&lt;li&gt;access reviews;&lt;/li&gt;
&lt;li&gt;onboarding and offboarding;&lt;/li&gt;
&lt;li&gt;MFA policy;&lt;/li&gt;
&lt;li&gt;exposure of internal applications;&lt;/li&gt;
&lt;li&gt;consistency across the stack.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If you are already using &lt;a class="link" href="https://blog.airat.top/p/caddy-self-hosted/" &gt;When Self-Hosted Caddy Is Enough for Your Reverse Proxy Layer&lt;/a&gt; as the front door, Authentik becomes the natural next layer when routing alone is no longer enough.&lt;/p&gt;
&lt;h2 id="what-makes-authentik-useful"&gt;What makes Authentik useful
&lt;/h2&gt;&lt;h3 id="it-centralizes-access-logic"&gt;It centralizes access logic
&lt;/h3&gt;&lt;p&gt;Without centralized identity, each service becomes its own access island. That usually leads to duplicated users, inconsistent password policy, weak offboarding, and a lot of manual cleanup.&lt;/p&gt;
&lt;p&gt;Authentik is valuable because it lets you move access control to one place instead of rebuilding the same decisions in every app.&lt;/p&gt;
&lt;h3 id="it-supports-a-wider-set-of-integration-patterns"&gt;It supports a wider set of integration patterns
&lt;/h3&gt;&lt;p&gt;One reason Authentik stands out in self-hosted environments is protocol breadth. When a stack includes different kinds of tools, flexibility matters more than elegance.&lt;/p&gt;
&lt;p&gt;Authentik&amp;rsquo;s support for OAuth 2.0, SAML, LDAP, and related identity patterns makes it useful when your environment is not standardized around one application model.&lt;sup id="fnref:1"&gt;&lt;a href="#fn:1" class="footnote-ref" role="doc-noteref"&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;h3 id="it-fits-both-internal-apps-and-published-services"&gt;It fits both internal apps and published services
&lt;/h3&gt;&lt;p&gt;For many teams, the real value is not just SSO. It is the ability to put a cleaner identity boundary around services that were previously exposed too casually.&lt;/p&gt;
&lt;p&gt;That can include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;automation tools like &lt;a class="link" href="https://blog.airat.top/p/n8n-self-hosted/" &gt;When Self-Hosted n8n Is the Better Choice&lt;/a&gt;;&lt;/li&gt;
&lt;li&gt;analytics surfaces like &lt;a class="link" href="https://blog.airat.top/p/metabase-self-hosted/" &gt;When Self-Hosted Metabase Is Enough for Business Intelligence&lt;/a&gt;;&lt;/li&gt;
&lt;li&gt;admin interfaces behind &lt;a class="link" href="https://blog.airat.top/p/caddy-self-hosted/" &gt;When Self-Hosted Caddy Is Enough for Your Reverse Proxy Layer&lt;/a&gt;;&lt;/li&gt;
&lt;li&gt;selected public or semi-private applications that need stronger access control.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="when-self-hosted-authentik-is-better-than-just-use-app-logins"&gt;When self-hosted Authentik is better than “just use app logins”
&lt;/h2&gt;&lt;p&gt;You usually do not need Authentik on day one. Local authentication inside each application is often enough at the beginning.&lt;/p&gt;
&lt;p&gt;The case for Authentik gets much stronger when:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;the number of services grows;&lt;/li&gt;
&lt;li&gt;administrative access becomes more sensitive;&lt;/li&gt;
&lt;li&gt;different people need different levels of access;&lt;/li&gt;
&lt;li&gt;password sprawl becomes an operational liability.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;At that point, continuing with separate app logins may look simpler, but it often creates more long-term friction than adding a centralized identity layer.&lt;/p&gt;
&lt;h2 id="what-self-hosting-authentik-does-not-remove"&gt;What self-hosting Authentik does not remove
&lt;/h2&gt;&lt;p&gt;Running your own IAM service does not magically make identity easy.&lt;/p&gt;
&lt;p&gt;You still need to think about:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;backup and recovery for the PostgreSQL backend;&lt;/li&gt;
&lt;li&gt;secret management;&lt;/li&gt;
&lt;li&gt;SMTP and notification reliability;&lt;/li&gt;
&lt;li&gt;policy design and group structure;&lt;/li&gt;
&lt;li&gt;whether your reverse proxy and outpost model are configured correctly;&lt;/li&gt;
&lt;li&gt;what happens if the identity layer itself is unavailable.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This is why Authentik should be introduced when the need is real, not just because IAM sounds “more production-ready.”&lt;/p&gt;
&lt;h2 id="a-practical-starting-point"&gt;A practical starting point
&lt;/h2&gt;&lt;p&gt;If you want a reusable baseline, start with &lt;a class="link" href="https://github.com/AiratTop/authentik-self-hosted" target="_blank" rel="noopener"
 &gt;AiratTop/authentik-self-hosted&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The repository already includes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Authentik server and worker services;&lt;/li&gt;
&lt;li&gt;PostgreSQL as the backing store;&lt;/li&gt;
&lt;li&gt;persistent runtime and media data directories;&lt;/li&gt;
&lt;li&gt;helper scripts for restart, update, and backup;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;shared_network&lt;/code&gt; compatibility so Authentik can sit naturally inside the wider stack.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That makes it a useful starting point for teams who want to own the identity layer without designing everything from scratch.&lt;/p&gt;
&lt;h2 id="where-i-would-place-authentik-in-the-rollout-order"&gt;Where I would place Authentik in the rollout order
&lt;/h2&gt;&lt;p&gt;I would not start a small stack with IAM first. Usually the better order is:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;publish services cleanly with Caddy;&lt;/li&gt;
&lt;li&gt;confirm which services actually need shared access management;&lt;/li&gt;
&lt;li&gt;introduce Authentik when access rules and account sprawl become painful;&lt;/li&gt;
&lt;li&gt;connect the most sensitive services first.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;That sequence keeps the identity layer tied to real operational need instead of abstract future-proofing.&lt;/p&gt;
&lt;h2 id="summary"&gt;Summary
&lt;/h2&gt;&lt;p&gt;Self-hosted Authentik becomes worth it when identity is no longer a detail. If your stack now includes several internal or semi-private services, stronger authentication, centralized access, and cleaner offboarding often justify the extra infrastructure.&lt;/p&gt;
&lt;p&gt;If you are still at the “one or two services” stage, local logins may be enough. But once access control starts creating friction, Authentik is one of the clearest ways to bring structure back to the stack.&lt;/p&gt;
&lt;p&gt;If you are working through a similar problem and want help turning it into a practical system, you can contact me through &lt;a class="link" href="https://airat.top" target="_blank" rel="noopener"
 &gt;airat.top&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="sources"&gt;Sources
&lt;/h2&gt;&lt;div class="footnotes" role="doc-endnotes"&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id="fn:1"&gt;
&lt;p&gt;&lt;a class="link" href="https://docs.goauthentik.io/" target="_blank" rel="noopener"
 &gt;Authentik Documentation&lt;/a&gt;&amp;#160;&lt;a href="#fnref:1" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;</description></item><item><title>When Self-Hosted Caddy Is Enough for Your Reverse Proxy Layer</title><link>https://blog.airat.top/p/caddy-self-hosted/</link><pubDate>Mon, 02 Mar 2026 00:01:00 +0300</pubDate><guid>https://blog.airat.top/p/caddy-self-hosted/</guid><description>&lt;img src="https://blog.airat.top/p/caddy-self-hosted/cover.webp" alt="Featured image of post When Self-Hosted Caddy Is Enough for Your Reverse Proxy Layer" /&gt;&lt;p&gt;Not every self-hosted environment needs an elaborate ingress layer. Many teams just need one reliable place to terminate TLS, route traffic to the right containers, and publish services without turning edge infrastructure into a project of its own.&lt;/p&gt;
&lt;p&gt;That is where Caddy is often enough. It gives you automatic HTTPS, a clean configuration model, and a practical fit for Docker-based stacks where speed and clarity matter more than enterprise edge complexity.&lt;/p&gt;
&lt;h2 id="when-caddy-is-the-right-level-of-infrastructure"&gt;When Caddy is the right level of infrastructure
&lt;/h2&gt;&lt;p&gt;Caddy is a strong choice when your edge layer has a straightforward job:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;publish a small or medium set of services;&lt;/li&gt;
&lt;li&gt;terminate TLS automatically;&lt;/li&gt;
&lt;li&gt;reverse-proxy traffic to containers on one Docker network;&lt;/li&gt;
&lt;li&gt;keep the routing model readable by one operator or a small team.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That is exactly the kind of environment many self-hosted stacks start with. You have applications like n8n, Metabase, WordPress, Gatus, or internal dashboards. They need stable public endpoints, but they do not need a full Kubernetes ingress stack or a specialized API gateway.&lt;/p&gt;
&lt;p&gt;In that situation, simpler usually wins.&lt;/p&gt;
&lt;h2 id="what-caddy-does-especially-well"&gt;What Caddy does especially well
&lt;/h2&gt;&lt;h3 id="automatic-https-removes-routine-friction"&gt;Automatic HTTPS removes routine friction
&lt;/h3&gt;&lt;p&gt;Certificate handling is one of the easiest ways to add avoidable operational work. Caddy&amp;rsquo;s automatic HTTPS model is useful because it takes a common maintenance problem and makes it largely disappear in normal cases.&lt;/p&gt;
&lt;p&gt;That matters when you are publishing services that should be reachable and trustworthy but are not important enough to justify a separate certificate management workflow.&lt;/p&gt;
&lt;h3 id="reverse-proxy-configuration-stays-readable"&gt;Reverse proxy configuration stays readable
&lt;/h3&gt;&lt;p&gt;For small and mid-size stacks, readability is operational value. If every route requires heavy templating or a large control plane, simple changes become slower than they should be.&lt;/p&gt;
&lt;p&gt;With Caddy, the configuration surface stays close to the actual routing intent:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;map a hostname;&lt;/li&gt;
&lt;li&gt;proxy to a service;&lt;/li&gt;
&lt;li&gt;add the headers or behaviors you need;&lt;/li&gt;
&lt;li&gt;reload the config.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That is a good fit for stacks where one person or a small technical team owns the infrastructure.&lt;/p&gt;
&lt;h3 id="it-works-naturally-in-a-shared-docker-network"&gt;It works naturally in a shared Docker network
&lt;/h3&gt;&lt;p&gt;The AiratTop repository is built around &lt;code&gt;shared_network&lt;/code&gt;, which makes Caddy more useful as a stack component rather than a standalone web server. Once services join the same network, Caddy can route to them by container name and become the stable front door for the rest of the environment.&lt;/p&gt;
&lt;p&gt;That becomes practical very quickly with services like:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://blog.airat.top/p/n8n-self-hosted/" &gt;When Self-Hosted n8n Is the Better Choice&lt;/a&gt;;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://blog.airat.top/p/wordpress-self-hosted/" &gt;When Self-Hosted WordPress Still Makes Business Sense&lt;/a&gt;;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://blog.airat.top/p/metabase-self-hosted/" &gt;When Self-Hosted Metabase Is Enough for Business Intelligence&lt;/a&gt;;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://blog.airat.top/p/gatus-self-hosted/" &gt;When Gatus Is Better Than a Full Monitoring Stack&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="where-caddy-fits-in-the-stack"&gt;Where Caddy fits in the stack
&lt;/h2&gt;&lt;p&gt;The easiest mistake is treating a reverse proxy as if it solves security and access design by itself.&lt;/p&gt;
&lt;p&gt;Caddy is your edge routing layer. It is not your identity layer, and it is not your application policy model.&lt;/p&gt;
&lt;p&gt;That distinction matters:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Caddy decides how traffic reaches services.&lt;/li&gt;
&lt;li&gt;Identity services decide who is allowed through.&lt;/li&gt;
&lt;li&gt;Monitoring and uptime tools decide whether the published service is healthy.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That is why Caddy often pairs well with &lt;a class="link" href="https://blog.airat.top/p/authentik-self-hosted/" &gt;When Self-Hosted Authentik Becomes Worth It&lt;/a&gt;. One gives you clean routing and TLS. The other gives you centralized access control when the stack grows beyond a few public endpoints.&lt;/p&gt;
&lt;h2 id="when-caddy-is-better-than-something-heavier"&gt;When Caddy is better than something heavier
&lt;/h2&gt;&lt;p&gt;Caddy usually wins when:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;your routing rules are still understandable without a platform team;&lt;/li&gt;
&lt;li&gt;you want automatic TLS with low overhead;&lt;/li&gt;
&lt;li&gt;your services mostly live on one server or one Docker-centric environment;&lt;/li&gt;
&lt;li&gt;you value fast changes and low operational drag.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;This is often the right place to be for founders, operators, solo builders, and small technical teams. The edge layer should support delivery, not become the main engineering problem.&lt;/p&gt;
&lt;h2 id="when-caddy-is-not-enough"&gt;When Caddy is not enough
&lt;/h2&gt;&lt;p&gt;Caddy is not the best answer if your edge layer has already become a more specialized system.&lt;/p&gt;
&lt;p&gt;For example, you may need something heavier if you are dealing with:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;complex multi-cluster routing;&lt;/li&gt;
&lt;li&gt;deep enterprise auth policies enforced at many layers;&lt;/li&gt;
&lt;li&gt;advanced API management requirements;&lt;/li&gt;
&lt;li&gt;highly customized load-balancing behavior across many environments;&lt;/li&gt;
&lt;li&gt;infrastructure patterns that are already standardized around another platform.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That does not mean Caddy is weak. It means its strength is clarity. If your environment has moved beyond that operating model, another tool may fit better.&lt;/p&gt;
&lt;h2 id="a-practical-starting-point"&gt;A practical starting point
&lt;/h2&gt;&lt;p&gt;If your goal is to publish Docker services cleanly without overbuilding the edge layer, the repository to start from is &lt;a class="link" href="https://github.com/AiratTop/caddy-self-hosted" target="_blank" rel="noopener"
 &gt;AiratTop/caddy-self-hosted&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The template already gives you:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;a Docker Compose setup based on the official Caddy image;&lt;/li&gt;
&lt;li&gt;persistent runtime and certificate storage;&lt;/li&gt;
&lt;li&gt;a &lt;code&gt;config&lt;/code&gt; directory for your &lt;code&gt;Caddyfile&lt;/code&gt;;&lt;/li&gt;
&lt;li&gt;helper scripts for restart, update, and reload;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;shared_network&lt;/code&gt; compatibility so other services can sit behind the same proxy.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That is enough to make Caddy operationally useful very quickly.&lt;/p&gt;
&lt;h2 id="how-i-would-position-caddy-in-a-real-rollout"&gt;How I would position Caddy in a real rollout
&lt;/h2&gt;&lt;p&gt;For most small self-hosted environments, I would treat Caddy as the default front door until there is a real reason not to.&lt;/p&gt;
&lt;p&gt;The rollout usually looks like this:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;publish one or two services with clean hostnames;&lt;/li&gt;
&lt;li&gt;confirm certificate issuance and routing behavior;&lt;/li&gt;
&lt;li&gt;add uptime visibility through &lt;a class="link" href="https://blog.airat.top/p/gatus-self-hosted/" &gt;When Gatus Is Better Than a Full Monitoring Stack&lt;/a&gt; or broader monitoring through &lt;a class="link" href="https://blog.airat.top/p/monitoring-self-hosted/" &gt;When Self-Hosted Prometheus and Grafana Are the Right Monitoring Stack&lt;/a&gt;;&lt;/li&gt;
&lt;li&gt;add centralized identity through &lt;a class="link" href="https://blog.airat.top/p/authentik-self-hosted/" &gt;When Self-Hosted Authentik Becomes Worth It&lt;/a&gt; when access control becomes more important.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;That sequence keeps the edge layer simple while the rest of the stack matures.&lt;/p&gt;
&lt;h2 id="summary"&gt;Summary
&lt;/h2&gt;&lt;p&gt;Self-hosted Caddy is the right choice when you need a reverse proxy that solves the actual problem in front of you: publish services, terminate TLS, and keep routing manageable.&lt;/p&gt;
&lt;p&gt;If the job is still that simple, there is no prize for choosing something heavier. Start with Caddy, keep the edge layer readable, and let the rest of the stack evolve around real requirements.&lt;/p&gt;
&lt;p&gt;If you are working through a similar problem and want help turning it into a practical system, you can contact me through &lt;a class="link" href="https://airat.top" target="_blank" rel="noopener"
 &gt;airat.top&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="sources"&gt;Sources
&lt;/h2&gt;</description></item></channel></rss>