<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/"><channel><title>Cloudron - Complete solution for self-hosting</title><link>https://blog.cloudron.io/</link><description>Self-hosting has never been simpler</description><language>en-US</language><atom:link href="https://blog.cloudron.io/rss/" rel="self" type="application/rss+xml"/><item><title>Cloudron 10 - A decade of self-hosting</title><link>https://blog.cloudron.io/cloudron-10-a-decade-of-self-hosting/</link><guid>https://blog.cloudron.io/cloudron-10-a-decade-of-self-hosting/</guid><pubDate>Thu, 17 Sep 2026 14:31:44 GMT</pubDate><dc:creator>Girish Ramakrishnan</dc:creator><description>I used to be quite a big Google Reader fanboy. I had a large RSS collection that I carefully assembled over many years, and Google Reader was the main way I read articles on the internet. It was quite a shock when the service was shut down. I think I was more annoyed that there was nothing I could do but accept the terms set by this big co, which couldn&rsquo;t care less.</description><content:encoded><![CDATA[<p>I used to be quite a big Google Reader fanboy. I had a large RSS collection that I carefully assembled over many years, and Google Reader was the main way I read articles on the internet. It was quite a shock when the service was shut down. I think I was more annoyed that there was nothing I could do but accept the terms set by this big co, which couldn&rsquo;t care less.</p>
<p>This episode got Johannes and me building Cloudron. A way to run apps on our servers without becoming full-time sysadmins. Ten years on, we have been lucky to build a stable company and a <a href="https://forum.cloudron.io">great community</a> that actually cares about self-hosting. Thank you for that!</p>
<p>Now, on to Cloudron 10 already!</p>
<h2 id="mail-server">Mail server</h2>
<p>Mail is the piece of self-hosting people give up on first, given the complexity. Stubborn as we are, we keep investing in it to make it simple. If you think email cannot be reliably self-hosted, give us a try! You will have a working mail server in under 20 mins - batteries included. Most of that time will be spent try to get an API token for your DNS 😀</p>
<p>In v10, forwarding lives on the mailbox. We also add <a href="https://www.rfc-editor.org/info/rfc8617/">ARC</a> (Authenticated Received Chain) headers, so forwarded mail can still prove it was genuine.</p>
<p><img src="/content/images/2026/09/image-12.png" alt=""></p>
<p><a href="https://docs.cloudron.io/email/#smtp-relay">Relay tokens</a> let apps and scripts send through the server without a mailbox password.</p>
<p><img src="/content/images/2026/09/image-6.png" alt="SMTP relay"></p>
<p>There is a <a href="https://docs.cloudron.io/email/#spam-filtering">global allow and deny list</a> for spam, and you can attach <a href="https://docs.cloudron.io/email/#admin-notes">notes</a> to mailboxes.</p>
<p><img src="/content/images/2026/09/image-7.png" alt="Global spam filtering options"></p>
<h2 id="webmail">Webmail</h2>
<p>The webmail apps we enjoyed like <a href="https://github.com/RainLoop/rainloop-webmail">Rainloop</a>, then <a href="https://github.com/the-djmaze/snappymail">SnappyMail</a> have unfortunately been abandoned ☹️. We decided it was about time to build our own webmail client.</p>
<p><a href="https://www.cloudron.io/store/#app/mail">Mail</a> is a new webmail client specifically made for Cloudron.</p>
<p><img src="/content/images/2026/09/image-8.png" alt="Cloudron webmail"></p>
<p>Fast search. One-click spam control. Create filters from a message. Integration with <a href="https://www.cloudron.io/store/#app/contacts">Contacts</a> and <a href="https://www.cloudron.io/store/#app/calendar">Calendar</a>. You know, the things you expect from modern web mail. Right now we are playing catch up and simply making it feature complete before starting to work on ideas that a generic IMAP client cannot do. We will write that up in a separate post.</p>
<h2 id="vpn-protection">VPN protection</h2>
<p>These days you can point an agent at the source repository of an app and find vulnerabilities in a jiffy. Keeping apps updated is good, but sealing internal apps off the internet is better. We built VPN protection to restrict specific apps to WireGuard or OpenVPN.</p>
<p>First, install the <a href="https://www.cloudron.io/store/#app/vpn">VPN</a> app. It is self-service - users generate their own device keys.</p>
<p><img src="/content/images/2026/09/image-10.png" alt=""></p>
<p>Then <a href="https://docs.cloudron.io/network#vpn-protection">protect</a> specific apps with that VPN.</p>
<p><img src="/content/images/2026/09/image-9.png" alt="VPN protection"></p>
<p>When connecting without a VPN:</p>
<p><img src="/content/images/2026/09/image-13.png" alt="VPN connection required"></p>
<h2 id="container-registry">Container Registry</h2>
<p>Cloudron’s app <a href="https://docs.cloudron.io/packaging/tutorial">deployment workflow</a> was built primarily for the Cloudron team. With AI, it is easier than ever to create custom packages and share them with other users. So we built Container registry: an OCI-compatible registry with a build server in the same app. <a href="/container-registry/">Read more about it</a>. And oh, the <a href="https://ca.cloudron.io/">Community Appstore</a> is nearing 100 apps!</p>
<p><img src="/content/images/2026/09/image-11.png" alt="Container registry"></p>
<h2 id="ubuntu-2604">Ubuntu 26.04</h2>
<p>We have added support for Ubuntu 26.04 LTS Resolute Raccoon. It is the default for new installations. Existing servers can follow the <a href="https://docs.cloudron.io/guides/upgrade-ubuntu-26/">upgrade guide</a>. Note: Ubuntu 22.04 and 24.04 is still fully supported.</p>
<h2 id="single-sign-on">Single Sign-on</h2>
<p>Ideally, after logging into the Cloudron dashboard, a user can use mail, Cubby and GitLab immediately, without entering a new password in each app.</p>
<p>LDAP got us part of the way, but it is not proper SSO. The app still sees the raw username and password. From a security standpoint, this was &ldquo;acceptable&rdquo; when we packaged everything ourselves, but not so good with all the new third-party packages.</p>
<p>So we have been moving packages to OpenID Connect (OIDC) where only Cloudron sees the password. As of this writing, 93 packages are on OIDC, the 11 <a href="https://docs.cloudron.io/packaging/addons#proxyauth">proxyAuth</a> apps already moved, about 25 still on LDAP. Getting there! 😄</p>
<p>You can also see which apps a user can access, and why.</p>
<p><img src="/content/images/2026/09/image-15.png" alt="App access"></p>
<h2 id="login-sessions">Login sessions</h2>
<p>The profile now lists Cloudron browser and CLI login sessions.</p>
<p><img src="/content/images/2026/09/image-14.png" alt="Login sessions"></p>
<h3 id="other-notable-changes">Other notable changes</h3>
<ul>
<li><a href="https://www.infomaniak.com/en">Infomaniak</a> as a DNS provider</li>
<li>Personal access tokens are now called <a href="https://docs.cloudron.io/settings#api-tokens">API tokens</a></li>
<li>Admins can create an <a href="https://docs.cloudron.io/profile#app-passwords">app password</a> that authenticates as another user</li>
<li>Password reset accepts a passkey as 2FA</li>
<li>TOTP backup codes</li>
<li>Email notification when an app updates successfully</li>
<li>Certificates and DNS sync show last run time and status</li>
<li>Backups preserve file modification times</li>
<li><a href="https://docs.cloudron.io/packaging/addons#redis">Redis</a>: <code>maxmemory</code> policy and a persistence flag</li>
<li><a href="https://docs.cloudron.io/packaging/addons#scim">SCIM</a> can list groups and admin roles</li>
<li>Security: sanitize HTML and markdown in the dashboard, enforce 2FA with the external LDAP connector, app links can no longer point at internal IPs</li>
</ul>
<h2 id="whats-coming-next">What&rsquo;s coming next</h2>
<p>Head over to our forum to learn more about what&rsquo;s <a href="https://forum.cloudron.io/topic/15974/what-s-coming-in-10.1">coming in our next release - 10.1</a>.</p>
<h2 id="install-cloudron">Install Cloudron</h2>
<p>New to Cloudron? Get started for free by running with 3 simple commands on your server.</p>
<div class="highlight"><pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>wget https://cloudron.io/cloudron-setup
</span></span><span style="display:flex;"><span>chmod +x ./cloudron-setup
</span></span><span style="display:flex;"><span>./cloudron-setup
</span></span></code></pre></div>]]></content:encoded></item><item><title>Container registry</title><link>https://blog.cloudron.io/container-registry/</link><guid>https://blog.cloudron.io/container-registry/</guid><pubDate>Tue, 15 Sep 2026 07:39:49 GMT</pubDate><dc:creator>Girish Ramakrishnan</dc:creator><description>The app story in Cloudron is changing, slowly but surely. Traditionally, app packages were built by the Cloudron team on our build servers, and users simply installed those prebuilt packages from the App Store. Creating a custom package meant installing the Docker Builder app and pushing the result to the Docker Registry app.</description><content:encoded><![CDATA[<p>The app story in Cloudron is changing, slowly but surely. Traditionally, app packages were built by the Cloudron team on our build servers, and users simply installed those prebuilt packages from the <a href="https://docs.cloudron.io/packages/docker-registry">App Store</a>. Creating a custom package meant installing the <a href="https://docs.cloudron.io/packages/docker-builder">Docker Builder</a> app and pushing the result to the <a href="https://docs.cloudron.io/packages/docker-registry">Docker Registry</a> app.</p>
<p>With the rise of AI, it is easier than ever to experiment with custom apps and packages. We have made it a priority to simplify deploying and sharing them.</p>
<h2 id="source-builds">Source builds</h2>
<p>In Cloudron 9.1, we made a fundamental change: packages can be built on the server itself, without the Docker Builder. New versions of the CLI default to this server-side workflow (<code>cloudron install</code> / <code>cloudron update</code> upload the source and build there), while still supporting the dedicated builder.</p>
<h2 id="community-app-store">Community App Store</h2>
<p>For sharing, we introduced <a href="https://docs.cloudron.io/packaging/versions">Community packages</a>. Third-party packagers publish a URL that anyone can use to install the package. As with the App Store, community packages pick up updates when the packager releases them.</p>
<p>To help people find those URLs, we launched the <a href="https://ca.cloudron.io/">Community App Store</a>. This has been an enormous success. Over 89 packages at the time of writing, all published in the last two months!</p>
<h2 id="introducing-the-container-registry">Introducing the Container Registry</h2>
<p>The remaining gap was hosting. A community package still needs a Docker image that other Cloudrons can pull. The old <code>cloudron build</code> command was written mainly for our own app store workflow - building in a standalone builder, pushing the build into a registry and then submitting the package.</p>
<p>In Cloudron 10, that split goes away. The new <a href="https://docs.cloudron.io/packages/container-registry/">Container Registry</a> app both builds and hosts images, just like any modern registry. <code>cloudron build</code> is gone. The new <code>cloudron builder build</code> (similar to the Docker CLI) builds on the Container Registry and stores the image there.</p>
<p>Some features of the new Container Registry:</p>
<h3 id="dockeroci-compatible-registry">Docker/OCI compatible registry</h3>
<p>It speaks the usual registry protocol. <code>docker login/push/pull</code> as you would with any other registry. It is a general-purpose container registry and can be used outside Cloudron i.e. the Cloudron CLI is only needed for deploying on Cloudron.</p>
<h3 id="browsable-catalog">Browsable catalog</h3>
<p>Repositories and tags are visible in the web UI: digests, sizes, platforms (including multi-arch), pull counts, and last pushed or pulled times. Search in the top bar finds repositories, tags, and builds.</p>
<p><img src="/content/images/2026/09/image.png" alt="Repository browser"></p>
<h3 id="repository-settings">Repository settings</h3>
<p>Each repository can be public (anonymous pull) or private (login required for pull and push). Tags can be mutable or immutable.</p>
<p><img src="/content/images/2026/09/image-1.png" alt="Repository settings"></p>
<h3 id="builds">Builds</h3>
<p><code>cloudron builder login</code> and <code>cloudron builder build</code> send the build context to the registry. It builds with BuildKit and hosts the image in the same app. Builds appear in the UI with live logs and status.</p>
<p>This is also a security improvement over the old Docker Builder. That app built on the host Docker daemon, so a build could affect the rest of the server. Here, BuildKit runs inside the Container Registry app itself. <strong>Builds are sandboxed to the app and never touch the host Docker daemon.</strong></p>
<p><img src="/content/images/2026/09/image-2.png" alt="Builds"></p>
<p><img src="/content/images/2026/09/image-3.png" alt="Build logs live stream"></p>
<h3 id="build-from-triggers-or-webhooks">Build from triggers or webhooks</h3>
<p>Builds can be automatically triggered on a source code push using the GitHub/GitLab integration.</p>
<p><img src="/content/images/2026/09/image-4.png" alt="Build triggers"></p>
<h3 id="tag-expiry">Tag expiry</h3>
<p>A common issue with self-hosting a registry is running out of disk. Tag expiry keeps only the newest N tags in each repository and deletes the rest. This is currently a global setting but future versions will support it per repository.</p>
<p><img src="/content/images/2026/09/image-5.png" alt="Tag expiry"></p>
<h2 id="give-it-a-try">Give it a try!</h2>
<p><a href="https://www.cloudron.io/store/#app/container-registry">Cloudron Registry</a> can be installed from the App Store on Cloudron 10. Use the latest Cloudron CLI (v9.0.3) to point <code>cloudron builder</code> at it.</p>
]]></content:encoded></item><item><title>No one cares about failed SSH authentifications, but what about successful ones?</title><link>https://blog.cloudron.io/no-one-cares-about-failed-ssh-authentifications-but-what-about-successful-ones/</link><guid>https://blog.cloudron.io/no-one-cares-about-failed-ssh-authentifications-but-what-about-successful-ones/</guid><pubDate>Mon, 10 Aug 2026 10:35:38 GMT</pubDate><dc:creator>Elias Hackradt</dc:creator><description>Someone accessed your server and you don&rsquo;t know about it!
Every server with an open SSH port is subjected to brute force attacks and there are many ways to prevent these.
Fail2Ban, obfuscating the port from 22 to something else, configuring SSHD:
PermitRootLogin no PasswordAuthentication no Awesome!
You have done your due diligence to ensure no one can access your server except you.</description><content:encoded><![CDATA[<p>Someone accessed your server and you don&rsquo;t know about it!</p>
<p>Every server with an open SSH port is subjected to brute force attacks and there are many ways to prevent these.</p>
<p>Fail2Ban, obfuscating the port from 22 to something else, configuring SSHD:</p>
<pre tabindex="0"><code>PermitRootLogin no
PasswordAuthentication no
</code></pre><p>Awesome!</p>
<p>You have done your due diligence to ensure no one can access your server except you.</p>
<p>But remember this Hackathon you attended? You went to grab a drink and left your Notebook unlocked and someone swiftly stole your SSH private keys.</p>
<p>Since that day this person accessed your server and you never noticed.</p>
<h2 id="get-information-about-successful-ssh-authentications">Get information about successful SSH authentications</h2>
<p>You could set up a monitoring solution like <a href="https://www.zabbix.com/">Zabbix</a> to get alerts or similar software.</p>
<p>But now you have to maintain another system.</p>
<p>Start simple, let the system itself send you notifications about successful SSH authentifications!</p>
<p>Edit your SSHD config <code>/etc/ssh/sshd_config</code> and ensure the following is configured:</p>
<pre tabindex="0"><code>UsePAM yes
ExposeAuthInfo yes
</code></pre><p>Now create a <code>/usr/local/bin/ssh-notify.sh</code> file:</p>
<div class="highlight"><pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>sudo touch /usr/local/bin/ssh-notify.sh
</span></span><span style="display:flex;"><span>sudo chmod <span style="color:#0550ae">755</span> /usr/local/bin/ssh-notify.sh
</span></span></code></pre></div><p>Edit the <code>/etc/pam.d/sshd</code> file and append at the end:</p>
<pre tabindex="0"><code>session optional pam_exec.so quiet /usr/local/bin/ssh-notify.sh
</code></pre><p>Test and restart your sshd service:</p>
<div class="highlight"><pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>sudo sshd -t
</span></span><span style="display:flex;"><span>sudo systemctl restart ssh
</span></span></code></pre></div><p>Now we can code what ever we want in the <code>/usr/local/bin/ssh-notify.sh</code> file.</p>
<p>For example we could send a mail:</p>
<div class="highlight"><pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span><span style="color:#57606a">#!/bin/sh
</span></span></span><span style="display:flex;"><span><span style="color:#0550ae">[</span> <span style="color:#0a3069">&#34;</span><span style="color:#953800">$PAM_TYPE</span><span style="color:#0a3069">&#34;</span> <span style="color:#0550ae">=</span> <span style="color:#0a3069">&#34;open_session&#34;</span> <span style="color:#0550ae">]</span> <span style="color:#0550ae">||</span> <span style="color:#6639ba">exit</span> <span style="color:#0550ae">0</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#953800">TIME</span><span style="color:#0550ae">=</span><span style="color:#cf222e">$(</span>date -Is<span style="color:#cf222e">)</span>
</span></span><span style="display:flex;"><span><span style="color:#953800">HOST</span><span style="color:#0550ae">=</span><span style="color:#cf222e">$(</span>hostname<span style="color:#cf222e">)</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#953800">MAIL_FROM</span><span style="color:#0550ae">=</span><span style="color:#0a3069">&#34;ssh-alerts@domain.tld&#34;</span>
</span></span><span style="display:flex;"><span><span style="color:#953800">MAIL_TO</span><span style="color:#0550ae">=</span><span style="color:#0a3069">&#34;you@domain.tld&#34;</span>
</span></span><span style="display:flex;"><span><span style="color:#953800">SMTP_URL</span><span style="color:#0550ae">=</span><span style="color:#0a3069">&#34;smtps://smtp.your-provider.com:465&#34;</span>
</span></span><span style="display:flex;"><span><span style="color:#953800">SMTP_USER</span><span style="color:#0550ae">=</span><span style="color:#0a3069">&#34;ssh-alerts@domain.tld&#34;</span>
</span></span><span style="display:flex;"><span><span style="color:#953800">SMTP_PASS</span><span style="color:#0550ae">=</span><span style="color:#0a3069">&#34;your-smtp-password&#34;</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#953800">MAIL</span><span style="color:#0550ae">=</span><span style="color:#cf222e">$(</span><span style="color:#6639ba">printf</span> <span style="color:#0a3069">&#39;From: %s\nTo: %s\nSubject: SSH login: %s@%s from %s\nDate: %s\n\nTime:    %s\nUser:    %s\nHost:    %s\nFrom IP: %s\nTTY:     %s\nService: %s\n&#39;</span> <span style="color:#0a3069">\
</span></span></span><span style="display:flex;"><span>  <span style="color:#0a3069">&#34;</span><span style="color:#953800">$MAIL_FROM</span><span style="color:#0a3069">&#34;</span> <span style="color:#0a3069">&#34;</span><span style="color:#953800">$MAIL_TO</span><span style="color:#0a3069">&#34;</span> <span style="color:#0a3069">&#34;</span><span style="color:#953800">$PAM_USER</span><span style="color:#0a3069">&#34;</span> <span style="color:#0a3069">&#34;</span><span style="color:#953800">$HOST</span><span style="color:#0a3069">&#34;</span> <span style="color:#0a3069">&#34;</span><span style="color:#953800">$PAM_RHOST</span><span style="color:#0a3069">&#34;</span> <span style="color:#0a3069">&#34;</span><span style="color:#cf222e">$(</span>date -R<span style="color:#cf222e">)</span><span style="color:#0a3069">&#34;</span> <span style="color:#0a3069">\
</span></span></span><span style="display:flex;"><span>  <span style="color:#0a3069">&#34;</span><span style="color:#953800">$TIME</span><span style="color:#0a3069">&#34;</span> <span style="color:#0a3069">&#34;</span><span style="color:#953800">$PAM_USER</span><span style="color:#0a3069">&#34;</span> <span style="color:#0a3069">&#34;</span><span style="color:#953800">$HOST</span><span style="color:#0a3069">&#34;</span> <span style="color:#0a3069">&#34;</span><span style="color:#953800">$PAM_RHOST</span><span style="color:#0a3069">&#34;</span> <span style="color:#0a3069">&#34;</span><span style="color:#953800">$PAM_TTY</span><span style="color:#0a3069">&#34;</span> <span style="color:#0a3069">&#34;</span><span style="color:#953800">$PAM_SERVICE</span><span style="color:#0a3069">&#34;</span><span style="color:#cf222e">)</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#6639ba">printf</span> <span style="color:#0a3069">&#39;%s&#39;</span> <span style="color:#0a3069">&#34;</span><span style="color:#953800">$MAIL</span><span style="color:#0a3069">&#34;</span> <span style="color:#1f2328">|</span> curl -s -m <span style="color:#0550ae">10</span> --url <span style="color:#0a3069">&#34;</span><span style="color:#953800">$SMTP_URL</span><span style="color:#0a3069">&#34;</span> <span style="color:#0a3069">\
</span></span></span><span style="display:flex;"><span>  --user <span style="color:#0a3069">&#34;</span><span style="color:#953800">$SMTP_USER</span><span style="color:#0a3069">:</span><span style="color:#953800">$SMTP_PASS</span><span style="color:#0a3069">&#34;</span> <span style="color:#0a3069">\
</span></span></span><span style="display:flex;"><span>  --mail-from <span style="color:#0a3069">&#34;</span><span style="color:#953800">$MAIL_FROM</span><span style="color:#0a3069">&#34;</span> <span style="color:#0a3069">\
</span></span></span><span style="display:flex;"><span>  --mail-rcpt <span style="color:#0a3069">&#34;</span><span style="color:#953800">$MAIL_TO</span><span style="color:#0a3069">&#34;</span> <span style="color:#0a3069">\
</span></span></span><span style="display:flex;"><span>  --upload-file - &gt;/dev/null 2&gt;<span style="color:#1f2328">&amp;</span><span style="color:#0550ae">1</span> <span style="color:#1f2328">&amp;</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#6639ba">exit</span> <span style="color:#0550ae">0</span>
</span></span></code></pre></div><p>Now you get a mail every time a successful SSH authentification happens and it looks like this:</p>
<pre tabindex="0"><code>Time:    2026-08-06T09:04:43+00:00
User:    root
Host:    my-domain-told
From IP: I Am Not Publishing my IP here!
TTY:     ssh
Service: sshd
</code></pre><h2 id="send-the-data-elsewhere">Send the data elsewhere!</h2>
<p>Instead of writing more complex BASH script we can just send the data somewhere else for example <a href="https://n8n.io/">N8N</a>.</p>
<p>With a <a href="https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.webhook">N8N Webhook node</a> we can receive data, so here is the BASH script to send the data to a N8N Webhook:</p>
<div class="highlight"><pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span><span style="color:#57606a">#!/bin/sh
</span></span></span><span style="display:flex;"><span><span style="color:#0550ae">[</span> <span style="color:#0a3069">&#34;</span><span style="color:#953800">$PAM_TYPE</span><span style="color:#0a3069">&#34;</span> <span style="color:#0550ae">=</span> <span style="color:#0a3069">&#34;open_session&#34;</span> <span style="color:#0550ae">]</span> <span style="color:#0550ae">||</span> <span style="color:#6639ba">exit</span> <span style="color:#0550ae">0</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>esc<span style="color:#0550ae">()</span> <span style="color:#0550ae">{</span> <span style="color:#6639ba">printf</span> <span style="color:#0a3069">&#39;%s&#39;</span> <span style="color:#0a3069">&#34;</span><span style="color:#953800">$1</span><span style="color:#0a3069">&#34;</span> <span style="color:#1f2328">|</span> sed <span style="color:#0a3069">&#39;s/\\/\\\\/g; s/&#34;/\\&#34;/g&#39;</span> <span style="color:#1f2328">|</span> tr -d <span style="color:#0a3069">&#39;\n&#39;</span><span style="color:#1f2328">;</span> <span style="color:#0550ae">}</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#953800">BODY</span><span style="color:#0550ae">=</span><span style="color:#cf222e">$(</span><span style="color:#6639ba">printf</span> <span style="color:#0a3069">&#39;{&#34;time&#34;:&#34;%s&#34;,&#34;user&#34;:&#34;%s&#34;,&#34;rhost&#34;:&#34;%s&#34;,&#34;tty&#34;:&#34;%s&#34;,&#34;service&#34;:&#34;%s&#34;,&#34;host&#34;:&#34;%s&#34;}&#39;</span> <span style="color:#0a3069">\
</span></span></span><span style="display:flex;"><span>  <span style="color:#0a3069">&#34;</span><span style="color:#cf222e">$(</span>date -Is<span style="color:#cf222e">)</span><span style="color:#0a3069">&#34;</span> <span style="color:#0a3069">&#34;</span><span style="color:#cf222e">$(</span>esc <span style="color:#0a3069">&#34;</span><span style="color:#953800">$PAM_USER</span><span style="color:#0a3069">&#34;</span><span style="color:#cf222e">)</span><span style="color:#0a3069">&#34;</span> <span style="color:#0a3069">&#34;</span><span style="color:#cf222e">$(</span>esc <span style="color:#0a3069">&#34;</span><span style="color:#953800">$PAM_RHOST</span><span style="color:#0a3069">&#34;</span><span style="color:#cf222e">)</span><span style="color:#0a3069">&#34;</span> <span style="color:#0a3069">&#34;</span><span style="color:#cf222e">$(</span>esc <span style="color:#0a3069">&#34;</span><span style="color:#953800">$PAM_TTY</span><span style="color:#0a3069">&#34;</span><span style="color:#cf222e">)</span><span style="color:#0a3069">&#34;</span> <span style="color:#0a3069">\
</span></span></span><span style="display:flex;"><span>  <span style="color:#0a3069">&#34;</span><span style="color:#cf222e">$(</span>esc <span style="color:#0a3069">&#34;</span><span style="color:#953800">$PAM_SERVICE</span><span style="color:#0a3069">&#34;</span><span style="color:#cf222e">)</span><span style="color:#0a3069">&#34;</span> <span style="color:#0a3069">&#34;</span><span style="color:#cf222e">$(</span>esc <span style="color:#0a3069">&#34;</span><span style="color:#cf222e">$(</span>hostname<span style="color:#cf222e">)</span><span style="color:#0a3069">&#34;</span><span style="color:#cf222e">)</span><span style="color:#0a3069">&#34;</span><span style="color:#cf222e">)</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>curl -sk -m <span style="color:#0550ae">5</span> -X POST <span style="color:#0a3069">&#34;https://n8n.domain.tld/webhook/b234e48d-9ad3-4cf3-a2ab-4586d1b6755e&#34;</span> <span style="color:#0a3069">\
</span></span></span><span style="display:flex;"><span>  -H <span style="color:#0a3069">&#34;Content-Type: application/json&#34;</span> <span style="color:#0a3069">\
</span></span></span><span style="display:flex;"><span>  -H <span style="color:#0a3069">&#34;Authorization: ae46c075fe6a629efb1eaa5c5b1672a7&#34;</span> <span style="color:#0a3069">\
</span></span></span><span style="display:flex;"><span>  -d <span style="color:#0a3069">&#34;</span><span style="color:#953800">$BODY</span><span style="color:#0a3069">&#34;</span> &gt;/dev/null 2&gt;<span style="color:#1f2328">&amp;</span><span style="color:#0550ae">1</span> <span style="color:#1f2328">&amp;</span>
</span></span><span style="display:flex;"><span><span style="color:#6639ba">exit</span> <span style="color:#0550ae">0</span>
</span></span></code></pre></div><p>From there we can do what ever we want the data like store them in a SQLITE database and send a Telegram notification.</p>
<p><img src="/content/images/2026/08/image.png" alt=""></p>
]]></content:encoded></item><item><title>Cloudron 9.2</title><link>https://blog.cloudron.io/cloudron-9-2/</link><guid>https://blog.cloudron.io/cloudron-9-2/</guid><pubDate>Tue, 19 May 2026 10:45:40 GMT</pubDate><dc:creator>Girish Ramakrishnan</dc:creator><description>We are happy to announce the release of Cloudron 9.2!
For those unaware, Cloudron is a platform that makes it easy to run web apps like WordPress, Nextcloud, GitLab on your server and keep them up-to-date and secure.
Cloudron 9.2 adds a new SCIM addon, MySQL 8.4 and notification emails improvements.</description><content:encoded><![CDATA[<p>We are happy to announce the release of Cloudron 9.2!</p>
<p>For those unaware, Cloudron is a platform that makes it easy to run web apps like WordPress, Nextcloud, GitLab on your server and keep them up-to-date and secure.</p>
<p>Cloudron 9.2 adds a new SCIM addon, MySQL 8.4 and notification emails improvements.</p>
<h2 id="scim-addon">SCIM addon</h2>
<p><a href="https://www.rfc-editor.org/rfc/rfc7644">System for Cross-domain Identity Management API</a> provides user listing access to apps. With this change, apps are immediately aware of all users without requiring users to log in first.</p>
<p>We have implemented SCIM v2. See the <a href="https://docs.cloudron.io/packaging/addons#scim">documentation</a> for more information.</p>
<h2 id="mysql-84">MySQL 8.4</h2>
<p>MySQL 8.0 has reached end of life, and Cloudron now upgrades installations automatically to MySQL 8.4. We have tested all app packages with MySQL 8.4 to ensure compatibility, so the transition is seamless and requires no manual intervention from users.</p>
<h2 id="html-notification-emails">HTML notification emails</h2>
<p>Notification emails now include HTML variants in addition to the existing plain text format, resulting in a more polished and readable experience across mail clients. Email templates can also be tested directly from the “Send test email” button.</p>
<h2 id="other-notable-changes">Other Notable Changes</h2>
<ul>
<li>postgresql: remove old vecto.rs extension</li>
<li>Move configure/admin page link if any into the info view</li>
<li>dyndns: randomize the cron job that syncs the dns</li>
</ul>
<h2 id="whats-coming-next">What&rsquo;s coming next</h2>
<p>Head over to our forum to learn more about What&rsquo;s <a href="https://forum.cloudron.io/topic/15391/what-s-coming-in-cloudron-10">coming in our next release - 10</a>.</p>
<h2 id="install-cloudron">Install Cloudron</h2>
<p>New to Cloudron? Get started for free by running with 3 simple commands on your server.</p>
<div class="highlight"><pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>wget https://cloudron.io/cloudron-setup
</span></span><span style="display:flex;"><span>chmod +x ./cloudron-setup
</span></span><span style="display:flex;"><span>./cloudron-setup
</span></span></code></pre></div>]]></content:encoded></item><item><title>Cloudron 9.1</title><link>https://blog.cloudron.io/cloudron-9-1/</link><guid>https://blog.cloudron.io/cloudron-9-1/</guid><pubDate>Tue, 14 Apr 2026 07:20:11 GMT</pubDate><dc:creator>Girish Ramakrishnan</dc:creator><description>We are happy to announce the release of Cloudron 9.1!
For those unaware, Cloudron is a platform that makes it easy to run web apps like n8n, WordPress, Nextcloud, GitLab on your server and keep them up-to-date and secure.
Notifications view The notifications panel has been redesigned with read/unread state management.</description><content:encoded><![CDATA[<p>We are happy to announce the release of Cloudron 9.1!</p>
<p>For those unaware, Cloudron is a platform that makes it easy to run web apps like n8n, WordPress, Nextcloud, GitLab on your server and keep them up-to-date and secure.</p>
<h2 id="notifications-view">Notifications view</h2>
<p>The notifications panel has been redesigned with read/unread state management.</p>
<p><img src="/content/images/2026/04/image-2.png" alt="Notifications view"></p>
<p>Two new notifications help you stay on top of updates:</p>
<ul>
<li><strong>Automatic app update failure</strong> - when an app fails to auto-update e.g., due to an add-on incompatibility or resource constraint)</li>
<li><strong>Manual platform and app update required</strong> - when Cloudron platform or an installed app has a pending update that requires manual intervention</li>
</ul>
<h2 id="lets-encrypt-ari-support">Let&rsquo;s Encrypt ARI support</h2>
<p>Certificates are renewed automatically based on suggested renewal times provided via <a href="https://www.rfc-editor.org/rfc/rfc9773.txt">ACME Renewal Information</a> (ARI). Benefits of ARI include reducing load spikes at the CA, faster revocation response, and smarter scheduling. Renewals typically occur 1 month before expiry.</p>
<h2 id="community-apps">Community apps</h2>
<p>Third-party developers can now publish app packages independently using a <a href="https://docs.cloudron.io/packaging/publishing">CloudronVersions.json</a> file. Community apps receive automatic updates when the developer publishes new versions. Around 25 community apps are <a href="https://forum.cloudron.io/topic/15172/community-apps">already available</a>.</p>
<p><img src="/content/images/2026/04/image-4.png" alt="App store"></p>
<h2 id="packaging-backup-hooks--persistent-dirs">Packaging: Backup Hooks &amp; Persistent Dirs</h2>
<p>Three new <a href="https://docs.cloudron.io/packaging/manifest/">manifest</a> fields (<code>backupCommand</code>, <code>restoreCommand</code>, and <code>persistentDirs</code>) have been added to make it possible to package database apps properly. Directories like <code>/var/lib/postgresql</code> can now persist across container updates, while backup and restore hooks can export and import logical database dumps so that snapshots are always consistent and portable across versions.</p>
<h2 id="source-builds">Source builds</h2>
<p>Apps can now be built directly on the server using cloudron install and cloudron update. The CLI uploads the source directory to the server, which builds the Docker image and starts the app, eliminating the need for a local Docker setup or external build service. For those who prefer building locally or offloading to a dedicated server, <a href="https://docs.cloudron.io/packaging/tutorial#alternative-build-methods">alternative build methods</a> are still available.</p>
<h2 id="backup-integrity-check-ui">Backup Integrity Check UI</h2>
<p>The &ldquo;<a href="https://docs.cloudron.io/backups#check-integrity">Check integrity</a>&rdquo; action in the backup menu downloads the backup metadata from remote storage, verifies its signature, and validates all backup files against recorded checksums and sizes.</p>
<p><img src="/content/images/2026/04/image-11.png" alt=""></p>
<h2 id="filemanager-treeview">Filemanager Treeview</h2>
<p>The file manager has a tree view in the left panel, making it easy to navigate deeply nested directory structures. Drag and drop across different folders is much simpler since both the source and destination can be visible at the same time.</p>
<p><img src="/content/images/2026/04/image-5.png" alt="Filemanager Treeview"></p>
<h2 id="passkeys">Passkeys</h2>
<p>Passkeys enable passwordless login using a hardware security key, platform authenticator (fingerprint, Face ID), or password manager. A passkey can also serve as a second factor alongside a password.</p>
<p>Click <code>Set up</code> next to Passkey in the profile view to begin the registration process.</p>
<p><img src="/content/images/2026/04/image-6.png" alt="Enable passkey"></p>
<p>The login screen provides a &ldquo;Log in with a passkey&rdquo; option that authenticates without requiring a username or password.</p>
<p><img src="/content/images/2026/04/image-8.png" alt="Login with passkey"></p>
<h2 id="event-log-contextual-search">Event Log: Contextual Search</h2>
<p>Searching the email and system event logs now highlights matching entries in place instead of filtering out non-matching ones. This preserves the surrounding context, making it easier to understand what happened before and after each hit. Next and previous buttons allow quick navigation between matches.</p>
<p><img src="/content/images/2026/04/image-10.png" alt="Event Log Contextual search"></p>
<h2 id="lazy-service-start">Lazy Service Start</h2>
<p>Services like MongoDB, MySQL, PostgreSQL, and TURN are now started lazily, only spinning up when an installed app requires them. This significantly conserves memory and CPU on servers where not all services are in use.</p>
<p><img src="/content/images/2026/04/image-7.png" alt=""></p>
<h2 id="automatic-update-policy">Automatic Update Policy</h2>
<p>Updates can now be configured with three policies: Disabled, Apps only, or Platform &amp; Apps. When enabled, a schedule controls which days and hours updates are applied.</p>
<p><img src="/content/images/2026/04/image-9.png" alt="Automatic update policy"></p>
<h2 id="other-notable-changes">Other Notable Changes</h2>
<ul>
<li>App passwords now support expiry dates</li>
<li>DigitalOcean Spaces: added missing ATL1, BLR1, and SYD1 regions</li>
<li>File manager: the terminal button automatically changes to the current directory</li>
<li>Support for CardDAV/CalDAV well-known endpoints</li>
<li>CLI: switched to a web-based browser login flow, leveraging existing 2FA and passkey authentication without caching passwords locally</li>
<li>i18n: added Czech translations. Thank to <a href="https://forum.cloudron.io/user/archos">archos</a></li>
<li>Backup logs are now more terse and concise</li>
<li>App operator: fixed display of backup progress and logs</li>
<li>Location: the UI now shows which DNS records are being overwritten</li>
<li>Backup storage: removed the local disk provider</li>
</ul>
<h2 id="whats-coming-next">What&rsquo;s coming next</h2>
<p>Head over to our forum to learn more about What&rsquo;s <a href="https://forum.cloudron.io/topic/15391/what-s-coming-in-9.2">coming in our next release - 9.2</a>.</p>
<h2 id="install-cloudron">Install Cloudron</h2>
<p>New to Cloudron? Get started for free by running with 3 simple commands on your server.</p>
<div class="highlight"><pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>wget https://cloudron.io/cloudron-setup
</span></span><span style="display:flex;"><span>chmod +x ./cloudron-setup
</span></span><span style="display:flex;"><span>./cloudron-setup
</span></span></code></pre></div><p>If you made it till here, here&rsquo;s a bonus - starting from Cloudron 9, you don&rsquo;t need to sign up anymore for a Cloudron.io account 🤗.</p>
]]></content:encoded></item><item><title>Cloudron 9</title><link>https://blog.cloudron.io/cloudron-9/</link><guid>https://blog.cloudron.io/cloudron-9/</guid><pubDate>Mon, 02 Feb 2026 15:34:35 GMT</pubDate><dc:creator>Girish Ramakrishnan</dc:creator><description>We are happy to announce the release of Cloudron 9!
For those unaware, Cloudron is a platform that makes it easy to run web apps like WordPress, Nextcloud, GitLab on your server and keep them up-to-date and secure.
New UICloudron 9 introduces a completely redesigned interface. The new UI is mobile-first by design, working seamlessly across phones, tablets, and desktops.</description><content:encoded><![CDATA[<p>We are happy to announce the release of Cloudron 9!</p><p>For those unaware, Cloudron is a platform that makes it easy to run web apps like WordPress, Nextcloud, GitLab on your server and keep them up-to-date and secure.</p><h2 id="new-ui">New UI</h2><p>Cloudron 9 introduces a completely redesigned interface. The new UI is mobile-first by design, working seamlessly across phones, tablets, and desktops.</p><p>After a year of development, we've rebuilt the dashboard from the ground up using Vue.js 3.5, replacing 10 years of Angular 1.x code. To power the new interface, we developed <a href="https://git.cloudron.io/utils/pankow" rel="noreferrer">Pankow</a>—our open-source component library.</p><p>Some screenshots:</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="/content/images/2026/02/image-7.png" class="kg-image" alt="" loading="lazy" width="2000" height="1083"><figcaption><span style="white-space: pre-wrap;">Dashboard</span></figcaption></figure><figure class="kg-card kg-image-card kg-card-hascaption"><img src="/content/images/2026/02/image-6.png" class="kg-image" alt="" loading="lazy" width="2000" height="1021"><figcaption><span style="white-space: pre-wrap;">Appstore view</span></figcaption></figure><figure class="kg-card kg-image-card kg-card-hascaption"><img src="/content/images/2026/02/image-4.png" class="kg-image" alt="" loading="lazy" width="1874" height="1489"><figcaption><span style="white-space: pre-wrap;">Login view</span></figcaption></figure><figure class="kg-card kg-image-card kg-card-hascaption"><img src="/content/images/2026/02/image-5.png" class="kg-image" alt="" loading="lazy" width="1841" height="586"><figcaption><span style="white-space: pre-wrap;">Users view</span></figcaption></figure><h2 id="multiple-backup-sites">Multiple backup sites</h2><p>Cloudron can now back up to multiple destinations. Each destination, also known as <a href="https://docs.cloudron.io/backups/#backup-sites" rel="noreferrer">Backup site</a>, can use a different storage provider and schedule. You can also choose what to store on each site - everything, only selected apps or everything except some apps. For example, back up everything to your primary Digital Ocean Spaces bucket daily, while sending some critical apps to a secondary attached disk storage for extra redundancy.</p><figure class="kg-card kg-image-card"><img src="/content/images/2026/02/backups-sites-list.webp" class="kg-image" alt="" loading="lazy" width="1855" height="933"></figure><h2 id="live-graphs">Live graphs</h2><p>The Server view now displays real-time and historical graphs for CPU, memory, disk I/O, and network I/O with selectable timeframes.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="/content/images/2026/02/image-1.png" class="kg-image" alt="" loading="lazy" width="1874" height="1290"><figcaption><span style="white-space: pre-wrap;">Live graphs</span></figcaption></figure><h2 id="backup-stats-integrity">Backup stats &amp; integrity</h2><p>Cloudron 9 now tracks backup statistics for every backup. You can see the backup size, backup contents (file count &amp; app count), and the time it took to create the backup in the backup info dialog.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="/content/images/2026/02/backups-stats.webp" class="kg-image" alt="" loading="lazy" width="1189" height="1470"><figcaption><span style="white-space: pre-wrap;">Backup info</span></figcaption></figure><p>A hidden feature is that <a href="https://docs.cloudron.io/backups/#backup-integrity" rel="noreferrer">integrity information</a> is now stored alongside the backups. Each backup includes a SHA256 checksum and file size for verification. This allows detection of corrupted backups before restoration, ensuring only valid backups are used. The verification UI is coming in Cloudron 9.1, which will allow you to manually verify backup integrity at any time.</p><h2 id="multiple-docker-registries">Multiple docker registries</h2><p>Multiple private Docker registries can now be configured (previously limited to one), with credentials automatically selected based on the image's registry hostname.</p><figure class="kg-card kg-image-card"><img src="/content/images/2026/02/docker-registry-list.webp" class="kg-image" alt="" loading="lazy" width="1851" height="538"></figure><h2 id="hetzner-cloud-dns">Hetzner Cloud DNS</h2><p>Hetzner is migrating its DNS Console into Hetzner Cloud. We have added support for the new Hetzner Cloud DNS API. <a href="https://docs.hetzner.com/networking/dns/migration-to-hetzner-console/process" rel="noreferrer">Migrate</a> your domain first and then choose the new provider in the <code>Domains</code> view.</p><figure class="kg-card kg-image-card"><img src="/content/images/2026/02/image-2.png" class="kg-image" alt="" loading="lazy" width="1185" height="676"></figure><h2 id="synology-c2">Synology C2</h2><p><a href="https://c2.synology.com/en-us/object-storage/overview" rel="noreferrer">Synology C2</a> is now a supported backup destination. Create a backup site with C2 credentials to store your backups.</p><figure class="kg-card kg-image-card"><img src="/content/images/2026/02/backups-synology-c2.webp" class="kg-image" alt="" loading="lazy" width="1190" height="1152"></figure><h2 id="vanity-nameservers">Vanity nameservers</h2><p>Domains can now use custom (vanity) nameservers like <code>ns1.yourdomain.com</code> instead of provider defaults. Enable the option in advanced settings to bypass nameserver verification checks.</p><figure class="kg-card kg-image-card"><img src="/content/images/2026/02/image-3.png" class="kg-image" alt="" loading="lazy" width="1185" height="1111"></figure><h2 id="sshfs-optimizations">SSHFS optimizations</h2><p>Hetzner Storage Box is a widely used SSHFS backup destination. Performance optimizations have been made to the SSHFS storage backend to skip FUSE calls and use SSH directly. Users can expect 10-100x speed improvements when using the <code>rsync</code> backup format.</p><h2 id="new-docs">New docs</h2><p><a href="https://docs.cloudron.io" rel="noreferrer">Documentation</a> has been migrated from MkDocs to <a href="https://docusaurus.io/" rel="noreferrer">Docusaurus</a>. The <a href="https://docs.cloudron.io/api/" rel="noreferrer">API</a> is now fully documented with complete endpoint references and examples</p><h2 id="notifications">Notifications</h2><p>New email notifications: server reboot required, update failures, and low disk space alerts (triggered at 90% capacity).</p><p>We are also working on a new Notifications view for 9.1 .</p><h2 id="other-notable-changes">Other Notable Changes</h2><ul><li>Software updates: Haraka (3.1.2), Docker (28.1.1), Redis (8.2.2), MongoDB (7.0.28 - this fixes mongobleed)</li><li>Support for Ubuntu 20.04 is deprecated</li><li>API keys of domains is periodically validated</li><li>Optional addons are disabled by default for new installations</li><li>mail: Brevo mail relay</li><li>App backup runs separately in a background and does not block app operations</li><li>Security: <a href="https://docs.cloudron.io/profile#api-tokens" rel="noreferrer">API tokens</a> can now be restricted to specific IP addresses or subnets</li><li>Gravatar support for profile pictures is dropped</li><li>Admins can manage profile pictures of users</li><li>OCSP support has been removed. Let's Encrypt has <a href="https://letsencrypt.org/2024/12/05/ending-ocsp" rel="noreferrer">now uses CRLs</a>.</li><li>OpenID: <a href="https://docs.cloudron.io/user-directory/#endpoints" rel="noreferrer">Workaround</a> bug in Cloudflare Access</li><li>CSP/Robots has common patterns</li><li>mail: add rbl6 check</li></ul><h2 id="whats-coming-next">What's coming next</h2><p>Head over to our forum to learn more about What's <a href="https://forum.cloudron.io/topic/14976/what-s-coming-in-9.1" rel="noreferrer">coming in our next release - 9.1</a>.</p><h2 id="install-cloudron">Install Cloudron</h2><p>New to Cloudron? Get started for free by running with 3 simple commands on your server.</p><p>wget https://cloudron.io/cloudron-setup<br>chmod +x ./cloudron-setup<br>./cloudron-setup</p><p>If you made it till here, here's a bonus - starting from Cloudron 9, you don't need to sign up anymore for a Cloudron.io account 🤗.</p>
]]></content:encoded></item><item><title>Cloudron 8.3 released</title><link>https://blog.cloudron.io/cloudron-8-3-released/</link><guid>https://blog.cloudron.io/cloudron-8-3-released/</guid><pubDate>Mon, 07 Apr 2025 08:14:16 GMT</pubDate><dc:creator>Girish Ramakrishnan</dc:creator><description>We are happy to announce the release of Cloudron 8.3!
For those unaware, Cloudron is a platform that makes it easy to run web apps like WordPress, Nextcloud, GitLab on your server and keep them up-to-date and secure.
Cloudron 8.3 upgrades the base docker image and provides seamless upgrade of the databases.</description><content:encoded><![CDATA[<p>We are happy to announce the release of Cloudron 8.3!</p><p>For those unaware, Cloudron is a platform that makes it easy to run web apps like WordPress, Nextcloud, GitLab on your server and keep them up-to-date and secure.</p><p>Cloudron 8.3 upgrades the base docker image and provides seamless upgrade of the databases.</p><h2 id="new-base-image">New base image</h2><p>Cloudron apps and <a href="https://docs.cloudron.io/packaging/addons/" rel="noreferrer">addons</a> use an Ubuntu 24.04 LTS based image. The new docker image ID is <code>cloudron/base:5.0.0@sha256:04fd70dbd8ad6149c19de39e35718e024417c3e01dc9c6637eaf4a41ec4e596c</code>. Please update the Dockerfile of your custom apps to use this as the base .</p><h2 id="database-upgrades">Database upgrades</h2><p>A core part of Cloudron's self-hosting approach is that users shouldn't have to worry about database choices or database versions that are used by apps. The app packaging mechanism makes the appropriate choices based on the app's preferences.</p><p>This release contains many upgrades to the underlying databases and frameworks. The upgrade procedure is entirely transparent and hands-off.</p><ul><li>PostgreSQL is upgraded from v14 to v16</li><li>MySQL is upgraded to v8.0.41</li><li>MongoDB upgraded from v6 to v7</li><li>Redis is upgraded to v7.4</li><li>PHP 8.3 is now the minimum in all apps</li><li>Default node version is 22.14.0 TLS</li><li>Solr, used by mail server for FTS, is upgraded to v9</li><li>Default python is 3.12</li></ul><h2 id="database-connection-commands">Database connection commands</h2><p>You can now use <code>cloudron_&lt;db&gt;</code> to connect to the database from the <a href="https://docs.cloudron.io/apps/#web-terminal" rel="noreferrer">Web Terminal</a>. So, you can cloudron exec and then <code>cloudron_mysql</code> to connect to mysql without having to type out those <a href="https://docs.cloudron.io/packaging/addons/#mysql" rel="noreferrer">pesky env vars</a>.</p><figure class="kg-card kg-image-card"><img src="/content/images/2025/04/image.png" class="kg-image" alt="" loading="lazy" width="806" height="373"></figure><h2 id="whats-coming-next">What's coming next</h2><p>Head over to our forum to learn more about What's <a href="https://forum.cloudron.io/topic/13113/what-s-coming-in-cloudron-9" rel="noreferrer">coming in our next release - 9</a>.</p><h2 id="install-or-update-cloudron">Install or update Cloudron</h2><p>New to Cloudron? Get started for free by running with 3 simple commands on your server.</p><p>To update an existing installation, simply click on the 'Update now' button on your dashboard.</p>
]]></content:encoded></item><item><title>Cloudron 8.2 Released</title><link>https://blog.cloudron.io/cloudron-8-2-released/</link><guid>https://blog.cloudron.io/cloudron-8-2-released/</guid><pubDate>Mon, 13 Jan 2025 09:50:25 GMT</pubDate><dc:creator>Girish Ramakrishnan</dc:creator><description>We are happy to announce the release of Cloudron 8.2!
For those unaware, Cloudron is a platform that makes it easy to run web apps like WordPress, Nextcloud, GitLab on your server and keep them up-to-date and secure.
Cloudron 8.2 includes support for Sqlite addon, Mail attachment search, OIDC Provider Name Customization, Device Mounts, App Archive, Parallel Tasks, Email notifications, Quay fallback &amp; many bug fixes.</description><content:encoded><![CDATA[<p>We are happy to announce the release of Cloudron 8.2!</p><p>For those unaware, Cloudron is a platform that makes it easy to run web apps like WordPress, Nextcloud, GitLab on your server and keep them up-to-date and secure.</p><p>Cloudron 8.2 includes support for Sqlite addon, Mail attachment search, OIDC Provider Name Customization, Device Mounts, App Archive, Parallel Tasks, Email notifications, Quay fallback &amp; many bug fixes.</p><h2 id="sqlite-addon">Sqlite Addon</h2><p>We are seeing more self-hosted applications support Sqlite. Sqlite databases have to be backed up carefully since a simple <code>cp</code> might copy a corrupt database when it's not in <a href="https://www.sqlite.org/wal.html" rel="noreferrer">WAL</a> mode.</p><p>We have added support for <a href="https://docs.cloudron.io/packaging/addons/#sqlite" rel="noreferrer">Sqlite addon</a>. Like with other databases, Cloudron now takes portable backups of Sqlite databases listed in <code>CloudronManifest.json</code>.</p><h2 id="oidc-provider-name-customization">OIDC Provider Name Customization</h2><p>The <a href="https://docs.cloudron.io/branding/#overview" rel="noreferrer">Cloudron Name</a> set in the <code>Branding</code> view is now automatically set as the OIDC Provider Name.</p><figure class="kg-card kg-image-card"><img src="/content/images/2024/12/image-2.png" class="kg-image" alt="" loading="lazy" width="750" height="241"></figure><p>App packages can use the new <code>CLOUDRON_OIDC_PROVIDER_NAME</code> environment variable to customize the text of their login buttons. Here's Immich and Grafana making use of the OIDC Provider Name in their login buttons.</p><figure class="kg-card kg-gallery-card kg-width-wide"><div class="kg-gallery-container"><div class="kg-gallery-row"><div class="kg-gallery-image"><img src="/content/images/2024/12/image-3.png" width="565" height="772" loading="lazy" alt=""></div><div class="kg-gallery-image"><img src="/content/images/2024/12/image-4.png" width="451" height="537" loading="lazy" alt=""></div></div></div></figure><h2 id="device-mounts">Device Mounts</h2><p>Apps like OpenHAB, Home Assistant, Emby, Jellyfin have device integrations and require access to devices on the host. A list of host devices to be made available to the app can now be specified in the <code>Devices</code> section.</p><figure class="kg-card kg-image-card"><img src="/content/images/2024/12/image-5.png" class="kg-image" alt="" loading="lazy" width="819" height="671"></figure><h2 id="parallel-tasks">Parallel Tasks</h2><p>Cloudron had a global lock (in code) preventing operations like backups, updates and app operations from proceeding in parallel. We have removed this global lock and replaced it with a more granular app level lock. A full backup or a Cloudron update can now run in parallel with app operations.</p><h2 id="app-archive">App Archive</h2><p>The <a href="https://docs.cloudron.io/apps/#archive" rel="noreferrer">App Archive</a> feature provides a way to uninstall an app and have the safety mechanism of easily restoring it later. When an app is archived, it is uninstalled from the server, but its latest backup is stored in the <code>App Archive</code>.</p><figure class="kg-card kg-image-card"><img src="/content/images/2024/12/image-6.png" class="kg-image" alt="" loading="lazy" width="822" height="666"></figure><p>The <code>App Archive</code> is located in the Backups view.</p><figure class="kg-card kg-image-card"><img src="/content/images/2024/12/image-7.png" class="kg-image" alt="" loading="lazy" width="736" height="401"></figure><h2 id="mail-attachment-search">Mail Attachment Search</h2><p>Cloudron Mail will index mail attachments using Apache Tika when <a href="https://docs.cloudron.io/email/#full-text-search" rel="noreferrer">Full Text Search</a> is enabled.</p><figure class="kg-card kg-image-card"><img src="/content/images/2024/12/image-10.png" class="kg-image" alt="" loading="lazy" width="592" height="182"></figure><h2 id="email-notifications">Email Notifications</h2><p>In older Cloudron versions, we used to send email notifications by default to all admins. This was considered too spammy and was removed. We have brought email notifications back with the ability for each user to control what emails they want to receive.</p><p>Personal email notification preferences can be configured in the <code>Notifications</code> view:</p><figure class="kg-card kg-image-card"><img src="/content/images/2024/12/image-8.png" class="kg-image" alt="" loading="lazy" width="589" height="307"></figure><h2 id="quay-fallback">Quay Fallback</h2><p>DockerHub seems to use <a href="https://www.docker.com/blog/beta-ipv6-support-on-docker-hub-registry/" rel="noreferrer">first 64 bits of IPv6 address</a> for rate limiting. Unfortunately, this results in many Cloudrons hitting rate limits incorrectly. As a workaround, we have started pushing our app images to Quay.io under the username <code>cloudron</code> . When a pull from DockerHub fails, the code fallsback to pulling from Quay.io .</p><h2 id="other-notable-changes">Other Notable Changes</h2><ul><li>mail: Update Haraka to 3.0.5</li><li>Update docker to 27.3.1</li><li>Security: Samy Mahi reported a critical vulnerability which allows Cloudron admins to get SSH access. We thank Samy for making a responsible disclosure to us (<a href="https://www.cloudron.io/security/sami-mahi-readme.pdf" rel="noreferrer">README</a> and <a href="https://www.cloudron.io/security/samy-mahi-last-report.pdf" rel="noreferrer">REPORT</a>).</li><li>Slow disks can be <a href="https://docs.cloudron.io/system/#disk-usage" rel="noreferrer">excluded</a> from periodic disk usage collection.</li><li>postgres: add support for <a href="https://github.com/pgvector/pgvector" rel="noreferrer"><code>vector</code> extension</a>.</li><li>groups: add events to eventlog</li><li>Hetzner: add Helsinki location for backups</li><li>scheduler: create jobs with Cloudron Time Zone setting</li><li>Gandi: add support for <a href="https://docs.gandi.net/en/managing_an_organization/organizations/personal_access_token.html" rel="noreferrer">Personal Access Tokens</a></li></ul><h2 id="whats-coming-next">What's coming next</h2><p>Head over to our forum to learn more about What's <a href="https://forum.cloudron.io/topic/9975/what-s-coming-in-7-6"><a href="https://forum.cloudron.io/topic/13113/what-s-coming-in-cloudron-9" rel="noreferrer">coming in our next release - 9</a></a>.</p><h2 id="install-or-update-cloudron">Install or update Cloudron</h2><p>New to Cloudron? Get started for free by running with 3 simple commands on your server.</p><p>To update an existing installation, simply click on the 'Update now' button on your dashboard.</p>
]]></content:encoded></item><item><title>Firstimer - a long way to complete my first app package</title><link>https://blog.cloudron.io/firstimer-a-long-way-to-complete-my-first-app-package/</link><guid>https://blog.cloudron.io/firstimer-a-long-way-to-complete-my-first-app-package/</guid><pubDate>Sat, 14 Dec 2024 21:39:01 GMT</pubDate><dc:creator>Stephan Luckow</dc:creator><description>I am not a developer, though I have been working with computers for nearly 40 years. I use apps on Cloudron, configure them to suit my specific use cases, explore new technologies, and orchestrate free and open-source tools to move closer to achieving digital sovereignty.
Waiting for new apps to appear in the Cloudron app catalog is one way to address missing features. Last weekend, I decided to explore what it takes to get a new app up and running.</description><content:encoded><![CDATA[<p>I am not a developer, though I have been working with computers for nearly 40 years. I use apps on Cloudron, configure them to suit my specific use cases, explore new technologies, and orchestrate free and open-source tools to move closer to achieving digital sovereignty.</p><p>Waiting for new apps to appear in the Cloudron app catalog is one way to address missing features. Last weekend, I decided to explore what it takes to get a new app up and running.</p><p>In this <a href="https://forum.cloudron.io/topic/11545/findmydeviceserver-is-a-missing-piece-for-degoogled-android-phones" rel="noopener">forum post</a>, I shared my thoughts on a missing piece for de-Googled Android phones: a FindMyDevice server. To be fair, I’ve never lost a phone or been robbed, but having everything set up just in case gives me peace of mind.</p><p>I had heard of Docker before and experimented with Dockerfiles and docker-compose. I also tried out the beginner apps mentioned in the Cloudron documentation and, in the past, set up a private registry and the Cloudron build service. So, the mise en place was already done before getting started. The rest should be easy.</p><p>TL;DR: It took me nearly 8 hours to get the app running, ensure it worked properly, and make sure individual configuration changes persisted through app updates.</p><figure class="kg-card kg-image-card kg-width-wide kg-card-hascaption"><img src="/content/images/2024/12/lostincomplexity.png" class="kg-image" alt="" loading="lazy" width="1216" height="832"><figcaption><span style="white-space: pre-wrap;">A large, interactive screen, seemingly suspended in the air or projected onto a wall, dominates the center of the image.&nbsp;This screen displays a complex network diagram, with various colored boxes and lines connecting them, representing data flow and connections within the network. The colors are vibrant, including blues, oranges, and purples.&nbsp;Text blocks are also visible on the screen, which could be descriptions or data associated with the network components.</span></figcaption></figure><h2 id="basicswhere-to-start"><a href="https://pad.luckow.org/ajnckTeAS8e86LucUK6v5w?both#Basics---where-to-start"></a>Basics - where to start</h2><p>While it’s possible to create an app package using Docker build on your local computer, it’s not the ideal approach. Instead, you’ll want to use the <a href="https://www.cloudron.io/store/io.cloudron.buildservice.html" rel="noopener">Cloudron Build Service</a> (CBS). The primary reason for choosing CBS is the bandwidth available in the data center where your Cloudron instance is hosted. Building apps involves downloading and uploading large amounts of data, often several gigabytes. This can be especially challenging in Germany, where slow household internet infrastructure makes such tasks cumbersome.</p><p>There’s no real need to use a self-hosted Docker registry, but since we can, we go ahead and install the <a href="https://www.cloudron.io/store/com.docker.registry.html" rel="noopener">Cloudron Container Registry</a> (CCR) from the Cloudron app store.</p><p>You’ll also need a Cloudron instance where you have admin privileges. This allows you to configure the Cloudron instance to use a private registry, install apps, and connect your Cloudron CLI to the instance.</p><p>One of the final steps is to install the Cloudron CLI on your personal computer.</p><h3 id="documentation-configuration-first-challenge"><a href="https://pad.luckow.org/ajnckTeAS8e86LucUK6v5w?both#Documentation-configuration-first-challenge"></a>Documentation, configuration, first challenge</h3><p>Follow these links to read about the installation and configuration. Once everything is set up and working, try out one of the ‘Hello World’ examples.</p><p><a href="https://docs.cloudron.io/packaging/cli/" rel="noopener">Cloudron CLI - Documentation</a><br><a href="https://docs.cloudron.io/apps/docker-builder/" rel="noopener">Cloudron Build Service - Documentation</a><br><a href="https://www.cloudron.io/store/com.docker.registry.html" rel="noopener">Cloudron Container Registry - Documentation</a><br><a href="https://docs.cloudron.io/packaging/tutorial/#sample-app" rel="noopener">First challenge - hello world app</a></p><p>The moment the ‘Hello World’ app works, it’s time for fireworks! 🎆</p><h2 id="which-app-to-start-with"><a href="https://pad.luckow.org/ajnckTeAS8e86LucUK6v5w?both#Which-app-to-start-with"></a>Which app to start with?</h2><p>If you’ve never looked into the complexity of apps, start with a simple one. By “simple”, I mean ideally a Go binary.</p><h3 id="bird%E2%80%99s-eye-view-of-cloudron-app-architecture"><a href="https://pad.luckow.org/ajnckTeAS8e86LucUK6v5w?both#Bird%E2%80%99s-eye-view-of-Cloudron-app-architecture"></a>Bird’s-eye view of Cloudron app architecture</h3><p>The typical Cloudron app runs as a Docker container on the Cloudron platform. The app code, which you want to update without affecting user changes, is stored on a read-only partition (<code>/app/code/</code>). User data and allowed changes are stored on a read-write partition (<code>/app/data/</code>).</p><p>There are many open-source projects out there that scatter user data across the file system. Dealing with such tools can be challenging, as it requires a deep understanding of the software. A symbolic link can sometimes offer a solution, but managing more than five of them starts to feel completely unmanageable.</p><p>Many open-source projects require databases or in-memory data structure servers like Redis. In their Docker Compose files, they typically bundle these services together. Cloudron’s approach is to offer these services as so-called add-ons, which you can activate in your Cloudron manifest. The benefit for users: after installing 10 apps that require a PostgreSQL database, you won’t end up with 10 separate PostgreSQL installations on your server.</p><h2 id="why-go-in-my-use-case"><a href="https://pad.luckow.org/ajnckTeAS8e86LucUK6v5w?both#Why-Go-in-my-use-case"></a>Why Go (in my use case)?</h2><p>I came across the FindMyDevice server and decided to try it out as a Docker Compose installation. Upon inspecting the architecture, I found the following components:</p><ul><li>A Go binary</li><li>A SQLite database</li><li>A configuration file</li><li>An Nginx example file</li><li>A complete web UI in a folder</li></ul><p>So, it felt feasible as my first personal adventure in app packaging.</p><h2 id="where-should-it-be-stored-what-questions-should-you-ask"><a href="https://pad.luckow.org/ajnckTeAS8e86LucUK6v5w?both#Where-should-it-be-stored-What-questions-should-you-ask"></a>Where should it be stored? What questions should you ask?</h2><p>The Go binary is code and requires no user input, so it goes to <code>/app/code/</code></p><p>The app has no other option for storing data than SQLite, meaning we can’t use a database add-on from the Cloudron platform. Since the app stores user data in the SQLite database, it must be placed in <code>/app/data/</code>.</p><p>Some settings in the configuration file depend on the user’s decisions, which is why it has to be stored in <code>/app/data/</code>.</p><p>Since the Cloudron app platform handles the full reverse proxy and Let’s Encrypt flow, we don’t need the Nginx example file. <code>/dev/null</code> is your friend.</p><p>I decided not to dive into the complexities of web UIs, multilingual support, and all the potential feature requests (especially once users realize what’s possible), so I placed the entire folder in /app/code/.</p><h2 id="how-to-start"><a href="https://pad.luckow.org/ajnckTeAS8e86LucUK6v5w?both#How-to-start"></a>How to start?</h2><p>I decided to work with a real-world (and live) app package. In my case, I chose the <a href="https://git.cloudron.io/apps/vault-app" rel="noopener">Vault app</a>. Long story short, it helped, but introduced a lot of unnecessary elements that I didn’t fully understand, so I later handed them over to my friend <code>/dev/null</code>.</p><p>To have the same in mind, check out the app package for the <a href="https://git.cloudron.io/apps/findmydevice-app" rel="noopener">FindMyDevice Server</a></p><h2 id="the-file-structure-of-an-app-package"><a href="https://pad.luckow.org/ajnckTeAS8e86LucUK6v5w?both#The-file-structure-of-an-app-package"></a>The file structure of an app package</h2><h3 id="the-essentials"><a href="https://pad.luckow.org/ajnckTeAS8e86LucUK6v5w?both#The-essentials"></a>The essentials</h3><p><a href="https://git.cloudron.io/apps/findmydevice-app/-/blob/master/CloudronManifest.json" rel="noopener">Cloudron-Manifest.json</a></p><p>The manifest follows a schema, and most of its structure is self-explanatory. For me, working with the id field was completely new. In the end, it’s simple: normally, you include the app’s domain, but in reverse order.<br>If you want to package an app that won’t be part of the Cloudron app store, not every property in the manifest is required. However, <code>httpPort</code> is mandatory because it’s used by the reverse proxy functionality and for the health check.</p><p><a href="https://git.cloudron.io/apps/findmydevice-app/-/blob/master/Dockerfile" rel="noopener">Dockerfile</a></p><p>The Dockerfile is straightforward: start with the base image, define and create the working directory, and use wget to download the package from GitLab. Unzip it into the working directory, remove unnecessary files, copy the relevant files into <code>/app/pkg</code>, and set up the start command.<a href="https://pad.luckow.org/ajnckTeAS8e86LucUK6v5w?both#configyml"></a></p><p><a href="https://git.cloudron.io/apps/findmydevice-app/-/blob/master/config.yml" rel="noopener">config.yml</a></p><p>Nearly every app requires some configuration. In my case, I found the project’s <a href="https://gitlab.com/Nulide/findmydeviceserver/-/blob/master/config.example.yml" rel="noopener">config.example.yml</a> file.</p><p><code>UnixSocketPath</code>, <code>UnixSocketChmod</code>, <code>PortSecure</code>, and <code>PortInsecure</code> don’t make sense in a Cloudron context. The rest of the configuration should be left for the user to customize with their own values.</p><p>During my hours of packaging the app, I realized that the server wasn’t capable of using the httpPort defined in the manifest. Instead, it defaulted to a random port, which wasn’t ideal for the intended goal. In the end, I had to add the <code>PortInsecure</code> variable and set it to match the port specified in the manifest.</p><p>Since we can, we often tweak defaults. However, to avoid frustrating users, it’s important to address potential support issues—such as the fact that only 8080 works as the <code>PortInsecure</code> variable in <em>my package</em>.</p><p><a href="https://git.cloudron.io/apps/findmydevice-app/-/blob/master/start.sh" rel="noopener">start.sh</a><br>To be fair, the hardest part was feeling like I needed to be a developer to better understand the underlying magic.</p><p><code>set -eu</code> ensures the script crashes when something is undefined instead of running with unspecified behavior. Since we chose <code>localstorage</code> as an add-on in the manifest, we need to create the <code>/app/data</code> folder to store user or app-specific data.</p><p>The <code>if-then-fi</code> loop checks whether <code>config.yml</code> exists. If it doesn’t, the file is copied to the specified location.</p><p><code>yq eval -i ".PortInsecure=8080" /app/data/config.yml</code> is part of the magic I hadn’t encountered before. From what I understand, it searches for the <code>PortInsecure</code> value in the config file and updates it to the correct port. Since every change to the config requires an app restart, and <code>start.sh</code> runs on each restart, the user can modify and save a different port—but not in a persistent state. (potential support issue solved.)</p><p><code>chown -R cloudron:cloudron /app/data</code> changes the owner of the files to the correct user.</p><p>The <code>exec gosu cloudron:cloudron /app/code/findmydeviceserver serve --db-dir=/app/data --config=/app/data/config.yml --web-dir=/app/code/web</code> starts the server with some configuration options with the correct user.</p><h4 id=""><a href="https://pad.luckow.org/ajnckTeAS8e86LucUK6v5w?both#LICENSE"></a></h4><p><a href="https://git.cloudron.io/apps/findmydevice-app/-/blob/master/LICENSE" rel="noopener">LICENSE</a></p><p>Every Cloudron app package is released under an open-source license, which is why we include a License file.</p><h3 id="more-than-nice-to-have"><a href="https://pad.luckow.org/ajnckTeAS8e86LucUK6v5w?both#more-than-nice-to-have"></a>more than nice to have</h3><ul><li>DESCRIPTION.md</li><li>README.md</li><li>CHANGELOG</li><li>logo.png</li><li>screenshots</li></ul><p>They’re nice to have, but they become necessary once the app is submitted to the Cloudron app store.</p><h3 id="sanitation"><a href="https://pad.luckow.org/ajnckTeAS8e86LucUK6v5w?both#Sanitation"></a>Sanitation</h3><ul><li>.dockerignore</li><li>.gitignore</li></ul><p>Normal in software development.</p><h2 id="challenge-accepted-and-completed"><a href="https://pad.luckow.org/ajnckTeAS8e86LucUK6v5w?both#Challenge-accepted-and-completed"></a>Challenge accepted and completed!</h2><p>The moment I took this photo: Unbelievable. The initial package works.</p><figure class="kg-card kg-image-card kg-width-wide kg-card-hascaption"><img src="/content/images/2024/12/remotetakenpicture-1.png" class="kg-image" alt="" loading="lazy" width="1399" height="1097"><figcaption><span style="white-space: pre-wrap;">The image is a split screen, showing three distinct parts.The image is a split screen, showing three distinct parts.The leftmost panel shows a portion of a digital map, likely a navigation or location-based app. It displays light green and tan colors representing land areas, and faint, light-colored lines suggestive of roads or paths. A green bar at the bottom shows controls, including arrow buttons (left and right), and a location marker. The central panel is a close-up view of a person, likely taken by a webcam. The person is wearing a dark-hooded sweatshirt or jacket. Only their head and upper shoulders are visible. Their expression is neutral or slightly concerned, and their eyes are clearly visible. The background is a plain, light gray-beige wall, and a decorative chandelier is visible hanging from the ceiling, casting a slight shadow. The rightmost panel is another, smaller map, in a similar style to the left pane. It's also of a geographic location, displaying areas of vegetation indicated by various shades of green and light tan. There is also a very small, indistinct figure, possibly an icon, on the lower right. Overall, the image seems to be from a screen capturing device showing concurrent map applications and a video conference or screen sharing session.</span></figcaption></figure><h2 id="app-store"><a href="https://pad.luckow.org/ajnckTeAS8e86LucUK6v5w?both#App-store"></a>App store</h2><p>There’s a lot of work to be done after the initial packaging to bring the app to the app store, but that’s a story for another day.</p><h2 id="cloudron">Cloudron</h2><p><a href="https://www.cloudron.io/get.html?mtm_campaign=get&amp;mtm_kwd=blog&amp;ref=blog.cloudron.io" rel="noopener">https://www.cloudron.io/get.html</a><br><a href="https://forum.cloudron.io/category/4/support" rel="noopener">https://forum.cloudron.io/category/4/support</a></p><p></p>
]]></content:encoded></item><item><title>Cloudron 8.1 released</title><link>https://blog.cloudron.io/cloudron-8-1-released/</link><guid>https://blog.cloudron.io/cloudron-8-1-released/</guid><pubDate>Mon, 09 Dec 2024 08:36:48 GMT</pubDate><dc:creator>Girish Ramakrishnan</dc:creator><description>We are happy to announce the release of Cloudron 8.1!
For those unaware, Cloudron is a platform that makes it easy to run web apps like WordPress, Nextcloud, GitLab on your server and keep them up-to-date and secure.
Cloudron 8.1 includes support for Hetzner Object Storage, Gandi PAT and OpenID Groups. It also fixes regressions in Cloudron 8.</description><content:encoded><![CDATA[<p>We are happy to announce the release of Cloudron 8.1!</p><p>For those unaware, Cloudron is a platform that makes it easy to run web apps like WordPress, Nextcloud, GitLab on your server and keep them up-to-date and secure.</p><p>Cloudron 8.1 includes support for Hetzner Object Storage, Gandi PAT and OpenID Groups. It also fixes regressions in <a href="/cloudron-8-0-released/" rel="noreferrer">Cloudron 8</a>.</p><h2 id="hetzner-object-storage">Hetzner Object Storage</h2><p>Hetzner recently released their <a href="https://docs.hetzner.com/storage/object-storage/" rel="noreferrer">S3-Compatible Object Storage</a> . In the Cloudron dashboard, you can choose Hetzner Object Storage as the destination for your backups.</p><figure class="kg-card kg-image-card"><img src="/content/images/2024/12/image.png" class="kg-image" alt="" loading="lazy" width="594" height="519"></figure><h2 id="gandi-pat">Gandi PAT</h2><p>Gandi has obsoleted the old API Keys and introduced <a href="https://docs.gandi.net/en/managing_an_organization/organizations/personal_access_token.html" rel="noreferrer">Personal Access Tokens</a>. Users hosting their domains in Gandi.net are encouraged to move to this new scheme at the earliest. Simple choose the token type as <code>Personal Access Token (PAT)</code> in the Domains view.</p><figure class="kg-card kg-image-card"><img src="/content/images/2024/12/image-1.png" class="kg-image" alt="" loading="lazy" width="594" height="497"></figure><h2 id="openid-groups">OpenID Groups</h2><p>We have added <code>groups</code> claim in OIDC to convey group membership information for a user. In addition, refresh token support has also been enabled.</p><h2 id="other-notable-changes">Other Notable Changes</h2><ul><li>node.js was updated to 20.18.0</li><li>dashboard: various mobile and dark mode fixes</li><li>private registry: add <code>cloudron</code> as a provider</li><li>porkbun: API endpoint changed to <code>https://api.porkbun.com</code></li><li>filemanager: fixed many regressions including broken file upload</li><li>log viewer: handle multi-line messages</li></ul><h2 id="whats-coming-next">What's coming next</h2><p>Head over to our forum to learn more about What's <a href="https://forum.cloudron.io/topic/9975/what-s-coming-in-7-6"><a href="https://forum.cloudron.io/topic/9975/what-s-coming-in-8-2" rel="noreferrer">coming in our next release - 8.2</a></a>.</p><h2 id="install-or-update-cloudron">Install or update Cloudron</h2><p>New to Cloudron? Get started for free by running with 3 simple commands on your server.</p><p>To update an existing installation, simply click on the 'Update now' button on your dashboard.</p>
]]></content:encoded></item><item><title>Cloudron 8 Released</title><link>https://blog.cloudron.io/cloudron-8-0-released/</link><guid>https://blog.cloudron.io/cloudron-8-0-released/</guid><pubDate>Thu, 22 Aug 2024 12:05:10 GMT</pubDate><dc:creator>Girish Ramakrishnan</dc:creator><description>We are happy to announce the release of Cloudron 8!
For those unaware, Cloudron is a platform that makes it easy to run web apps like WordPress, Nextcloud, GitLab on your server and keep them up-to-date and secure.
Cloudron 8.0 has many new features including support for Ubuntu 24.04 LTS (Noble Numbat), IPv6 only servers, Dashboard List view, Login Page background, deSEC integration, File manager dark mode, Admin Notes, Admin Checklists &amp; lots of bug fixes.</description><content:encoded><![CDATA[<p>We are happy to announce the release of Cloudron 8!</p><p>For those unaware, Cloudron is a platform that makes it easy to run web apps like WordPress, Nextcloud, GitLab on your server and keep them up-to-date and secure.</p><p>Cloudron 8.0 has many new features including support for Ubuntu 24.04 LTS (Noble Numbat), IPv6 only servers, Dashboard List view, Login Page background, deSEC integration, File manager dark mode, Admin Notes, Admin Checklists &amp; lots of bug fixes.</p><h2 id="ubuntu-2404-lts">Ubuntu 24.04 LTS</h2><p>Canonical recently <a href="https://canonical.com/blog/canonical-releases-ubuntu-24-04-noble-numbat" rel="noreferrer">released</a> it's new Ubuntu LTS 24.04 LTS Noble Numbat . Cloudron 8 supports Ubuntu 24.04 and it is also the recommended Ubuntu version for new installations. Note that we will continue to support Ubuntu 20.04 and Ubuntu 22.04 for the foreseeable future.</p><p>Users on older Ubuntu versions can upgrade to Ubuntu 24.04 by <a href="https://docs.cloudron.io/guides/upgrade-ubuntu-24/" rel="noreferrer">following our guide</a>.</p><h2 id="ipv6-only-servers">IPv6 Only Servers</h2><p>Recently, there has been a change that Cloud Providers like <a href="https://aws.amazon.com/blogs/aws/new-aws-public-ipv4-address-charge-public-ip-insights/" rel="noreferrer">AWS</a>, <a href="https://docs.hetzner.com/general/others/ipv4-pricing/" rel="noreferrer">Hetzner</a> have started to charge for IPv4 addresses. Cloudron 7.1 <a href="/cloudron-7-1-released/" rel="noreferrer">added</a> IPv6 support but still required an IPv4. Now with Cloudron 8, we support servers which do not have any IPv4.</p><p>We have tested IPv6 only server setups on AWS, Hetzner, Upcloud &amp; Vultr and they work great! As a heads up, IPv6 is a totally separate network protocol from IPv4. As such, if you want to host public facing websites and apps, you should still use servers with IPv4.</p><h2 id="dashboard-enhancements">Dashboard Enhancements</h2><p>Apps can be viewed as a List in the Cloudron Dashboard .</p><figure class="kg-card kg-image-card"><img src="/content/images/2024/08/image.png" class="kg-image" alt="" loading="lazy" width="2000" height="1099"></figure><h2 id="api-docs">API Docs</h2><p>Cloudron API is now stable and fully <a href="https://docs.cloudron.io/api.html" rel="noreferrer">documented</a> .</p><h2 id="reworked-filter-ui">Reworked Filter UI</h2><p>The filter UI has been reworked.</p><p>Use <code>/</code> as shortcut to quickly start searching for a specific app.</p><p>The filter options are now shown inline and sticky instead of the transient popup in previous releases. You can also filter by tag(s).</p><figure class="kg-card kg-image-card"><img src="/content/images/2024/08/image-1.png" class="kg-image" alt="" loading="lazy" width="2000" height="705"></figure><h2 id="login-page-background">Login Page Background</h2><p>The background image for the login pages can be set in the <code>Branding</code> view.</p><figure class="kg-card kg-image-card"><img src="/content/images/2024/08/image-2.png" class="kg-image" alt="" loading="lazy" width="1043" height="729"></figure><h2 id="file-manager-dark-mode">File Manager Dark Mode</h2><p>File Manager now has a dark mode!</p><figure class="kg-card kg-image-card"><img src="/content/images/2024/08/image-3.png" class="kg-image" alt="" loading="lazy" width="2000" height="617"></figure><h2 id="desec-integration">deSEC Integration</h2><p> <a href="https://desec.io/" rel="noreferrer">deSEC</a> is a free DNS hosting service, designed with security in mind. Running on open-source software and supported by SSE, deSEC is free for everyone to use.</p><p>To use the deSEC integration, move your domain over to deSEC and then choose deSEC provider in the dropdown in the Domains view.</p><figure class="kg-card kg-image-card"><img src="/content/images/2024/08/image-4.png" class="kg-image" alt="" loading="lazy" width="590" height="422"></figure><h2 id="app-notes">App Notes</h2><p>App specific notes can be saved in markdown format. Notes are shared by admins. All Admins and App Operators can view and edit them.</p><figure class="kg-card kg-image-card"><img src="/content/images/2024/08/image-5.png" class="kg-image" alt="" loading="lazy" width="830" height="487"></figure><h2 id="admin-checklist">Admin Checklist</h2><p>Cloudron's manifest has been extended to have a <a href="https://docs.cloudron.io/packaging/manifest/#checklist" rel="noreferrer">checklist property</a>. The <code>checklist</code> is a list of items to be completed post installation. The items can be individually tracked - completed or not, by whom and when. Examples include changing the default admin credentials, reviewing registration settings, etc.</p><p>Checklist appears in the <code>Info</code> section of the app.</p><figure class="kg-card kg-image-card"><img src="/content/images/2024/08/image-6.png" class="kg-image" alt="" loading="lazy" width="837" height="314"></figure><p>When a Checklist item is marked as done, the username and date of completion is tracked for audit purposes.</p><figure class="kg-card kg-image-card"><img src="/content/images/2024/08/image-7.png" class="kg-image" alt="" loading="lazy" width="837" height="314"></figure><h2 id="openid-everywhere">OpenID everywhere</h2><p>We have adjusted the app packages of over 60 apps to use Cloudron OpenID Connect. Because the authentication flow goes via the Cloudron Auth Endpoint, we can enforce 2FA, enforce rate limits and various security measures which were impossible with the previous LDAP integration.</p><p>Apps that use the <a href="https://docs.cloudron.io/packaging/addons/#proxyauth" rel="noreferrer"><code>proxyAuth</code></a> addon will also now use OIDC automatically.</p><h2 id="troubleshooting-tool">Troubleshooting tool</h2><p>Dashboard down? Instead of reaching out to support as the first step, we have implemented all our troubleshooting techniques in the <code>cloudron-support</code> tool. Simply run <code>cloudron-support --troubleshoot</code> on the server, and you will get a good idea of what has gone wrong. See the <a href="https://docs.cloudron.io/troubleshooting/" rel="noreferrer">troubleshooting docs</a> for more information.</p><h2 id="app-resources">App Resources</h2><p>We have reworked the memory and CPU allocation mechanism for apps.</p><p>The memory limit that you set in the <code>Resources</code> view translates the Max RAM the app can use. Apps get unlimited swap.</p><p>The previous CPU shares functionality is now CPU limit. With this, you can restrict how much max CPU an app can use.</p><figure class="kg-card kg-image-card"><img src="/content/images/2024/08/image-8.png" class="kg-image" alt="" loading="lazy" width="837" height="421"></figure><h2 id="system-resolver">System Resolver</h2><p>Prior to Cloudron 8, we use <code>unbound</code> as the system wide DNS resolver. Unfortunately, bugs in <code>unbound</code> and various network restrictions has generated much networking related issues.</p><p>To remedy this, we have drastically cut down the role of <code>unbound</code> . Cloudron 8 uses whatever was the server's default system resolver at installation time (usually <code>systemd-resolved</code>). <code>unbound</code> is still used for various recursive DNS queries like propagation and RBL checks.</p><h2 id="non-avx-servers">Non-AVX Servers</h2><p>We removed support for servers without AVX support in Cloudron 7.5. Turns out low-power systems like the ZimaBoard, but also Netcup servers and various other providers still have servers without AVX.</p><p>With Cloudron 8, support for servers without AVX is back! Unfortunately, MongoDB 5 and above <a href="https://www.mongodb.com/docs/manual/administration/production-notes/" rel="noreferrer">still requires</a> AVX. To handle this, when Cloudron is installed on servers without AVX, MongoDB is disabled. As a result, you won't be able to install various apps like Rocket.Chat, Meemo, NodeBB &amp; Wekan.</p><h2 id="hetzner-storage-box">Hetzner Storage Box</h2><p>Many users use <a href="https://docs.hetzner.com/robot/storage-box/" rel="noreferrer">Hetzner Storage Box</a> for storing very large backups. We looked into optimizing backup speed for this specific case.</p><p>For SSHFS mounted Storage Box, we have implemented server side copying. Server side copying allows us to implement hard links correctly and remote copying is 1000x faster. For this reason, we recommend <a href="https://docs.hetzner.com/robot/storage-box/backup-space-ssh-keys/" rel="noreferrer">configuring</a> your Storage Box to use SSHFS.</p><h2 id="other-notable-changes">Other Notable Changes</h2><ul><li>Backups: a long standing issue that backups used to get stuck at zero Mbps is now fixed.</li><li>Dashboard: font and color improvements</li><li>notfound page: better message when navigating by IP address</li><li>CIFS: enable seal encryption by default</li><li>NFS: disable rpcbind service. we only support nfsv4 mounting</li><li>OVH Storage: Fix location URLs and add RBX region</li><li>AMI: <a href="https://aws.amazon.com/about-aws/whats-new/2022/10/amazon-machine-images-support-instance-metadata-service-version-2-default/" rel="noreferrer">IMDv2</a> support</li><li>Mailer: add html version of test mail</li><li>Backups: fix issue with s3 backend where files missing in remote was not detected correctly</li><li>Backup cleaner: do not remove the backup in progress</li></ul><h2 id="whats-coming-next">What's coming next</h2><p>Head over to our forum to learn more about What's <a href="https://forum.cloudron.io/topic/9975/what-s-coming-in-7-6"><a href="https://forum.cloudron.io/topic/9975/what-s-coming-in-8-1" rel="noreferrer">coming in our next release - 8.1</a></a>.</p><h2 id="install-or-update-cloudron">Install or update Cloudron</h2><p>New to Cloudron? Get started for free by running with 3 simple commands on your server.</p><p>To update an existing installation, simply click on the 'Update now' button on your dashboard.</p>
]]></content:encoded></item><item><title>Cloudron 7.7 released</title><link>https://blog.cloudron.io/cloudron-7-7-released/</link><guid>https://blog.cloudron.io/cloudron-7-7-released/</guid><pubDate>Fri, 12 Apr 2024 12:22:02 GMT</pubDate><dc:creator>Girish Ramakrishnan</dc:creator><description>We are happy to announce the release of Cloudron 7.7!
For those unaware, Cloudron is a platform that makes it easy to run web apps like WordPress, Nextcloud, GitLab on your server and keep them up-to-date and secure.
Cloudron 7.7 has many new features including Port Range support, Docker improvements, OIDC Avatar Support, MongoDB 6, User Language Persistence, Cancelable uploads &amp; lots of bug fixes.</description><content:encoded><![CDATA[<p>We are happy to announce the release of Cloudron 7.7!</p><p>For those unaware, Cloudron is a platform that makes it easy to run web apps like WordPress, Nextcloud, GitLab on your server and keep them up-to-date and secure.</p><p>Cloudron 7.7 has many new features including Port Range support, Docker improvements, OIDC Avatar Support, MongoDB 6, User Language Persistence, Cancelable uploads &amp; lots of bug fixes.</p><h2 id="port-range">Port Range</h2><p>Cloudron already provides a way for apps to expose TCP and UDP ports. From 7.7, an app can expose a port range using the optional <code>portCount</code> field in the <a href="https://docs.cloudron.io/packaging/manifest/#tcpports" rel="noreferrer">manifest</a>. This feature is required for various apps like <a href="https://www.azuracast.com/" rel="noreferrer">AzuraCast</a> and <a href="https://github.com/miroslavpejic85/mirotalk" rel="noreferrer">MiroTalk</a>.</p><p>We have published <a href="https://www.cloudron.io/store/com.mirotalksfu.cloudronapp.html" rel="noreferrer">MiroTalk SFU</a>, a Fast Real-Time Video Conference platform that uses an <a href="https://mediasoup.org/documentation/overview/" rel="noreferrer">SFU</a>, that uses this feature.</p><figure class="kg-card kg-image-card"><img src="https://screenshots.cloudron.io/com.mirotalksfu.cloudronapp/mirotalksfu_00.png" class="kg-image" alt="https://screenshots.cloudron.io/com.mirotalksfu.cloudronapp/mirotalksfu_00.png" loading="lazy" width="1414" height="811"></figure><h2 id="docker-improvements">Docker Improvements</h2><p> The docker daemon starts a userland proxy service for port forwarding whenever a port is exposed. This proxy consumes a lot of CPU resources since it is created per exposed port. In 7.7, we have disabled the userland proxy in docker.</p><p>Apps can now also specify an <a href="https://docs.cloudron.io/packaging/manifest/#logpaths" rel="noreferrer">array of log files</a> instead of stdout/stderr using the <code>logPaths</code> field in the manifest.</p><p>Container logging now uses Unix Domain Sockets instead of UDP. This frees up UDP ports for apps.</p><h2 id="oidc-avatar-support">OIDC Avatar Support</h2><p>For apps that support it, Cloudron OIDC now exposes user avatars via the <a href="https://openid.net/specs/openid-connect-basic-1_0.html" rel="noreferrer"><code>picture</code> claim</a>.</p><h2 id="mongodb-6">MongoDB 6</h2><p>MongoDB has been upgraded to <a href="https://www.mongodb.com/docs/manual/release-notes/6.0/" rel="noreferrer">6.0</a>. Apps can now use <a href="https://www.mongodb.com/blog/post/big-reasons-upgrade-mongodb-6-0" rel="noreferrer">several new features</a> of MongoDB including improved support for Time Series Data, more operators and enriched queries.</p><h2 id="cancelable-uploads">Cancelable Uploads</h2><p>File uploads can be canceled midway in the File manager.</p><figure class="kg-card kg-image-card"><img src="/content/images/2024/04/image-1.png" class="kg-image" alt="" loading="lazy" width="2000" height="1059"></figure><h2 id="user-language">User Language</h2><ul><li>Users can select their <a href="https://docs.cloudron.io/profile/#language" rel="noreferrer">Language</a> preference in the profile view. This setting is now persisted across browsers and devices. Note that the login screen still follows the <a href="https://docs.cloudron.io/settings/#language" rel="noreferrer">global language setting</a> chosen by the admin.</li></ul><figure class="kg-card kg-image-card"><img src="https://docs.cloudron.io/img/profile-language.png" class="kg-image" alt="" loading="lazy" width="783" height="335"></figure><h2 id="other-notable-changes">Other Notable Changes</h2><ul><li>backupcleaner: fix bug where preserved backups were removed incorrectly</li><li>oidc/ldap: fix display name parsing to send anything after first name as the last name</li><li>email: use secp256r1 curve certificates to improve deliverability</li><li>dashboard: use native slider element for app memory and CPU</li><li>dashboard: preserve app link paths</li><li>backups: deleted apps must also be displayed in contents</li><li>Postgres: add <a href="https://github.com/tensorchord/pgvecto.rs" rel="noreferrer">vecto.rs</a> extension support for immich</li></ul><h2 id="whats-coming-next">What's coming next</h2><p>Head over to our forum to learn more about What's <a href="https://forum.cloudron.io/topic/9975/what-s-coming-in-7-6"><a href="https://forum.cloudron.io/topic/11531/what-s-coming-in-8-0" rel="noreferrer">coming in our next release - 8.0</a></a>.</p><h2 id="install-or-update-cloudron">Install or update Cloudron</h2><p>New to Cloudron? Get started for free by running with 3 simple commands on your server.</p><p>To update an existing installation, simply click on the 'Update now' button on your dashboard.</p>
]]></content:encoded></item><item><title>Cloudron 7.6 released</title><link>https://blog.cloudron.io/cloudron-7-6-released/</link><guid>https://blog.cloudron.io/cloudron-7-6-released/</guid><pubDate>Thu, 08 Feb 2024 15:19:28 GMT</pubDate><dc:creator>Girish Ramakrishnan</dc:creator><description>We are happy to announce the release of Cloudron 7.6!
For those unaware, Cloudron is a platform that makes it easy to run web apps like WordPress, Nextcloud, GitLab on your server and keep them up-to-date and secure.
Cloudron 7.6 has many new features including MongoDB 5, New base image, OVH DNS backend, DNSimple DNS backend, System Info, Editable Volumes, Color-keyed notifications, External Directory Connector improvements &amp; lots of bug fixes.</description><content:encoded><![CDATA[<p>We are happy to announce the release of Cloudron 7.6!</p><p>For those unaware, Cloudron is a platform that makes it easy to run web apps like WordPress, Nextcloud, GitLab on your server and keep them up-to-date and secure.</p><p>Cloudron 7.6 has many new features including MongoDB 5, New base image, OVH DNS backend, DNSimple DNS backend, System Info, Editable Volumes, Color-keyed notifications, External Directory Connector improvements &amp; lots of bug fixes.</p><h2 id="important-deprecation-notice">Important Deprecation Notice</h2><p>Cloudron 7.6 upgraded MongoDB to 5.0 which requires AVX. For this reason, Cloudron 7.6 will not install on CPUs without AVX. See <a href="https://forum.cloudron.io/topic/8785/avx-support-in-your-vps-server">https://forum.cloudron.io/topic/8785/avx-support-in-your-vps-server</a> for more information.</p><h2 id="new-base-image-420">New Base Image 4.2.0</h2><p>The docker base image is now based on Ubuntu Jammy 22.04 LTS. The digest is:</p><p><code>cloudron/base:4.2.0@sha256:46da2fffb36353ef714f97ae8e962bd2c212ca091108d768ba473078319a47f4</code>.</p><h2 id="ovh-dns">OVH DNS</h2><p><a href="https://www.ovhcloud.com/" rel="noreferrer">OVHCloud</a> is the largest hosting provider in Europe. If your domain is hosted on OVH, choose <code>OVH</code> in the drop-down when configuring a domain.</p><figure class="kg-card kg-image-card"><img src="https://docs.cloudron.io/img/domains-ovh.png" class="kg-image" alt="" loading="lazy" width="1179" height="1289"></figure><h2 id="dnsimple">DNSimple</h2><p><a href="https://dnsimple.com" rel="noreferrer">DNSimple</a> is a secure &amp; simple DNS hosting provider . If your domain is hosted on DNSimple, you can choose <code>DNSimple</code> in the provider drop-down in the <code>Domains</code> view.</p><figure class="kg-card kg-image-card"><img src="https://docs.cloudron.io/img/domains-dnsimple.png" class="kg-image" alt="" loading="lazy" width="1178" height="844"></figure><h2 id="system-info">System Info</h2><p><a href="https://en.wikipedia.org/wiki/System_Management_BIOS" rel="noreferrer">SMBIOS</a> information like Vendor and Product is displayed in the <code>System</code> view.</p><figure class="kg-card kg-image-card"><img src="https://docs.cloudron.io/img/system-info.png" class="kg-image" alt="" loading="lazy" width="2352" height="554"></figure><h2 id="color-keyed-notifications">Color-keyed Notifications</h2><p>Notifications are colored based on their type. Important notifications requiring action including reboot required, certificate renewal failures, backup failures are marked in red. Updates are highlighted with blue.</p><figure class="kg-card kg-image-card"><img src="/content/images/2024/02/image.png" class="kg-image" alt="" loading="lazy" width="1486" height="447"></figure><h2 id="editable-volumes">Editable Volumes</h2><p>Mount configuration of Volumes like host name, username, password and remote location can be changed at any time.</p><figure class="kg-card kg-image-card"><img src="/content/images/2024/02/image-1.png" class="kg-image" alt="" loading="lazy" width="1178" height="988"></figure><h2 id="external-directory">External Directory</h2><p>The <a href="https://docs.cloudron.io/user-directory/#external-directory" rel="noreferrer">External Directory</a> connector allows users from an existing LDAP or Active Directory to authenticate with Cloudron. Logs and sync progress can be viewed using the <code>Logs</code> dropdown on the top right.</p><figure class="kg-card kg-image-card"><img src="https://docs.cloudron.io/img/user-directory-external-ldap-sync.png" class="kg-image" alt="" loading="lazy" width="1995" height="651"></figure><p>We have also made many improvements in this release:</p><ul><li>2FA Behavior: When using another Cloudron as an authentication provider, 2FA of the external directory is used. When using other providers, users can setup 2FA locally.</li><li>User Attributes: The user's role and active state are local and not synced from LDAP.</li><li>Groups Behavior: When <code>Sync Groups</code> is enabled, groups will be automatically created and users will be associated. External Groups are readonly and cannot be edited.</li><li>Sync Behavior: The local directory is synced with the external directory every 4 hours.</li><li>Keep/Make Local: This feature has been removed. It never worked properly because local users were overwritten with the next sync.</li></ul><h2 id="other-notable-changes">Other Notable Changes</h2><ul><li>turn: add DDoS mitigation settings</li><li>mail: add option to enable/disable Virtual All mailbox</li><li>app proxy: Host header is set to match the proxy domain instead of the target domain</li><li>oidc: add oidc logo as login indicator for apps</li><li>dyndns: update DNS every 10 mins</li><li>Cleanup backup validation mount point</li><li>dashboard: remove nginx config of old domain when domain changed</li><li>roles: admin role can access branding and networking</li><li>dockerproxy: allow child containers to access volumes</li><li>postgres: enable cube, vector and earthdistance extensions</li><li>support: replace ticket section with help section</li><li>firewall: increase blocklist size to 262144</li><li>profile: changing email now requires password</li></ul><h2 id="whats-coming-next">What's coming next</h2><p>Head over to our forum to learn more about What's <a href="https://forum.cloudron.io/topic/9975/what-s-coming-in-7-6"><a href="https://forum.cloudron.io/topic/9975/what-s-coming-in-8-0-was-7-6" rel="noreferrer">coming in our next release - 8.0</a></a>.</p><h2 id="install-or-update-cloudron">Install or update Cloudron</h2><p>New to Cloudron? Get started for free by running with 3 simple commands on your server.</p><p>To update an existing installation, simply click on the 'Update now' button on your dashboard.</p>
]]></content:encoded></item><item><title>Cloudron 7.5 released</title><link>https://blog.cloudron.io/cloudron-7-5-released/</link><guid>https://blog.cloudron.io/cloudron-7-5-released/</guid><pubDate>Tue, 05 Sep 2023 15:05:11 GMT</pubDate><dc:creator>Girish Ramakrishnan</dc:creator><description>We are happy to announce the release of Cloudron 7.5!
For those unaware, Cloudron is a platform that makes it easy to run web apps like WordPress, Nextcloud, GitLab on your server and keep them up-to-date and secure.
Cloudron 7.5 has many new features including Contabo Object Storage, Trusted IPs, New File Manager UI, Task Logs, Optional App Services, Virtual All Mails Mailbox &amp; lots of bug fixes.</description><content:encoded><![CDATA[<p>We are happy to announce the release of Cloudron 7.5!</p><p>For those unaware, Cloudron is a platform that makes it easy to run web apps like WordPress, Nextcloud, GitLab on your server and keep them up-to-date and secure.</p><p>Cloudron 7.5 has many new features including Contabo Object Storage, Trusted IPs, New File Manager UI, Task Logs, Optional App Services, Virtual All Mails Mailbox &amp; lots of bug fixes.</p><h2 id="important-deprecation-notices">Important Deprecation Notices</h2><p>Support for Ubuntu 18.04 ended with Cloudron 7.4. This release does not support Ubuntu 18.04 and attempts to update will fail.</p><p>This is the last release of Cloudron to support CPUs without AVX support. AVX support is required for MongoDB 5.0. See <a href="https://forum.cloudron.io/topic/8785/avx-support-in-your-vps-server">https://forum.cloudron.io/topic/8785/avx-support-in-your-vps-server</a> for more information.</p><h2 id="contabo-object-storage">Contabo Object Storage</h2><p><a href="https://docs.contabo.com/docs/products/Object-Storage/what-is/">Contabo Object Storage</a> is S3 compatible Object Storage from Contabo. To configure Cloudron to use Contabo Object Storage, choose the <code>Contabo Object Storage</code> in the Backups Configure UI.</p><figure class="kg-card kg-image-card"><img src="/content/images/2023/09/image.png" class="kg-image" alt loading="lazy" width="1182" height="1031"></figure><h2 id="trusted-ips">Trusted IPs</h2><p>When Cloudron is behind an HTTP(S) proxy like Cloudflare or Nginx Proxy Manager, you can set the IP address(es) of the proxy as trusted. Doing so will make sure Cloudron trusts the values of various proxy related HTTP headers like <code>X-Forwarded-For</code> in the request.</p><figure class="kg-card kg-image-card"><img src="/content/images/2023/09/image-1.png" class="kg-image" alt loading="lazy" width="1184" height="583"></figure><h2 id="new-file-manager-ui">New File Manager UI</h2><p>The new File Manager UI supports very large folders and lazy loading. Internally, we are slowly porting our frontend to <a href="https://vuejs.org/">Vue.js</a> and <a href="https://primevue.org/">PrimeVue</a> . The File Manager, Web Terminal &amp; Log Viewer are already ported. The code is structured as a shared component library named <a href="https://git.cloudron.io/cloudron/pankow/">Pankow</a>. This allows us to reuse the file listing in various apps like Surfer and Cubby.</p><figure class="kg-card kg-image-card"><img src="/content/images/2023/09/image-2.png" class="kg-image" alt loading="lazy" width="2000" height="889"></figure><h2 id="task-logs">Task Logs</h2><p>Cloudron has many background tasks - Certificate renewal, Dynamic DNS, Sync DNS, Mail Server Location Change, Backup Cleaner etc. The history and logs of all the background tasks is now exposed in the UI.</p><figure class="kg-card kg-image-card"><img src="/content/images/2023/09/image-3.png" class="kg-image" alt loading="lazy" width="1557" height="389"></figure><figure class="kg-card kg-image-card"><img src="/content/images/2023/09/image-4.png" class="kg-image" alt loading="lazy" width="1555" height="401"></figure><h2 id="optional-app-services">Optional App Services</h2><p>Redis and TURN configuration of an app can be turned on/off dynamically in the <code>Services</code> section.</p><figure class="kg-card kg-image-card"><img src="/content/images/2023/09/image-5.png" class="kg-image" alt loading="lazy" width="1689" height="779"></figure><h2 id="virtual-all-mails-mailbox">Virtual All Mails Mailbox</h2><p>Cloudron mail server is now configured to expose a virtual <code>All Mails</code> folder (thanks to Dovecot). Some mail clients (like SnappyMail) do not support recursive folder search. Using this folder, you can easily search all your emails in such clients. You can read more about the status of search in various email clients in <a href="/email-search-in-mail-clients/">our blog</a>.</p><h2 id="other-notable-changes">Other Notable Changes</h2><ul><li>Update Redis to 7.0.11, Docker to 23.0.6 and Haraka to 3.0.2</li><li>Ionos Profitbricks: add new regions Berlin and Logrono</li><li>mail: fix issue where client IP was leaked in headers</li><li>Dashboard now uses OIDC for login</li><li>Redirections: Use 301 (permanent) instead of 302 (temporary) for redirections. This is better for SEO.</li><li>Major overhaul of the REST API. Please note that the docs are still being updated as of this writing to reflect the new API routes.</li><li>Fix import via SSHFS and CIFS.</li></ul><h2 id="whats-coming-next">What's coming next</h2><p>Head over to our forum to learn more about What's <a href="https://forum.cloudron.io/topic/9975/what-s-coming-in-7-6">coming in our next release - 7.6</a>.</p><h2 id="install-or-update-cloudron">Install or update Cloudron</h2><p>New to Cloudron? Get started for free by running with 3 simple commands on your server.</p><p>To update an existing installation, simply click on the 'Update now' button on your dashboard.</p>
]]></content:encoded></item><item><title>Email search in mail clients</title><link>https://blog.cloudron.io/email-search-in-mail-clients/</link><guid>https://blog.cloudron.io/email-search-in-mail-clients/</guid><pubDate>Fri, 28 Jul 2023 16:31:16 GMT</pubDate><dc:creator>Girish Ramakrishnan</dc:creator><description>I have been researching whether it's necessary to implement a Virtual "All Mail" directory in the Cloudron Mail Server. Cloudron already implements Full Text Search of all emails via Solr. As part of this research, I wanted to answer the following questions:
How does the mail client perform search?What's the best way to search in the mail client?Will the mail client benefit from having a "All Mails" folder?Should all users be automatically subscribed to "All Mails" folder?What is the current status of search in the mail client (bug reports, issues etc)?Search IndexOn the server side, we use Dovecot as our IMAP server. IMAP has a "SEARCH" command. Per the RFC 3501, the SEARCH command is a case-insensitive substring operation. By default, Dovecot does a slow sequential search through all messages.</description><content:encoded><![CDATA[<p>I have been researching whether it's necessary to implement a <a href="https://forum.cloudron.io/topic/6391/virtual-all-mails-folder-in-dovecot-to-improve-search">Virtual "All Mail"</a> directory in the <a href="https://docs.cloudron.io/email/">Cloudron Mail Server</a>. Cloudron already implements <a href="https://docs.cloudron.io/email/#full-text-search">Full Text Search</a> of all emails via Solr. As part of this research, I wanted to answer the following questions:</p><ul><li>How does the mail client perform search?</li><li>What's the best way to search in the mail client?</li><li>Will the mail client benefit from having a "All Mails" folder?</li><li>Should all users be automatically subscribed to "All Mails" folder?</li><li>What is the current status of search in the mail client (bug reports, issues etc)?</li></ul><h3 id="search-index">Search Index</h3><p>On the server side, we use <a href="https://www.dovecot.org/">Dovecot</a> as our IMAP server. IMAP has a "SEARCH" command. Per the <a href="https://www.rfc-editor.org/rfc/rfc3501#section-6.4.4">RFC 3501</a>, the SEARCH command is a case-insensitive substring operation. By default, Dovecot does a slow sequential search through all messages.</p><p>To speed up search, Dovecot can index messages using the <a href="https://doc.dovecot.org/configuration_manual/fts/solr/#fts-backend-solr">Solr FTS Engine</a>. Solr has a "schema" which specifies the kind of index it maintains. A schema can specify the min/max length of works, min/max ngram length for start/end string matching, stop words, stemming algorithm, word delimiters etc. A number of compromises need to made to keep the size of the index reasonable. On Cloudron, we went with:</p><ul><li>Minimum 3 letters needed for a search</li><li>Can only search for start of a string (EdgeNGramFilter)</li><li>Uses Porter Stem</li></ul><h3 id="imap-search">IMAP Search </h3><p>While we maintain a search index on the server, we are still reliant on the email client to actually issue the SEARCH command. The SEARCH command only searches a single folder and is not recursive. The mail client has to recurse each folder, issue SEARCH command and collate the results.</p><p>The MULTISEARCH command in <a href="https://datatracker.ietf.org/doc/html/rfc7377">RFC 7377</a> allows searching multiple folders in a single shot, but there is no support for this in Dovecot yet. This <a href="https://www.mail-archive.com/dovecot%40dovecot.org/msg80346.html">mail thread</a> suggests creating a virtual folder which has all the mails to search in.</p><p>Adding the virtual folder in Dovecot is <a href="https://doc.dovecot.org/configuration_manual/virtual_plugin/">easy enough</a>, but do mail clients support searching nicely with it? Let's see.</p><h2 id="roundcube">Roundcube</h2><p>Roundcube is able to search recursively using IMAP SEARCH. For this, one has to select "Entire message" and scope "All folders" before searching.</p><p>Roundcube shows only subscribed folders. If the "All Mails" folder was auto-subscribed the search results appear twice (despite the "All Mails" folder having the <code>\ALL</code> flag).</p><p>Unfortunately, there is no way keep the search options selected to 'Entire Message' and 'All folders' by default. We have submitted a <a href="https://github.com/roundcube/roundcubemail/issues/7556">patch upstream</a> to remedy this.</p><figure class="kg-card kg-image-card"><img src="/content/images/2023/07/image-1.png" class="kg-image" alt loading="lazy" width="1114" height="825"></figure><h3 id="sogo">SOGo</h3><p>SOGo is able to search recursively using IMAP SEARCH . For this, you have to click on the three dots to the right of the <code>INBOX</code>, select <code>BODY</code> in criteria and search.</p><p>A caveat: SOGo shows all folders by default. This means that <code>All Mails</code> folder will appear even if not subscribed automatically. If you search using the three dots to the right of the mailbox name, search results appear twice.</p><p>A nice touch in SOGo UI is that it shows the folder name <code>WIP</code> in the search results.</p><figure class="kg-card kg-image-card"><img src="/content/images/2023/07/image-3.png" class="kg-image" alt loading="lazy" width="1304" height="669"></figure><h3 id="snappymail">SnappyMail</h3><p>SnappyMail <a href="https://github.com/the-djmaze/snappymail/issues/154">does not implement</a> recursive SEARCH . However, it's the only client I am aware of that implements MULTISEARCH. Unfortunately, there is no way to test this because Dovecot doesn't implement it.</p><p>The <a href="https://github.com/the-djmaze/snappymail/issues/154">suggested solution</a> for SnappyMail is to search by selecting the virtual <code>All Mails</code> folder. Caveat: the free flowing search input box does not search the email body! You can click the options arrow to the right on the search input box and put the text to search in the body field in the resulting popup. Quite cumbersome but functional. We have made a suggestion to search the body by default <a href="https://github.com/the-djmaze/snappymail/issues/196">here</a> .</p><figure class="kg-card kg-image-card"><img src="/content/images/2023/07/image-4.png" class="kg-image" alt loading="lazy" width="1312" height="1055"></figure><h3 id="k-9">K-9</h3><p>In <a href="https://k9mail.app/">K-9</a> , searches are local by default. After you search once, One clicks the "cloud icon" in top of the search results bar to get server side results. Unfortunately, the devil is the details and the functionality barely works:</p><ul><li>The server search <a href="https://github.com/thundernest/k-9/issues/699">does not search</a> the message body.</li><li>The server search <a href="https://github.com/thundernest/k-9/issues/649">does not recurse</a>.</li><li>On the plus side, lots of search functionality is <a href="https://github.com/thundernest/k-9/issues/4513">planned</a>.</li></ul><figure class="kg-card kg-image-card"><img src="/content/images/2023/07/image-6.png" class="kg-image" alt loading="lazy" width="579" height="189"></figure><h2 id="thunderbird">Thunderbird</h2><p>Thunderbird has a multitude of ways to search:</p><ul><li>Global Search (Ctrl+K)</li><li>Quick Filter bar (Ctrl+Shift+K)</li><li>Classic Search (Ctrl+Shift+F)</li></ul><p>The first two searches only search locally (GLODA or Global Database in thunderbird lingo).</p><p>The Classic Search has options to search remotely and recursively. The search results also show the folder in which the mail was found. The <code>Open in Folder</code> button will also open the corresponding folder and mail in the main window.</p><p>There is a <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=564168">long open bug report</a> on make the QuickSearch automatically use Server side search. It was opened 13 years ago, so I won't hold my breath for that one :-)</p><figure class="kg-card kg-image-card"><img src="/content/images/2023/07/image-8.png" class="kg-image" alt loading="lazy" width="1549" height="1097"></figure><h3 id="conclusion">Conclusion</h3><p>Of the analyzed mail clients, only SnappyMail can benefit from the <code>All Mails</code> virtual folder. Rest of them can already do recursive search or in the case of K-9 cannot search even if we had the virtual folder.</p><p>We have decided to add the <code>All Mails</code> folder considering that maybe there are other mail clients that can benefit from it. At least, it's not harming the ones we analyzed.</p>
]]></content:encoded></item></channel></rss>