Scaffold Cloudron packaging workspace and automation

This commit is contained in:
2025-10-02 12:07:09 -05:00
parent b4121cc932
commit 482d4ff1b8
414 changed files with 6837 additions and 2 deletions

26
.gitea/workflows/ci.yml Normal file
View File

@@ -0,0 +1,26 @@
name: cloudron-packages-ci
on:
workflow_dispatch:
inputs:
tasks:
description: "Space-separated list of tasks to run via scripts/ci_local.sh"
required: false
default: "all"
jobs:
lint-and-smoke:
runs-on: ubuntu-22.04
steps:
- name: Checkout repository
uses: https://gitea.com/actions/checkout@v4
- name: Build CI harness image
run: docker build -t knel/cloudron-ci docker/ci-runner
- name: Run requested tasks
env:
TASKS: ${{ github.event.inputs.tasks }}
run: |
export CI_IMAGE=knel/cloudron-ci
./scripts/ci_local.sh ${TASKS:-all}

4
.gitignore vendored Normal file
View File

@@ -0,0 +1,4 @@
__pycache__/
*.pyc
*.swp
.DS_Store

74
GEMINI/AUDIT-SNAPSHOT1.md Normal file
View File

@@ -0,0 +1,74 @@
# Gemini Audit Report: KNELCloudronPackages (Snapshot 1)
**Date:** 2025-10-02
**Auditor:** Gemini
**Scope:** Full repository review, focusing on production-readiness, security, and maintainability.
---
## 1. Executive Summary
The `KNELCloudronPackages` repository establishes a commendable and well-documented foundation for packaging a large portfolio of applications for Cloudron. The core concepts—a centralized catalog, scaffolding automation, a dedicated packager container, and a local CI harness—are excellent choices for ensuring consistency and a clean host environment.
However, this audit reveals that while the **intent** is production-grade, the **current implementation is not**. The automation scripts and application templates contain systemic weaknesses, brittle logic, and promote anti-patterns that will be replicated across all ~60 applications. This will create significant, immediate technical debt, increase security risks, and lead to high maintenance overhead.
**The project is at a critical inflection point.** Correcting these foundational issues now is paramount. Proceeding without addressing them will guarantee that every package built will be flawed, inconsistent, and require substantial rework.
**Overall Grade: D+ (Needs Major Rework)**
---
## 2. Critical Issues & Security Vulnerabilities
These issues require immediate attention before any further packaging work proceeds.
| ID | Severity | Issue | Component | Recommendation |
|---|---|---|---|---|
| **C-01** | **Critical** | **Naive Cloudron App ID Generation** | `scripts/new_app.py` | The `build_app_id` function improperly sanitizes slugs, creating invalid IDs (e.g., `com.knel.some..app`). This will break Cloudron deployments. **Action:** Replace the function with a robust slugification library or a more intelligent regex-based sanitizer. |
| **C-02** | **High** | **Insecure Dockerfile Practices** | `templates/cloudron-app/Dockerfile` | The template encourages copying raw source code (`COPY ./app`) instead of using multi-stage builds. This bloats images with unnecessary build dependencies, development secrets, and increases the attack surface. **Action:** The template **must** be updated to provide a canonical multi-stage build example. The documentation must enforce this as the default pattern. |
| **C-03** | **High** | **Missing File Permissions/Ownership** | `templates/cloudron-app/Dockerfile` | The Dockerfile switches to the `cloudron` user but fails to `chown` the application files. Files copied in as `root` will not be readable/writable by the application at runtime, causing crashes. **Action:** Add a `RUN chown -R cloudron:cloudron /app` command before the `USER cloudron` directive in the template. |
| **C-04** | **High** | **Wildly Incorrect Resource Allocation** | `templates/cloudron-app/CloudronManifest.json` | The manifest template hardcodes a `memoryLimit` of 512MB for all applications. This is dangerously incorrect for resource-heavy apps like NetBox or DataHub (which require 8GB+ RAM) and wasteful for tiny ones. **Action:** Remove the hardcoded limit. The `PACKAGING_GUIDE.md` and per-app `README.md` must make it a mandatory step for the developer to determine and set a realistic limit. |
---
## 3. Major Concerns & Architectural Flaws
These issues point to fundamental weaknesses in the project's architecture and tooling.
| ID | Severity | Issue | Component | Recommendation |
|---|---|---|---|---|
| **M-01** | **Major** | **Brittle Automation Logic** | `scripts/lint_repo.py`, `scripts/generate_status.py` | The scripts rely on naive string-matching for validation (e.g., `grep "Replace start.sh"`). This is not a reliable indicator of completeness. The Dockerfile linter incorrectly checks for the base image, making it incompatible with multi-stage builds. **Action:** Refactor the linting and status detection. Use Abstract Syntax Trees (AST) for script analysis, a JSON schema for manifest validation, and parse the Dockerfile properly to check the final build stage. |
| **M-02** | **Major** | **Overly Simplistic Templates** | `templates/cloudron-app/*` | The templates are "one-size-fits-none." They lack placeholders for essential, common Cloudron features like databases (`postgresql`, `redis`), mail (`sendmail`), or LDAP. This forces developers to add significant boilerplate for almost every app. **Action:** Create a more comprehensive template or multiple templates (e.g., `web-app`, `worker-app`) that include commented-out sections for common addons and configurations. |
| **M-03** | **Major** | **Inefficient Scaffolding** | `scripts/new_app.py` | The script uses a crude `copy-then-replace` method. This is inefficient and error-prone. The `date` command bug in the `README.md` template is a direct result of this. **Action:** Replace the custom replacement logic with a standard templating engine like **Jinja2**. This is the industry standard for this exact task. |
---
## 4. Minor Concerns & Recommendations
| ID | Severity | Issue | Component | Recommendation |
|---|---|---|---|---|
| **R-01** | **Medium** | **Inconsistent Shell Usage** | `templates/cloudron-app/start.sh` | The script has a `#!/bin/bash` shebang, but the placeholder command uses `exec /bin/sh -c`. This can lead to subtle bugs if shell-specific syntax is used. **Action:** Ensure consistency. Use `bash -c` if the script is intended to be run with bash. |
| **R-02** | **Low** | **Unexecuted Template Command** | `templates/cloudron-app/README.md` | The `$(date ...)` command is not executed during scaffolding, leaving a literal string in the generated READMEs. **Action:** This will be fixed by moving to a proper templating engine (see **M-03**). |
| **R-03** | **Low** | **Simplistic Health & Smoke Tests** | `templates/cloudron-app/*` | The default `healthCheckPath` (`/`) and the smoke test are too basic and will fail for many apps, creating immediate rework for the developer. **Action:** Update documentation to make it clear these are mandatory placeholders to be adapted, not sensible defaults. |
| **R-04** | **Low** | **Lack of Schema Validation** | `scripts/lint_repo.py` | The linter only checks for the presence of a few keys in `CloudronManifest.json`. It does not validate data types, enums, or the overall structure. **Action:** Create a JSON schema for `CloudronManifest.json` and use a library like `jsonschema` in the linter to perform proper validation. |
---
## 5. Actionable Next Steps (Prioritized)
1. **Halt All Scaffolding:** Do not generate any more apps with the current tooling.
2. **Fix Critical Issues (C-01 to C-04):**
* Rewrite `build_app_id` in `new_app.py`.
* Update the `Dockerfile` template to include a multi-stage build example and a `chown` command.
* Remove the hardcoded `memoryLimit` from the manifest template and update documentation accordingly.
3. **Re-architect Tooling (M-01 to M-03):**
* Replace the custom find-and-replace logic in `new_app.py` with **Jinja2**.
* Refactor `lint_repo.py` to correctly parse Dockerfiles for multi-stage builds and validate `CloudronManifest.json` against a proper JSON schema.
4. **Enhance Templates:**
* Add commented-out examples for common addons (`postgresql`, `redis`, `sendmail`) to `CloudronManifest.json`.
5. **Re-Scaffold and Verify:**
* Once the tooling is fixed, delete the existing `apps/` directory.
* Re-run the scaffolding script for all applications.
* Verify that the generated files are correct and pass the new, more robust lint checks.
Only after these foundational elements are corrected should the actual work of packaging the individual applications begin. The current path leads to a portfolio of flawed, insecure, and difficult-to-maintain packages.

16
Makefile Normal file
View File

@@ -0,0 +1,16 @@
.PHONY: scaffold lint status packager-shell
scaffold:
python3 scripts/new_app.py --force
lint:
python3 scripts/lint_repo.py
status:
python3 scripts/generate_status.py
packager-shell:
BUILD=1 scripts/run_packager.sh
ci-local:
./scripts/ci_local.sh all

129
README.md
View File

@@ -1,3 +1,128 @@
# KNELCloudronPackages
# KNEL Cloudron Packages
This repository scaffolds Cloudron packages for Known Element's portfolio. It provides:
- A reusable application template (`templates/cloudron-app`) matching Cloudron packaging conventions.
- Automation helpers in `scripts/` to instantiate per-app scaffolds and run builds inside a dedicated Docker container.
- A curated catalog (`apps/catalog.json`) that maps Known Element issue IDs to upstream projects.
- Documentation under `docs/` to guide packaging, testing, and release workflows.
## Quick start
```bash
# Generate all app scaffolds from the catalog
python3 scripts/new_app.py
# Or regenerate scaffolds via Makefile
make scaffold
# Work on a single app skeleton
python3 scripts/new_app.py --slug apache-apisix
# Update the status table
make status
# Lint generated apps
make lint
# Run the full CI harness locally
make ci-local
# Build and enter the Cloudron packager container
BUILD=1 scripts/run_packager.sh
scripts/run_packager.sh
```
Within the container, use the Cloudron CLI to build, test, and publish packages without touching the host environment:
```bash
cloudron login my.example.cloudron
cloudron build
cloudron install --app my-example
cloudron push
```
Refer to `docs/PACKAGING_GUIDE.md` for detailed guidance.
See `docs/APP_STATUS.md` for the automatically generated status table.
## Repository layout
- `apps/` generated app scaffolds and metadata
- `docs/` playbooks and architecture notes
- `docs/CI_CD_GITEA.md` instructions for running CI/CD and publishing images via the Gitea instance
- `docker/packager/` Docker image for Cloudron packaging workflows
- `scripts/` helper scripts (scaffolding, tooling entrypoints)
- `templates/` base Cloudron app template
## Application catalog
| Slug | Issue | Upstream |
| --- | --- | --- |
| apache-apisix | https://projects.knownelement.com/issues/179 | https://github.com/apache/apisix.git |
| target-goalert | https://projects.knownelement.com/issues/204 | https://github.com/target/goalert.git |
| consuldemocracy | https://projects.knownelement.com/issues/189 | https://github.com/consuldemocracy/consuldemocracy.git |
| fleetdm-fleet | https://projects.knownelement.com/issues/195 | https://github.com/fleetdm/fleet.git |
| fonoster | https://projects.knownelement.com/issues/227 | https://github.com/fonoster/fonoster.git |
| healthchecks | https://projects.knownelement.com/issues/192 | https://github.com/healthchecks/healthchecks.git |
| hyperswitch | https://projects.knownelement.com/issues/209 | https://github.com/juspay/hyperswitch |
| netbox-docker | https://projects.knownelement.com/issues/201 | https://github.com/netbox-community/netbox-docker.git |
| openboxes-docker | https://projects.knownelement.com/issues/205 | https://github.com/openboxes/openboxes-docker.git |
| openfile | https://projects.knownelement.com/issues/316 | https://github.com/openfiletax/openfile.git |
| sniperphish | https://projects.knownelement.com/issues/211 | https://github.com/GemGeorge/SniperPhish-Docker.git |
| datahub | https://projects.knownelement.com/issues/309 | https://github.com/datahub-project/datahub.git |
| easy-gate | https://projects.knownelement.com/issues/54 | https://github.com/wiredlush/easy-gate.git |
| payroll-engine | https://projects.knownelement.com/issues/208 | https://github.com/Payroll-Engine/PayrollEngine.git |
| huginn | https://projects.knownelement.com/issues/194 | https://github.com/huginn/huginn.git |
| grist | https://projects.knownelement.com/issues/191 | https://github.com/gristlabs/grist-core |
| docassemble | https://projects.knownelement.com/issues/277 | https://github.com/jhpyle/docassemble.git |
| database-gateway | https://projects.knownelement.com/issues/273 | https://github.com/kazhuravlev/database-gateway.git |
| rundeck | https://projects.knownelement.com/issues/217 | https://github.com/rundeck/rundeck.git |
| slurm | https://projects.knownelement.com/issues/222 | https://github.com/SchedMD/slurm.git |
| rathole | https://projects.knownelement.com/issues/225 | https://github.com/rathole-org/rathole.git |
| jenkins | https://projects.knownelement.com/issues/234 | https://github.com/jenkinsci/jenkins.git |
| runme | https://projects.knownelement.com/issues/322 | https://github.com/runmedev/runme.git |
| seatunnel | https://projects.knownelement.com/issues/301 | https://github.com/apache/seatunnel |
| docker-webhook | https://projects.knownelement.com/issues/271 | https://github.com/thecatlady/docker-webhook |
| inventree | https://projects.knownelement.com/issues/173 | https://github.com/inventree/InvenTree.git |
| tak-server | https://projects.knownelement.com/issues/180 | https://github.com/Cloud-RF/tak-server |
| midday | https://projects.knownelement.com/issues/178 | https://github.com/midday-ai/midday.git |
| killbill | https://projects.knownelement.com/issues/181 | https://github.com/killbill/killbill.git |
| chirpstack | https://projects.knownelement.com/issues/184 | https://github.com/chirpstack/chirpstack.git |
| craig | https://projects.knownelement.com/issues/185 | https://github.com/CraigChat/craig.git |
| elabftw | https://projects.knownelement.com/issues/188 | https://github.com/elabftw/elabftw.git |
| jamovi | https://projects.knownelement.com/issues/196 | https://github.com/jamovi/jamovi.git |
| kibot | https://projects.knownelement.com/issues/197 | https://github.com/INTI-CMNB/KiBot.git |
| resgrid | https://projects.knownelement.com/issues/214 | https://github.com/Resgrid/Core |
| reviewboard | https://projects.knownelement.com/issues/216 | https://github.com/reviewboard/reviewboard.git |
| satnogs-kaitai | https://projects.knownelement.com/issues/218 | https://gitlab.com/librespacefoundation/satnogs/docker-kaitai.git |
| satnogs-webgui | https://projects.knownelement.com/issues/218 | https://gitlab.com/librespacefoundation/satnogs/docker-satnogs-webgui.git |
| sdrangel | https://projects.knownelement.com/issues/219 | https://github.com/f4exb/sdrangel-docker |
| signoz | https://projects.knownelement.com/issues/221 | https://github.com/SigNoz/signoz.git |
| warp | https://projects.knownelement.com/issues/228 | https://github.com/sebo-b/warp.git |
| drawio | https://projects.knownelement.com/issues/272 | https://github.com/jgraph/docker-drawio |
| openblocks | https://projects.knownelement.com/issues/274 | https://github.com/openblocks-dev/openblocks.git |
| wireviz-web | https://projects.knownelement.com/issues/276 | https://github.com/wireviz/wireviz-web.git |
| autobom | https://projects.knownelement.com/issues/278 | https://github.com/opulo-inc/autobom.git |
| plmore | https://projects.knownelement.com/issues/279 | https://github.com/PLMore/PLMore |
| manyfold | https://projects.knownelement.com/issues/282 | https://github.com/manyfold3d/manyfold.git |
| langfuse | https://projects.knownelement.com/issues/283 | https://github.com/langfuse/oss-llmops-stack.git |
| puter | https://projects.knownelement.com/issues/286 | https://github.com/HeyPuter/puter.git |
| windmill | https://projects.knownelement.com/issues/285 | https://github.com/windmill-labs/windmill.git |
| swupdate | https://projects.knownelement.com/issues/326 | https://github.com/sbabic/swupdate.git |
| mender-server | https://projects.knownelement.com/issues/300 | https://github.com/mendersoftware/mender-server.git |
| wireflow | https://projects.knownelement.com/issues/50 | https://github.com/vanila-io/wireflow.git |
| nautilus-trader | https://projects.knownelement.com/issues/226 | https://github.com/nautechsystems/nautilus_trader.git |
| mirlo | TBD | https://github.com/funmusicplace/mirlo.git |
All entries are initially marked as `todo`; update individual READMEs as progress is made.
## Local Harness
Run `./scripts/ci_local.sh` (or `make ci-local`) to execute the same lint and smoke tests that the future Gitea runner will use. Install git hooks via `./scripts/hooks/install_hooks.sh` so pre-commit, post-commit, and pre-push events invoke the harness automatically. Export `SKIP_CI_HOOKS=1` to bypass them when necessary. See `docs/LOCAL_TESTING.md` for full details.
## CI/CD
Once a runner is provisioned, enable `.gitea/workflows/ci.yml` to call the same harness remotely (it currently requires manual `workflow_dispatch`). Mirror `actions/checkout@v4` and label the runner `ubuntu-22.04`. See `docs/CI_CD_GITEA.md` for setup details.
KNELCloudronPackages

177
STARTHERE.md Normal file
View File

@@ -0,0 +1,177 @@
Can you help me package up a large number of off the shelf applications for Cloudron?
Use web search to obtain the most up to date information to guide the process.
All of the packaging work needs to be done in docker containers , no host pollution of any kind. You may use docker on the host to orchestrate the workflows. You may use git to commit/push/tag as needed.
Presume that Im starting with an empty directory / repository. Ill need you to scaffold everything up for me following best common practices. Keep the repo layout clean.
Here is a list of software that I want to package. The format of the list is:
link to redmine ticket
link to the software repository
#https://projects.knownelement.com/issues/179
https://github.com/apache/apisix.git
#https://projects.knownelement.com/issues/204
https://github.com/target/goalert.git
#https://projects.knownelement.com/issues/189
https://github.com/consuldemocracy/consuldemocracy.git
#https://projects.knownelement.com/issues/195
https://github.com/fleetdm/fleet.git
#https://projects.knownelement.com/issues/227
https://github.com/fonoster/fonoster.git
#https://projects.knownelement.com/issues/192
https://github.com/healthchecks/healthchecks.git
#https://projects.knownelement.com/issues/209
https://github.com/juspay/hyperswitch
#https://projects.knownelement.com/issues/201
https://github.com/netbox-community/netbox-docker.git
#https://projects.knownelement.com/issues/205
https://github.com/openboxes/openboxes-docker.git
#https://projects.knownelement.com/issues/316
https://github.com/openfiletax/openfile.git
#https://projects.knownelement.com/issues/211
https://github.com/GemGeorge/SniperPhish-Docker.git
#https://projects.knownelement.com/issues/309
https://github.com/datahub-project/datahub.git
#https://projects.knownelement.com/issues/54
https://github.com/wiredlush/easy-gate.git
#https://projects.knownelement.com/issues/208
https://github.com/Payroll-Engine/PayrollEngine.git
#https://projects.knownelement.com/issues/194
https://github.com/huginn/huginn.git
#https://projects.knownelement.com/issues/191
https://github.com/gristlabs/grist-core
#https://projects.knownelement.com/issues/277
https://github.com/jhpyle/docassemble.git
#https://projects.knownelement.com/issues/273
https://github.com/kazhuravlev/database-gateway.git
#https://projects.knownelement.com/issues/217
https://github.com/rundeck/rundeck.git
#https://projects.knownelement.com/issues/222
https://github.com/SchedMD/slurm.git
https://github.com/giovtorres/slurm-docker-cluster.git
#https://projects.knownelement.com/issues/225
https://github.com/rathole-org/rathole.git
#https://projects.knownelement.com/issues/234
https://github.com/jenkinsci/jenkins.git
#https://projects.knownelement.com/issues/322
https://github.com/runmedev/runme.git
#https://projects.knownelement.com/issues/301
https://github.com/apache/seatunnel
#https://projects.knownelement.com/issues/271
https://github.com/thecatlady/docker-webhook
#https://projects.knownelement.com/issues/173
https://github.com/inventree/InvenTree.git
#https://projects.knownelement.com/issues/180
https://github.com/Cloud-RF/tak-server
#https://projects.knownelement.com/issues/178
https://github.com/midday-ai/midday.git
#https://projects.knownelement.com/issues/181
https://github.com/killbill/killbill.git
#https://projects.knownelement.com/issues/184
https://github.com/chirpstack/chirpstack.git
#https://projects.knownelement.com/issues/185
https://github.com/CraigChat/craig.git
#https://projects.knownelement.com/issues/188
https://github.com/elabftw/elabftw.git
#https://projects.knownelement.com/issues/196
https://github.com/jamovi/jamovi.git
#https://projects.knownelement.com/issues/197
https://github.com/INTI-CMNB/KiBot.git
#https://projects.knownelement.com/issues/214
https://github.com/Resgrid/Core
#https://projects.knownelement.com/issues/216
https://github.com/reviewboard/reviewboard.git
#https://projects.knownelement.com/issues/218
https://gitlab.com/librespacefoundation/satnogs/docker-kaitai.git
https://gitlab.com/librespacefoundation/satnogs/docker-satnogs-webgui.git
#https://projects.knownelement.com/issues/219
https://github.com/f4exb/sdrangel-docker
#https://projects.knownelement.com/issues/221
https://github.com/SigNoz/signoz.git
#https://projects.knownelement.com/issues/228
https://github.com/sebo-b/warp.git
#https://projects.knownelement.com/issues/272
https://github.com/jgraph/docker-drawio
#https://projects.knownelement.com/issues/274
https://github.com/openblocks-dev/openblocks.git
#https://projects.knownelement.com/issues/276
https://github.com/wireviz/wireviz-web.git
#https://projects.knownelement.com/issues/278
https://github.com/opulo-inc/autobom.git
#https://projects.knownelement.com/issues/279
https://github.com/PLMore/PLMore
#https://projects.knownelement.com/issues/282
https://github.com/manyfold3d/manyfold.git
#https://projects.knownelement.com/issues/283
https://github.com/langfuse/oss-llmops-stack.git
#https://projects.knownelement.com/issues/286
https://github.com/HeyPuter/puter.git
#https://projects.knownelement.com/issues/285
https://github.com/windmill-labs/windmill.git
#https://projects.knownelement.com/issues/326
https://github.com/sbabic/swupdate.git
#https://projects.knownelement.com/issues/300
https://github.com/mendersoftware/mender-server.git
#https://projects.knownelement.com/issues/50
https://github.com/vanila-io/wireflow.git
#https://projects.knownelement.com/issues/226
https://github.com/nautechsystems/nautilus_trader.git
#TBD
https://github.com/funmusicplace/mirlo.git

View File

@@ -0,0 +1,20 @@
{
"manifestVersion": 2,
"id": "com.knel.apache.apisix",
"title": "Apache APISIX",
"author": "Known Element Packaging Team",
"tagline": "TODO: Short one-line pitch",
"description": "TODO: Comprehensive description for the Cloudron App Store entry.",
"changelog": "Initial scaffold",
"website": "https://github.com/apache/apisix",
"supportUrl": "https://projects.knownelement.com/issues/179",
"sourceUrl": "https://github.com/apache/apisix.git",
"version": "0.1.0",
"tags": ["custom", "known-element"],
"healthCheckPath": "/",
"memoryLimit": 536870912,
"httpPort": 3000,
"addons": {
"localstorage": {}
}
}

View File

@@ -0,0 +1,22 @@
# syntax=docker/dockerfile:1
FROM cloudron/base:5.0.0
LABEL org.opencontainers.image.source="https://github.com/apache/apisix.git"
LABEL org.opencontainers.image.description="Cloudron package for Apache APISIX"
ARG APP_VERSION
ENV APP_VERSION=${APP_VERSION:-latest}
# Copy application source into image at build time
# Replace this with a multi-stage build if upstream provides Docker images.
COPY ./app /app/code
# Copy start script and make it executable
COPY ./start.sh /app/pkg/start.sh
RUN chmod +x /app/pkg/start.sh
# Cloudron expects all processes to run as cloudron user
USER cloudron
WORKDIR /app/code
CMD ["/app/pkg/start.sh"]

View File

@@ -0,0 +1,20 @@
# Apache APISIX on Cloudron
- **Upstream repository**: https://github.com/apache/apisix.git
- **Implementation issue**: https://projects.knownelement.com/issues/179
- **Status**: Draft scaffolding generated on $(date -u +"%Y-%m-%dT%H:%M:%SZ")
## Packaging Checklist
1. Review upstream deployment requirements and map them to Cloudron services (database, cache, object storage, workers).
2. Update `Dockerfile` with the correct build steps and runtime dependencies.
3. Implement `start.sh` to configure the app from Cloudron-provided environment variables and launch the primary process.
4. Edit `CloudronManifest.json` with accurate metadata, permissions, ports, addons, and health checks.
5. Add integration and smoke tests under `test/` to validate the package.
6. Document manual configuration steps, migration requirements, and known gaps in this README.
## Notes
- Replace the placeholder long-running process in `start.sh`.
- Populate the `app/` directory with the application build artefacts or git submodules.
- Use the shared packaging container (`docker/packager`) to run `cloudron build` and `cloudron install` so the host remains clean.

View File

View File

@@ -0,0 +1,9 @@
{
"slug": "apache-apisix",
"title": "Apache APISIX",
"issue": "https://projects.knownelement.com/issues/179",
"repo": "https://github.com/apache/apisix.git",
"additionalRepos": [],
"created": "2025-10-02T16:46:49Z",
"notes": "TODO: capture packaging notes"
}

8
apps/apache-apisix/start.sh Executable file
View File

@@ -0,0 +1,8 @@
#!/bin/bash
set -euo pipefail
# Cloudron injects configuration via environment variables and files under /run
# Use this script to render config files and launch the upstream service.
# TODO: Replace the command below with the correct process supervisor.
exec /bin/sh -c "echo 'Replace start.sh with application startup logic for Apache APISIX' && sleep infinity"

View File

@@ -0,0 +1,16 @@
#!/bin/bash
set -euo pipefail
# Basic container reachability check executed inside the packaging container.
# Replace curl target with an endpoint exposed by the app once the package is functional.
cloudron_app_url=${CLOUDRON_APP_ORIGIN:-"http://localhost"}
http_code=$(curl -s -o /tmp/smoke.log -w "%{http_code}" "${cloudron_app_url}")
if [[ "${http_code}" != "200" ]]; then
echo "Unexpected HTTP status: ${http_code}" >&2
cat /tmp/smoke.log >&2
exit 1
fi
echo "Smoke test passed"

View File

@@ -0,0 +1,20 @@
{
"manifestVersion": 2,
"id": "com.knel.autobom",
"title": "Autobom",
"author": "Known Element Packaging Team",
"tagline": "TODO: Short one-line pitch",
"description": "TODO: Comprehensive description for the Cloudron App Store entry.",
"changelog": "Initial scaffold",
"website": "https://github.com/opulo-inc/autobom",
"supportUrl": "https://projects.knownelement.com/issues/278",
"sourceUrl": "https://github.com/opulo-inc/autobom.git",
"version": "0.1.0",
"tags": ["custom", "known-element"],
"healthCheckPath": "/",
"memoryLimit": 536870912,
"httpPort": 3000,
"addons": {
"localstorage": {}
}
}

22
apps/autobom/Dockerfile Normal file
View File

@@ -0,0 +1,22 @@
# syntax=docker/dockerfile:1
FROM cloudron/base:5.0.0
LABEL org.opencontainers.image.source="https://github.com/opulo-inc/autobom.git"
LABEL org.opencontainers.image.description="Cloudron package for Autobom"
ARG APP_VERSION
ENV APP_VERSION=${APP_VERSION:-latest}
# Copy application source into image at build time
# Replace this with a multi-stage build if upstream provides Docker images.
COPY ./app /app/code
# Copy start script and make it executable
COPY ./start.sh /app/pkg/start.sh
RUN chmod +x /app/pkg/start.sh
# Cloudron expects all processes to run as cloudron user
USER cloudron
WORKDIR /app/code
CMD ["/app/pkg/start.sh"]

20
apps/autobom/README.md Normal file
View File

@@ -0,0 +1,20 @@
# Autobom on Cloudron
- **Upstream repository**: https://github.com/opulo-inc/autobom.git
- **Implementation issue**: https://projects.knownelement.com/issues/278
- **Status**: Draft scaffolding generated on $(date -u +"%Y-%m-%dT%H:%M:%SZ")
## Packaging Checklist
1. Review upstream deployment requirements and map them to Cloudron services (database, cache, object storage, workers).
2. Update `Dockerfile` with the correct build steps and runtime dependencies.
3. Implement `start.sh` to configure the app from Cloudron-provided environment variables and launch the primary process.
4. Edit `CloudronManifest.json` with accurate metadata, permissions, ports, addons, and health checks.
5. Add integration and smoke tests under `test/` to validate the package.
6. Document manual configuration steps, migration requirements, and known gaps in this README.
## Notes
- Replace the placeholder long-running process in `start.sh`.
- Populate the `app/` directory with the application build artefacts or git submodules.
- Use the shared packaging container (`docker/packager`) to run `cloudron build` and `cloudron install` so the host remains clean.

View File

View File

@@ -0,0 +1,9 @@
{
"slug": "autobom",
"title": "Autobom",
"issue": "https://projects.knownelement.com/issues/278",
"repo": "https://github.com/opulo-inc/autobom.git",
"additionalRepos": [],
"created": "2025-10-02T16:46:49Z",
"notes": "TODO: capture packaging notes"
}

8
apps/autobom/start.sh Executable file
View File

@@ -0,0 +1,8 @@
#!/bin/bash
set -euo pipefail
# Cloudron injects configuration via environment variables and files under /run
# Use this script to render config files and launch the upstream service.
# TODO: Replace the command below with the correct process supervisor.
exec /bin/sh -c "echo 'Replace start.sh with application startup logic for Autobom' && sleep infinity"

16
apps/autobom/test/smoke.sh Executable file
View File

@@ -0,0 +1,16 @@
#!/bin/bash
set -euo pipefail
# Basic container reachability check executed inside the packaging container.
# Replace curl target with an endpoint exposed by the app once the package is functional.
cloudron_app_url=${CLOUDRON_APP_ORIGIN:-"http://localhost"}
http_code=$(curl -s -o /tmp/smoke.log -w "%{http_code}" "${cloudron_app_url}")
if [[ "${http_code}" != "200" ]]; then
echo "Unexpected HTTP status: ${http_code}" >&2
cat /tmp/smoke.log >&2
exit 1
fi
echo "Smoke test passed"

335
apps/catalog.json Normal file
View File

@@ -0,0 +1,335 @@
[
{
"slug": "apache-apisix",
"title": "Apache APISIX",
"issue": "https://projects.knownelement.com/issues/179",
"repo": "https://github.com/apache/apisix.git"
},
{
"slug": "target-goalert",
"title": "GoAlert",
"issue": "https://projects.knownelement.com/issues/204",
"repo": "https://github.com/target/goalert.git"
},
{
"slug": "consuldemocracy",
"title": "CONSUL Democracy",
"issue": "https://projects.knownelement.com/issues/189",
"repo": "https://github.com/consuldemocracy/consuldemocracy.git"
},
{
"slug": "fleetdm-fleet",
"title": "FleetDM Fleet",
"issue": "https://projects.knownelement.com/issues/195",
"repo": "https://github.com/fleetdm/fleet.git"
},
{
"slug": "fonoster",
"title": "Fonoster",
"issue": "https://projects.knownelement.com/issues/227",
"repo": "https://github.com/fonoster/fonoster.git"
},
{
"slug": "healthchecks",
"title": "Healthchecks",
"issue": "https://projects.knownelement.com/issues/192",
"repo": "https://github.com/healthchecks/healthchecks.git"
},
{
"slug": "hyperswitch",
"title": "HyperSwitch",
"issue": "https://projects.knownelement.com/issues/209",
"repo": "https://github.com/juspay/hyperswitch"
},
{
"slug": "netbox-docker",
"title": "NetBox Docker",
"issue": "https://projects.knownelement.com/issues/201",
"repo": "https://github.com/netbox-community/netbox-docker.git"
},
{
"slug": "openboxes-docker",
"title": "OpenBoxes Docker",
"issue": "https://projects.knownelement.com/issues/205",
"repo": "https://github.com/openboxes/openboxes-docker.git"
},
{
"slug": "openfile",
"title": "OpenFile",
"issue": "https://projects.knownelement.com/issues/316",
"repo": "https://github.com/openfiletax/openfile.git"
},
{
"slug": "sniperphish",
"title": "SniperPhish",
"issue": "https://projects.knownelement.com/issues/211",
"repo": "https://github.com/GemGeorge/SniperPhish-Docker.git"
},
{
"slug": "datahub",
"title": "DataHub",
"issue": "https://projects.knownelement.com/issues/309",
"repo": "https://github.com/datahub-project/datahub.git"
},
{
"slug": "easy-gate",
"title": "Easy Gate",
"issue": "https://projects.knownelement.com/issues/54",
"repo": "https://github.com/wiredlush/easy-gate.git"
},
{
"slug": "payroll-engine",
"title": "Payroll Engine",
"issue": "https://projects.knownelement.com/issues/208",
"repo": "https://github.com/Payroll-Engine/PayrollEngine.git"
},
{
"slug": "huginn",
"title": "Huginn",
"issue": "https://projects.knownelement.com/issues/194",
"repo": "https://github.com/huginn/huginn.git"
},
{
"slug": "grist",
"title": "Grist",
"issue": "https://projects.knownelement.com/issues/191",
"repo": "https://github.com/gristlabs/grist-core"
},
{
"slug": "docassemble",
"title": "Docassemble",
"issue": "https://projects.knownelement.com/issues/277",
"repo": "https://github.com/jhpyle/docassemble.git"
},
{
"slug": "database-gateway",
"title": "Database Gateway",
"issue": "https://projects.knownelement.com/issues/273",
"repo": "https://github.com/kazhuravlev/database-gateway.git"
},
{
"slug": "rundeck",
"title": "Rundeck",
"issue": "https://projects.knownelement.com/issues/217",
"repo": "https://github.com/rundeck/rundeck.git"
},
{
"slug": "slurm",
"title": "Slurm",
"issue": "https://projects.knownelement.com/issues/222",
"repo": "https://github.com/SchedMD/slurm.git",
"additionalRepos": [
"https://github.com/giovtorres/slurm-docker-cluster.git"
]
},
{
"slug": "rathole",
"title": "rathole",
"issue": "https://projects.knownelement.com/issues/225",
"repo": "https://github.com/rathole-org/rathole.git"
},
{
"slug": "jenkins",
"title": "Jenkins",
"issue": "https://projects.knownelement.com/issues/234",
"repo": "https://github.com/jenkinsci/jenkins.git"
},
{
"slug": "runme",
"title": "Runme",
"issue": "https://projects.knownelement.com/issues/322",
"repo": "https://github.com/runmedev/runme.git"
},
{
"slug": "seatunnel",
"title": "SeaTunnel",
"issue": "https://projects.knownelement.com/issues/301",
"repo": "https://github.com/apache/seatunnel"
},
{
"slug": "docker-webhook",
"title": "docker-webhook",
"issue": "https://projects.knownelement.com/issues/271",
"repo": "https://github.com/thecatlady/docker-webhook"
},
{
"slug": "inventree",
"title": "InvenTree",
"issue": "https://projects.knownelement.com/issues/173",
"repo": "https://github.com/inventree/InvenTree.git"
},
{
"slug": "tak-server",
"title": "TAK Server",
"issue": "https://projects.knownelement.com/issues/180",
"repo": "https://github.com/Cloud-RF/tak-server"
},
{
"slug": "midday",
"title": "Midday",
"issue": "https://projects.knownelement.com/issues/178",
"repo": "https://github.com/midday-ai/midday.git"
},
{
"slug": "killbill",
"title": "Kill Bill",
"issue": "https://projects.knownelement.com/issues/181",
"repo": "https://github.com/killbill/killbill.git"
},
{
"slug": "chirpstack",
"title": "ChirpStack",
"issue": "https://projects.knownelement.com/issues/184",
"repo": "https://github.com/chirpstack/chirpstack.git"
},
{
"slug": "craig",
"title": "Craig (FOSS Discord Recorder)",
"issue": "https://projects.knownelement.com/issues/185",
"repo": "https://github.com/CraigChat/craig.git"
},
{
"slug": "elabftw",
"title": "eLabFTW",
"issue": "https://projects.knownelement.com/issues/188",
"repo": "https://github.com/elabftw/elabftw.git"
},
{
"slug": "jamovi",
"title": "jamovi",
"issue": "https://projects.knownelement.com/issues/196",
"repo": "https://github.com/jamovi/jamovi.git"
},
{
"slug": "kibot",
"title": "KiBot",
"issue": "https://projects.knownelement.com/issues/197",
"repo": "https://github.com/INTI-CMNB/KiBot.git"
},
{
"slug": "resgrid",
"title": "Resgrid Core",
"issue": "https://projects.knownelement.com/issues/214",
"repo": "https://github.com/Resgrid/Core"
},
{
"slug": "reviewboard",
"title": "Review Board",
"issue": "https://projects.knownelement.com/issues/216",
"repo": "https://github.com/reviewboard/reviewboard.git"
},
{
"slug": "satnogs-kaitai",
"title": "SatNOGS Kaitai",
"issue": "https://projects.knownelement.com/issues/218",
"repo": "https://gitlab.com/librespacefoundation/satnogs/docker-kaitai.git"
},
{
"slug": "satnogs-webgui",
"title": "SatNOGS WebGUI",
"issue": "https://projects.knownelement.com/issues/218",
"repo": "https://gitlab.com/librespacefoundation/satnogs/docker-satnogs-webgui.git"
},
{
"slug": "sdrangel",
"title": "SDRAngel",
"issue": "https://projects.knownelement.com/issues/219",
"repo": "https://github.com/f4exb/sdrangel-docker"
},
{
"slug": "signoz",
"title": "SigNoz",
"issue": "https://projects.knownelement.com/issues/221",
"repo": "https://github.com/SigNoz/signoz.git"
},
{
"slug": "warp",
"title": "Warp",
"issue": "https://projects.knownelement.com/issues/228",
"repo": "https://github.com/sebo-b/warp.git"
},
{
"slug": "drawio",
"title": "draw.io",
"issue": "https://projects.knownelement.com/issues/272",
"repo": "https://github.com/jgraph/docker-drawio"
},
{
"slug": "openblocks",
"title": "OpenBlocks",
"issue": "https://projects.knownelement.com/issues/274",
"repo": "https://github.com/openblocks-dev/openblocks.git"
},
{
"slug": "wireviz-web",
"title": "Wireviz Web",
"issue": "https://projects.knownelement.com/issues/276",
"repo": "https://github.com/wireviz/wireviz-web.git"
},
{
"slug": "autobom",
"title": "Autobom",
"issue": "https://projects.knownelement.com/issues/278",
"repo": "https://github.com/opulo-inc/autobom.git"
},
{
"slug": "plmore",
"title": "PLMore",
"issue": "https://projects.knownelement.com/issues/279",
"repo": "https://github.com/PLMore/PLMore"
},
{
"slug": "manyfold",
"title": "Manyfold",
"issue": "https://projects.knownelement.com/issues/282",
"repo": "https://github.com/manyfold3d/manyfold.git"
},
{
"slug": "langfuse",
"title": "Langfuse OSS LLMOps Stack",
"issue": "https://projects.knownelement.com/issues/283",
"repo": "https://github.com/langfuse/oss-llmops-stack.git"
},
{
"slug": "puter",
"title": "Puter",
"issue": "https://projects.knownelement.com/issues/286",
"repo": "https://github.com/HeyPuter/puter.git"
},
{
"slug": "windmill",
"title": "Windmill",
"issue": "https://projects.knownelement.com/issues/285",
"repo": "https://github.com/windmill-labs/windmill.git"
},
{
"slug": "swupdate",
"title": "swupdate",
"issue": "https://projects.knownelement.com/issues/326",
"repo": "https://github.com/sbabic/swupdate.git"
},
{
"slug": "mender-server",
"title": "Mender Server",
"issue": "https://projects.knownelement.com/issues/300",
"repo": "https://github.com/mendersoftware/mender-server.git"
},
{
"slug": "wireflow",
"title": "Wireflow",
"issue": "https://projects.knownelement.com/issues/50",
"repo": "https://github.com/vanila-io/wireflow.git"
},
{
"slug": "nautilus-trader",
"title": "Nautilus Trader",
"issue": "https://projects.knownelement.com/issues/226",
"repo": "https://github.com/nautechsystems/nautilus_trader.git"
},
{
"slug": "mirlo",
"title": "Mirlo",
"issue": "https://projects.knownelement.com/issues/TBD",
"repo": "https://github.com/funmusicplace/mirlo.git"
}
]

View File

@@ -0,0 +1,20 @@
{
"manifestVersion": 2,
"id": "com.knel.chirpstack",
"title": "ChirpStack",
"author": "Known Element Packaging Team",
"tagline": "TODO: Short one-line pitch",
"description": "TODO: Comprehensive description for the Cloudron App Store entry.",
"changelog": "Initial scaffold",
"website": "https://github.com/chirpstack/chirpstack",
"supportUrl": "https://projects.knownelement.com/issues/184",
"sourceUrl": "https://github.com/chirpstack/chirpstack.git",
"version": "0.1.0",
"tags": ["custom", "known-element"],
"healthCheckPath": "/",
"memoryLimit": 536870912,
"httpPort": 3000,
"addons": {
"localstorage": {}
}
}

View File

@@ -0,0 +1,22 @@
# syntax=docker/dockerfile:1
FROM cloudron/base:5.0.0
LABEL org.opencontainers.image.source="https://github.com/chirpstack/chirpstack.git"
LABEL org.opencontainers.image.description="Cloudron package for ChirpStack"
ARG APP_VERSION
ENV APP_VERSION=${APP_VERSION:-latest}
# Copy application source into image at build time
# Replace this with a multi-stage build if upstream provides Docker images.
COPY ./app /app/code
# Copy start script and make it executable
COPY ./start.sh /app/pkg/start.sh
RUN chmod +x /app/pkg/start.sh
# Cloudron expects all processes to run as cloudron user
USER cloudron
WORKDIR /app/code
CMD ["/app/pkg/start.sh"]

20
apps/chirpstack/README.md Normal file
View File

@@ -0,0 +1,20 @@
# ChirpStack on Cloudron
- **Upstream repository**: https://github.com/chirpstack/chirpstack.git
- **Implementation issue**: https://projects.knownelement.com/issues/184
- **Status**: Draft scaffolding generated on $(date -u +"%Y-%m-%dT%H:%M:%SZ")
## Packaging Checklist
1. Review upstream deployment requirements and map them to Cloudron services (database, cache, object storage, workers).
2. Update `Dockerfile` with the correct build steps and runtime dependencies.
3. Implement `start.sh` to configure the app from Cloudron-provided environment variables and launch the primary process.
4. Edit `CloudronManifest.json` with accurate metadata, permissions, ports, addons, and health checks.
5. Add integration and smoke tests under `test/` to validate the package.
6. Document manual configuration steps, migration requirements, and known gaps in this README.
## Notes
- Replace the placeholder long-running process in `start.sh`.
- Populate the `app/` directory with the application build artefacts or git submodules.
- Use the shared packaging container (`docker/packager`) to run `cloudron build` and `cloudron install` so the host remains clean.

View File

View File

@@ -0,0 +1,9 @@
{
"slug": "chirpstack",
"title": "ChirpStack",
"issue": "https://projects.knownelement.com/issues/184",
"repo": "https://github.com/chirpstack/chirpstack.git",
"additionalRepos": [],
"created": "2025-10-02T16:46:49Z",
"notes": "TODO: capture packaging notes"
}

8
apps/chirpstack/start.sh Executable file
View File

@@ -0,0 +1,8 @@
#!/bin/bash
set -euo pipefail
# Cloudron injects configuration via environment variables and files under /run
# Use this script to render config files and launch the upstream service.
# TODO: Replace the command below with the correct process supervisor.
exec /bin/sh -c "echo 'Replace start.sh with application startup logic for ChirpStack' && sleep infinity"

16
apps/chirpstack/test/smoke.sh Executable file
View File

@@ -0,0 +1,16 @@
#!/bin/bash
set -euo pipefail
# Basic container reachability check executed inside the packaging container.
# Replace curl target with an endpoint exposed by the app once the package is functional.
cloudron_app_url=${CLOUDRON_APP_ORIGIN:-"http://localhost"}
http_code=$(curl -s -o /tmp/smoke.log -w "%{http_code}" "${cloudron_app_url}")
if [[ "${http_code}" != "200" ]]; then
echo "Unexpected HTTP status: ${http_code}" >&2
cat /tmp/smoke.log >&2
exit 1
fi
echo "Smoke test passed"

View File

@@ -0,0 +1,20 @@
{
"manifestVersion": 2,
"id": "com.knel.consuldemocracy",
"title": "CONSUL Democracy",
"author": "Known Element Packaging Team",
"tagline": "TODO: Short one-line pitch",
"description": "TODO: Comprehensive description for the Cloudron App Store entry.",
"changelog": "Initial scaffold",
"website": "https://github.com/consuldemocracy/consuldemocracy",
"supportUrl": "https://projects.knownelement.com/issues/189",
"sourceUrl": "https://github.com/consuldemocracy/consuldemocracy.git",
"version": "0.1.0",
"tags": ["custom", "known-element"],
"healthCheckPath": "/",
"memoryLimit": 536870912,
"httpPort": 3000,
"addons": {
"localstorage": {}
}
}

View File

@@ -0,0 +1,22 @@
# syntax=docker/dockerfile:1
FROM cloudron/base:5.0.0
LABEL org.opencontainers.image.source="https://github.com/consuldemocracy/consuldemocracy.git"
LABEL org.opencontainers.image.description="Cloudron package for CONSUL Democracy"
ARG APP_VERSION
ENV APP_VERSION=${APP_VERSION:-latest}
# Copy application source into image at build time
# Replace this with a multi-stage build if upstream provides Docker images.
COPY ./app /app/code
# Copy start script and make it executable
COPY ./start.sh /app/pkg/start.sh
RUN chmod +x /app/pkg/start.sh
# Cloudron expects all processes to run as cloudron user
USER cloudron
WORKDIR /app/code
CMD ["/app/pkg/start.sh"]

View File

@@ -0,0 +1,20 @@
# CONSUL Democracy on Cloudron
- **Upstream repository**: https://github.com/consuldemocracy/consuldemocracy.git
- **Implementation issue**: https://projects.knownelement.com/issues/189
- **Status**: Draft scaffolding generated on $(date -u +"%Y-%m-%dT%H:%M:%SZ")
## Packaging Checklist
1. Review upstream deployment requirements and map them to Cloudron services (database, cache, object storage, workers).
2. Update `Dockerfile` with the correct build steps and runtime dependencies.
3. Implement `start.sh` to configure the app from Cloudron-provided environment variables and launch the primary process.
4. Edit `CloudronManifest.json` with accurate metadata, permissions, ports, addons, and health checks.
5. Add integration and smoke tests under `test/` to validate the package.
6. Document manual configuration steps, migration requirements, and known gaps in this README.
## Notes
- Replace the placeholder long-running process in `start.sh`.
- Populate the `app/` directory with the application build artefacts or git submodules.
- Use the shared packaging container (`docker/packager`) to run `cloudron build` and `cloudron install` so the host remains clean.

View File

View File

@@ -0,0 +1,9 @@
{
"slug": "consuldemocracy",
"title": "CONSUL Democracy",
"issue": "https://projects.knownelement.com/issues/189",
"repo": "https://github.com/consuldemocracy/consuldemocracy.git",
"additionalRepos": [],
"created": "2025-10-02T16:46:49Z",
"notes": "TODO: capture packaging notes"
}

8
apps/consuldemocracy/start.sh Executable file
View File

@@ -0,0 +1,8 @@
#!/bin/bash
set -euo pipefail
# Cloudron injects configuration via environment variables and files under /run
# Use this script to render config files and launch the upstream service.
# TODO: Replace the command below with the correct process supervisor.
exec /bin/sh -c "echo 'Replace start.sh with application startup logic for CONSUL Democracy' && sleep infinity"

View File

@@ -0,0 +1,16 @@
#!/bin/bash
set -euo pipefail
# Basic container reachability check executed inside the packaging container.
# Replace curl target with an endpoint exposed by the app once the package is functional.
cloudron_app_url=${CLOUDRON_APP_ORIGIN:-"http://localhost"}
http_code=$(curl -s -o /tmp/smoke.log -w "%{http_code}" "${cloudron_app_url}")
if [[ "${http_code}" != "200" ]]; then
echo "Unexpected HTTP status: ${http_code}" >&2
cat /tmp/smoke.log >&2
exit 1
fi
echo "Smoke test passed"

View File

@@ -0,0 +1,20 @@
{
"manifestVersion": 2,
"id": "com.knel.craig",
"title": "Craig (FOSS Discord Recorder)",
"author": "Known Element Packaging Team",
"tagline": "TODO: Short one-line pitch",
"description": "TODO: Comprehensive description for the Cloudron App Store entry.",
"changelog": "Initial scaffold",
"website": "https://github.com/CraigChat/cra",
"supportUrl": "https://projects.knownelement.com/issues/185",
"sourceUrl": "https://github.com/CraigChat/craig.git",
"version": "0.1.0",
"tags": ["custom", "known-element"],
"healthCheckPath": "/",
"memoryLimit": 536870912,
"httpPort": 3000,
"addons": {
"localstorage": {}
}
}

22
apps/craig/Dockerfile Normal file
View File

@@ -0,0 +1,22 @@
# syntax=docker/dockerfile:1
FROM cloudron/base:5.0.0
LABEL org.opencontainers.image.source="https://github.com/CraigChat/craig.git"
LABEL org.opencontainers.image.description="Cloudron package for Craig (FOSS Discord Recorder)"
ARG APP_VERSION
ENV APP_VERSION=${APP_VERSION:-latest}
# Copy application source into image at build time
# Replace this with a multi-stage build if upstream provides Docker images.
COPY ./app /app/code
# Copy start script and make it executable
COPY ./start.sh /app/pkg/start.sh
RUN chmod +x /app/pkg/start.sh
# Cloudron expects all processes to run as cloudron user
USER cloudron
WORKDIR /app/code
CMD ["/app/pkg/start.sh"]

20
apps/craig/README.md Normal file
View File

@@ -0,0 +1,20 @@
# Craig (FOSS Discord Recorder) on Cloudron
- **Upstream repository**: https://github.com/CraigChat/craig.git
- **Implementation issue**: https://projects.knownelement.com/issues/185
- **Status**: Draft scaffolding generated on $(date -u +"%Y-%m-%dT%H:%M:%SZ")
## Packaging Checklist
1. Review upstream deployment requirements and map them to Cloudron services (database, cache, object storage, workers).
2. Update `Dockerfile` with the correct build steps and runtime dependencies.
3. Implement `start.sh` to configure the app from Cloudron-provided environment variables and launch the primary process.
4. Edit `CloudronManifest.json` with accurate metadata, permissions, ports, addons, and health checks.
5. Add integration and smoke tests under `test/` to validate the package.
6. Document manual configuration steps, migration requirements, and known gaps in this README.
## Notes
- Replace the placeholder long-running process in `start.sh`.
- Populate the `app/` directory with the application build artefacts or git submodules.
- Use the shared packaging container (`docker/packager`) to run `cloudron build` and `cloudron install` so the host remains clean.

0
apps/craig/app/.gitkeep Normal file
View File

9
apps/craig/metadata.json Normal file
View File

@@ -0,0 +1,9 @@
{
"slug": "craig",
"title": "Craig (FOSS Discord Recorder)",
"issue": "https://projects.knownelement.com/issues/185",
"repo": "https://github.com/CraigChat/craig.git",
"additionalRepos": [],
"created": "2025-10-02T16:46:49Z",
"notes": "TODO: capture packaging notes"
}

8
apps/craig/start.sh Executable file
View File

@@ -0,0 +1,8 @@
#!/bin/bash
set -euo pipefail
# Cloudron injects configuration via environment variables and files under /run
# Use this script to render config files and launch the upstream service.
# TODO: Replace the command below with the correct process supervisor.
exec /bin/sh -c "echo 'Replace start.sh with application startup logic for Craig (FOSS Discord Recorder)' && sleep infinity"

16
apps/craig/test/smoke.sh Executable file
View File

@@ -0,0 +1,16 @@
#!/bin/bash
set -euo pipefail
# Basic container reachability check executed inside the packaging container.
# Replace curl target with an endpoint exposed by the app once the package is functional.
cloudron_app_url=${CLOUDRON_APP_ORIGIN:-"http://localhost"}
http_code=$(curl -s -o /tmp/smoke.log -w "%{http_code}" "${cloudron_app_url}")
if [[ "${http_code}" != "200" ]]; then
echo "Unexpected HTTP status: ${http_code}" >&2
cat /tmp/smoke.log >&2
exit 1
fi
echo "Smoke test passed"

View File

@@ -0,0 +1,20 @@
{
"manifestVersion": 2,
"id": "com.knel.database.gateway",
"title": "Database Gateway",
"author": "Known Element Packaging Team",
"tagline": "TODO: Short one-line pitch",
"description": "TODO: Comprehensive description for the Cloudron App Store entry.",
"changelog": "Initial scaffold",
"website": "https://github.com/kazhuravlev/database-gateway",
"supportUrl": "https://projects.knownelement.com/issues/273",
"sourceUrl": "https://github.com/kazhuravlev/database-gateway.git",
"version": "0.1.0",
"tags": ["custom", "known-element"],
"healthCheckPath": "/",
"memoryLimit": 536870912,
"httpPort": 3000,
"addons": {
"localstorage": {}
}
}

View File

@@ -0,0 +1,22 @@
# syntax=docker/dockerfile:1
FROM cloudron/base:5.0.0
LABEL org.opencontainers.image.source="https://github.com/kazhuravlev/database-gateway.git"
LABEL org.opencontainers.image.description="Cloudron package for Database Gateway"
ARG APP_VERSION
ENV APP_VERSION=${APP_VERSION:-latest}
# Copy application source into image at build time
# Replace this with a multi-stage build if upstream provides Docker images.
COPY ./app /app/code
# Copy start script and make it executable
COPY ./start.sh /app/pkg/start.sh
RUN chmod +x /app/pkg/start.sh
# Cloudron expects all processes to run as cloudron user
USER cloudron
WORKDIR /app/code
CMD ["/app/pkg/start.sh"]

View File

@@ -0,0 +1,20 @@
# Database Gateway on Cloudron
- **Upstream repository**: https://github.com/kazhuravlev/database-gateway.git
- **Implementation issue**: https://projects.knownelement.com/issues/273
- **Status**: Draft scaffolding generated on $(date -u +"%Y-%m-%dT%H:%M:%SZ")
## Packaging Checklist
1. Review upstream deployment requirements and map them to Cloudron services (database, cache, object storage, workers).
2. Update `Dockerfile` with the correct build steps and runtime dependencies.
3. Implement `start.sh` to configure the app from Cloudron-provided environment variables and launch the primary process.
4. Edit `CloudronManifest.json` with accurate metadata, permissions, ports, addons, and health checks.
5. Add integration and smoke tests under `test/` to validate the package.
6. Document manual configuration steps, migration requirements, and known gaps in this README.
## Notes
- Replace the placeholder long-running process in `start.sh`.
- Populate the `app/` directory with the application build artefacts or git submodules.
- Use the shared packaging container (`docker/packager`) to run `cloudron build` and `cloudron install` so the host remains clean.

View File

View File

@@ -0,0 +1,9 @@
{
"slug": "database-gateway",
"title": "Database Gateway",
"issue": "https://projects.knownelement.com/issues/273",
"repo": "https://github.com/kazhuravlev/database-gateway.git",
"additionalRepos": [],
"created": "2025-10-02T16:46:49Z",
"notes": "TODO: capture packaging notes"
}

8
apps/database-gateway/start.sh Executable file
View File

@@ -0,0 +1,8 @@
#!/bin/bash
set -euo pipefail
# Cloudron injects configuration via environment variables and files under /run
# Use this script to render config files and launch the upstream service.
# TODO: Replace the command below with the correct process supervisor.
exec /bin/sh -c "echo 'Replace start.sh with application startup logic for Database Gateway' && sleep infinity"

View File

@@ -0,0 +1,16 @@
#!/bin/bash
set -euo pipefail
# Basic container reachability check executed inside the packaging container.
# Replace curl target with an endpoint exposed by the app once the package is functional.
cloudron_app_url=${CLOUDRON_APP_ORIGIN:-"http://localhost"}
http_code=$(curl -s -o /tmp/smoke.log -w "%{http_code}" "${cloudron_app_url}")
if [[ "${http_code}" != "200" ]]; then
echo "Unexpected HTTP status: ${http_code}" >&2
cat /tmp/smoke.log >&2
exit 1
fi
echo "Smoke test passed"

View File

@@ -0,0 +1,20 @@
{
"manifestVersion": 2,
"id": "com.knel.datahub",
"title": "DataHub",
"author": "Known Element Packaging Team",
"tagline": "TODO: Short one-line pitch",
"description": "TODO: Comprehensive description for the Cloudron App Store entry.",
"changelog": "Initial scaffold",
"website": "https://github.com/datahub-project/datahub",
"supportUrl": "https://projects.knownelement.com/issues/309",
"sourceUrl": "https://github.com/datahub-project/datahub.git",
"version": "0.1.0",
"tags": ["custom", "known-element"],
"healthCheckPath": "/",
"memoryLimit": 536870912,
"httpPort": 3000,
"addons": {
"localstorage": {}
}
}

22
apps/datahub/Dockerfile Normal file
View File

@@ -0,0 +1,22 @@
# syntax=docker/dockerfile:1
FROM cloudron/base:5.0.0
LABEL org.opencontainers.image.source="https://github.com/datahub-project/datahub.git"
LABEL org.opencontainers.image.description="Cloudron package for DataHub"
ARG APP_VERSION
ENV APP_VERSION=${APP_VERSION:-latest}
# Copy application source into image at build time
# Replace this with a multi-stage build if upstream provides Docker images.
COPY ./app /app/code
# Copy start script and make it executable
COPY ./start.sh /app/pkg/start.sh
RUN chmod +x /app/pkg/start.sh
# Cloudron expects all processes to run as cloudron user
USER cloudron
WORKDIR /app/code
CMD ["/app/pkg/start.sh"]

20
apps/datahub/README.md Normal file
View File

@@ -0,0 +1,20 @@
# DataHub on Cloudron
- **Upstream repository**: https://github.com/datahub-project/datahub.git
- **Implementation issue**: https://projects.knownelement.com/issues/309
- **Status**: Draft scaffolding generated on $(date -u +"%Y-%m-%dT%H:%M:%SZ")
## Packaging Checklist
1. Review upstream deployment requirements and map them to Cloudron services (database, cache, object storage, workers).
2. Update `Dockerfile` with the correct build steps and runtime dependencies.
3. Implement `start.sh` to configure the app from Cloudron-provided environment variables and launch the primary process.
4. Edit `CloudronManifest.json` with accurate metadata, permissions, ports, addons, and health checks.
5. Add integration and smoke tests under `test/` to validate the package.
6. Document manual configuration steps, migration requirements, and known gaps in this README.
## Notes
- Replace the placeholder long-running process in `start.sh`.
- Populate the `app/` directory with the application build artefacts or git submodules.
- Use the shared packaging container (`docker/packager`) to run `cloudron build` and `cloudron install` so the host remains clean.

View File

View File

@@ -0,0 +1,9 @@
{
"slug": "datahub",
"title": "DataHub",
"issue": "https://projects.knownelement.com/issues/309",
"repo": "https://github.com/datahub-project/datahub.git",
"additionalRepos": [],
"created": "2025-10-02T16:46:49Z",
"notes": "TODO: capture packaging notes"
}

8
apps/datahub/start.sh Executable file
View File

@@ -0,0 +1,8 @@
#!/bin/bash
set -euo pipefail
# Cloudron injects configuration via environment variables and files under /run
# Use this script to render config files and launch the upstream service.
# TODO: Replace the command below with the correct process supervisor.
exec /bin/sh -c "echo 'Replace start.sh with application startup logic for DataHub' && sleep infinity"

16
apps/datahub/test/smoke.sh Executable file
View File

@@ -0,0 +1,16 @@
#!/bin/bash
set -euo pipefail
# Basic container reachability check executed inside the packaging container.
# Replace curl target with an endpoint exposed by the app once the package is functional.
cloudron_app_url=${CLOUDRON_APP_ORIGIN:-"http://localhost"}
http_code=$(curl -s -o /tmp/smoke.log -w "%{http_code}" "${cloudron_app_url}")
if [[ "${http_code}" != "200" ]]; then
echo "Unexpected HTTP status: ${http_code}" >&2
cat /tmp/smoke.log >&2
exit 1
fi
echo "Smoke test passed"

View File

@@ -0,0 +1,20 @@
{
"manifestVersion": 2,
"id": "com.knel.docassemble",
"title": "Docassemble",
"author": "Known Element Packaging Team",
"tagline": "TODO: Short one-line pitch",
"description": "TODO: Comprehensive description for the Cloudron App Store entry.",
"changelog": "Initial scaffold",
"website": "https://github.com/jhpyle/docassemble",
"supportUrl": "https://projects.knownelement.com/issues/277",
"sourceUrl": "https://github.com/jhpyle/docassemble.git",
"version": "0.1.0",
"tags": ["custom", "known-element"],
"healthCheckPath": "/",
"memoryLimit": 536870912,
"httpPort": 3000,
"addons": {
"localstorage": {}
}
}

View File

@@ -0,0 +1,22 @@
# syntax=docker/dockerfile:1
FROM cloudron/base:5.0.0
LABEL org.opencontainers.image.source="https://github.com/jhpyle/docassemble.git"
LABEL org.opencontainers.image.description="Cloudron package for Docassemble"
ARG APP_VERSION
ENV APP_VERSION=${APP_VERSION:-latest}
# Copy application source into image at build time
# Replace this with a multi-stage build if upstream provides Docker images.
COPY ./app /app/code
# Copy start script and make it executable
COPY ./start.sh /app/pkg/start.sh
RUN chmod +x /app/pkg/start.sh
# Cloudron expects all processes to run as cloudron user
USER cloudron
WORKDIR /app/code
CMD ["/app/pkg/start.sh"]

View File

@@ -0,0 +1,20 @@
# Docassemble on Cloudron
- **Upstream repository**: https://github.com/jhpyle/docassemble.git
- **Implementation issue**: https://projects.knownelement.com/issues/277
- **Status**: Draft scaffolding generated on $(date -u +"%Y-%m-%dT%H:%M:%SZ")
## Packaging Checklist
1. Review upstream deployment requirements and map them to Cloudron services (database, cache, object storage, workers).
2. Update `Dockerfile` with the correct build steps and runtime dependencies.
3. Implement `start.sh` to configure the app from Cloudron-provided environment variables and launch the primary process.
4. Edit `CloudronManifest.json` with accurate metadata, permissions, ports, addons, and health checks.
5. Add integration and smoke tests under `test/` to validate the package.
6. Document manual configuration steps, migration requirements, and known gaps in this README.
## Notes
- Replace the placeholder long-running process in `start.sh`.
- Populate the `app/` directory with the application build artefacts or git submodules.
- Use the shared packaging container (`docker/packager`) to run `cloudron build` and `cloudron install` so the host remains clean.

View File

View File

@@ -0,0 +1,9 @@
{
"slug": "docassemble",
"title": "Docassemble",
"issue": "https://projects.knownelement.com/issues/277",
"repo": "https://github.com/jhpyle/docassemble.git",
"additionalRepos": [],
"created": "2025-10-02T16:46:49Z",
"notes": "TODO: capture packaging notes"
}

8
apps/docassemble/start.sh Executable file
View File

@@ -0,0 +1,8 @@
#!/bin/bash
set -euo pipefail
# Cloudron injects configuration via environment variables and files under /run
# Use this script to render config files and launch the upstream service.
# TODO: Replace the command below with the correct process supervisor.
exec /bin/sh -c "echo 'Replace start.sh with application startup logic for Docassemble' && sleep infinity"

16
apps/docassemble/test/smoke.sh Executable file
View File

@@ -0,0 +1,16 @@
#!/bin/bash
set -euo pipefail
# Basic container reachability check executed inside the packaging container.
# Replace curl target with an endpoint exposed by the app once the package is functional.
cloudron_app_url=${CLOUDRON_APP_ORIGIN:-"http://localhost"}
http_code=$(curl -s -o /tmp/smoke.log -w "%{http_code}" "${cloudron_app_url}")
if [[ "${http_code}" != "200" ]]; then
echo "Unexpected HTTP status: ${http_code}" >&2
cat /tmp/smoke.log >&2
exit 1
fi
echo "Smoke test passed"

View File

@@ -0,0 +1,20 @@
{
"manifestVersion": 2,
"id": "com.knel.docker.webhook",
"title": "docker-webhook",
"author": "Known Element Packaging Team",
"tagline": "TODO: Short one-line pitch",
"description": "TODO: Comprehensive description for the Cloudron App Store entry.",
"changelog": "Initial scaffold",
"website": "https://github.com/thecatlady/docker-webhook",
"supportUrl": "https://projects.knownelement.com/issues/271",
"sourceUrl": "https://github.com/thecatlady/docker-webhook",
"version": "0.1.0",
"tags": ["custom", "known-element"],
"healthCheckPath": "/",
"memoryLimit": 536870912,
"httpPort": 3000,
"addons": {
"localstorage": {}
}
}

View File

@@ -0,0 +1,22 @@
# syntax=docker/dockerfile:1
FROM cloudron/base:5.0.0
LABEL org.opencontainers.image.source="https://github.com/thecatlady/docker-webhook"
LABEL org.opencontainers.image.description="Cloudron package for docker-webhook"
ARG APP_VERSION
ENV APP_VERSION=${APP_VERSION:-latest}
# Copy application source into image at build time
# Replace this with a multi-stage build if upstream provides Docker images.
COPY ./app /app/code
# Copy start script and make it executable
COPY ./start.sh /app/pkg/start.sh
RUN chmod +x /app/pkg/start.sh
# Cloudron expects all processes to run as cloudron user
USER cloudron
WORKDIR /app/code
CMD ["/app/pkg/start.sh"]

View File

@@ -0,0 +1,20 @@
# docker-webhook on Cloudron
- **Upstream repository**: https://github.com/thecatlady/docker-webhook
- **Implementation issue**: https://projects.knownelement.com/issues/271
- **Status**: Draft scaffolding generated on $(date -u +"%Y-%m-%dT%H:%M:%SZ")
## Packaging Checklist
1. Review upstream deployment requirements and map them to Cloudron services (database, cache, object storage, workers).
2. Update `Dockerfile` with the correct build steps and runtime dependencies.
3. Implement `start.sh` to configure the app from Cloudron-provided environment variables and launch the primary process.
4. Edit `CloudronManifest.json` with accurate metadata, permissions, ports, addons, and health checks.
5. Add integration and smoke tests under `test/` to validate the package.
6. Document manual configuration steps, migration requirements, and known gaps in this README.
## Notes
- Replace the placeholder long-running process in `start.sh`.
- Populate the `app/` directory with the application build artefacts or git submodules.
- Use the shared packaging container (`docker/packager`) to run `cloudron build` and `cloudron install` so the host remains clean.

View File

View File

@@ -0,0 +1,9 @@
{
"slug": "docker-webhook",
"title": "docker-webhook",
"issue": "https://projects.knownelement.com/issues/271",
"repo": "https://github.com/thecatlady/docker-webhook",
"additionalRepos": [],
"created": "2025-10-02T16:46:49Z",
"notes": "TODO: capture packaging notes"
}

8
apps/docker-webhook/start.sh Executable file
View File

@@ -0,0 +1,8 @@
#!/bin/bash
set -euo pipefail
# Cloudron injects configuration via environment variables and files under /run
# Use this script to render config files and launch the upstream service.
# TODO: Replace the command below with the correct process supervisor.
exec /bin/sh -c "echo 'Replace start.sh with application startup logic for docker-webhook' && sleep infinity"

View File

@@ -0,0 +1,16 @@
#!/bin/bash
set -euo pipefail
# Basic container reachability check executed inside the packaging container.
# Replace curl target with an endpoint exposed by the app once the package is functional.
cloudron_app_url=${CLOUDRON_APP_ORIGIN:-"http://localhost"}
http_code=$(curl -s -o /tmp/smoke.log -w "%{http_code}" "${cloudron_app_url}")
if [[ "${http_code}" != "200" ]]; then
echo "Unexpected HTTP status: ${http_code}" >&2
cat /tmp/smoke.log >&2
exit 1
fi
echo "Smoke test passed"

View File

@@ -0,0 +1,20 @@
{
"manifestVersion": 2,
"id": "com.knel.drawio",
"title": "draw.io",
"author": "Known Element Packaging Team",
"tagline": "TODO: Short one-line pitch",
"description": "TODO: Comprehensive description for the Cloudron App Store entry.",
"changelog": "Initial scaffold",
"website": "https://github.com/jgraph/docker-drawio",
"supportUrl": "https://projects.knownelement.com/issues/272",
"sourceUrl": "https://github.com/jgraph/docker-drawio",
"version": "0.1.0",
"tags": ["custom", "known-element"],
"healthCheckPath": "/",
"memoryLimit": 536870912,
"httpPort": 3000,
"addons": {
"localstorage": {}
}
}

22
apps/drawio/Dockerfile Normal file
View File

@@ -0,0 +1,22 @@
# syntax=docker/dockerfile:1
FROM cloudron/base:5.0.0
LABEL org.opencontainers.image.source="https://github.com/jgraph/docker-drawio"
LABEL org.opencontainers.image.description="Cloudron package for draw.io"
ARG APP_VERSION
ENV APP_VERSION=${APP_VERSION:-latest}
# Copy application source into image at build time
# Replace this with a multi-stage build if upstream provides Docker images.
COPY ./app /app/code
# Copy start script and make it executable
COPY ./start.sh /app/pkg/start.sh
RUN chmod +x /app/pkg/start.sh
# Cloudron expects all processes to run as cloudron user
USER cloudron
WORKDIR /app/code
CMD ["/app/pkg/start.sh"]

20
apps/drawio/README.md Normal file
View File

@@ -0,0 +1,20 @@
# draw.io on Cloudron
- **Upstream repository**: https://github.com/jgraph/docker-drawio
- **Implementation issue**: https://projects.knownelement.com/issues/272
- **Status**: Draft scaffolding generated on $(date -u +"%Y-%m-%dT%H:%M:%SZ")
## Packaging Checklist
1. Review upstream deployment requirements and map them to Cloudron services (database, cache, object storage, workers).
2. Update `Dockerfile` with the correct build steps and runtime dependencies.
3. Implement `start.sh` to configure the app from Cloudron-provided environment variables and launch the primary process.
4. Edit `CloudronManifest.json` with accurate metadata, permissions, ports, addons, and health checks.
5. Add integration and smoke tests under `test/` to validate the package.
6. Document manual configuration steps, migration requirements, and known gaps in this README.
## Notes
- Replace the placeholder long-running process in `start.sh`.
- Populate the `app/` directory with the application build artefacts or git submodules.
- Use the shared packaging container (`docker/packager`) to run `cloudron build` and `cloudron install` so the host remains clean.

0
apps/drawio/app/.gitkeep Normal file
View File

View File

@@ -0,0 +1,9 @@
{
"slug": "drawio",
"title": "draw.io",
"issue": "https://projects.knownelement.com/issues/272",
"repo": "https://github.com/jgraph/docker-drawio",
"additionalRepos": [],
"created": "2025-10-02T16:46:49Z",
"notes": "TODO: capture packaging notes"
}

8
apps/drawio/start.sh Executable file
View File

@@ -0,0 +1,8 @@
#!/bin/bash
set -euo pipefail
# Cloudron injects configuration via environment variables and files under /run
# Use this script to render config files and launch the upstream service.
# TODO: Replace the command below with the correct process supervisor.
exec /bin/sh -c "echo 'Replace start.sh with application startup logic for draw.io' && sleep infinity"

16
apps/drawio/test/smoke.sh Executable file
View File

@@ -0,0 +1,16 @@
#!/bin/bash
set -euo pipefail
# Basic container reachability check executed inside the packaging container.
# Replace curl target with an endpoint exposed by the app once the package is functional.
cloudron_app_url=${CLOUDRON_APP_ORIGIN:-"http://localhost"}
http_code=$(curl -s -o /tmp/smoke.log -w "%{http_code}" "${cloudron_app_url}")
if [[ "${http_code}" != "200" ]]; then
echo "Unexpected HTTP status: ${http_code}" >&2
cat /tmp/smoke.log >&2
exit 1
fi
echo "Smoke test passed"

View File

@@ -0,0 +1,20 @@
{
"manifestVersion": 2,
"id": "com.knel.easy.gate",
"title": "Easy Gate",
"author": "Known Element Packaging Team",
"tagline": "TODO: Short one-line pitch",
"description": "TODO: Comprehensive description for the Cloudron App Store entry.",
"changelog": "Initial scaffold",
"website": "https://github.com/wiredlush/easy-gate",
"supportUrl": "https://projects.knownelement.com/issues/54",
"sourceUrl": "https://github.com/wiredlush/easy-gate.git",
"version": "0.1.0",
"tags": ["custom", "known-element"],
"healthCheckPath": "/",
"memoryLimit": 536870912,
"httpPort": 3000,
"addons": {
"localstorage": {}
}
}

22
apps/easy-gate/Dockerfile Normal file
View File

@@ -0,0 +1,22 @@
# syntax=docker/dockerfile:1
FROM cloudron/base:5.0.0
LABEL org.opencontainers.image.source="https://github.com/wiredlush/easy-gate.git"
LABEL org.opencontainers.image.description="Cloudron package for Easy Gate"
ARG APP_VERSION
ENV APP_VERSION=${APP_VERSION:-latest}
# Copy application source into image at build time
# Replace this with a multi-stage build if upstream provides Docker images.
COPY ./app /app/code
# Copy start script and make it executable
COPY ./start.sh /app/pkg/start.sh
RUN chmod +x /app/pkg/start.sh
# Cloudron expects all processes to run as cloudron user
USER cloudron
WORKDIR /app/code
CMD ["/app/pkg/start.sh"]

20
apps/easy-gate/README.md Normal file
View File

@@ -0,0 +1,20 @@
# Easy Gate on Cloudron
- **Upstream repository**: https://github.com/wiredlush/easy-gate.git
- **Implementation issue**: https://projects.knownelement.com/issues/54
- **Status**: Draft scaffolding generated on $(date -u +"%Y-%m-%dT%H:%M:%SZ")
## Packaging Checklist
1. Review upstream deployment requirements and map them to Cloudron services (database, cache, object storage, workers).
2. Update `Dockerfile` with the correct build steps and runtime dependencies.
3. Implement `start.sh` to configure the app from Cloudron-provided environment variables and launch the primary process.
4. Edit `CloudronManifest.json` with accurate metadata, permissions, ports, addons, and health checks.
5. Add integration and smoke tests under `test/` to validate the package.
6. Document manual configuration steps, migration requirements, and known gaps in this README.
## Notes
- Replace the placeholder long-running process in `start.sh`.
- Populate the `app/` directory with the application build artefacts or git submodules.
- Use the shared packaging container (`docker/packager`) to run `cloudron build` and `cloudron install` so the host remains clean.

View File

View File

@@ -0,0 +1,9 @@
{
"slug": "easy-gate",
"title": "Easy Gate",
"issue": "https://projects.knownelement.com/issues/54",
"repo": "https://github.com/wiredlush/easy-gate.git",
"additionalRepos": [],
"created": "2025-10-02T16:46:49Z",
"notes": "TODO: capture packaging notes"
}

8
apps/easy-gate/start.sh Executable file
View File

@@ -0,0 +1,8 @@
#!/bin/bash
set -euo pipefail
# Cloudron injects configuration via environment variables and files under /run
# Use this script to render config files and launch the upstream service.
# TODO: Replace the command below with the correct process supervisor.
exec /bin/sh -c "echo 'Replace start.sh with application startup logic for Easy Gate' && sleep infinity"

16
apps/easy-gate/test/smoke.sh Executable file
View File

@@ -0,0 +1,16 @@
#!/bin/bash
set -euo pipefail
# Basic container reachability check executed inside the packaging container.
# Replace curl target with an endpoint exposed by the app once the package is functional.
cloudron_app_url=${CLOUDRON_APP_ORIGIN:-"http://localhost"}
http_code=$(curl -s -o /tmp/smoke.log -w "%{http_code}" "${cloudron_app_url}")
if [[ "${http_code}" != "200" ]]; then
echo "Unexpected HTTP status: ${http_code}" >&2
cat /tmp/smoke.log >&2
exit 1
fi
echo "Smoke test passed"

View File

@@ -0,0 +1,20 @@
{
"manifestVersion": 2,
"id": "com.knel.elabftw",
"title": "eLabFTW",
"author": "Known Element Packaging Team",
"tagline": "TODO: Short one-line pitch",
"description": "TODO: Comprehensive description for the Cloudron App Store entry.",
"changelog": "Initial scaffold",
"website": "https://github.com/elabftw/elabftw",
"supportUrl": "https://projects.knownelement.com/issues/188",
"sourceUrl": "https://github.com/elabftw/elabftw.git",
"version": "0.1.0",
"tags": ["custom", "known-element"],
"healthCheckPath": "/",
"memoryLimit": 536870912,
"httpPort": 3000,
"addons": {
"localstorage": {}
}
}

22
apps/elabftw/Dockerfile Normal file
View File

@@ -0,0 +1,22 @@
# syntax=docker/dockerfile:1
FROM cloudron/base:5.0.0
LABEL org.opencontainers.image.source="https://github.com/elabftw/elabftw.git"
LABEL org.opencontainers.image.description="Cloudron package for eLabFTW"
ARG APP_VERSION
ENV APP_VERSION=${APP_VERSION:-latest}
# Copy application source into image at build time
# Replace this with a multi-stage build if upstream provides Docker images.
COPY ./app /app/code
# Copy start script and make it executable
COPY ./start.sh /app/pkg/start.sh
RUN chmod +x /app/pkg/start.sh
# Cloudron expects all processes to run as cloudron user
USER cloudron
WORKDIR /app/code
CMD ["/app/pkg/start.sh"]

20
apps/elabftw/README.md Normal file
View File

@@ -0,0 +1,20 @@
# eLabFTW on Cloudron
- **Upstream repository**: https://github.com/elabftw/elabftw.git
- **Implementation issue**: https://projects.knownelement.com/issues/188
- **Status**: Draft scaffolding generated on $(date -u +"%Y-%m-%dT%H:%M:%SZ")
## Packaging Checklist
1. Review upstream deployment requirements and map them to Cloudron services (database, cache, object storage, workers).
2. Update `Dockerfile` with the correct build steps and runtime dependencies.
3. Implement `start.sh` to configure the app from Cloudron-provided environment variables and launch the primary process.
4. Edit `CloudronManifest.json` with accurate metadata, permissions, ports, addons, and health checks.
5. Add integration and smoke tests under `test/` to validate the package.
6. Document manual configuration steps, migration requirements, and known gaps in this README.
## Notes
- Replace the placeholder long-running process in `start.sh`.
- Populate the `app/` directory with the application build artefacts or git submodules.
- Use the shared packaging container (`docker/packager`) to run `cloudron build` and `cloudron install` so the host remains clean.

View File

View File

@@ -0,0 +1,9 @@
{
"slug": "elabftw",
"title": "eLabFTW",
"issue": "https://projects.knownelement.com/issues/188",
"repo": "https://github.com/elabftw/elabftw.git",
"additionalRepos": [],
"created": "2025-10-02T16:46:49Z",
"notes": "TODO: capture packaging notes"
}

8
apps/elabftw/start.sh Executable file
View File

@@ -0,0 +1,8 @@
#!/bin/bash
set -euo pipefail
# Cloudron injects configuration via environment variables and files under /run
# Use this script to render config files and launch the upstream service.
# TODO: Replace the command below with the correct process supervisor.
exec /bin/sh -c "echo 'Replace start.sh with application startup logic for eLabFTW' && sleep infinity"

16
apps/elabftw/test/smoke.sh Executable file
View File

@@ -0,0 +1,16 @@
#!/bin/bash
set -euo pipefail
# Basic container reachability check executed inside the packaging container.
# Replace curl target with an endpoint exposed by the app once the package is functional.
cloudron_app_url=${CLOUDRON_APP_ORIGIN:-"http://localhost"}
http_code=$(curl -s -o /tmp/smoke.log -w "%{http_code}" "${cloudron_app_url}")
if [[ "${http_code}" != "200" ]]; then
echo "Unexpected HTTP status: ${http_code}" >&2
cat /tmp/smoke.log >&2
exit 1
fi
echo "Smoke test passed"

View File

@@ -0,0 +1,20 @@
{
"manifestVersion": 2,
"id": "com.knel.fleetdm.fleet",
"title": "FleetDM Fleet",
"author": "Known Element Packaging Team",
"tagline": "TODO: Short one-line pitch",
"description": "TODO: Comprehensive description for the Cloudron App Store entry.",
"changelog": "Initial scaffold",
"website": "https://github.com/fleetdm/flee",
"supportUrl": "https://projects.knownelement.com/issues/195",
"sourceUrl": "https://github.com/fleetdm/fleet.git",
"version": "0.1.0",
"tags": ["custom", "known-element"],
"healthCheckPath": "/",
"memoryLimit": 536870912,
"httpPort": 3000,
"addons": {
"localstorage": {}
}
}

View File

@@ -0,0 +1,22 @@
# syntax=docker/dockerfile:1
FROM cloudron/base:5.0.0
LABEL org.opencontainers.image.source="https://github.com/fleetdm/fleet.git"
LABEL org.opencontainers.image.description="Cloudron package for FleetDM Fleet"
ARG APP_VERSION
ENV APP_VERSION=${APP_VERSION:-latest}
# Copy application source into image at build time
# Replace this with a multi-stage build if upstream provides Docker images.
COPY ./app /app/code
# Copy start script and make it executable
COPY ./start.sh /app/pkg/start.sh
RUN chmod +x /app/pkg/start.sh
# Cloudron expects all processes to run as cloudron user
USER cloudron
WORKDIR /app/code
CMD ["/app/pkg/start.sh"]

View File

@@ -0,0 +1,20 @@
# FleetDM Fleet on Cloudron
- **Upstream repository**: https://github.com/fleetdm/fleet.git
- **Implementation issue**: https://projects.knownelement.com/issues/195
- **Status**: Draft scaffolding generated on $(date -u +"%Y-%m-%dT%H:%M:%SZ")
## Packaging Checklist
1. Review upstream deployment requirements and map them to Cloudron services (database, cache, object storage, workers).
2. Update `Dockerfile` with the correct build steps and runtime dependencies.
3. Implement `start.sh` to configure the app from Cloudron-provided environment variables and launch the primary process.
4. Edit `CloudronManifest.json` with accurate metadata, permissions, ports, addons, and health checks.
5. Add integration and smoke tests under `test/` to validate the package.
6. Document manual configuration steps, migration requirements, and known gaps in this README.
## Notes
- Replace the placeholder long-running process in `start.sh`.
- Populate the `app/` directory with the application build artefacts or git submodules.
- Use the shared packaging container (`docker/packager`) to run `cloudron build` and `cloudron install` so the host remains clean.

View File

View File

@@ -0,0 +1,9 @@
{
"slug": "fleetdm-fleet",
"title": "FleetDM Fleet",
"issue": "https://projects.knownelement.com/issues/195",
"repo": "https://github.com/fleetdm/fleet.git",
"additionalRepos": [],
"created": "2025-10-02T16:46:49Z",
"notes": "TODO: capture packaging notes"
}

8
apps/fleetdm-fleet/start.sh Executable file
View File

@@ -0,0 +1,8 @@
#!/bin/bash
set -euo pipefail
# Cloudron injects configuration via environment variables and files under /run
# Use this script to render config files and launch the upstream service.
# TODO: Replace the command below with the correct process supervisor.
exec /bin/sh -c "echo 'Replace start.sh with application startup logic for FleetDM Fleet' && sleep infinity"

View File

@@ -0,0 +1,16 @@
#!/bin/bash
set -euo pipefail
# Basic container reachability check executed inside the packaging container.
# Replace curl target with an endpoint exposed by the app once the package is functional.
cloudron_app_url=${CLOUDRON_APP_ORIGIN:-"http://localhost"}
http_code=$(curl -s -o /tmp/smoke.log -w "%{http_code}" "${cloudron_app_url}")
if [[ "${http_code}" != "200" ]]; then
echo "Unexpected HTTP status: ${http_code}" >&2
cat /tmp/smoke.log >&2
exit 1
fi
echo "Smoke test passed"

View File

@@ -0,0 +1,20 @@
{
"manifestVersion": 2,
"id": "com.knel.fonoster",
"title": "Fonoster",
"author": "Known Element Packaging Team",
"tagline": "TODO: Short one-line pitch",
"description": "TODO: Comprehensive description for the Cloudron App Store entry.",
"changelog": "Initial scaffold",
"website": "https://github.com/fonoster/fonoster",
"supportUrl": "https://projects.knownelement.com/issues/227",
"sourceUrl": "https://github.com/fonoster/fonoster.git",
"version": "0.1.0",
"tags": ["custom", "known-element"],
"healthCheckPath": "/",
"memoryLimit": 536870912,
"httpPort": 3000,
"addons": {
"localstorage": {}
}
}

22
apps/fonoster/Dockerfile Normal file
View File

@@ -0,0 +1,22 @@
# syntax=docker/dockerfile:1
FROM cloudron/base:5.0.0
LABEL org.opencontainers.image.source="https://github.com/fonoster/fonoster.git"
LABEL org.opencontainers.image.description="Cloudron package for Fonoster"
ARG APP_VERSION
ENV APP_VERSION=${APP_VERSION:-latest}
# Copy application source into image at build time
# Replace this with a multi-stage build if upstream provides Docker images.
COPY ./app /app/code
# Copy start script and make it executable
COPY ./start.sh /app/pkg/start.sh
RUN chmod +x /app/pkg/start.sh
# Cloudron expects all processes to run as cloudron user
USER cloudron
WORKDIR /app/code
CMD ["/app/pkg/start.sh"]

Some files were not shown because too many files have changed in this diff Show More