<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[🚀 OpenBao on Cloudron: Community Package now available]]></title><description><![CDATA[<blockquote>
<blockquote>
<p dir="auto"><strong>TL;DR:</strong> <strong>OpenBao</strong> is the Linux Foundation fork of HashiCorp Vault: a central, audited place to store, generate and control access to secrets (API keys, passwords, certificates), with a web UI, CLI and Vault-compatible HTTP API. This package ships OpenBao 2.6.1 on integrated raft storage with <strong>auto-unseal</strong>: it initialises itself on first start and comes back unsealed and serving after every restart, update and restore — which matters because Cloudron restarts apps unattended, and a Vault that seals itself on every restart is an ornament. Backups ride on hourly raft snapshots (OpenBao's own supported restore mechanism), and the health check reports a sealed instance as unhealthy. Manual-unseal (Shamir) mode is available for operators who want the key material off the server. Verified on Cloudron 9.2.0; unofficial and community-maintained.</p>
</blockquote>
<h3>Links</h3>
<ul>
<li><img src="https://forum.cloudron.io/assets/plugins/nodebb-plugin-emoji/emoji/android/1f3e0.png?v=63dea4eef9f" class="not-responsive emoji emoji-android emoji--house" style="height:23px;width:auto;vertical-align:middle" title="🏠" alt="🏠" /> Project homepage: <a href="https://openbao.org" target="_blank" rel="noopener noreferrer nofollow ugc">https://openbao.org</a></li>
<li><img src="https://forum.cloudron.io/assets/plugins/nodebb-plugin-emoji/emoji/android/1f4da.png?v=63dea4eef9f" class="not-responsive emoji emoji-android emoji--books" style="height:23px;width:auto;vertical-align:middle" title="📚" alt="📚" /> Docs: <a href="https://openbao.org/docs/" target="_blank" rel="noopener noreferrer nofollow ugc">https://openbao.org/docs/</a></li>
<li><img src="https://forum.cloudron.io/assets/plugins/nodebb-plugin-emoji/emoji/android/1f4e6.png?v=63dea4eef9f" class="not-responsive emoji emoji-android emoji--package" style="height:23px;width:auto;vertical-align:middle" title="📦" alt="📦" /> Upstream repo: <a href="https://github.com/openbao/openbao" target="_blank" rel="noopener noreferrer nofollow ugc">https://github.com/openbao/openbao</a></li>
<li>🧱 Cloudron package repo: <a href="https://github.com/OrcVole/openbao-cloudron" target="_blank" rel="noopener noreferrer nofollow ugc">https://github.com/OrcVole/openbao-cloudron</a></li>
<li><img src="https://forum.cloudron.io/assets/plugins/nodebb-plugin-emoji/emoji/android/1f433.png?v=63dea4eef9f" class="not-responsive emoji emoji-android emoji--whale" style="height:23px;width:auto;vertical-align:middle" title="🐳" alt="🐳" /> Container image: <code>ghcr.io/orcvole/openbao-cloudron</code></li>
</ul>
<p dir="auto">No public demo, because a secrets manager is the last thing anyone should try on someone else's instance.</p>
<hr />
<h3><img src="https://forum.cloudron.io/assets/plugins/nodebb-plugin-emoji/emoji/android/1f4e5.png?v=63dea4eef9f" class="not-responsive emoji emoji-android emoji--inbox_tray" style="height:23px;width:auto;vertical-align:middle" title="📥" alt="📥" /> How to install</h3>
<p dir="auto">From the dashboard: click <strong>Add custom app</strong> (top right in the App Store), choose <strong>Community app</strong>, and paste this URL:</p>
<pre><code>https://raw.githubusercontent.com/OrcVole/openbao-cloudron/main/CloudronVersions.json
</code></pre>
<p dir="auto"><img src="https://forum.cloudron.io/assets/uploads/files/1782552307466-community-package.jpeg" alt="Add custom app, then Community app" class=" img-fluid img-markdown" /></p>
<p dir="auto"><img src="https://forum.cloudron.io/assets/uploads/files/1782552321764-cloudronversions.jpeg" alt="Paste the CloudronVersions.json URL" class=" img-fluid img-markdown" /></p>
<p dir="auto">Apps installed this way receive automatic updates. It is also listed in the Community Apps directory (<a href="http://ca.cloudron.io" target="_blank" rel="noopener noreferrer nofollow ugc">ca.cloudron.io</a>), or from the CLI:</p>
<pre><code class="language-bash">cloudron install \
  --versions-url https://raw.githubusercontent.com/OrcVole/openbao-cloudron/main/CloudronVersions.json \
  --location bao.example.com
</code></pre>
<p dir="auto"><strong>Requirements:</strong> 1 GB RAM default (measured peak was 85 MiB under a 1500-secret soak), no database addon, no extra subdomain, amd64 only. Works with or without Cloudron user management.</p>
<p dir="auto"><strong>First run:</strong> no wizard, nothing to unseal. The app arrives initialised and serving, with a KV v2 secrets engine at <code>secret/</code>, a file audit device enabled, and credentials in <code>/app/data/.secrets</code> (File Manager or Web Terminal). Log in with method <strong>Token</strong> using the root token from that directory, or with <strong>OIDC</strong> if installed with Cloudron user management. Then do three things:</p>
<ul>
<li>Copy <code>/app/data/.secrets</code> off the server (root token, recovery keys, unseal key).</li>
<li><strong>Turn on backup encryption</strong> (Settings → Backups). The unseal key rides in every backup, so this is part of the security model, not an optional extra.</li>
<li>Create your own admin auth method (userpass, for example) and stop using the root token day to day.</li>
</ul>
<p dir="auto">Signed in with SSO and the vault looks empty? That is the policy above at work, not data loss: default cannot list or read anything, so the UI shows an empty secrets engine even when secret/ is full. The fix is one grant, run in the app's Web Terminal:</p>
<p dir="auto">export BAO_ADDR=<a href="http://127.0.0.1:8200" target="_blank" rel="noopener noreferrer nofollow ugc">http://127.0.0.1:8200</a> BAO_TOKEN=$(cat /app/data/.secrets/root-token)<br />
bao policy write readers - &lt;&lt;'EOF'<br />
path "secret/data/<em>"     { capabilities = ["read"] }<br />
path "secret/metadata/</em>" { capabilities = ["read", "list"] }<br />
EOF<br />
bao write auth/oidc/role/cloudron token_policies="default,readers"</p>
<p dir="auto">The metadata line is what makes the tree visible — the KV v2 UI browses via secret/metadata/, so a grant on secret/data/ alone still shows nothing. Then log out and back in: policies attach at login, so an existing session keeps its old zero-access token. The grant survives restarts and updates, and gives every Cloudron user read-only sight of everything under secret/; scope the paths tighter, or use identity groups, for anything finer.<br />
<strong>Status:</strong> verified on Cloudron 9.2.0 — zero-touch initialisation, restart auto-unseal, image update, in-place restore, clone rebuilt from snapshot, hourly snapshots plus a fresh one during every backup, SSO sign-in in a real browser, memory soak. All pass; local smoke suite 27 of 27.</p>
<hr />
<h3><img src="https://forum.cloudron.io/assets/plugins/nodebb-plugin-emoji/emoji/android/1f464.png?v=63dea4eef9f" class="not-responsive emoji emoji-android emoji--bust_in_silhouette" style="height:23px;width:auto;vertical-align:middle" title="👤" alt="👤" /> What it does, and the trade-off</h3>
<p dir="auto">OpenBao holds secrets behind an authenticated, policy-controlled, audited API. Instead of a <code>.env</code> file on six machines, applications fetch what they need at run time, every access is logged, and you revoke or rotate in one place. The API is Vault-compatible, so existing client libraries, Terraform providers and CLI habits work unchanged.</p>
<p dir="auto"><strong>Auto-unseal, stated honestly.</strong> This package uses OpenBao's built-in <code>static</code> seal, so the 32-byte unseal key lives on the same server as the data it decrypts, and inside every backup. A stolen <strong>encrypted</strong> Cloudron backup is safe; a stolen <strong>unencrypted</strong> backup or disk image is readable. Nothing protects against a hostile root user on the box itself — true of every seal without an external key manager. OpenBao's guidance is that a static seal fits "when an existing source of trust already exists in the operating environment"; on a Cloudron that is the server and its encrypted backups. If you would rather hold the key material yourself, set <code>OPENBAO_SEAL=shamir</code> before first start and unseal manually; migration between modes is documented in both directions. In Shamir mode the app honestly shows "not responding" after each restart until you unseal.</p>
<p dir="auto"><strong>Backups you can actually restore.</strong> The raft store is kept out of the live backup walk (copying a live memory-mapped database is not crash-consistent, and the failure is silent until you try to restore). Instead the package takes hourly raft snapshots — OpenBao's own supported mechanism — plus a fresh one at backup time, and those ride the Cloudron backup. After a restore or clone the app rebuilds from the newest snapshot and verifies the restored data. Update, in-place restore and clone were all exercised for real. The bounded cost: you can lose writes since the last snapshot, up to an hour; a manual pre-change snapshot command is documented.</p>
<p dir="auto"><strong>An honest dashboard.</strong> The health check hits <code>/v1/sys/health</code> with explicit status-code parameters, so a sealed instance reads as unhealthy and you get a notification. (The existing Vault package checks <code>/</code>, which returns 200 even when sealed, and it cannot auto-unseal — a sealed Vault shows green while serving nothing.)</p>
<p dir="auto"><strong>Cloudron SSO.</strong> With user management, Cloudron users sign in via OIDC and arrive with the <code>default</code> policy, which grants access to <strong>nothing</strong>; letting a user read a secret is a deliberate one-policy act by the operator (documented in the repo's INTEGRATIONS guide). The API stays open for machine clients with OpenBao's own auth, so nothing breaks.</p>
<p dir="auto"><strong>Caveats:</strong> raise the memory limit in Resources if you store a great deal (raft maps its database into memory); key rotation is a file operation plus restart, and keep an off-server copy of the old key because old snapshots need it; the CLI's own OIDC login flow cannot work here (it needs a localhost redirect) — humans use the UI or tokens, machines use AppRole.</p>
<hr />
<h3>🧰 Notes for packagers</h3>
<p dir="auto">The full write-up lives in the repo's <code>docs/</code>, but two traps will bite anyone deriving an OpenBao package from a Vault one: <code>file</code> storage is removed in OpenBao 2.7 (raft is the only production backend), and mlock is gone entirely, so a copied <code>disable_mlock</code> line is a <strong>fatal startup error</strong>. Two platform behaviours worth knowing: <code>backupCommand</code> runs in a separate temporary container with no <code>CLOUDRON_*</code> environment and discarded stdout, and <code>persistentDirs</code> survive updates and in-place restores but start empty on a clone — boot logic must handle both.</p>
<hr />
<h3><img src="https://forum.cloudron.io/assets/plugins/nodebb-plugin-emoji/emoji/android/1f517.png?v=63dea4eef9f" class="not-responsive emoji emoji-android emoji--link" style="height:23px;width:auto;vertical-align:middle" title="🔗" alt="🔗" /> Synergies</h3>
<ul>
<li>Any Cloudron app, script or CI job can fetch its secrets at start-up over the Vault-compatible API with AppRole credentials scoped to its own path; the INTEGRATIONS guide has copy-paste recipes, and same-box apps can call OpenBao's public origin directly (verified, hairpin included).</li>
<li>Every read lands in the audit log — something a <code>.env</code> file will never give you.</li>
<li>The transit engine gives apps encryption as a service without ever holding a key; Terraform's Vault provider, <code>hvac</code>, <code>node-vault</code> and both CLIs work unchanged.</li>
</ul>
<hr />
<p dir="auto">*This is an unofficial community package. It is not affiliated with, endorsed by, or supported by the OpenBao project, the Linux Foundation, or Cloudron.</p>
</blockquote>
]]></description><link>https://forum.cloudron.io/topic/15747/openbao-on-cloudron-community-package-now-available</link><generator>RSS for Node</generator><lastBuildDate>Mon, 24 Aug 2026 03:43:38 GMT</lastBuildDate><atom:link href="https://forum.cloudron.io/topic/15747.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 29 Jul 2026 11:40:37 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to 🚀 OpenBao on Cloudron: Community Package now available on Wed, 29 Jul 2026 18:48:20 GMT]]></title><description><![CDATA[<blockquote>
<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/timconsidine" aria-label="Profile: timconsidine">@<bdi>timconsidine</bdi></a> <a href="/post/127424">said</a>:</p>
<p dir="auto">a lot of this belongs in an app document, possibly README, but I think too long for that.</p>
</blockquote>
<p dir="auto">Yes, we were a bit rushed and kind of lumped things into one post rather than different documents. Your suggestions are good.</p>
]]></description><link>https://forum.cloudron.io/post/127426</link><guid isPermaLink="true">https://forum.cloudron.io/post/127426</guid><dc:creator><![CDATA[LoudLemur]]></dc:creator><pubDate>Wed, 29 Jul 2026 18:48:20 GMT</pubDate></item><item><title><![CDATA[Reply to 🚀 OpenBao on Cloudron: Community Package now available on Wed, 29 Jul 2026 18:46:48 GMT]]></title><description><![CDATA[<blockquote>
<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/robi" aria-label="Profile: robi">@<bdi>robi</bdi></a> <a href="/post/127420">said</a>:</p>
<p dir="auto">Could you kindly clean up all the extra carriage returns and verboseness?</p>
</blockquote>
<p dir="auto">You got it!</p>
<p dir="auto">It was rather long-winded. I have updated the post using a "less-is-more" approach, instead of a "more-is-more" approach!</p>
]]></description><link>https://forum.cloudron.io/post/127425</link><guid isPermaLink="true">https://forum.cloudron.io/post/127425</guid><dc:creator><![CDATA[LoudLemur]]></dc:creator><pubDate>Wed, 29 Jul 2026 18:46:48 GMT</pubDate></item><item><title><![CDATA[Reply to 🚀 OpenBao on Cloudron: Community Package now available on Wed, 29 Jul 2026 18:41:44 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/robi" aria-label="Profile: robi">@<bdi>robi</bdi></a> I agree<br />
<a class="plugin-mentions-user plugin-mentions-a" href="/user/loudlemur" aria-label="Profile: loudlemur">@<bdi>loudlemur</bdi></a> a lot of this belongs in an app document, possibly README, but I think too long for that. Maybe a <a href="http://PACKAGING.md" target="_blank" rel="noopener noreferrer nofollow ugc">PACKAGING.md</a> referenced by README or DESCRIPTION.<br />
I usually instruct agents to ‘be concise’.</p>
]]></description><link>https://forum.cloudron.io/post/127424</link><guid isPermaLink="true">https://forum.cloudron.io/post/127424</guid><dc:creator><![CDATA[timconsidine]]></dc:creator><pubDate>Wed, 29 Jul 2026 18:41:44 GMT</pubDate></item><item><title><![CDATA[Reply to 🚀 OpenBao on Cloudron: Community Package now available on Wed, 29 Jul 2026 18:26:50 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/loudlemur" aria-label="Profile: LoudLemur">@<bdi>LoudLemur</bdi></a> Thank you for the package.</p>
<p dir="auto">Could you kindly clean up all the extra carriage returns and verboseness? We don't need large chunks of repeating text and messages to their developers here.</p>
<p dir="auto">Simply asking your agent to be less verbose and save on tokens may save you money as well. Developing an agent skill can help associate anything related to posting here to be more in line with your voice and how the forum functions for us humans reading it.</p>
<p dir="auto">Your adjustments would be much appreciated.</p>
]]></description><link>https://forum.cloudron.io/post/127420</link><guid isPermaLink="true">https://forum.cloudron.io/post/127420</guid><dc:creator><![CDATA[robi]]></dc:creator><pubDate>Wed, 29 Jul 2026 18:26:50 GMT</pubDate></item></channel></rss>