Cloudron makes it easy to run web apps like WordPress, Nextcloud, GitLab on your server. Find out more or install now.


Skip to content
  • Announcements regarding Cloudron

    279 3k
    279 Topics
    3k Posts
    girishG
    Login sessions is now much better. It individually lists the sessions and you can also log out from those specifically (or all of them). I think there was always some confusion about "app" oidc sessions and I looked into this. In theory, we can list the app sessions in the UI below as well. But clearing a app oidc session, will only clear the session from the Cloudron side. Practically speaking, all apps maintain their own session and this means the app will still remain logged in. So, we have decided to not list them here to avoid any confusion. If you want to truly log out (from say some kiosk): Click "log out from all" in cloudron dashboard. At this point, Cloudron will ask apps which want to authenticate afresh to re-login. Log out from apps that were already logged in previously one by one. [image: 1781083513226-8fbd43c6-7492-48fc-b534-f50771be0518-image-resized.jpeg]
  • Get help for your Cloudron

    4k 26k
    4k Topics
    26k Posts
    jamesJ
    Hello @sebastienserre Did you enable IPv6 in the Cloudron dashboard? Does the IPv6 detected in the dashboard match with the IPv6 provided by your hoster?
  • Feedback, suggestions, anything else Cloudron related

    1k 11k
    1k Topics
    11k Posts
    nottheendN
    Update: All apps in error state after Cloudron restore After restoring Cloudron, all my apps ended up in an error state. I've been digging into the logs and wanted to share what I found in case it's relevant to my setup or helps others. The key error from the app task log: Error: ENOENT: no such file or directory, scandir '/mnt/managedbackups/<uuid>/2026-06-10-000001-121/app_<myapp>.<mydomain>_v3.12.2' So during the restore, Cloudron tries to download the app backup from /mnt/managedbackups/..., but that path doesn't exist. This then causes the task to crash with an AssertionError rather than a clean BoxError, which is probably also worth flagging as a minor bug. I suspect this is related to my specific setup: I have an external backup location that is no longer mounted (as described earlier in this thread). Cloudron appears to be pointing the restore at that unmounted path. Resolution that worked for me: Explicitly restoring each app from its most recent backup (rather than letting the automatic restore run) resolved the error state. Ideally, this should be the default behaviour during a Cloudron restore anyway, restoring from the most recent available backup, so this might be worth looking into. Happy to provide more details if useful.
  • New ideas, Feature Requests

    888 7k
    888 Topics
    7k Posts
    N
    I do ! I just sent you a PM
  • Apps

    Questions about apps in the App Store

    6k 55k
    6k Topics
    55k Posts
    jdaviescoatesJ
    @sponch said: they have (in Browser). Got it already running on a test VPS Good to know, thanks! That's one of the few limitations of OnlyOffice. It mostly doesn't bother me, but there are occasions where mobile editing would be handy.
  • Find Cloudron apps from the community

    21 170
    21 Topics
    170 Posts
    J
    @Teiluj said: Congratulation @luckow ! Is there any documentation available for this? I tried and think I got the account / docker registry etc all setup (at least I am not getting any errors) but I still am getting a greyed out "Install App" on the app.safeserver.de side and/or do not know where to find the related cloudron app manifest to pull the app. Maybe there is a timeout/confirmation to happen between adding the docker registry and being allowed to access manifests? For now, I am also stuck. But the part I have seen looks promising. I'm having this same issue myself.
  • Propose and vote for apps to be packaged

    2k 16k
    2k Topics
    16k Posts
    I
    Main Page: https://github.com/Euro-Office (org tagline "Your sovereign office"; announcement: https://nextcloud.com/blog/euro-office-general-availability-set-for-june-9/) Git: https://github.com/Euro-Office/DocumentServer (Nextcloud connector: https://github.com/Euro-Office/eurooffice-nextcloud) Licence: AGPL-3.0-only Dockerfile: Yes — official image at ghcr.io/euro-office/documentserver:latest; repo ships a multi-stage Docker build and a docker-compose.yml example Demo: No public hosted demo. The Document Server image ships a built-in test/example page (run with -e EXAMPLE_ENABLED=true) Summary: Euro-Office is a FOSS office suite and collaboration platform (documents, spreadsheets, presentations, PDF) launched in March 2026 and reaching its first stable release on 9 June 2026. It is a fork of OnlyOffice, maintained by a consortium of European companies (IONOS, Nextcloud, Proton, OpenProject, XWiki, Soverin, Abilian, bTactic and others) with the goal of digital sovereignty — i.e. an office stack under European control and jurisdiction. Like OnlyOffice it runs as a web-based Document Server that connects to a host platform; the official integration today is the eurooffice-nextcloud connector. A Cloudron package of the Document Server (mirroring the existing OnlyOffice/Collabora packages) would let Cloudron Nextcloud users select Euro-Office as a Nextcloud Office backend. Notes: I'd like this because it's a drop-in-style alternative to the OnlyOffice Document Server we already have packaged, and it targets the same Nextcloud integration path — so it should map well onto Cloudron's existing OnlyOffice packaging pattern (separate document-server app + Nextcloud connector app, JWT secret, reachable both ways). Concerns / things to verify: (1) it's a young fork — first stable is literally days old, so expect rapid version churn; (2) the project is hosted on GitHub (Microsoft-owned), which some find ironic given the "sovereignty" framing; (3) being an OnlyOffice fork, it likely inherits OnlyOffice's resource footprint (CPU/RAM during conversions). Alternative to / Libhunt link: Alternative to OnlyOffice Docs / Collabora Online — https://selfhosted.libhunt.com/onlyoffice-alternatives Screenshots: Brand/logo via the GitHub org avatar at https://github.com/Euro-Office https://nextcloud.com/c/uploads/2026/05/Euro-office-Write.jpg https://nextcloud.com/c/uploads/2026/05/Euro-office-Spreadsheet.jpg https://nextcloud.com/c/uploads/2026/05/Euro-office-slides.jpg
  • App package development & help

    307 3k
    307 Topics
    3k Posts
    L
    We managed to deploy Prosody using Cloudron. Here are some notes which we hope might help. For us, Dino was an easier client to use than Kaidan. Packaging Prosody 13.0.6 (XMPP) for Cloudron: what worked, what bit us We packaged Prosody 13.0.6 as a Cloudron app at xmpp.example.com with LDAP auth, HTTP file upload, multi-device sync (carbons + MAM), MUC, and 1:1 audio/video via the turn addon. It scores 91% on compliance.conversations.im and passes the connect.xmpp.net TLS/connectivity checks. The headline finding is a good-news one that contradicts older guidance, so it leads. Then the writeup splits for three audiences: people who just want to run it, people packaging Prosody (or any multi-domain app) for Cloudron, and the Prosody developers. Built on the shoulders of DerekJarvis/cloudron-prosody (a fork of SaraSmiseth/prosody). Thank you both. Our packaging (the CloudronManifest, the start script, the cert layout, and the 13.0.6 pin described below) is published at palladium.wanderingmonster.dev/palladium-dragon/prosody-cloudron if you want to reuse or adapt it. TL;DR: the six things worth knowing Cloudron 9.x exposes per-alias TLS certs inside the container, at /etc/certs/<domain>.cert and /etc/certs/<domain>.key, not just the primary tls_cert.pem. This overturns the "primary-domain-only" reading of the tls addon docs and removes the old copy-certs-from-the-host hack for federating component subdomains. Use simple JIDs (user@xmpp.example.com, where the app domain is the VirtualHost). This sidesteps the apex-cert problem and collapses four component subdomains down to one (conference.). LDAP auth means clients must use SASL PLAIN (over TLS). Many clients disable PLAIN by default and then fail in a way that looks exactly like a wrong password. A/V works server-side via the turn addon plus mod_turn_external (XEP-0215). The practical limiter is the client: XMPP A/V calling clients are Linux-desktop only today. A handful of build traps (apt nightly-vs-stable, Podman, registry, core-module conflicts, ENTRYPOINT), with fixes below. The health check needs a real 200. A 404 is treated as unhealthy. (a) For people who just want to run it JIDs are user@xmpp.example.com. Cloudron users log in with their Cloudron username (or email) as the JID localpart and their Cloudron password. There is nothing to configure inside the XMPP app itself; every Cloudron user is automatically an XMPP user. One DNS/alias to add: conference.xmpp.example.com (the MUC component, the only thing that federates). Add it as a Cloudron app alias: cloudron configure --app xmpp.example.com --location xmpp \ --alias-domains conference.xmpp.example.com On a Cloudron-managed DNS zone this auto-creates the record and provisions the cert. PEP covers pubsub, file upload is served on the main host, and proxy65 is dropped, so no other subdomains are needed. Optional SRV records (these improve federation discoverability but are not required, since the JID domain is also the connect host on standard ports): _xmpp-client._tcp.xmpp.example.com. 300 IN SRV 0 5 5222 xmpp.example.com. _xmpps-client._tcp.xmpp.example.com. 300 IN SRV 0 5 5223 xmpp.example.com. _xmpp-server._tcp.xmpp.example.com. 300 IN SRV 0 5 5269 xmpp.example.com. _xmpp-server._tcp.conference.xmpp.example.com. 300 IN SRV 0 5 5269 xmpp.example.com. Client login gotcha. If login fails like a wrong password, enable SASL PLAIN (sometimes labelled "allow cleartext auth") in your client. Section (c) explains why this is necessary and why it is safe (c2s requires TLS, so the password only ever travels encrypted). Encryption. OMEMO is encouraged but not forced (optional policy); c2s requires TLS regardless. Calls reality check. The server is call-ready, but a working XMPP A/V client is Linux-desktop only right now: Dino, or the experimental calling in Kaidan 0.15. Gajim's A/V is non-functional, and there is no working macOS or mobile XMPP calling client today. Plan for the client side, not the server side. (b) For packagers (Prosody, or any multi-domain Cloudron app) Base and version FROM docker.io/cloudron/base:5.0.0 (Ubuntu noble; fully-qualify the name so Podman does not prompt, see the build note below). Install from the official Prosody apt repo, but pin the stable package: apt-get install -y prosody=13.0.6-1~noble1 The trap: the prosody-13.0 package is a nightly branch build (it self-reports "13.0 nightly build N"), not the stable point release. Verify with dpkg-query -W prosody. Do not run prosody --version in the build; Prosody's root-guard refuses to run as root and fails the build. Cloudron specifics Use CMD, never ENTRYPOINT. ENTRYPOINT breaks Cloudron's debug mode. Put the entrypoint logic in a script invoked by CMD. Debian FHS paths come with the apt package: config in /etc/prosody, binary /usr/bin/prosody, modules /usr/lib/prosody, Lua 5.4. Point data_path, certificates, run_dir, and pidfile at writable locations (/app/data, /run). Read addon env on every boot. Never bake CLOUDRON_LDAP_* or CLOUDRON_TURN_* into static config; they change on restart. Map them to your config env in the start script, then gosu prosody:prosody prosody -F. The health check needs a real 2xx. Cloudron marks the app unhealthy on a 404. We use the community mod_http_host_status_check, which serves GET /host_status_check as HTTP 200, and set healthCheckPath: /host_status_check. Note the distinction: the often-repeated "Prosody 404s in a browser, that's fine" remark applies only to the bare root path a human hits, not to the health path, which must return 200. Certificates (the headline) The tls addon exposes the primary cert at /etc/certs/tls_cert.pem and tls_key.pem. On Cloudron 9.x it also exposes a per-alias cert at /etc/certs/<alias-domain>.cert and <alias-domain>.key. So for a federated MUC subdomain: add it as an alias, then copy /etc/certs/conference.<domain>.{cert,key} into the certs/<domain>/{fullchain,privkey}.pem layout Prosody auto-discovers (chown prosody, key mode 0640). No host-path hack, no cron cert-sync. This is the part that previously forced people into copying the whole host cert directory in, and on 9.x it is no longer necessary. Wildcard nesting matters: *.example.com covers xmpp.example.com but not conference.xmpp.example.com. The alias yields a *.xmpp.example.com cert, which does. Modules in 13.0 Many modules older guides copy from the community repo are core now: smacks, turn_external, mam, carbons, csi_simple, muc_mam, server_contact_info, auth_ldap, cloud_notify, and vcard_muc. Copying the community cloud_notify or vcard_muc triggers a "conflict with built-in feature" error; just enable the core ones. We copy only host_status_check, http_host_status_check, e2e_policy, filter_chatstates, and throttle_presence. Build and deploy This host runs Podman, not Docker. cloudron build shells out to docker, so bridge it with a docker-to-podman shim early on PATH, plus REGISTRY_AUTH_FILE=~/.docker/config.json so podman push finds Docker's credentials. cloudron build (local) needs a registry the box can pull from. It builds, pushes, then reads the pushed image's digest for cloudron install. --no-push fails with "Failed to detect sha256". A remote box cannot use a locally-built image without a registry (we used a self-hosted Forgejo container registry). The registry-free "build on the box" experience is the separate Docker Builder app, which still pushes to a registry it manages. CLI version: there is no 9.x CLI. cloudron tops out at 8.2.6 and works fine against a 9.1.7 box; the CLI and server follow separate version lines. LDAP authentication = "ldap"; ldap_mode = "bind" ldap_server = CLOUDRON_LDAP_SERVER:CLOUDRON_LDAP_PORT ldap_base = CLOUDRON_LDAP_USERS_BASE_DN ldap_rootdn = CLOUDRON_LDAP_BIND_DN ; ldap_password = CLOUDRON_LDAP_BIND_PASSWORD ldap_filter = "(&(objectclass=user)(|(username=$user)(mail=$user)))" Cloudron user objects are objectclass=user with username, mail, and uid. A/V (TURN) Declare the turn addon. mod_turn_external reads CLOUDRON_TURN_{SERVER,PORT,TLS_PORT,SECRET} and advertises STUN/TURN/TURNS via XEP-0215 with time-limited HMAC REST credentials: turn_external_host = CLOUDRON_TURN_SERVER -- the panel host, e.g. my.example.com turn_external_port = 3478 ; turn_external_tls_port = 5349 turn_external_secret = CLOUDRON_TURN_SECRET coturn is fronted on the panel host (my.example.com), with a relay UDP range of 50000-51000. Provider-firewall dependency: 3478 and 5349 (TCP+UDP) and the relay range must be reachable from the internet. Cloudron's own firewall opens them; your cloud provider's security group might not. This is the classic "calls connect then drop" cause, so test it before blaming anything else (the WebRTC Trickle ICE page is the quickest check). Ports / manifest httpPort: 5280 (BOSH/websocket/file-upload, fronted by Cloudron TLS on 443). tcpPorts: 5222 (c2s STARTTLS), 5223 (c2s direct-TLS, XEP-0368), 5269 (s2s). addons: localstorage, tls, ldap, turn; multiDomain: true. (c) For the Prosody developers Config-sandbox noise. Prosody 13's config sandbox logs a deprecation for every os.getenv/tonumber ("replace os with Lua.os"). For env-driven container configs that is dozens of warning lines per boot. A documented, warning-free idiom for reading env vars in config would help packagers. SASL and LDAP bind. With bind-mode LDAP, Prosody only offers PLAIN (there is no reusable secret, so no SCRAM). This is correct, but it surprises users whose clients disable PLAIN by default and then see a generic auth failure. A clearer client-facing error ("server offers only PLAIN; enable cleartext-over-TLS") would cut support load. Partly a client issue, but worth a doc note. Headless/health conventions. The de-facto Cloudron health endpoint (mod_http_host_status_check) lives in community modules. First-class guidance for "Prosody as a backend service behind a managed proxy" (health route, trusted proxy, http_external_url) would help. Managed coturn. mod_turn_external plus a managed coturn that fronts on a different hostname than the JID works well via XEP-0215 / TURN REST (use-auth-secret). A short doc example would help packagers on Cloudron and other managed platforms. Validation results compliance.conversations.im: 91% (Prosody 13.0.6 detected). Compliant XEPs include 0215 (STUN+TURN), 0045 (MUC), 0313 (MAM + MUC-MAM), 0280 (Carbons), 0198 (Stream Management), 0363 (HTTP Upload), 0357 (Push), 0384 (OMEMO), 0163 (PEP), 0368, Roster Versioning, 0191 (Blocking), and 0352 (CSI). TLS. c2s StartTLS (5222), c2s Direct-TLS (5223), and s2s (5269) all present a valid Let's Encrypt certificate. TLS 1.0/1.1 refused, 1.2/1.3 only. The A/V path. We confirmed the relay path two independent ways: a WebRTC Trickle ICE test gathered a relay candidate from the coturn relay range, and the compliance tester passed XEP-0215 for both STUN and TURN. A live client call additionally confirmed XEP-0353 call signalling routing through Prosody. Worth flagging for anyone testing this: an unanswered call does not by itself exercise TURN, because modern Jingle defers relay allocation until the callee accepts, so a true two-party media test needs two live endpoints. Federation. The MUC subdomain presents a CA-trusted *.xmpp.example.com certificate on s2s, and Prosody correctly refuses remote servers presenting self-signed certificates. Credits DerekJarvis/cloudron-prosody and SaraSmiseth/prosody for the base image and config structure; the Prosody project; and the Cloudron team and the forum threads on the turn and tls addons. Our resulting package is at palladium.wanderingmonster.dev/palladium-dragon/prosody-cloudron.
  • Anything else not related to Cloudron

    367 3k
    367 Topics
    3k Posts
    P
    Just received from Hetzner: We would like to inform you that we will be increasing the prices for cloud servers effective 15 June 2026. This applies exclusively to new orders and rescales of existing servers. Cloud servers currently under contract are not affected by the price adjustment. This is intended to give you sufficient time to make any necessary adjustments, particularly with regard to automated server creation via API or integrations. What is changing? As part of the standardization of our product portfolio, we are increasing the prices of all Cloud plans. This price change is necessary due to the volatile hardware market. Which products are affected? The price adjustment applies to all newly ordered cloud servers and dedicated servers at all locations. However, web hosting products, managed servers, servers from the Server Auction, IPs, storage products, Load Balancers, Volumes, Snapshots, and Object Storage are not affected. Why the change? The price adjustment ensures that we will be able to continue to operate our infrastructure in a reliable, efficient, and sustainable manner. In particular, it takes into account the massive increase in procurement costs. What does this mean for you? Existing server contracts will, of course, keep their terms and conditions and remain active. The changes apply exclusively to new orders and rescales of existing servers. We are aware that repeated price adjustments can be a challenge. Our commitment remains; we want to offer you stable and fair prices in the long term. The transition will take effect on 15 June 2026. We will provide further details on the new rates on our website during the rollout. We thank you for placing your trust in us, and we are confident that we will continue to offer our services at an competitive price-performance ratio.* Note: Existing server contracts will, of course, keep their terms and conditions and remain active. The changes apply exclusively to new orders and rescales of existing servers. Have they learned lesson from latest price increase? Perhaps they suffered a significant loss on their contracts following the latest price hike, which also affected their previous contracts.