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

    281 3k
    281 Topics
    3k Posts
    robiR
    @girish does this help with the suite of VPN tools? https://github.com/jedisct1/dsvpn
  • Get help for your Cloudron

    4k 26k
    4k Topics
    26k Posts
    potemkin_aiP
    I've tried to restart and troubleshoot - but it seems like oauth app can't be updated and hence blocked nextcloud start, as it's above it's supported range Any help would be much appreciated!
  • Feedback, suggestions, anything else Cloudron related

    1k 11k
    1k Topics
    11k Posts
    mpeterson0418M
    Hey James, Sorry been a bit busy here - but per your comment I can def share some insights. I went into the main cloudron dashboard, and navigated to Users > LDAP to configure my internal AD config (Dashed out some sensitive info for security) [image: 1782476078381-48d9bf82-9176-460d-8cd3-bbc4cc5f647a-image.jpeg] After the data began syncing properly, I manually went into my container and adjusted the authentication protocol to utilize OpenID instead of MySQL auth by adding the highlighted entity - [image: 1782476394053-13d291db-2501-4a5e-9fe6-c9c6c0f36d6f-image.jpeg] All seems to be working out, outside of the one tidbit I mentioned previously. But it's manageable for now and my users are having no issues logging in and accessing resources using their AD credentials
  • New ideas, Feature Requests

    889 7k
    889 Topics
    7k Posts
    J
    Yes, that's correct.
  • Apps

    Questions about apps in the App Store

    6k 56k
    6k Topics
    56k Posts
    Package UpdatesP
    [2.17.0] Update woodpecker to 3.16.0 Full Changelog Gate Kubernetes serviceAccountName backend step config behind agent config [#6792] Harden agent rpc to check agentID on workflow [#6759] Add workflow concurrency limit option [#6671] Support Unix Sockets [#6721] Allow images for secrets to contain SHA256 for image pinning [#6784] server should drop stale queue tasks already missing in database [#6765] server queue api should ignore missing agent [#6763] local backend: on windows use process tree-walk as workaround to kill [#6718] Fix issue with deeply nested k8s backend_options [#6730] github dont fail on force push [#6697]
  • Find Cloudron apps from the community

    29 197
    29 Topics
    197 Posts
    L
    Windmill: community package now available Code-first orchestration platform for internal software TL;DR: Windmill turns scripts in Python, TypeScript, Go, Bash and SQL into webhooks, scheduled jobs, multi-step flows, and auto-generated internal UIs β€” a fast, open-source developer platform and job runner (an alternative to Airplane / Retool / n8n / Temporal). Now packaged for Cloudron and ready to install. Built and tested on Cloudron 9.1; unofficial and community-maintained. Links Project homepage: https://www.windmill.dev Upstream repo: https://github.com/windmill-labs/windmill 🧱 Cloudron package repo: https://github.com/OrcVole/windmill-cloudron There's a hosted upstream demo at https://app.windmill.dev. The package you install is the self-hosted Community Edition β€” the full app (editor, workers, scheduler, UIs) on your own box, behind your own login. How to install Installation Click on the Add custom app drop down top right in the App Store and choose Community app: Then paste in the CloudronVersions.json URL into the box that pops up: [image: 1782553024126-community-package-resized.jpeg] [image: 1782553033195-cloudronversions.jpeg] Community packages aren't in the App Store, so install via the CLI. The published image is on GHCR and the package ships a community versions file: # recommended: install the published community build from the versions URL cloudron install \ --versions-url https://raw.githubusercontent.com/OrcVole/windmill-cloudron/main/CloudronVersions.json \ --location windmill.example.com # or pin the prebuilt image directly cloudron install --image ghcr.io/orcvole/windmill-cloudron:1.0.1 --location windmill.example.com # or build it yourself from the repo git clone https://github.com/OrcVole/windmill-cloudron cd windmill-cloudron cloudron build cloudron install --image [your-registry]/windmill-cloudron:latest --location windmill.example.com Minimums: 3 GB RAM recommended (the app bundles its own PostgreSQL alongside the Windmill server and a worker β€” see below; raise it for heavier workloads). Addons: localstorage and sendmail. No postgresql addon β€” the package bundles Postgres on purpose. First run: log in with admin@windmill.dev / changeme and change the password immediately (Settings β†’ Users). Then create a workspace and start writing scripts. Windmill CE 1.741.0, package v1.0.1. For users Why try it: Windmill is the glue for a self-hosted stack. Write a function in the language you already use, and Windmill instantly gives it a webhook, a schedule, a typed input form, and a run history β€” then lets you compose those functions into flows with retries, approvals and branching, and assemble small internal UIs on top. It's fast (a Rust core, a real job queue in Postgres) and everything stays on your box. What you get out of the box: Scripts β†’ webhooks/CRON/UIs in Python (via uv), TypeScript (Deno & Bun), Go, Bash and SQL β€” all runtimes baked into the image; the first job in a language warms its dependency cache. Flows: multi-step pipelines with retries, error handlers, approval steps, branches and a visual editor. Secrets, variables and resources with per-workspace encryption, plus granular roles/permissions. A built-in editor with an integrated job runner, schedules, and run history. Cloudron-specific wins: outgoing email is wired to the Cloudron mail addon automatically; /health is open for monitoring; all state lives in a bundled PostgreSQL that is captured by Cloudron backups via a consistent logical dump; updates are one click. Good fit if you want a private automation/back-office platform that sits next to the rest of your self-hosted stack and can call any of it. Probably not for you if you need to run untrusted, multi-tenant code (see the security note below) or you rely on Windmill's Docker "container step" jobs (not available under Cloudron's unprivileged container). 🧰 For packagers: what we learned What helped MODE=standalone is the single-container lever β€” the API server and a worker in one process. NUM_WORKERS is capped to 1 in standalone (raising it needs flags upstream marks unsafe), so scale by memory, not worker count. Shape A still wins for a multi-runtime image when the linkage gate is green: copy the unmodified CE binary + the self-contained runtimes (Deno, Bun, uv, Go) from the official image onto cloudron/base, rather than FROM the 3.9 GB CE image. The Windmill binary's only direct deps are stock glibc libs already on the base. All durable state is in Postgres (including the per-workspace encryption keys and the auto-generated jwt_secret), so there's no external data-loss-critical key file to seed β€” the database backup is the whole backup. What was tricky and how we solved it The Cloudron postgresql addon can't host Windmill. Windmill's unmodified binary needs superuser-grade Postgres: an unguarded CREATE EXTENSION "uuid-ossp", a CREATE ROLE … WITH BYPASSRLS for workspace row-level-security, and a runtime SET ROLE. The addon grants a single non-superuser owner β€” none of that. The only addon-compatible workaround is patching the Windmill binary, which the CE license forbids ("distribute as is, do not modify or wrap"). So the package bundles PostgreSQL 16 as superuser instead β€” the field-guide "bundle-localhost-under-/app/data when no addon can serve the app" pattern. A hot file-copy of a running Postgres data dir is unsafe (torn pages). Cloudron's filesystem backup copies /app/data live, so we put PGDATA in a persistentDir (excluded from the filesystem backup) and use backupCommand/restoreCommand (minBoxVersion 9.1.0) to pg_dumpall a consistent logical dump into /app/data at backup time and rebuild the cluster from it on restore. Verified: a workspace + variable survive a backup β†’ restore onto a fresh data volume. Windmill probes /usr/bin/deno by default β€” copy Deno/Bun there (and set DENO_PATH/BUN_PATH), or TypeScript jobs fail with "Executable /usr/bin/deno not found". Go needs GO_PATH. nginx as the cloudron user, read-only rootfs: use the error_log stderr keyword (opening the /dev/stderr path fails as non-root), put the pid in a chowned dir, and don't double-declare daemon off. Liveness β‰  readiness, even in the smoke gate: /health (served by nginx) is 200 before first-boot migrations finish, so poll /api/version for real readiness before asserting app behavior. Still rough / open questions A cold install from the versions URL on a fresh subdomain is the gate we'd most welcome other eyes on. The bundled-Postgres memory budget is shared with the Windmill worker β€” an OOM takes the DB down with the app. Conservative shared_buffers/work_mem plus a documented memory floor mitigate it; real-world tuning feedback is welcome. ️ For the Cloudron team Maintenance burden: upstream Windmill ships very frequently. The package is a thin layer (a pinned version build-arg + the manifest), so a rebump is a version bump, a rebuild, and a re-run of the language smoke + the backup/restore gate. Why it would suit the App Store: it's the automation/orchestration tier the self-hosted catalogue is missing, and it ties the rest of the stack together (it can drive any HTTP service on the box). The package honours upstream's license β€” the CE binary is used unmodified, with no capped/enterprise features re-enabled. Friction worth knowing about: an app that needs a BYPASSRLS/CREATEROLE Postgres role still can't use the postgresql addon (the uuid-ossp allowlist isn't enough), which is what forces bundling a private Postgres β€” a "privileged database" addon option would let apps like this avoid that. The persistentDirs + backupCommand/restoreCommand trio (9.1.0) is exactly the right tool for a bundled DB and worked well. For Windmill's developers and contributors A few low-effort things that help packagers a lot: A documented non-superuser bootstrap. The unguarded CREATE EXTENSION "uuid-ossp" and SET ROLE windmill_admin make CE hard to run on managed/least-privilege Postgres. A supported "pre-create the extension + roles, then run migrations as a plain owner" path would help every managed-PG deployment, not just Cloudron. Read SMTP from the environment as a first-class option (it already falls back to env when the DB setting is absent) and document it, so platform mail addons map cleanly. Publish a glibc/Postgres-version floor per release, so a slim base copy of the binary knows its target. Package source and PRs welcome here: https://github.com/OrcVole/windmill-cloudron. Happy to co-maintain. Unlocks Once it's running, you can: Turn any Python/TS/Go/Bash function into a webhook, a CRON job, or a small internal UI in minutes β€” no boilerplate service to write or deploy. Build flows that orchestrate the rest of your box: call your other self-hosted APIs, gate steps on human approval, retry and branch. Schedule and observe back-office automation (reports, syncs, ETL) with a real run history and per-workspace secrets, all on your server. Synergies Pairs nicely with other Cloudron apps β€” Windmill is the orchestrator that calls them: Windmill + Docling + TEI + Qdrant: a flow that converts a document (Docling), embeds the text (TEI), and upserts vectors (Qdrant) β€” a private RAG ingestion pipeline, scheduled or webhook-triggered. Windmill + a reranker (e.g. bge-reranker): rerank Qdrant hits for higher-quality retrieval inside the same flow. Windmill + Ollama / OpenWebUI / agentgateway: point Windmill AI at an OpenAI-compatible endpoint on your box for code generation and LLM steps. Windmill + anything with a webhook: it's the glue β€” schedule it, trigger it, and wire the outputs onward. Feedback, bug reports, and "works on my install" confirmations all welcome below.
  • Propose and vote for apps to be packaged

    2k 16k
    2k Topics
    16k Posts
    L
    @timconsidine Bug report for the Cloudron Dify community package: plugins fail: "failed to find uv path" Package: io.timconsidine.dify (community), version 2.0.15, image forgejo.tcjc.uk/cca/cloudron-dify:2.0.15 Cloudron: 9.x Symptom Installing any model-provider plugin from the Marketplace (e.g. Text Embedding Inference / langgenius/huggingface_tei) fails with: failed to launch plugin: failed to find uv path: failed to find uv path: exit status 1 failed to init environment Because in Dify 2.0 every model provider is a Python plugin, this blocks all providers β€” embeddings, LLMs, and rerank β€” so the app can't be wired to any model. Root cause (verified in the running container) The image does not contain the uv binary, but the plugin daemon shells out to uv to build each plugin's Python venv. which uv, find / -name uv -type f, /app/code/api/.venv/bin/uv, and python -c "import uv" all come up empty. start.sh expects uv: it creates /app/data/cache/uv and /app/data/uv/python and exports UV_CACHE_DIR / UV_PYTHON_INSTALL_DIR, but the binary itself was never installed, and no UV_PATH is set. The plugin daemon's PATH (inherited from start.sh β†’ supervisord) is /app/code/api/.venv/bin:/usr/local/...:/usr/bin:... β€” all read-only, none containing uv. It is not fixable at runtime by the operator: the rootfs is read-only, and start.sh regenerates /app/data/api-env on every boot, so there is no persistent hook to add uv or UV_PATH. Suggested fix (image-side) Install uv into the image and make it discoverable to the plugin daemon. Any one of: In the Dockerfile, install uv into the API venv: pip install uv (puts uv in /app/code/api/.venv/bin, already on the daemon's PATH), or copy the static binary: COPY --from=ghcr.io/astral-sh/uv:latest /uv /usr/local/bin/uv. Optionally also export an explicit UV_PATH=/usr/local/bin/uv (or the venv path) in start.sh so the daemon doesn't rely on PATH lookup. After that, confirm a Marketplace plugin (e.g. langgenius/huggingface_tei) installs and a Rerank model can be added. Note Pin/ship a known uv version for reproducibility. This is the same class as langgenius/dify#19522, but here uv is genuinely absent from the image rather than mis-detected.
  • App package development & help

    308 3k
    308 Topics
    3k Posts
    saikarthikS
    https://drive.google.com/file/d/1b6Dm5Nf9lThiifTS2akGgBgL1eq8gtKZ/view?usp=drive_link Please download it from here. I was able to launch it as a cloudron app after npm install and creating a docker image. Please let me know if this works. You can see the cloudron auth headers at: https://<cloudron app domain>/api/headers
  • Anything else not related to Cloudron

    370 3k
    370 Topics
    3k Posts
    robiR
    @nichu42 would you adjust the title accordingly?