<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[XMPP Server - Prosody]]></title><description><![CDATA[<p dir="auto">This ties into the following wishlist items:</p>
<ul>
<li><a href="https://forum.cloudron.io/topic/7755/openfire-xmpp-server">https://forum.cloudron.io/topic/7755/openfire-xmpp-server</a></li>
<li><a href="https://forum.cloudron.io/topic/2486/ejabberd-robust-scalable-and-extensible-realtime-server-using-xmpp-mqtt-and-sip">https://forum.cloudron.io/topic/2486/ejabberd-robust-scalable-and-extensible-realtime-server-using-xmpp-mqtt-and-sip</a></li>
<li><a href="https://forum.cloudron.io/topic/4188/snikket-server-your-own-messaging-server-in-a-box">https://forum.cloudron.io/topic/4188/snikket-server-your-own-messaging-server-in-a-box</a></li>
</ul>
<p dir="auto">These are the three "main" XMPP servers out there (with Snikket being a simplified deploment of Prosody). I think most of the people making these requests don't actually care which server is used - as long as it has the common modules, like roster, OMEMO encryption, file upload, etc.</p>
<p dir="auto">I have chosen to package Prosody over the others because:</p>
<ul>
<li>OpenFire - I know nothing about it</li>
<li>ejabberd - It's what is running on my server and the configuration for it is a pain</li>
<li>Snikket - it's TOO simple, not giving us options to configure things</li>
</ul>
<p dir="auto">While <a href="https://github.com/prosody/prosody-docker/tree/master" target="_blank" rel="noopener noreferrer nofollow ugc">Prosody does have its own docker image</a>, I started from <a href="https://github.com/SaraSmiseth/prosody" target="_blank" rel="noopener noreferrer nofollow ugc">a different one</a> because it has a sensible set of defaults baked in, is easy to extend, and is making use of environment variables for a lot of the configuration. Since Cloudron can inject environment variables with addons, I thought it would be easy to map Cloudron's environment variables to the ones expected by this container.</p>
<p dir="auto">Here's where I'm at:</p>
<ul>
<li><a href="https://github.com/DerekJarvis/cloudron-prosody" target="_blank" rel="noopener noreferrer nofollow ugc">I've made a repostory</a></li>
<li><a href="https://hub.docker.com/r/derekjarvis/cloudron-prosody" target="_blank" rel="noopener noreferrer nofollow ugc">I've built a docker image</a></li>
<li>I've tried to install it</li>
</ul>
<p dir="auto">Addons being used:</p>
<ul>
<li>tls - The app needs the certs to secure information on a number of ports other than HTTP</li>
<li>ldap - I want to do SSO</li>
<li>storage - The app needs to store data for message history, uploads, etc.</li>
</ul>
<p dir="auto">Upon install I'm getting an error related to me trying to create the cert structure described here: <a href="https://github.com/SaraSmiseth/prosody/tree/dev#ssl-certificates" target="_blank" rel="noopener noreferrer nofollow ugc">https://github.com/SaraSmiseth/prosody/tree/dev#ssl-certificates</a></p>
<pre><code>mkdir: cannot create directory '/usr/local/etc/prosody/certs/upload.xmpp.domain.tld': Read-only file system
</code></pre>
<p dir="auto">My plan for managing the SSL certs was to have the entrypoint script create the directory structure required by the app within the <code>/app/data</code> folder, copy the certs as provided by the tls addon, and symlink that directory to the expected directory <code>/usr/local/var/lib/prosody</code>. From what I've read, there are a few hard-coded things in prosody that may be difficult to change - which is why I'm trying to find a way to put the certs where it expects to find them.</p>
<p dir="auto">So now I need some help figuring out the best way to deal with this read-only file system issue. Help would be greatly appreciated! <img src="https://forum.cloudron.io/assets/plugins/nodebb-plugin-emoji/emoji/android/1f642.png?v=c3aa4c12b7e" class="not-responsive emoji emoji-android emoji--slightly_smiling_face" style="height:23px;width:auto;vertical-align:middle" title=":)" alt="🙂" /></p>
<p dir="auto">Other Notes:<br />
There's a health check module for prosody that can also serve up a status through HTTP. I am planning to use this for the required healthcheck endpoint, and since an HTTP endpoint is generally not used for this application I also want to put it behind auth. The only purpose this HTTP endpoint serves is for the mandatory health check for the Manifest.</p>
]]></description><link>https://forum.cloudron.io/topic/10465/xmpp-server-prosody</link><generator>RSS for Node</generator><lastBuildDate>Sun, 08 Mar 2026 21:10:07 GMT</lastBuildDate><atom:link href="https://forum.cloudron.io/topic/10465.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 19 Nov 2023 06:10:30 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to XMPP Server - Prosody on Tue, 13 Jan 2026 12:27:33 GMT]]></title><description><![CDATA[<p dir="auto">Lets support Prosody XMPP server on Cloudron, now that we have Cloudron 9.<br />
<a href="https://github.com/prosody/prosody-docker" target="_blank" rel="noopener noreferrer nofollow ugc">https://github.com/prosody/prosody-docker</a></p>
<p dir="auto">Docker seems to be the new official way of installing Prosody.</p>
]]></description><link>https://forum.cloudron.io/post/118406</link><guid isPermaLink="true">https://forum.cloudron.io/post/118406</guid><dc:creator><![CDATA[LoudLemur]]></dc:creator><pubDate>Tue, 13 Jan 2026 12:27:33 GMT</pubDate></item><item><title><![CDATA[Reply to XMPP Server - Prosody on Fri, 28 Nov 2025 05:32:57 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/nebulon" aria-label="Profile: nebulon">@<bdi>nebulon</bdi></a> - Congrats on the release of version 9! One of my servers just updated and the new UI looks slick. When will we get to see a slick new XMPP app in the store? <img src="https://forum.cloudron.io/assets/plugins/nodebb-plugin-emoji/emoji/android/1f604.png?v=c3aa4c12b7e" class="not-responsive emoji emoji-android emoji--smile" style="height:23px;width:auto;vertical-align:middle" title=":D" alt="😄" /></p>
]]></description><link>https://forum.cloudron.io/post/116149</link><guid isPermaLink="true">https://forum.cloudron.io/post/116149</guid><dc:creator><![CDATA[djxx]]></dc:creator><pubDate>Fri, 28 Nov 2025 05:32:57 GMT</pubDate></item><item><title><![CDATA[Reply to XMPP Server - Prosody on Mon, 02 Jun 2025 00:14:52 GMT]]></title><description><![CDATA[<p dir="auto">I'm happy to say that I've moved my XMPP server from NethServer to Cloudron. While this is probably not a common move, I am sharing some notes here in case it helps someone else. Also, perhaps this'll cause Cloudron to show up in a few more searches. <img src="https://forum.cloudron.io/assets/plugins/nodebb-plugin-emoji/emoji/android/1f604.png?v=c3aa4c12b7e" class="not-responsive emoji emoji-android emoji--smile" style="height:23px;width:auto;vertical-align:middle" title=":D" alt="😄" /></p>
<ul>
<li>
<p dir="auto">Install XMPP on Cloudron using the steps above. A bit manual for now!</p>
</li>
<li>
<p dir="auto">Dump your ejabberd data (that's the XMPP server NethServer uses) with this command:<br />
<code>/opt/ejabberd-20.04/bin/ejabberdctl --config-dir /etc/ejabberd dump /etc/ejabberd/xmpp_dump.txt</code></p>
</li>
<li>
<p dir="auto">Download this dump file locally</p>
</li>
<li>
<p dir="auto">For ease, clone the source for <a href="https://github.com/bjc/prosody" target="_blank" rel="noopener noreferrer nofollow ugc">prosody</a> to your local computer so you can utilize the migration tools and not install needless packages on Cloudron. You'll need to run ./configure and ./make - but you don't need to actually install it.</p>
</li>
<li>
<p dir="auto">Don't be a Lua noob. I spent a while struggling to get my Lua environment setup, and thought I needed to run the tools like <code>lua ejabberd2prosody.lua</code> but got lots of errors about dependencies missing. Once I figured out you need to execute it directly like <code>./ejabberd2prosody.lua</code> things worked fine.</p>
</li>
<li>
<p dir="auto">run the <code>ejabberd2prosody.lua</code> script on your <code>xmpp_dump.txt</code> file:<br />
<code>./tools/ejabberd2prosody.lua ~/Desktop/xmpp_migrate/xmpp_dump.txt</code></p>
</li>
<li>
<p dir="auto">Create a migrator configuration (or use the one I've pasted below). It basically takes everything from the file data format and puts it into the sqlite format, since that's how the Cloudron prosody is configured. Docs:</p>
<ul>
<li><a href="https://prosody.im/doc/migrator" target="_blank" rel="noopener noreferrer nofollow ugc">https://prosody.im/doc/migrator</a></li>
<li><a href="https://prosody.im/doc/storage" target="_blank" rel="noopener noreferrer nofollow ugc">https://prosody.im/doc/storage</a><br />
 </li>
</ul>
</li>
<li>
<p dir="auto">Run the migrator script:<br />
<code>./tools/migration/prosody-migrator.lua --config=./migrator.cfg.lua prosody_files database</code></p>
</li>
<li>
<p dir="auto">Turn off your Cloudron XMPP app</p>
</li>
<li>
<p dir="auto">Copy the resulting <code>prosody.sqlite</code> file into your Cloudron XMPP's <code>/app/data</code> folder. It will be in the <code>/data</code> folder under your local prosody directory.</p>
</li>
<li>
<p dir="auto">Turn on your Cloudron XMPP app</p>
</li>
</ul>
<p dir="auto">Your bookmarks, rosters, etc. will now be transferred to your new server! This doesn't appear to move archive messages (mod_mam). Probably because most prosody servers aren't configured to store these permanently so they don't bother migrating them.</p>
<p dir="auto">I only noticed one issue while migrating. When I first ran the migrator script it gave me errors about topics being empty on some MUCs. I thought I was being smart and edited the code to handle the blanks. This caused me to be unable to join the MUCs on Prosody on certain XMPP clients because Prosody expects there to be a Topic for every MUC.</p>
<p dir="auto">Once I manually adjusted the MUC topics to be non-empty, the other clients started working fine.</p>
<p dir="auto">Another almost-issue is that Gajim needed to be restarted a few times to start using OMEMO properly. I think the other MUC issues may have thrown it into an error state.</p>
<pre><code>prosody_files {
    hosts = {
        -- each VirtualHost to be migrated must be represented
        ["domain.com"] = {
            "accounts";
            "account_details";
            "account_flags";
            "account_roles";
            "accounts_cleanup";
            "auth_tokens";
            "invite_token";
            "roster";
            "vcard";
            "vcard_muc";
            "private";
            "blocklist";
            "privacy";
            "archive";
            "archive_cleanup";
            "archive_prefs";
            "muc_log";
            "muc_log_cleanup";
            "persistent";
            "config";
            "state";
            "cloud_notify";
            "cron";
            "offline";
            "pubsub_nodes";
            "pubsub_data";
            "pep";
            "pep_data";
            "skeletons";
            "smacks_h";
            "tombstones";
            "upload_stats";
            "uploads";
        };
        ["conference.domain.com"] = {
            "accounts";
            "account_details";
            "account_flags";
            "account_roles";
            "accounts_cleanup";
            "auth_tokens";
            "invite_token";
            "roster";
            "vcard";
            "vcard_muc";
            "private";
            "blocklist";
            "privacy";
            "archive";
            "archive_cleanup";
            "archive_prefs";
            "muc_log";
            "muc_log_cleanup";
            "persistent";
            "config";
            "state";
            "cloud_notify";
            "cron";
            "offline";
            "pubsub_nodes";
            "pubsub_data";
            "pep";
            "pep_data";
            "skeletons";
            "smacks_h";
            "tombstones";
            "upload_stats";
            "uploads";
        };
    };

    type = "internal"; -- the default file based backend
    path = "/home/user/code/prosody-build/prosody-0.12.4/data/";
}

database {
    -- The migration target does not need 'hosts'
    type = "sql";
    driver = "SQLite3";
    database = "prosody.sqlite";
}
</code></pre>
]]></description><link>https://forum.cloudron.io/post/108002</link><guid isPermaLink="true">https://forum.cloudron.io/post/108002</guid><dc:creator><![CDATA[djxx]]></dc:creator><pubDate>Mon, 02 Jun 2025 00:14:52 GMT</pubDate></item><item><title><![CDATA[Reply to XMPP Server - Prosody on Sun, 01 Jun 2025 08:08:41 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/djxx" aria-label="Profile: djxx">@<bdi>djxx</bdi></a> we currently have no ETA for Cloudron 9, but also for this specific case, we haven't implemented anything yet.</p>
<p dir="auto">I do think eventually we will get there to have better support for non-ui or just backend apps so to speak.</p>
]]></description><link>https://forum.cloudron.io/post/107965</link><guid isPermaLink="true">https://forum.cloudron.io/post/107965</guid><dc:creator><![CDATA[nebulon]]></dc:creator><pubDate>Sun, 01 Jun 2025 08:08:41 GMT</pubDate></item><item><title><![CDATA[Reply to XMPP Server - Prosody on Thu, 29 May 2025 20:31:57 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/nebulon" aria-label="Profile: nebulon">@<bdi>nebulon</bdi></a>  - as you may see from my other posts, I'm all in on Cloudron ;). I'm in the process of migrating my last server from NethServer to Cloudron; XMPP is one of those services I couldn't move without. I plan to move forward with my manual approach in this thread, but am still interested to see when this could become an official app. Does Cloudron 9 have an ETA?</p>
]]></description><link>https://forum.cloudron.io/post/107889</link><guid isPermaLink="true">https://forum.cloudron.io/post/107889</guid><dc:creator><![CDATA[djxx]]></dc:creator><pubDate>Thu, 29 May 2025 20:31:57 GMT</pubDate></item><item><title><![CDATA[Reply to XMPP Server - Prosody on Thu, 10 Apr 2025 22:38:25 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/djxx" aria-label="Profile: djxx">@<bdi>djxx</bdi></a> Appreciate the response.</p>
<p dir="auto">We already have some apps that require a secondary domain on the front end, but that isn't necessarily the case for the backend. We just need Nginx to route things as expected by the clients, etc.</p>
<p dir="auto">Glad you're here, packaging and interested in this stuff working.</p>
]]></description><link>https://forum.cloudron.io/post/105510</link><guid isPermaLink="true">https://forum.cloudron.io/post/105510</guid><dc:creator><![CDATA[robi]]></dc:creator><pubDate>Thu, 10 Apr 2025 22:38:25 GMT</pubDate></item><item><title><![CDATA[Reply to XMPP Server - Prosody on Fri, 11 Apr 2025 03:24:25 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/robi" aria-label="Profile: robi">@<bdi>robi</bdi></a> I'm not an expert, but I did do some research on this to respond to Nebulon above. The main thing to note here is that the XMPP protocol expects different domains for different functions. So yes - it's an architectural choice that is mostly beyond our control. Each subdomain represents a different module, and the modules talk to each other (and other servers). They need a way to identify themselves, and they use the domain.</p>
<p dir="auto">I did some reading and it seems it is theoretically possible to make a server that utilizes different ports to differentiate the modules under a single sub-domain, but this would require tweaking and re-compiling an XMPP server.</p>
<p dir="auto">Even if this was done, and all XMPP protocols followed, there's always the chance that some not-fully-compliant client that works with every well known XMPP server would not work with ours because we've chosen to deviate so far from the norm, while still technically following the standards. Making these upstream changes would require someone <em>much</em> more familiar with XMPP servers than me.</p>
<p dir="auto">While I look forward to Cloudron allowing us to package more complex services, I think XMPP is in a pretty good place for the above-average admin; it currently takes less than 5 minutes to set it up. I will probably end up making a cron job to sync the certs into my app's storage volume when I deploy this to production. If I think it's useful to others, and Cloudron 9 isn't out yet, I'll share it here.</p>
]]></description><link>https://forum.cloudron.io/post/105497</link><guid isPermaLink="true">https://forum.cloudron.io/post/105497</guid><dc:creator><![CDATA[djxx]]></dc:creator><pubDate>Fri, 11 Apr 2025 03:24:25 GMT</pubDate></item><item><title><![CDATA[Reply to XMPP Server - Prosody on Wed, 09 Apr 2025 19:55:02 GMT]]></title><description><![CDATA[<p dir="auto">Doesn't Matrix also require something on the root domain? Isn't that where the .well-known endpoint lives?</p>
<p dir="auto">Something similar can be had?</p>
<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/djxx" aria-label="Profile: djxx">@<bdi>djxx</bdi></a>, was the architecture chosen to use subdomains vs different ports?</p>
<p dir="auto">If we're clever with the reverse proxy or with the main app server that listens to connections, it can ferry connections for other services by the request type or layer it needs to access, avoiding the need for extra ports or subdomains.</p>
<p dir="auto">As for the HTTP page, why not make it multi-useful. For example, by default it's just a Cloudron OIDC login button and then per app it's configured what it does.. for backend services it could be a simple CLI stats page in HTML, or even a web terminal. That way it's flexible and useful to the admin, users, packaging and platform maintainers.</p>
<p dir="auto">What else would be useful there?</p>
]]></description><link>https://forum.cloudron.io/post/105449</link><guid isPermaLink="true">https://forum.cloudron.io/post/105449</guid><dc:creator><![CDATA[robi]]></dc:creator><pubDate>Wed, 09 Apr 2025 19:55:02 GMT</pubDate></item><item><title><![CDATA[Reply to XMPP Server - Prosody on Wed, 09 Apr 2025 19:10:31 GMT]]></title><description><![CDATA[<p dir="auto">Thanks for that input. I think what we really need to add is a way to run apps as headless services. We already have a few of those like game servers and synapse (matrix) which have to serve up a placeholder page. That is not ideal indeed. After Cloudron 9 we will also look into other things like maybe databases, they would have very similar requirements then.</p>
<p dir="auto">Sorry that this is not yet implemented but we will get there in the future, so it is already great to collect requirements for such service type apps like prosody. This helps to avoid developing the wrong things on the platform side <img src="https://forum.cloudron.io/assets/plugins/nodebb-plugin-emoji/emoji/android/1f642.png?v=c3aa4c12b7e" class="not-responsive emoji emoji-android emoji--slightly_smiling_face" style="height:23px;width:auto;vertical-align:middle" title=":)" alt="🙂" /></p>
]]></description><link>https://forum.cloudron.io/post/105448</link><guid isPermaLink="true">https://forum.cloudron.io/post/105448</guid><dc:creator><![CDATA[nebulon]]></dc:creator><pubDate>Wed, 09 Apr 2025 19:10:31 GMT</pubDate></item><item><title><![CDATA[Reply to XMPP Server - Prosody on Wed, 09 Apr 2025 16:38:20 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/nebulon" aria-label="Profile: nebulon">@<bdi>nebulon</bdi></a> In general, XMPP isn't going to actually serve any web pages. I installed an extra module for health checking because Cloudron requires it - but there's no reason it needs to be exposed externally. BOSH may use HTTP, but it doesn't serve responses that can be interpreted as web pages.</p>
<p dir="auto">Personally, I don't think it hurts that there's a 404 on an HTTP/S port for an application that doesn't serve HTTP. Putting up a big page like "You found an XMPP server!" just invites trouble from the bad people on the internet.</p>
]]></description><link>https://forum.cloudron.io/post/105445</link><guid isPermaLink="true">https://forum.cloudron.io/post/105445</guid><dc:creator><![CDATA[djxx]]></dc:creator><pubDate>Wed, 09 Apr 2025 16:38:20 GMT</pubDate></item><item><title><![CDATA[Reply to XMPP Server - Prosody on Wed, 09 Apr 2025 16:10:45 GMT]]></title><description><![CDATA[<p dir="auto">We are currently quite busy with Cloudron 9 development, lets see if we can get some of those things still in.</p>
<p dir="auto">After reading up a bit on prosody docs, I still dont fully understand what we should do with the default location and what we could serve up as http (currently it shows a 404 error page for example). I saw there is also BOSH which is intended for http, so maybe that can be placed there instead, but so far I don't have a good grip on prosody's use of domains, certs and ports.</p>
]]></description><link>https://forum.cloudron.io/post/105444</link><guid isPermaLink="true">https://forum.cloudron.io/post/105444</guid><dc:creator><![CDATA[nebulon]]></dc:creator><pubDate>Wed, 09 Apr 2025 16:10:45 GMT</pubDate></item><item><title><![CDATA[Reply to XMPP Server - Prosody on Tue, 08 Apr 2025 18:28:33 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/nebulon" aria-label="Profile: nebulon">@<bdi>nebulon</bdi></a> understood. If needed, I'm sure we could make it not crash, even if it's not really a functional XMPP server. And for me I'm at least happy I have a way to run XMPP on my server. I'm just trying to share the work with others.</p>
<p dir="auto">When is the next version scheduled for release?</p>
]]></description><link>https://forum.cloudron.io/post/105390</link><guid isPermaLink="true">https://forum.cloudron.io/post/105390</guid><dc:creator><![CDATA[djxx]]></dc:creator><pubDate>Tue, 08 Apr 2025 18:28:33 GMT</pubDate></item><item><title><![CDATA[Reply to XMPP Server - Prosody on Tue, 08 Apr 2025 15:28:01 GMT]]></title><description><![CDATA[<p dir="auto">Agree that those are required for a real instance, I was just trying to understand if we can provide a package where the app does not crash on initial startup until those are set up.</p>
<p dir="auto">All in all since we at least need changes to the TLS addon to also provide the root domain certs, we are looking at least to a package release after the next Cloudron version only. Just to keep expectations clear.</p>
]]></description><link>https://forum.cloudron.io/post/105384</link><guid isPermaLink="true">https://forum.cloudron.io/post/105384</guid><dc:creator><![CDATA[nebulon]]></dc:creator><pubDate>Tue, 08 Apr 2025 15:28:01 GMT</pubDate></item><item><title><![CDATA[Reply to XMPP Server - Prosody on Tue, 08 Apr 2025 15:19:53 GMT]]></title><description><![CDATA[<p dir="auto">The root cert will always be needed to get <code>user@domain.com</code> addresses, and not having the other sub-domains would make the app basically unusable. The extra sub-domains are for things like: uploading files, proxying connections when a direct connection is unavailable, and for allowing people from other serveres to contact users on your XMPP instance. So, if all the extra domains were removed you would only have an XMPP chat that works locally on your server, and without pictures. These limitations defeat the person of having XMPP, in my opinion.</p>
<p dir="auto">After looking again, it seems we could drop the "proxy" sub-domain since we're using Cloudron's TURN server (I would need to test). But there's still a non-zero number of extra domains needed, as well as the TLD cert.</p>
]]></description><link>https://forum.cloudron.io/post/105383</link><guid isPermaLink="true">https://forum.cloudron.io/post/105383</guid><dc:creator><![CDATA[djxx]]></dc:creator><pubDate>Tue, 08 Apr 2025 15:19:53 GMT</pubDate></item><item><title><![CDATA[Reply to XMPP Server - Prosody on Tue, 08 Apr 2025 09:33:33 GMT]]></title><description><![CDATA[<p dir="auto">Yes, we have to add this to the platform as a feature as well as think about how to make the DNS setup for those extra domains required. We have a policy that apps should "work" after installation. Do you know if there is a way that maybe those extra (sub)domains and thus their certs can be optional, just limiting the functionality of the app?</p>
]]></description><link>https://forum.cloudron.io/post/105361</link><guid isPermaLink="true">https://forum.cloudron.io/post/105361</guid><dc:creator><![CDATA[nebulon]]></dc:creator><pubDate>Tue, 08 Apr 2025 09:33:33 GMT</pubDate></item><item><title><![CDATA[Reply to XMPP Server - Prosody on Mon, 07 Apr 2025 20:26:51 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/nebulon" aria-label="Profile: nebulon">@<bdi>nebulon</bdi></a>  - I just tried the alias approach, but it gives the error <code>alias location 'domain.tld' is in use</code>. So it seems the cert workaround will still be needed until there is a manifest option to get the TLD cert without using the alias</p>
]]></description><link>https://forum.cloudron.io/post/105335</link><guid isPermaLink="true">https://forum.cloudron.io/post/105335</guid><dc:creator><![CDATA[djxx]]></dc:creator><pubDate>Mon, 07 Apr 2025 20:26:51 GMT</pubDate></item><item><title><![CDATA[Reply to XMPP Server - Prosody on Mon, 07 Apr 2025 17:51:56 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/nebulon" aria-label="Profile: nebulon">@<bdi>nebulon</bdi></a> Thanks for taking a look through. I am certainly open to making changes to make it a compliant package - I just don't know what those changes are.</p>
<p dir="auto">I didn't realize that the TLD could be added as an alias which would give the cert. I was using /etc/certs before I did the hacky workaround to get the TLD. I will try the approach you mentioned and make sure things are still working.</p>
<blockquote>
<p dir="auto">One question is, apparently certs for the root domain are also required, even though no DNS records for that are?</p>
</blockquote>
<p dir="auto">Correct. The XMPP specification uses the SRV records to point to a specific server. It does need the cert to validate usernames like <code>user@domain.com</code> even if you chose to have the XMPP server somewhere else completely.</p>
<blockquote>
<p dir="auto">Otherwise there are naturally discrepancies elsewhere, given that this started (as far as I can tell) from some upstream Dockerimage which will not fit, but we can get through one by one.</p>
</blockquote>
<p dir="auto">Can you tell me a bit more about this? I changed it to use the Cloudron base, and confirmed that all the actions it does to build the server are successful. I did my best to follow putting data under /app/data, and runtime files under /run, according to the documentation.</p>
<blockquote>
<p dir="auto">For the extra required DNS records, we have to see if and how we can integrate this in the platform to support those. We already have some well-known type records, maybe it fits there.</p>
</blockquote>
<p dir="auto">This would be nice, but it's really not that difficult (compared to the entirety of setting up an XMPP server). I think if the package was installable and the only extra steps are some DNS changes, it'd still be very easy for people who want XMPP to do.</p>
]]></description><link>https://forum.cloudron.io/post/105333</link><guid isPermaLink="true">https://forum.cloudron.io/post/105333</guid><dc:creator><![CDATA[djxx]]></dc:creator><pubDate>Mon, 07 Apr 2025 17:51:56 GMT</pubDate></item><item><title><![CDATA[Reply to XMPP Server - Prosody on Mon, 07 Apr 2025 15:42:51 GMT]]></title><description><![CDATA[<p dir="auto">loomio and others like minio have multiple http ports (which are routed through the reverse proxy). If I understand the xmpp use-case correctly, then those are just alias endpoints not serving any http content. Even the current main domain will just produce a 404 when hit with a browser. The alias use is more like a bit of a workaround to get DNS setup as well as get valid certs.</p>
]]></description><link>https://forum.cloudron.io/post/105329</link><guid isPermaLink="true">https://forum.cloudron.io/post/105329</guid><dc:creator><![CDATA[nebulon]]></dc:creator><pubDate>Mon, 07 Apr 2025 15:42:51 GMT</pubDate></item><item><title><![CDATA[Reply to XMPP Server - Prosody on Mon, 07 Apr 2025 15:35:04 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/nebulon" aria-label="Profile: nebulon">@<bdi>nebulon</bdi></a> said in <a href="/post/105315">XMPP Server - Prosody</a>:</p>
<blockquote>
<p dir="auto">The alias domains still need to be manually setup by the user, so maybe we need some platform feature in the future for this.</p>
</blockquote>
<p dir="auto">Don't we already have this for e.g. apps like Loomio?</p>
]]></description><link>https://forum.cloudron.io/post/105325</link><guid isPermaLink="true">https://forum.cloudron.io/post/105325</guid><dc:creator><![CDATA[jdaviescoates]]></dc:creator><pubDate>Mon, 07 Apr 2025 15:35:04 GMT</pubDate></item><item><title><![CDATA[Reply to XMPP Server - Prosody on Mon, 07 Apr 2025 13:22:50 GMT]]></title><description><![CDATA[<p dir="auto">I've pushed my changes as a PR <a href="https://github.com/DerekJarvis/cloudron-prosody/pull/1" target="_blank" rel="noopener noreferrer nofollow ugc">https://github.com/DerekJarvis/cloudron-prosody/pull/1</a></p>
<p dir="auto">No need to merge that, just to give some idea about the certs handling. The alias domains still need to be manually setup by the user, so maybe we need some platform feature in the future for this.</p>
]]></description><link>https://forum.cloudron.io/post/105315</link><guid isPermaLink="true">https://forum.cloudron.io/post/105315</guid><dc:creator><![CDATA[nebulon]]></dc:creator><pubDate>Mon, 07 Apr 2025 13:22:50 GMT</pubDate></item><item><title><![CDATA[Reply to XMPP Server - Prosody on Mon, 07 Apr 2025 09:16:49 GMT]]></title><description><![CDATA[<p dir="auto">I took the time to take a bit closer into the package. There is a long way to go to make it compliant with Cloudron packaging. It is a great start and we don't provide good information on what is expected from Cloudron packages, so this is mostly our fault.</p>
<p dir="auto">For a start, you already added the <code>tls</code> addon, which does provide the certs in <code>/etc/certs/</code> using that instead of the extra volume mount will ensure the app gets restarted and will pick up the correct certs if they get renewed. I am playing a bit from your package to hopefully get this working.</p>
<p dir="auto">One question is, apparently certs for the root domain are also required, even though no DNS records for that are? This can be solved by also adding the root domain as an alias to the app.</p>
<p dir="auto">For the extra required DNS records, we have to see if and how we can integrate this in the platform to support those. We already have some well-known type records, maybe it fits there.</p>
<p dir="auto">Otherwise there are naturally discrepancies elsewhere, given that this started (as far as I can tell) from some upstream Dockerimage which will not fit, but we can get through one by one. The first I noticed was, that currently it doesn't work with the Cloudron app debug mode, since it uses <code>ENTRYPOINT</code> in Dockerfile, that was easy to change by relying only on <code>CMD</code></p>
]]></description><link>https://forum.cloudron.io/post/105293</link><guid isPermaLink="true">https://forum.cloudron.io/post/105293</guid><dc:creator><![CDATA[nebulon]]></dc:creator><pubDate>Mon, 07 Apr 2025 09:16:49 GMT</pubDate></item><item><title><![CDATA[Reply to XMPP Server - Prosody on Sun, 06 Apr 2025 21:05:23 GMT]]></title><description><![CDATA[<p dir="auto">I guess some clear set up instructions would help <img src="https://forum.cloudron.io/assets/plugins/nodebb-plugin-emoji/emoji/android/1f642.png?v=c3aa4c12b7e" class="not-responsive emoji emoji-android emoji--slightly_smiling_face" style="height:23px;width:auto;vertical-align:middle" title=":)" alt="🙂" /></p>
<ul>
<li>install the app to the 'xmpp' subdomain</li>
<li>add extra DNS CNAME/A records pointing to the same server:
<ul>
<li>pubsub</li>
<li>proxy</li>
<li>upload</li>
<li>conference</li>
</ul>
</li>
<li>add these domains as aliases for the app</li>
<li>add DNS SRV records:
<ul>
<li>_xmpp-client._tcp.domain.tld port 5222</li>
<li>_xmpps-client._tcp.domain.tld port 5223</li>
<li>_xmpp-server._tcp.domain.tld port 5269</li>
</ul>
</li>
<li>make a storage volume called "Extra Storage"</li>
<li>mount the storage volume to the app</li>
<li>copy certs into the storage under the subdirectory app_xmpp
<ul>
<li>for my server, the command looks like this (run in cloudron directly, not in the app terminal):</li>
<li><code>cp -f /home/yellowtent/platformdata/nginx/cert/* /mnt/HC_Volume_102134826/app_xmpp/</code></li>
</ul>
</li>
<li>restart the app to make sure it's starting up with all pieces in place (extra domains, DNS records, and certs)</li>
</ul>
<p dir="auto">Then you can check for compliance with these two tools:</p>
<ul>
<li><a href="https://compliance.conversations.im" target="_blank" rel="noopener noreferrer nofollow ugc">https://compliance.conversations.im</a></li>
<li><a href="https://connect.xmpp.net/" target="_blank" rel="noopener noreferrer nofollow ugc">https://connect.xmpp.net/</a></li>
</ul>
]]></description><link>https://forum.cloudron.io/post/105265</link><guid isPermaLink="true">https://forum.cloudron.io/post/105265</guid><dc:creator><![CDATA[djxx]]></dc:creator><pubDate>Sun, 06 Apr 2025 21:05:23 GMT</pubDate></item><item><title><![CDATA[Reply to XMPP Server - Prosody on Sun, 06 Apr 2025 17:11:55 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/nebulon" aria-label="Profile: nebulon">@<bdi>nebulon</bdi></a> - Correct. You would need to make a volume called "Extra Storage", mount it onto the app, and have a folder under it called app_xmpp where you copy the sub-domain and TLD certs you need (I just copied all of them). This is an ugly workaround for the TLD cert not being available to the app through the manifest configuration.</p>
<p dir="auto">You would also need to add a few alias domains and DNS records manually.</p>
]]></description><link>https://forum.cloudron.io/post/105262</link><guid isPermaLink="true">https://forum.cloudron.io/post/105262</guid><dc:creator><![CDATA[djxx]]></dc:creator><pubDate>Sun, 06 Apr 2025 17:11:55 GMT</pubDate></item><item><title><![CDATA[Reply to XMPP Server - Prosody on Sun, 06 Apr 2025 10:43:37 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/djxx" aria-label="Profile: djxx">@<bdi>djxx</bdi></a> very nice! I just tried to quickly test this and building from your repo, the app fails to start with the following error:</p>
<pre><code>cp: cannot stat '/media/Extra Storage/app_xmpp/*': No such file or directory
</code></pre>
<p dir="auto">probably some oversight there, but don't have time to dig into this just now.</p>
]]></description><link>https://forum.cloudron.io/post/105237</link><guid isPermaLink="true">https://forum.cloudron.io/post/105237</guid><dc:creator><![CDATA[nebulon]]></dc:creator><pubDate>Sun, 06 Apr 2025 10:43:37 GMT</pubDate></item></channel></rss>