Compare commits

...

115 Commits

Author SHA1 Message Date
52439d8f37 docs(agents): enforce host-as-read-only; only use preinstalled docker/git/tea/curl; all work in containers 2025-09-12 14:34:47 -05:00
39a28bbf2f docs(agents): clarify commit/push strategy; batch pushes; never push unvalidated builds 2025-09-12 14:33:33 -05:00
abb7232ce0 docs(agents): allow host curl strictly for connectivity checks 2025-09-12 14:31:44 -05:00
790c5b9d92 docs: add AGENTS.md (agent operating guide: container-only, approval before push) 2025-09-12 14:30:37 -05:00
01f6309dec fix(rathole): enforce server-only mode; expose 2333; update docs 2025-09-12 14:28:32 -05:00
e0f0a4ab56 fix(rathole): install python3 for built-in health endpoint 2025-09-12 14:27:48 -05:00
11365035b8 feat(rathole): add clean Cloudron package using base 5.0.0 with server/client config and health endpoint 2025-09-12 14:26:43 -05:00
c835a8438b infra: container-only workflow (packaging image + scripts); README: add No Host Pollution policy 2025-09-12 14:22:56 -05:00
02057f7815 chore: default Cloudron base to 5.0.0; parameterize template with __CLOUDRON_BASE__ and --base option 2025-09-12 14:20:20 -05:00
8bb6d00b0f chore: add Cloudron PackageTemplate, helper script; add .gitattributes/.editorconfig; refine .gitignore; improve workspace scripts 2025-09-12 14:18:41 -05:00
1a2f9bae6d chore: refine .gitignore (env, logs, editors; allow .dockerignore in packages) 2025-09-12 14:13:07 -05:00
4677c5c3ff docs: update PackagingForCloudronWorkspace README to reflect new paths and simplified process 2025-09-12 14:12:50 -05:00
7a4748496c docs: rewrite README for streamlined single-branch repo 2025-09-12 14:11:22 -05:00
0e98a63b99 chore: update .gitignore for PackagingForCloudronWorkspace 2025-09-12 14:08:32 -05:00
59fc7fedf4 chore: apply local filesystem changes (remove legacy dirs; add new structure) 2025-09-12 14:05:02 -05:00
d34e1760c8 chore: re-create CloudronPackages directory (empty scaffold) 2025-09-12 14:03:28 -05:00
410f610af0 chore: remove CloudronPackages for streamlined repo 2025-09-12 14:02:46 -05:00
6acfe24403 chore: remove KNEL-Cloudron directory for streamlined repo 2025-09-12 14:01:31 -05:00
a1ea3204f1 chore: remove docs directory for streamlined repo 2025-09-12 13:59:57 -05:00
d22e6bbe81 chore(docs): remove CLAUDE.md and GEMINI.md symlinks 2025-09-12 13:59:03 -05:00
d0fae8cbb0 merge: adopt feature branch changes for APISIX (manifest, Dockerfile, start.sh) and Jenkins (manifest, Dockerfile, start.sh) 2025-09-12 13:48:42 -05:00
26b311b9db consolidate: sync main with integration; add feature-only package files; archive feature docs under docs/feature-snapshots 2025-09-12 13:44:54 -05:00
79d3475c74 feat: Clean up root directory and create docs folder 2025-09-04 14:34:49 -05:00
d50a58e934 Revert "docs(jenkins): add Jenkins packaging execution plan\n\n- Outlined the detailed plan for packaging Jenkins for Cloudron, including all phases and steps.\n- This document will be updated with status and notes throughout the process.\n\n🤖 Generated with Gemini CLI\nCo-Authored-By: Gemini <noreply@google.com>"
This reverts commit 33e9a861b0.
2025-09-04 11:40:01 -05:00
33e9a861b0 docs(jenkins): add Jenkins packaging execution plan\n\n- Outlined the detailed plan for packaging Jenkins for Cloudron, including all phases and steps.\n- This document will be updated with status and notes throughout the process.\n\n🤖 Generated with Gemini CLI\nCo-Authored-By: Gemini <noreply@google.com> 2025-09-04 11:39:49 -05:00
fd910f1a72 docs: add LEARNING.md with development insights\n\n- Initial commit of LEARNING.md to track mistakes and solutions.\n\n🤖 Generated with Gemini CLI\nCo-Authored-By: Gemini <noreply@google.com> 2025-09-04 11:27:01 -05:00
d74cdc091b fix(rathole): update package to use correct Cloudron manifest format and fix configuration
- Update CloudronManifest.json to use modern format with proper ID, health check, and metadata
- Fix Dockerfile to follow Cloudron conventions (/app/code, /app/data structure)
- Correct Rathole configuration format (default_token instead of token, add services section)
- Fix start.sh to use proper --server flag syntax
- Add health check endpoint on port 8080
- Create comprehensive build notes documentation
- Successfully build and test package - both ports 2333 (Rathole) and 8080 (health) working

🤖 Generated with assistance from OpenCode for code optimization and testing
2025-09-04 10:12:38 -05:00
4bc1418831 fix(apisix): correct Dockerfile ui copy and RUN syntax (direct commit to integration)
- Removed the COPY instruction for apisix-source/ui/ as it's not part of the core APISIX gateway.
- Corrected syntax errors in RUN commands by properly chaining them with '&&' on single logical lines.
- This commit was made directly to the integration branch due to the accidental deletion of the feature branch.

🤖 Generated with Gemini CLI
Co-Authored-By: Gemini <noreply@google.com>
2025-09-04 09:55:37 -05:00
48ed02209d docs: update TASKS.md and WORKLOG.md for APISIX package
- Updated progress overview and completed applications in TASKS.md.
- Added new work log entry for APISIX packaging session in WORKLOG.md.

🤖 Generated with Gemini CLI
Co-Authored-By: Gemini <noreply@google.com>
2025-09-04 09:52:17 -05:00
a2a0f4ef48 fix(apisix): correct Dockerfile RUN command syntax
- Corrected syntax errors in RUN commands by properly chaining them with '&&' on single logical lines.

🤖 Generated with Gemini CLI
Co-Authored-By: Gemini <noreply@google.com>
2025-09-04 09:48:15 -05:00
54cc5f7308 feat(apisix): add Cloudron package
- Implements Apache APISIX packaging for Cloudron platform.
- Includes Dockerfile, CloudronManifest.json, and start.sh.
- Configured to use Cloudron's etcd addon.

🤖 Generated with Gemini CLI
Co-Authored-By: Gemini <noreply@google.com>
2025-09-04 09:42:47 -05:00
f7bae09f22 docs: update TASKS.md and WORKLOG.md for Inventree package
- Updated progress overview and completed applications in TASKS.md.
- Added new work log entry for Inventree packaging session in WORKLOG.md.

🤖 Generated with Gemini CLI
Co-Authored-By: Gemini <noreply@google.com>
2025-09-04 09:27:02 -05:00
0500eb3f54 feat(inventree): add logo and update health check path
- Added logo.png to the package directory.
- Updated healthCheckPath in CloudronManifest.json to /api/generic/status/.

🤖 Generated with Gemini CLI
Co-Authored-By: Gemini <noreply@google.com>
2025-09-04 09:24:57 -05:00
f5a0c521c5 docs: update TASKS.md and WORKLOG.md for Rathole package
- Updated progress overview and completed applications in TASKS.md.
- Added new work log entry for Rathole packaging session in WORKLOG.md.

🤖 Generated with Gemini CLI
Co-Authored-By: Gemini <noreply@google.com>
2025-09-04 09:22:31 -05:00
110d22de87 feat(rathole): add CloudronManifest.json and start.sh
- Implements CloudronManifest.json with port and environment variables
- Adds start.sh to generate rathole.toml and start the server

🤖 Generated with Gemini CLI
Co-Authored-By: Gemini <noreply@google.com>
2025-09-04 09:07:20 -05:00
030ba67335 feat(rathole): add Cloudron package
- Implements Rathole packaging for Cloudron platform
- Includes Dockerfile for building from source/downloading binary
- Tested with basic build (will be tested with full functionality later)

🤖 Generated with Gemini CLI
Co-Authored-By: Gemini <noreply@google.com>
2025-09-04 09:04:51 -05:00
4511311565 docs: update worklog with PR workflow testing
- Updated time investment to reflect additional workflow development
- Added achievements for git workflow and clickable documentation
- Testing end-to-end PR workflow with tea CLI integration
- Preparing for production-ready development process

🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-04 08:55:39 -05:00
4f71cba131 feat(docs): add clickable file links in README.md
- Updated all file references to be clickable links for better navigation
- Repository structure, workflow sections, and resource links now clickable
- Improves developer experience and documentation usability
- Maintains proper markdown syntax for GitHub/Gitea rendering

🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-04 08:52:17 -05:00
659640836c docs: add comprehensive AI assistant integration guide
- Create AGENT.md with detailed guide for OpenCode, Gemini CLI, and Claude usage
- Document AI-assisted packaging workflow and best practices
- Include prompt templates and context sharing strategies
- Add symbolic links GEMINI.md and CLAUDE.md for easy access
- Update README.md to reference AI assistant documentation

AI Integration Features:
- Phase-specific assistant recommendations (Research→Gemini, Development→Claude, etc.)
- Template-driven development with AI assistance
- Quality assurance workflows with AI review
- Multi-assistant collaborative approaches

This establishes AI-first development approach for the 56-application packaging initiative,
significantly accelerating development while maintaining quality standards.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-04 08:45:30 -05:00
a0169a2d8a refactor: migrate from master to main branch + implement PR workflow
- Rename master branch to main for inclusive language
- Update all documentation references from master → main
- Implement PR-based workflow with maintainer approval required
- Document tea CLI usage for Gitea pull requests
- Establish clear branch hierarchy: feature → integration → main

Branch Strategy:
- main: Production packages (requires PR approval)
- integration: Staging area for multiple packages
- feature/package-[name]: Individual package development

Workflow Pattern:
1. Create feature/package-[name] from integration
2. Develop package in feature branch
3. Merge feature → integration (direct merge)
4. Create PR integration → main (requires approval)

This provides proper quality gates while enabling parallel development
of the 56 applications with maintainer oversight.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-04 08:42:37 -05:00
e61d4eb165 docs: comprehensive documentation and workflow overhaul
Create complete project documentation suite for 56-application Cloudron packaging initiative:

New Documentation Files:
- README.md: Comprehensive project overview with quick start guide
- PLAN.md: Strategic roadmap for packaging across 2025 with 4-phase approach
- TASKS.md: Detailed task list with 56 applications prioritized in 4 tiers
- WORKLOG.md: Progress tracking with daily logs and development insights
- GIT_WORKFLOW.md: Complete branching strategy and commit standards

Enhanced Existing Documentation:
- CloudronPackages/README.md: Enhanced package directory with usage instructions
- CloudronPackagingWorkspace/README.md: Comprehensive workspace development guide

Key Features:
- Established feature → integration → master git workflow
- Containerized development environment with tsys-cloudron-packaging
- 4-tier priority system focusing on business-critical applications first
- Quality standards and testing procedures for all packages
- Team coordination tools for parallel development

This foundation supports systematic packaging of all 56 applications with proper
quality control, progress tracking, and team scalability.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-04 08:38:35 -05:00
4ef3a47e25 Enhance .gitignore for packaging workflow
- Add patterns for temporary packaging directories
- Include Docker container artifacts exclusion
- Add common OS-generated file patterns
- Maintain existing upstream repo exclusions

This supports the container-based packaging workflow for ~100 Cloudron applications while keeping the repository clean.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-04 07:35:38 -05:00
37d9fae8c9 self hosted patreon.. so excited! 2025-07-10 22:57:12 -05:00
244ac11588 devex cleanup 2025-07-09 11:19:46 -05:00
fd6aa5c0f0 bit of devex cleanup and removed last of the placeholder dirs/files 2025-07-07 17:47:51 -05:00
f512afc53f cleaned up a bunch of placeholders. the tickets are now linked to in the dev setup scripts 2025-07-07 17:21:36 -05:00
b0ca0ef49c Claude super rough first cut of a few packages. Almost certainly entirely unusable... 2025-07-07 17:20:00 -05:00
c315498391 keep the docs in sync... 2025-07-07 17:04:35 -05:00
6e23807a8a refactor.. 2025-07-07 17:03:09 -05:00
2f0fe97933 starting the big push to cloudron all the things we need for COO/CTO orgs 2025-07-07 16:54:32 -05:00
054f6c9e2f and so begins the packaging... 2025-07-07 12:55:40 -05:00
2a26247028 all redmine tickets/repos are now captured 2025-07-07 12:52:25 -05:00
b2cd55b0ca doco.. 2025-07-07 12:39:45 -05:00
60fc1b3aaf packaging all the things 2025-07-07 12:37:29 -05:00
0148db9864 build scripts for the big packaging push of all the apps this month 2025-07-07 12:05:40 -05:00
93775b7375 cleaning up to match redmine milestone. scope of work has changed slightly. 2025-07-07 10:48:05 -05:00
1b5dd39a11 capturing stuff 2025-07-05 19:08:13 -05:00
d51149df29 . 2025-07-04 12:25:57 -05:00
e640d38400 all the ops 2025-05-08 09:52:54 -05:00
da248f87cb phplist 2025-05-07 13:14:52 -05:00
e576d0175f canvas joins the party. 2025-05-07 13:12:17 -05:00
62a0bd3bbc sqlfluff and wireflow 2025-05-07 13:07:59 -05:00
731ac82914 ota and etl 2025-05-07 13:00:44 -05:00
d45e8790d4 vdi 2025-05-06 14:51:35 -05:00
fffcd90d19 windmill 2025-05-06 14:19:57 -05:00
b69527bc7e typo and missed one.. 2025-05-06 12:48:34 -05:00
949bd93dbf doing final review... 2025-05-06 12:31:51 -05:00
bc92e58407 llm-ops 2025-05-06 12:23:55 -05:00
caaedbe8b6 resume... cv... all the things. 2025-05-06 12:21:14 -05:00
2157ed0742 maker and fuzz 2025-05-06 11:47:48 -05:00
aa50363ece 3dprintfarm 2025-05-06 11:34:34 -05:00
90d618f71a autobom and plm 2025-05-06 11:32:13 -05:00
3d1d640641 docassemble 2025-05-06 11:29:02 -05:00
7acf4748f9 wireviz 2025-05-06 11:27:16 -05:00
0564e4250b graylog -> logportal , sentry -> errortrack 2025-05-06 08:58:54 -05:00
b87dbdec81 linked to redmine voting ticket 2025-05-06 08:50:39 -05:00
365d7ddebc . 2025-05-06 08:48:31 -05:00
42cbaa67b9 wazuh -> siem 2025-05-06 08:48:13 -05:00
5fe6a855a9 . 2025-05-06 08:34:50 -05:00
dcbdaf01ae . 2025-05-06 08:20:34 -05:00
32099ee956 . 2025-05-06 08:16:28 -05:00
64b411f768 . 2025-05-06 08:10:17 -05:00
e9f69ae274 more ticket prep 2025-05-06 08:02:36 -05:00
471b7ba296 cleanup for app deployment for ops exit. 2025-05-05 12:55:01 -05:00
aaffec4b47 making all the tickets 2025-05-05 11:56:05 -05:00
113d1cd0fd cleanup 2025-04-21 19:21:06 -05:00
a4db3a38d8 netbird 2025-04-21 17:14:09 -04:00
72cb0122c4 first cut of grist package 2025-04-21 16:31:23 -04:00
f0fa670ac5 first cut of librenms package 2025-04-21 16:23:34 -04:00
24757c5cf5 resgrid package 2025-04-21 16:04:31 -04:00
eea38e1653 first cut of counsul democracy package for cloudron 2025-04-21 15:55:31 -04:00
f2230d1663 easy gate package for cloudron 2025-04-21 15:47:19 -04:00
4817710a10 . 2025-04-21 15:41:17 -04:00
c7ddeb4a89 moved cloudron things to cloudron dir 2025-04-21 15:38:36 -04:00
9f74e0fc39 first cut of jenkins package for cloudron 2025-04-21 15:34:14 -04:00
f3a57e5b87 . 2025-04-21 14:33:54 -04:00
f37ea77870 first cut of home chart 2025-04-21 14:30:02 -04:00
34990a9162 first cut of elabftw 2025-04-21 14:18:31 -04:00
2f7d77b3c3 . 2025-04-21 14:12:15 -04:00
5a8a0caba8 . 2025-04-21 14:09:35 -04:00
898ecaaea6 first cut of rundeck packaging 2025-04-21 14:08:44 -04:00
b382498ea8 first cut of homebox cloudron package 2025-04-21 13:44:30 -04:00
f0943949a5 first cut of review board packaging 2025-04-21 13:38:19 -04:00
425a6c01d6 cleanup 2025-04-21 13:29:57 -04:00
f083ee7193 cleanup 2025-04-21 12:26:59 -04:00
9e2cb96841 build notes 2025-04-21 12:26:25 -04:00
0f88372846 try 2 2025-04-21 12:23:35 -04:00
286e946a03 cleanup 2025-04-21 12:21:42 -04:00
d318ed951c first cut of inventree for cloodron 2025-04-21 12:17:52 -04:00
4a0584e2e7 reorg for go live 2025-04-20 15:59:03 -04:00
570d5faa2d prep for capraise 2024-12-08 05:39:00 -06:00
3207bd8a23 more apps 2024-12-06 08:45:44 -06:00
92c835c172 last few apps for deployment 2024-12-05 21:39:35 -06:00
0ae11cac56 . 2024-12-05 19:23:58 -06:00
51b792f948 . 2024-12-05 18:58:36 -06:00
294 changed files with 1163 additions and 920 deletions

25
.editorconfig Normal file
View File

@@ -0,0 +1,25 @@
root = true
[*]
charset = utf-8
end_of_line = lf
insert_final_newline = true
trim_trailing_whitespace = true
indent_style = space
indent_size = 2
[Dockerfile]
indent_size = 2
[*.sh]
indent_size = 2
[*.yml]
indent_size = 2
[*.yaml]
indent_size = 2
[*.json]
indent_size = 2

16
.gitattributes vendored Normal file
View File

@@ -0,0 +1,16 @@
* text=auto eol=lf
# Enforce LF line endings for key file types
*.sh text eol=lf
Dockerfile text eol=lf
*.yml text eol=lf
*.yaml text eol=lf
*.json text eol=lf
*.md text eol=lf
# Binary assets
*.png binary
*.jpg binary
*.jpeg binary
*.ico binary

34
.gitignore vendored Normal file
View File

@@ -0,0 +1,34 @@
# Development workspace (upstream clones, not tracked)
PackagingForCloudronWorkspace/Docker/*
PackagingForCloudronWorkspace/NonDocker/*
# Temporary packaging work directories
temp_*
*_package_new/
packaging_temp/
# Common local environment and editor files
.env
*.env
*.local
*.log
.envrc
.python-version
.tool-versions
.vscode/
.idea/
*.swp
*.swo
# Build outputs (if any local builds are done)
dist/
build/
# OS generated files
.DS_Store
.DS_Store?
._*
.Spotlight-V100
.Trashes
ehthumbs.db
Thumbs.db

78
AGENTS.md Normal file
View File

@@ -0,0 +1,78 @@
# Agent Operating Guide (Project-wide)
Scope: This file applies to the entire repository. It defines how assistants and automation must work here.
## Purpose
Package ~100 free/libre/open-source applications as Cloudron apps with a fast, container-only workflow and a minimal, single-branch repo.
## Golden Rules
- Single branch: use only `main`. Do not create feature branches unless explicitly requested.
- Host is read-only: do not install or modify anything on the host OS. You MAY only check for the presence of tools and run them if already installed.
- Allowed host tools (if present): `docker`, `git`, `tea` (optional), and `curl` for connectivity checks. Never attempt to install or upgrade them.
- Containers only: all build, test, lint, and packaging commands must run inside the packaging container.
- Do not push to remote without approval: never run `git push` for a package change until it has been validated and explicitly approved by the maintainer.
- Keep repo slim: do not commit upstream source trees or build artefacts. Only commit package files under `CloudronPackages/<AppName>/`, small helper scripts, and minimal docs.
- Secrets: do not commit secrets or credentials. Use environment variables or Cloudron addons.
- Consistency: follow `.editorconfig`, `.gitattributes`, and `.gitignore`.
## Container-Only Workflow
- Packaging image: built from `docker/packaging/Dockerfile`.
- Control scripts (host-side wrappers):
- `scripts/packaging-up.sh` build and start the packaging container; mounts repo at `/workspace` and `/var/run/docker.sock`.
- `scripts/packaging-enter.sh` open a shell inside the container.
- `scripts/packaging-exec.sh <cmd>` run any command inside the container.
- `scripts/workspace-clone.sh` clone upstream repos (inside container).
- `scripts/workspace-update.sh` update upstream repos (inside container).
- Never run package build/test outside the container. If a command needs to run, wrap it via `scripts/packaging-exec.sh`.
## Creating a New Package
- Scaffold from template using the helper:
- `scripts/new-package.sh <AppName> --id <com.example.app> --title "Title" --port <port> [--base <cloudron_base_tag>]`
- Edit `CloudronPackages/<AppName>/Dockerfile` and `start.sh` to run the app.
- Prefer prebuilt upstream releases over building toolchains in Docker to keep images small.
- Default Cloudron base image tag is `5.0.0`. Override with `--base` as needed.
## Validation Checklist (must pass before proposing push)
- Build succeeds inside the packaging container:
- `scripts/packaging-exec.sh "docker build -t <app>:dev CloudronPackages/<AppName>"`
- Run sanity check inside container:
- `scripts/packaging-exec.sh "docker run --rm -p <hp>:<hp> -v <app>-data:/app/data <app>:dev"`
- Health endpoint responds; logs show no fatal errors; app starts with least privilege.
- Manifest sanity: `CloudronManifest.json` has accurate `id`, `version`, `httpPort` or addon definitions, and `healthCheckPath`.
- No secrets or hard-coded credentials; proper ownership of `/app/data`.
- Image hygiene: no unnecessary build deps; minimal layers; correct exposed ports.
- Optional: `cloudron install --image <app>:dev` tested from inside the packaging container using `cloudron` CLI, if available.
## Approval Gate and Push Policy
- Commits: frequent, small, and descriptive commits are encouraged; no approval needed for local commits.
- After validation, present a concise summary of changes and validation output to the maintainer and request permission to push.
- Push only at “natural” points (coherent, validated milestones). Examples:
- First green build of a new package scaffold (image builds + container starts + health OK).
- A feature-complete slice (e.g., addon integration added and tested).
- A bug fix with verification.
- Pre-release stabilization checkpoint.
- Batch pushes to avoid noise (aim for 13 pushes per active app per work session).
- NEVER push a broken or nonvalidated build.
- Only on explicit approval run `git push origin main` for package-affecting changes.
- Never forcepush unless explicitly instructed.
## Repository Hygiene
- Do not commit upstream repos. The directories `PackagingForCloudronWorkspace/Docker/` and `PackagingForCloudronWorkspace/NonDocker/` are gitignored on purpose.
- Keep package directories focused: `CloudronManifest.json`, `Dockerfile`, `start.sh`, and minimal config (e.g., `nginx.conf`, `supervisord.conf`, `config.yaml`, `logo.png`).
- Use LF line endings and 2-space indentation (see `.editorconfig`/`.gitattributes`).
## Networking & External Access
- All networked actions (git clones, docker pulls, downloads) must happen from within the packaging container.
- Host-level curl allowance: You MAY use `curl` on the host strictly for quick connectivity checks IF it is already installed. Do not install any host packages.
- Do not attempt other host-level network configuration, filesystem changes outside the repo, or host-level package installation.
## Commit Messages
- Use conventional, concise messages:
- `feat(<app>): ...` for new packages or features
- `fix(<app>): ...` for fixes
- `chore(...)`, `docs(...)` for non-functional changes
- Avoid large, mixed commits; keep changes scoped to an app.
## When in Doubt
- Ask for maintainer guidance before introducing new tools, dependencies, or changing global structure.
- Default to safer, smaller changes and explicit approval before pushing.

View File

View File

@@ -0,0 +1,11 @@
# Ignore typical build context clutter
.git
.gitignore
node_modules
npm-debug.log
*.log
dist
build
Dockerfile.*
.DS_Store

View File

@@ -0,0 +1,19 @@
{
"manifestVersion": 2,
"id": "__APP_ID__",
"title": "__APP_TITLE__",
"author": "KNEL",
"description": "Cloudron packaging template for __APP_TITLE__",
"website": "https://example.com",
"contactEmail": "admin@example.com",
"version": "0.1.0",
"changelog": "Initial package template",
"healthCheckPath": "/",
"httpPort": __HTTP_PORT__,
"addons": {
"localstorage": {}
},
"tags": ["template", "example"],
"icon": "logo.png"
}

View File

@@ -0,0 +1,38 @@
FROM cloudron/base:__CLOUDRON_BASE__
# Metadata labels (edit as needed)
LABEL org.opencontainers.image.title="__APP_TITLE__"
LABEL org.opencontainers.image.description="Cloudron package for __APP_TITLE__"
LABEL org.opencontainers.image.source="https://example.com"
# Install OS dependencies here as needed
# RUN apt-get update && apt-get install -y --no-install-recommends \
# curl ca-certificates tini \
# && rm -rf /var/lib/apt/lists/*
# App code lives in /app/code (read-only at runtime)
WORKDIR /app/code
# Copy application code (adjust as needed)
# COPY . /app/code
# Create persistent directory for application data
RUN mkdir -p /app/data && chown -R cloudron:cloudron /app/data
# Copy startup script
COPY start.sh /app/pkg/start.sh
RUN chmod +x /app/pkg/start.sh && chown cloudron:cloudron /app/pkg/start.sh
USER cloudron
# Expose the app port specified in manifest
EXPOSE __HTTP_PORT__
# Default environment (customize per app)
ENV NODE_ENV=production \
APP_PORT=__HTTP_PORT__
HEALTHCHECK --interval=30s --timeout=5s --start-period=20s --retries=3 \
CMD curl -fsS http://127.0.0.1:${APP_PORT}/ || exit 1
CMD ["/app/pkg/start.sh"]

View File

@@ -0,0 +1,24 @@
# Package Template for Cloudron Apps
This is a minimal template to package an application for Cloudron.
Replace placeholders in files with your app specifics:
- `__APP_ID__` (e.g., com.example.myapp)
- `__APP_TITLE__` (human name)
- `__HTTP_PORT__` (default internal app port)
- `__CLOUDRON_BASE__` (Cloudron base image tag, e.g., 5.0.0)
Files
- `CloudronManifest.json` base manifest
- `Dockerfile` uses cloudron/base, non-root user, healthcheck
- `start.sh` startup script with addon detection examples
- `nginx.conf` (optional) example reverse proxy
- `supervisord.conf` (optional) process manager example
- `config.yaml` (optional) sample app config
- `logo.png` add your 512x512 PNG icon here (not provided in template)
Usage
1. Create a new package from this template using `scripts/new-package.sh`:
`scripts/new-package.sh MyApp --id com.example.myapp --title "My App" --port 3000`
2. Adjust Dockerfile and start.sh to run your app.
3. Build and test locally; then commit and push.

View File

@@ -0,0 +1,11 @@
# Example configuration template for __APP_TITLE__
server:
port: __HTTP_PORT__
data:
dir: /app/data
database:
# url: ${CLOUDRON_POSTGRESQL_URL}
# redis: ${CLOUDRON_REDIS_URL}

View File

@@ -0,0 +1,26 @@
user cloudron;
worker_processes auto;
error_log /var/log/nginx/error.log warn;
pid /run/nginx.pid;
events { worker_connections 1024; }
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
access_log /var/log/nginx/access.log main;
sendfile on;
server {
listen __HTTP_PORT__;
server_name _;
location / {
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://127.0.0.1:__HTTP_PORT__;
}
}
}

View File

@@ -0,0 +1,39 @@
#!/usr/bin/env bash
set -euo pipefail
log() { echo "[start] $(date -Is) $*"; }
abort() { echo "[start] ERROR: $*" >&2; exit 1; }
# Defaults
: "${APP_PORT:=__HTTP_PORT__}"
log "Starting __APP_TITLE__ on port ${APP_PORT}"
# Example: ensure /app/data exists and is writable
mkdir -p /app/data
chown -R cloudron:cloudron /app/data || true
# Example addon integration (uncomment and adapt as needed)
# if [[ -n "${CLOUDRON_POSTGRESQL_URL:-}" ]]; then
# log "Detected PostgreSQL addon"
# # Use $CLOUDRON_POSTGRESQL_* env vars
# fi
# if [[ -n "${CLOUDRON_REDIS_URL:-}" ]]; then
# log "Detected Redis addon"
# fi
# If your app needs config generation, do it here
# cat > /app/data/config.yaml <<'YAML'
# key: value
# YAML
# Example: start a simple HTTP server (placeholder)
# Replace with your actual app start command
if command -v python3 >/dev/null 2>&1; then
log "Launching placeholder server: python3 -m http.server ${APP_PORT}"
exec python3 -m http.server "${APP_PORT}" --bind 0.0.0.0
else
abort "No application command configured. Replace placeholder with your app's start command."
fi

View File

@@ -0,0 +1,12 @@
[supervisord]
logfile=/var/log/supervisor/supervisord.log
pidfile=/run/supervisord.pid
nodaemon=true
[program:app]
command=/app/pkg/start.sh
autorestart=true
stdout_logfile=/var/log/supervisor/app.stdout.log
stderr_logfile=/var/log/supervisor/app.stderr.log
user=cloudron

View File

@@ -0,0 +1,7 @@
.git
.gitignore
*.log
dist
build
.DS_Store

View File

@@ -0,0 +1,18 @@
{
"manifestVersion": 2,
"id": "io.knel.rathole",
"title": "Rathole",
"author": "KNEL",
"description": "A reverse proxy that enables secure tunnels between local services and the internet.",
"website": "https://github.com/rathole-org/rathole",
"contactEmail": "admin@knownelement.com",
"version": "0.1.0",
"changelog": "Initial Cloudron package (server/client configurable).",
"healthCheckPath": "/",
"httpPort": 3000,
"addons": {
"localstorage": {}
},
"tags": ["network", "tunnel", "reverse-proxy"]
}

View File

@@ -0,0 +1,41 @@
FROM cloudron/base:5.0.0
ARG RATHOLE_VERSION=v0.5.0
ARG ARCH=x86_64-unknown-linux-gnu
USER root
RUN apt-get update \
&& apt-get install -y --no-install-recommends curl ca-certificates tar python3 \
&& rm -rf /var/lib/apt/lists/*
WORKDIR /app/pkg
# Download Rathole release binary (adjust version/arch via build args)
RUN set -eux; \
url="https://github.com/rathole-org/rathole/releases/download/${RATHOLE_VERSION}/rathole-${ARCH}.tar.gz"; \
echo "Fetching ${url}"; \
curl -fsSL "$url" -o rathole.tar.gz; \
tar -xzf rathole.tar.gz; \
rm rathole.tar.gz; \
mv rathole /app/pkg/rathole; \
chmod +x /app/pkg/rathole; \
chown cloudron:cloudron /app/pkg/rathole
# Start script
COPY start.sh /app/pkg/start.sh
RUN chmod +x /app/pkg/start.sh && chown cloudron:cloudron /app/pkg/start.sh
WORKDIR /app/code
RUN mkdir -p /app/data && chown -R cloudron:cloudron /app/data
USER cloudron
ENV APP_PORT=3000 \
RATHOLE_CONFIG_PATH=/app/data/rathole.toml
EXPOSE 3000 2333
HEALTHCHECK --interval=30s --timeout=5s --start-period=20s --retries=3 \
CMD curl -fsS http://127.0.0.1:${APP_PORT}/ || exit 1
CMD ["/app/pkg/start.sh"]

View File

@@ -0,0 +1,36 @@
# Rathole (Cloudron Package)
Rathole is a reverse proxy that provides secure tunnels for local services.
Upstream project: https://github.com/rathole-org/rathole
This Cloudron package runs Rathole and a lightweight HTTP health endpoint.
## Defaults
- Mode: `server` (server-only package)
- Config path: `/app/data/rathole.toml`
- Health port: `3000` (Cloudron `httpPort`)
## Configuration
- Put your Rathole TOML config at `/app/data/rathole.toml`, or provide it via the `RATHOLE_CONFIG` environment variable on first start.
- Example minimal server config is auto-generated if none exists.
## Build (inside packaging container)
```
scripts/packaging-up.sh
scripts/packaging-exec.sh "docker build -t rathole:dev CloudronPackages/Rathole"
```
## Run locally (inside packaging container)
```
scripts/packaging-exec.sh "docker run --rm -p 3000:3000 -p 2333:2333 -v rathole-data:/app/data rathole:dev"
```
Note: expose additional service ports as needed per your TOML. Container exposes `2333` by default.
## Deploy to Cloudron
Use Cloudron CLI from inside the packaging container:
```
scripts/packaging-enter.sh
cloudron login
cloudron install --image rathole:dev
```

View File

@@ -0,0 +1,41 @@
#!/usr/bin/env bash
set -euo pipefail
log() { echo "[rathole] $(date -Is) $*"; }
abort() { echo "[rathole] ERROR: $*" >&2; exit 1; }
: "${APP_PORT:=3000}"
: "${RATHOLE_CONFIG_PATH:=/app/data/rathole.toml}"
# Ensure data dir exists
mkdir -p /app/data
chown -R cloudron:cloudron /app/data || true
# If RATHOLE_CONFIG is provided, write it to config path if file not present
if [[ ! -f "$RATHOLE_CONFIG_PATH" && -n "${RATHOLE_CONFIG:-}" ]]; then
log "Writing config from RATHOLE_CONFIG env to ${RATHOLE_CONFIG_PATH}"
printf "%s\n" "${RATHOLE_CONFIG}" > "$RATHOLE_CONFIG_PATH"
fi
# If still no config, create a minimal example for server mode
if [[ ! -f "$RATHOLE_CONFIG_PATH" ]]; then
log "No config found. Writing a minimal example config (server). Adjust in /app/data/rathole.toml"
cat > "$RATHOLE_CONFIG_PATH" <<'TOML'
# Minimal Rathole server config example
[server]
bind_addr = "0.0.0.0:2333"
# Define services below as needed, for example:
# [server.services.echo]
# type = "tcp"
# local_addr = "127.0.0.1:7"
TOML
fi
# Background: lightweight HTTP health endpoint
python3 -m http.server "$APP_PORT" --bind 0.0.0.0 >/dev/null 2>&1 &
HEALTH_PID=$!
log "Started health endpoint on :${APP_PORT} (pid ${HEALTH_PID})"
log "Launching rathole in server mode with config ${RATHOLE_CONFIG_PATH}"
exec /app/pkg/rathole server -c "$RATHOLE_CONFIG_PATH"

View File

@@ -0,0 +1,160 @@
# Cloudron Packaging Workspace
This workspace contains development tools and upstream source repositories for Cloudron application packaging.
## 🏗️ Workspace Structure
```
PackagingForCloudronWorkspace/
├── README.md # This file
├── Docker/ (gitignored) # Upstream application sources (many apps)
├── NonDocker/ (gitignored) # Non-Docker application sources
├── UpstreamVendor-Clone.sh # Clone all upstream repositories
└── UpstreamVendor-Update.sh # Update existing repositories
```
## 🚀 Setup Instructions
### Initial Setup
```bash
cd PackagingForCloudronWorkspace/
# Create Docker directory for upstream sources
mkdir -p Docker
# Make scripts executable
chmod +x *.sh
# Clone all upstream vendor repositories
./UpstreamVendor-Clone.sh
```
This clones upstream vendor repositories used when packaging applications for Cloudron.
### Keeping Sources Updated
```bash
# Update all existing checkouts to latest versions
./UpstreamVendor-Update.sh
```
## 📦 Available Applications
The workspace contains ~56 upstream application repositories including:
### High Priority Applications
- **apisix** - Apache APISIX API Gateway
- **jenkins** - Jenkins CI/CD Platform
- **grist-core** - Grist Database/Spreadsheet
- **rundeck** - Rundeck Job Scheduler
- **reviewboard** - ReviewBoard Code Review
- **consuldemocracy** - Consul Democracy Platform
### Development & Infrastructure Tools
- **InvenTree** - Inventory Management System
- **elabftw** - Laboratory Management
- **netbox-docker** - Network Documentation
- **signoz** - Observability Platform
- **healthchecks** - Health Monitoring
- **fleet** - Device Management
### Productivity & Specialized Applications
- **huginn** - Web Automation
- **windmill** - Workflow Automation
- **docassemble** - Document Assembly
- **jamovi** - Statistical Analysis
- And many more...
## 🛠️ Development Workflow
### Using the Workspace
1. **Source Access**: All upstream sources are available in `Docker/[appname]/`
2. **Development**: Use the `tsys-cloudron-packaging` container for all work
3. **Package Creation**: Create packages in separate temporary directories
4. **Git Exclusion**: All upstream sources are gitignored to keep repository clean
### Container Development
```bash
# Access development container
docker exec -it tsys-cloudron-packaging bash
# Navigate to workspace
cd /workspace
# Access application source
cd CloudronPackagingWorkspace/Docker/[appname]/
# Create new package (outside of workspace)
cd /workspace
mkdir -p [appname]_package_new
```
## 📋 Workspace Management
### Adding New Applications
1. Update `UpstreamVendor-Clone.sh` with the new repository URL
2. Run the clone script to fetch the new application
### Removing Applications
1. Remove directory from `Docker/`
2. Update clone script to prevent future re-cloning
### Repository Updates
- Run `./UpstreamVendor-Update.sh` periodically or before starting packaging work
- Check for breaking changes in upstream before building
## ⚠️ Important Notes
### Git Exclusions
- `Docker/` and `NonDocker/` are gitignored (see repo `.gitignore`)
- Keeps the repo slim while preserving local sources
### Repository Integrity
- Never commit upstream sources to the repository
- Develop packages outside of `Docker/` (e.g., directly under `CloudronPackages/<AppName>`)
### Source Licenses
- Each upstream repository maintains its own license
- Review license compatibility before packaging
- Include appropriate license information in final packages
## 🔧 Script Maintenance
### UpstreamVendor-Clone.sh
- Contains git clone commands for all upstream repositories
- Handles both GitHub and other git hosting platforms
- Includes error handling for failed clones
### UpstreamVendor-Update.sh
- Updates existing repositories to latest versions
- Skips missing directories gracefully
- Provides summary of update status
### Customization
Edit scripts as needed to:
- Add new repository sources
- Change clone depth or branch targets
- Modify update behavior
- Handle special cases
## 📊 Notes
- Number of upstream repositories and size vary over time.
## 🤝 Team Usage
### For Developers
1. Use `./UpstreamVendor-Clone.sh` on first setup
2. Run `./UpstreamVendor-Update.sh` weekly or before new package work
3. Always work in the containerized environment
4. Never commit workspace contents to git
### For DevOps
1. Monitor disk space usage of workspace
2. Ensure container environment has access to workspace
3. Backup workspace if needed for disaster recovery
4. Update scripts when adding/removing applications
---
**Maintained By**: KNEL/TSYS Development Team

View File

@@ -0,0 +1,229 @@
#!/bin/bash
export PS4='(${BASH_SOURCE}:${LINENO}): - [${SHLVL},${BASH_SUBSHELL},$?] $ '
function error_out()
{
echo "Bailing out. See above for reason...."
exit 1
}
function handle_failure() {
local lineno=$1
local fn=$2
local exitstatus=$3
local msg=$4
local lineno_fns=${0% 0}
if [[ "$lineno_fns" != "-1" ]] ; then
lineno="${lineno} ${lineno_fns}"
fi
echo "${BASH_SOURCE[0]}: Function: ${fn} Line Number : [${lineno}] Failed with status ${exitstatus}: $msg"
}
trap 'handle_failure "${BASH_LINENO[*]}" "$LINENO" "${FUNCNAME[*]:-script}" "$?" "$BASH_COMMAND"' ERR
set -o errexit
set -o nounset
set -o pipefail
set -o functrace
export GIT_REPO_LIST
GIT_REPO_LIST=(
####################
# Vp techops stuff
####################
#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
####################
# CTO Stuff
####################
#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
)
WORKDIR="$(cd "$(dirname "$0")" && pwd)"
TARGET_DIR="${WORKDIR}/Docker"
mkdir -p "$TARGET_DIR"
# If REPOS.txt exists, read additional repos (lines; ignore # and blanks)
EXTRA_REPOS_FILE="${WORKDIR}/REPOS.txt"
if [[ -f "$EXTRA_REPOS_FILE" ]]; then
mapfile -t EXTRA_REPOS < <(sed -e 's/#.*$//' -e '/^\s*$/d' "$EXTRA_REPOS_FILE")
else
EXTRA_REPOS=()
fi
ALL_REPOS=("${GIT_REPO_LIST[@]}" "${EXTRA_REPOS[@]}")
echo "Cloning to: $TARGET_DIR"
printf ' - %s\n' "${ALL_REPOS[@]}"
cd "$TARGET_DIR"
# Parallel clones (default 4 jobs). Avoid failing the whole script on single failures.
JOBS="${JOBS:-4}"
printf '%s\n' "${ALL_REPOS[@]}" | xargs -n1 -P "$JOBS" -I{} bash -lc 'repo="{}"; name=$(basename -s .git "$repo"); if [[ -d "$name/.git" ]]; then echo "exists: $name"; else git clone --depth 1 "$repo" "$name" || echo "failed: $repo"; fi'

View File

@@ -0,0 +1,47 @@
#!/bin/bash
export PS4='(${BASH_SOURCE}:${LINENO}): - [${SHLVL},${BASH_SUBSHELL},$?] $ '
function error_out()
{
echo "Bailing out. See above for reason...."
exit 1
}
function handle_failure() {
local lineno=$1
local fn=$2
local exitstatus=$3
local msg=$4
local lineno_fns=${0% 0}
if [[ "$lineno_fns" != "-1" ]] ; then
lineno="${lineno} ${lineno_fns}"
fi
echo "${BASH_SOURCE[0]}: Function: ${fn} Line Number : [${lineno}] Failed with status ${exitstatus}: $msg"
}
trap 'handle_failure "${BASH_LINENO[*]}" "$LINENO" "${FUNCNAME[*]:-script}" "$?" "$BASH_COMMAND"' ERR
set -o errexit
set -o nounset
set -o pipefail
set -o functrace
WORKDIR="$(cd "$(dirname "$0")" && pwd)"
TARGET_DIR="${WORKDIR}/Docker"
cd "$TARGET_DIR"
# Iterate only over directories that are git repos
while IFS= read -r -d '' repo_dir; do
echo "Updating: ${repo_dir}"
pushd "$repo_dir" >/dev/null
if [[ -d .git ]]; then
git -c advice.detachedHead=false fetch --all --prune || true
# Fast-forward only to avoid unintended merges
git -c advice.detachedHead=false pull --ff-only || true
else
echo "Skipping (not a git repo): ${repo_dir}"
fi
popd >/dev/null
done < <(find . -mindepth 1 -maxdepth 1 -type d -print0)

120
README.md
View File

@@ -1,13 +1,117 @@
# TSYS Production docker compose files # KNEL Production Containers (Streamlined)
Docker compose files for everything running on cosmos/coolify (that isn't from the marketplace) Single-branch, streamlined repository for container work at KNEL. The focus is Cloudron app packaging and a small set of nonCloudron artifacts. All work happens directly on `main`.
Anything that is in HEAD is considered in flux. Only use compose files from versioned tags. ## Layout
No support is offered for anything in this repository. Its provided as a service to the community. - `CloudronPackages/`
- Empty scaffold for Cloudron app packages. Create a subfolder per app and add your packaging files there.
- Tracked with `.gitkeep` so the directory exists in a clean repo.
- `PackagingForCloudronWorkspace/`
- Helper scripts and a workspace for interacting with upstream sources.
- Subfolders `Docker/` and `NonDocker/` are ignored by git (see `.gitignore`).
- Scripts: `UpstreamVendor-Clone.sh`, `UpstreamVendor-Update.sh`.
- `NonCloudron/`
- NonCloudron experiments and orchestration notes.
- `.gitignore`, `LICENSE`, `README.md`
## Repo issue ## Workflow (single branch)
https://projects.knownelement.com/project/reachableceo-vptechnicaloperations/timeline
## Repo Discussion - Branching: use only `main`.
https://community.turnsys.com/c/chiefoperationsandfinanceofficer/vptechnicaloperations/20 - Commit small, focused changes; push directly to `origin/main`.
- No integration/feature branch dance; avoid longlived branches.
## No Host Pollution (containers only)
- Host requirements: `docker`, `git` (and optionally `tea`). Nothing else.
- All packaging work runs inside the packaging container. Do not install build tools on the host.
- Use the scripts provided:
- `scripts/packaging-up.sh` build/run the packaging container (mounts repo, docker socket)
- `scripts/packaging-enter.sh` open a shell inside the container
- `scripts/packaging-exec.sh <cmd>` run a command inside the container
- `scripts/workspace-clone.sh` run upstream clone inside the container
- `scripts/workspace-update.sh` run upstream update inside the container
The container image includes Docker CLI and Cloudron CLI, and accesses the host Docker via `/var/run/docker.sock`.
Quick start:
```
# Start container
scripts/packaging-up.sh
# Enter container shell
scripts/packaging-enter.sh
# Clone upstreams inside container
scripts/workspace-clone.sh
```
## Add a new Cloudron package
1) Create the package folder
- `mkdir -p CloudronPackages/<AppName>`
2) Add the required files
- `CloudronManifest.json` app metadata and addon requirements
- `Dockerfile` image build instructions (use cloudron/base as appropriate)
- `start.sh` container entry script
- Optional: `nginx.conf`, `supervisord.conf`, `config.yaml`, `logo.png`, build notes
3) Build/test locally (example)
- `docker build -t <app>:dev CloudronPackages/<AppName>`
- `docker run --rm -p 8080:8080 <app>:dev`
4) Commit and push
- `git add CloudronPackages/<AppName>/`
- `git commit -m "feat(<app>): initial Cloudron package"`
- `git push origin main`
## Packaging workspace tips
- The workspace under `PackagingForCloudronWorkspace/` is for local convenience and upstream sync.
- `Docker/` and `NonDocker/` inside that directory are intentionally gitignored to keep the repo slim.
- Keep scripts and minimal config tracked; keep large clones and build outputs out of git.
## Notes
- This repo was reset to a simplified structure; historical multibranch workflows and extensive docs were removed to reduce friction.
- If you need legacy materials, refer to your local history/tags or the remote history prior to this cleanup.
### For KNEL Team Members
1. Review [PLAN.md](PLAN.md) for current priorities
2. Check [TASKS.md](TASKS.md) for available applications
3. Follow the packaging workflow above
4. Update documentation as you work
5. Create feature branches for each application
### Code Review Checklist
- [ ] Dockerfile follows Cloudron conventions
- [ ] All required files present and properly configured
- [ ] Health checks implemented
- [ ] Logging configured to stdout/stderr
- [ ] Security best practices followed
- [ ] Documentation updated
- [ ] Build notes include testing steps
## 🐛 Troubleshooting
### Common Issues
- **Container won't start**: Check logs with `cloudron logs --app [appname]`
- **Database connection fails**: Verify addon environment variables
- **Static files not served**: Check nginx configuration and file permissions
- **Health check fails**: Verify health check endpoint returns 200 OK
### Getting Help
- Check build notes in `CloudronPackages/[AppName]/`
- Review Cloudron documentation
- Examine working examples (EasyGate, InvenTree)
- Use `cloudron debug --app [appname]` for interactive debugging
## 📝 License
See [LICENSE](LICENSE) file for details.
---
**Last Updated**: 2025-01-04
**Maintainers**: KNEL/TSYS Development Team

View File

@@ -1,5 +0,0 @@
lamp app
https://github.com/pimcore/pimcore
Covers MDM/PIM/DAM all in one. We need the full feature suite.

View File

@@ -1 +0,0 @@
Serverless notes

View File

@@ -1 +0,0 @@
#watchtower docker compose for tsys

View File

@@ -1,8 +0,0 @@
## Introduction
Need a serverless / functions as a service runtime
## Options
- https://github.com/adnanh/webhook
- https://github.com/metrue/fx

View File

@@ -1 +0,0 @@
https://github.com/nautechsystems/nautilus_trader

View File

@@ -1 +0,0 @@
This directory contains template files for the application at FQDN indidicated by the parent directory. They will be processed using mo (bash mustache).

View File

@@ -1 +0,0 @@
This directory contains final docker compose files for the application at FQDN indidicated by the parent directory.

View File

@@ -1 +0,0 @@
This directory contains files from the vendor unmodified. They serve as a base for the input-files sibling directory

View File

@@ -1,3 +0,0 @@
#cfssl docker compose for tsys
#git subtree add --prefix upstream/cloudflare-cfssl https://github.com/rjrivero/docker-cfssl.git master --squash

View File

@@ -1 +0,0 @@
This directory contains template files for the application at FQDN indidicated by the parent directory. They will be processed using mo (bash mustache).

View File

@@ -1 +0,0 @@
This directory contains final docker compose files for the application at FQDN indidicated by the parent directory.

View File

@@ -1 +0,0 @@
This directory contains files from the vendor unmodified. They serve as a base for the input-files sibling directory

View File

@@ -1,2 +0,0 @@
https://midday.ai/pricing
https://github.com/midday-ai/midday

View File

@@ -1 +0,0 @@
This directory contains template files for the application at FQDN indidicated by the parent directory. They will be processed using mo (bash mustache).

View File

@@ -1 +0,0 @@
This directory contains final docker compose files for the application at FQDN indidicated by the parent directory.

View File

@@ -1 +0,0 @@
This directory contains files from the vendor unmodified. They serve as a base for the input-files sibling directory

View File

@@ -1,14 +0,0 @@
API gateway notes
* API gateway (TYK)
<https://tyk.io/>
<https://tyk.io/docs/getting-started/installation/with-tyk-on-premises/docker/>
<https://tyk.io/docs/advanced-configuration/integrate/sso/dashboard-login-ldap-tib/>
(or perhaps..)
https://github.com/apache/apisix

View File

@@ -1 +0,0 @@
This directory contains template files for the application at FQDN indidicated by the parent directory. They will be processed using mo (bash mustache).

View File

@@ -1 +0,0 @@
This directory contains final docker compose files for the application at FQDN indidicated by the parent directory.

View File

@@ -1,4 +0,0 @@
This directory contains files from the vendor unmodified. They serve as a base for the input-files sibling directory
https://hub.docker.com/r/apache/apisix

View File

@@ -1,3 +0,0 @@
https://www.civtak.org/atak-about/t
https://github.com/Cloud-RF/tak-server

View File

@@ -1 +0,0 @@
This directory contains template files for the application at FQDN indidicated by the parent directory. They will be processed using mo (bash mustache).

View File

@@ -1 +0,0 @@
This directory contains final docker compose files for the application at FQDN indidicated by the parent directory.

View File

@@ -1 +0,0 @@
This directory contains files from the vendor unmodified. They serve as a base for the input-files sibling directory

View File

@@ -1 +0,0 @@
#killbill docker compose for tsys

View File

@@ -1 +0,0 @@
This directory contains template files for the application at FQDN indidicated by the parent directory. They will be processed using mo (bash mustache).

View File

@@ -1 +0,0 @@
This directory contains final docker compose files for the application at FQDN indidicated by the parent directory.

View File

@@ -1 +0,0 @@
This directory contains files from the vendor unmodified. They serve as a base for the input-files sibling directory

View File

@@ -1,3 +0,0 @@
# boinc docker compose for tsys
# https://boinc.berkeley.edu/trac/wiki/BoincDocker

View File

@@ -1 +0,0 @@
This directory contains template files for the application at FQDN indidicated by the parent directory. They will be processed using mo (bash mustache).

View File

@@ -1 +0,0 @@
This directory contains final docker compose files for the application at FQDN indidicated by the parent directory.

View File

@@ -1 +0,0 @@
This directory contains files from the vendor unmodified. They serve as a base for the input-files sibling directory

View File

@@ -1,25 +0,0 @@
# Cloud dev at tsys
## Desired architecute
(essentially the lap.dev architecure)
- control plane running as a web app on cosmos
- agent that spins up ephermeral containers on runner hosts
## Contenders
- strong.network
- lap.dev (dont like that it only supports github/gitlab oautg) (also that it doesnt appear to be dockerized)
## Links
- https://github.com/strong-network/images
https://github.com/daytonaio/daytona?tab=readme-ov-file
https://www.daytona.io
https://github.com/gitpod-io/openvscode-server

View File

@@ -1 +0,0 @@
This directory contains template files for the application at FQDN indidicated by the parent directory. They will be processed using mo (bash mustache).

View File

@@ -1 +0,0 @@
This directory contains final docker compose files for the application at FQDN indidicated by the parent directory.

View File

@@ -1 +0,0 @@
This directory contains files from the vendor unmodified. They serve as a base for the input-files sibling directory

View File

@@ -1,3 +0,0 @@
#certmgr docker compose for tsys
#git subtree add --prefix upstream/cloudflare-certmgr https://github.com/cloudflare/certmgr.git master --squash

View File

@@ -1 +0,0 @@
This directory contains template files for the application at FQDN indidicated by the parent directory. They will be processed using mo (bash mustache).

View File

@@ -1 +0,0 @@
This directory contains final docker compose files for the application at FQDN indidicated by the parent directory.

View File

@@ -1 +0,0 @@
This directory contains files from the vendor unmodified. They serve as a base for the input-files sibling directory

View File

@@ -1 +0,0 @@
# chirpstack (lora server)

View File

@@ -1 +0,0 @@
This directory contains template files for the application at FQDN indidicated by the parent directory. They will be processed using mo (bash mustache).

View File

@@ -1 +0,0 @@
This directory contains final docker compose files for the application at FQDN indidicated by the parent directory.

View File

@@ -1 +0,0 @@
This directory contains files from the vendor unmodified. They serve as a base for the input-files sibling directory

View File

@@ -1 +0,0 @@
#Craig recording bot docker file for tsys

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