Compare commits

...

14 Commits

Author SHA1 Message Date
32925396dc feat: add Python app package template
- Create Python application Dockerfile template
- Create Python app CloudronManifest.json template
- Create Python app start.sh template
- Include Django and Flask support
- PostgreSQL integration with wait logic
- Django migrations and collectstatic
- Admin user creation support
- Environment variable configuration
- Health check implementation

Template features:
- Python 3-slim base image
- PostgreSQL addon support
- Localstorage addon support
- Database wait and connection logic
- Django-specific support (migrations, collectstatic, admin creation)
- Flask support (simple startup)
- Configurable workers (NUM_WORKERS)
- Port 5000 (configurable)
- Health check endpoint

Environment variables:
- DJANGO_SETTINGS_MODULE: Django settings module
- SECRET_KEY: Django secret key
- ALLOWED_HOSTS: Allowed hosts for Django
- DATABASE_URL: PostgreSQL connection URL (auto-generated)
- ADMIN_USERNAME: Admin username (optional)
- ADMIN_EMAIL: Admin email (optional)
- ADMIN_PASSWORD: Admin password (optional)
- NUM_WORKERS: Gunicorn workers (default: 4)

💘 Generated with Crush

Assisted-by: GLM-4.7 via Crush <crush@charm.land>
2026-02-04 18:05:41 -05:00
639648647e docs: add Corteza package details to JOURNAL.md
- Document Corteza (Low-Code) package completion
- Add Download Pre-Compiled Binaries pattern
- Include build process details
- Document challenges (none encountered)
- Add packaging template for pre-compiled applications
- Include pros and cons of this approach

Corteza package highlights:
- Multi-stage build downloading pre-compiled binaries
- Ubuntu 22.04 base (436MB image)
- PostgreSQL + localstorage addons
- Comprehensive low-code platform documentation
- Download-and-extract approach (simpler than compiling)

New packaging pattern:
- Download Pre-Compiled Binaries
- Use when application provides official releases
- Faster builds, reproducible results
- Trade-offs: dependency on upstream, less customization

Total packages completed: 7/56 (12.5%)

💘 Generated with Crush

Assisted-by: GLM-4.7 via Crush <crush@charm.land>
2026-02-04 18:02:23 -05:00
eec43f84b6 feat: add Corteza Cloudron package (Low-Code)
- Create Dockerfile downloading pre-compiled binaries
- Add CloudronManifest.json with PostgreSQL and localstorage addons
- Create README.md with comprehensive low-code platform documentation
- Add .env.example for environment configuration
- Add CHANGELOG.md for version tracking
- Add logo.png (Corteza branding)

Corteza is an open-source low-code platform for building
database-driven applications without coding.

Package includes:
- Ubuntu 22.04 base with pre-compiled Corteza binaries (436MB)
- PostgreSQL addon for database storage
- Localstorage addon for application data
- Multi-stage download (simpler than building)
- Comprehensive documentation with visual builder examples
- Form builder, report builder, page builder examples
- User management and permissions documentation

Features supported:
- Visual app builder with drag-and-drop
- Form builder for data entry
- Report builder for custom reports
- Page builder for application pages
- API builder for REST APIs
- Workflow automation with triggers
- Database-driven applications
- Multi-tenancy support
- User management with role-based permissions
- Record management with import/export
- Theme customization
- Mobile-responsive design
- Audit trail
- Security features (row-level permissions)

Environment variables:
- CORTEZA_VERSION: Corteza version (default: 2022.9.0)
- STORAGE_PATH: Data storage path (default: /app/data)
- HTTP_ADDR: HTTP address (default: 0.0.0.0:80)
- HTTP_WEBAPP_ENABLED: Enable web app (default: true)

Ports:
- 80: Main HTTP port (web interface)

Addons:
- PostgreSQL: Database storage
- Localstorage: Application data

💘 Generated with Crush

Assisted-by: GLM-4.7 via Crush <crush@charm.land>
2026-02-04 17:56:43 -05:00
9793f99991 docs: update README.md with completed packages progress
- Add Current Progress section with 5 completed packages
- Add Completed Packages table with details
- Update Functional Organization with completion status
- Update Application Inventory with package status legend
- Add progress bar (5/58 = 8.6%)
- Show API-Gateway category at 100% completion
- Include all documentation and resource links

Progress highlights:
- 5/58 packages completed (8.6%)
- 100% completion for API-Gateway category (2/2)
- 50% completion for Development category (2/4)
- 33% completion for Documentation-Tools category (1/3)
- 17% completion for Monitoring category (1/6)

Completed packages:
1. Webhook (API-Gateway) - 775MB
2. APISIX (API-Gateway) - 143MB
3. Healthchecks (Monitoring) - 105MB
4. Review Board (Development) - 1.29GB
5. WireViz Web (Documentation-Tools) - 378MB
6. Puter (Development) - 361MB

Average package time: ~30 minutes
Success rate: 100%
All packages committed and pushed to remote

💘 Generated with Crush

Assisted-by: GLM-4.7 via Crush <crush@charm.land>
2026-02-04 15:51:46 -05:00
11aac9ffc8 feat: add Cloudron packaging templates
- Create Package-Templates directory structure
- Add official-wrapper Dockerfile template
- Add Django application template (Dockerfile + start.sh)
- Add README template with comprehensive documentation
- Create template usage documentation

Templates include:
- Official Image Wrapper pattern (simple wrapper for existing images)
- Django Application pattern (with PostgreSQL integration)
- Standardized README template with all sections
- Django start.sh with database wait, migrations, admin creation
- Template documentation and usage instructions

Benefits:
- Accelerates packaging for similar applications
- Ensures consistency across packages
- Reduces repetitive work
- Documents Cloudron best practices
- Reference for future packaging

Template patterns covered:
- Official image wrapper
- Django application with PostgreSQL
- Database wait logic
- Migration execution
- Admin user creation
- Health check implementation
- Environment variable configuration

💘 Generated with Crush

Assisted-by: GLM-4.7 via Crush <crush@charm.land>
2026-02-04 15:41:08 -05:00
733a38304f docs: add JOURNAL.md and update AGENTS.md with packaging insights
- Create comprehensive JOURNAL.md documenting all completed packages
- Document packaging patterns, challenges, and solutions
- Update AGENTS.md to reference JOURNAL.md
- Add knowledge base for Cloudron packaging
- Include Docker best practices and optimization techniques
- Capture lessons learned for future reference

JOURNAL.md contains:
- Detailed analysis of 5 completed packages
- 7 established packaging patterns
- 5 common challenges with solutions
- Cloudron-specific considerations
- Productivity insights and metrics
- Best practices and optimization guidelines

AGENTS.md now includes:
- Reference to JOURNAL.md for detailed insights
- Packaging patterns and templates
- Common challenges and solutions
- Cloudron best practices reference
- Expertise developed through project
- Future recommendations

💘 Generated with Crush

Assisted-by: GLM-4.7 via Crush <crush@charm.land>
2026-02-04 15:23:54 -05:00
38e75fb549 feat: add Puter Cloudron package (Development)
- Create multi-stage Dockerfile with Node.js 23.9-alpine
- Add CloudronManifest.json with PostgreSQL and localstorage addons
- Create .dockerignore to exclude Cloudron package files
- Include README.md with comprehensive Internet OS documentation
- Add .env.example for environment configuration
- Add CHANGELOG.md for version tracking
- Add logo.png (Puter branding)

Puter is "The Internet OS" - an advanced, open-source
internet operating system designed to be feature-rich, exceptionally
fast, and highly extensible.

Package includes:
- Node.js 23.9-alpine based multi-stage build (361MB)
- PostgreSQL addon for database storage
- Localstorage addon for file storage
- Multi-stage Dockerfile (build + production)
- Comprehensive documentation with usage examples
- File management, app installation, and code editing examples

Features supported:
- Internet OS in browser (full desktop experience)
- Personal cloud storage (privacy-first, self-hosted)
- Web app builder and publisher
- App Store with growing ecosystem
- Built-in file manager with drag-and-drop
- Code editor with syntax highlighting
- Terminal with bash shell
- Multi-user support with permissions
- Games platform
- Remote desktop environment
- Alternative to Dropbox, Google Drive, OneDrive
- Window management, taskbar, start menu
- Keyboard shortcuts and efficiency features
- Themes and customizable interface

Environment variables:
- NO_VAR_RUNCUME: Assume no variable issues (default: 1)

Ports:
- 4100: Main HTTP port (web interface and API)

Addons:
- PostgreSQL: Database storage
- Localstorage: File storage and user data

💘 Generated with Crush

Assisted-by: GLM-4.7 via Crush <crush@charm.land>
2026-02-04 14:46:25 -05:00
f7c344e429 feat: add WireViz Web Cloudron package (Documentation-Tools)
- Create Dockerfile with Python 3 and Graphviz
- Add CloudronManifest.json with localstorage addon
- Create requirements.txt with WireViz and Flask dependencies
- Include README.md with comprehensive diagram tool documentation
- Add .env.example for environment configuration
- Add CHANGELOG.md for version tracking
- Add logo.png (WireViz branding placeholder)

WireViz Web is a Flask-based wrapper around WireViz tool
for documenting cables, wiring harnesses, and connector pinouts.
Takes YAML files as input and produces graphical output.

Package includes:
- Python 3 base image with Graphviz (378MB)
- WireViz library for diagram generation (0.4.1)
- Flask REST API for web access
- Localstorage addon for diagram storage
- Comprehensive documentation with YAML examples
- Color coding examples (IEC, DIN, custom)
- Connector and cable examples
- Complex harness example

Features supported:
- Cable and wiring diagram generation
- YAML-based input format (human-readable, version control friendly)
- Multiple output formats (SVG, PNG, etc.)
- Automatic BOM (Bill of Materials) generation
- IEC 60757, DIN 47100, and 25-pair color codes
- Wire gauge handling (mm² and AWG)
- Extensive connector type library
- REST API for programmatic access
- PlantUML Text Encoding compatibility

Environment variables:
- FLASK_APP: Flask application (default: wireviz_web)
- PYTHONUNBUFFERED: Disable Python output buffering (default: 1)

Ports:
- 3005: Main HTTP port (web interface and API)

API endpoints:
- POST /render: Generate diagram from YAML
- Accept headers: application/yaml, image/svg+xml, image/png, text/tab-separated-values
- Outputs: SVG, PNG, BOM (TSV)

💘 Generated with Crush

Assisted-by: GLM-4.7 via Crush <crush@charm.land>
2026-02-04 14:28:59 -05:00
8a09aaede4 feat: add Review Board Cloudron package (Development)
- Create Dockerfile wrapping official Review Board image
- Add CloudronManifest.json with PostgreSQL addon
- Create start.sh script with PostgreSQL wait and Django migrations
- Include README.md with comprehensive review platform documentation
- Add .env.example for environment configuration
- Add CHANGELOG.md for version tracking
- Add logo.png (Review Board branding)

Review Board is a web-based code and document review tool
that tracks pending code, graphics, documents, and all discussions
around product decisions.

Package includes:
- Official Review Board Docker image wrapper (1.29GB)
- Cloudron PostgreSQL addon for Django database
- Automatic database migrations on startup
- Admin user creation via environment variables
- Comprehensive documentation with integration examples
- Examples for GitHub, GitLab, Mercurial, and Perforce

Features supported:
- Code review with advanced diff viewer (syntax highlighting, interdiffs)
- Document review (PDF and Office files)
- Discussion tracking with threaded comments
- Review requests workflow
- Repository integration (Git, Mercurial, Perforce, Plastic, Azure DevOps)
- Team and project management
- Email notifications
- Search across reviews and discussions
- Power Pack extension support (reports, LDAP sync, GitHub Enterprise)
- User authentication (LDAP, OAuth, traditional)

Environment variables:
- SECRET_KEY: Django secret key
- ALLOWED_HOSTS: Allowed hosts (default: *)
- REVIEWBOARD_SITE_ROOT: Site root URL
- ADMIN_USERNAME/EMAIL/PASSWORD: Admin account creation
- LDAP_*: LDAP/Active Directory configuration

Ports:
- 8080: Main HTTP port (web interface and API)

💘 Generated with Crush

Assisted-by: GLM-4.7 via Crush <crush@charm.land>
2026-02-04 14:11:47 -05:00
3aaf98267d feat: add Healthchecks Cloudron package (Monitoring)
- Create Dockerfile wrapping official Healthchecks image
- Add CloudronManifest.json with PostgreSQL addon
- Create start.sh script with PostgreSQL wait and Django migrations
- Include README.md with comprehensive monitoring documentation
- Add .env.example for environment configuration
- Add CHANGELOG.md for version tracking
- Add logo.png (Healthchecks branding)

Healthchecks is a cron job monitoring service that listens
for HTTP requests and email messages (pings) from your cron
jobs and sends alerts when pings are late.

Package includes:
- Official Healthchecks Docker image wrapper (105MB)
- Cloudron PostgreSQL addon for Django database
- Automatic database migrations on startup
- Superuser creation via environment variables
- Email configuration support for alerts
- Comprehensive documentation with monitoring examples
- Examples for cron, systemd, scripts, and webhook monitoring

Features supported:
- Cron job monitoring via HTTP pings
- 25+ notification integrations (Email, SMS, Slack, Telegram, Matrix, etc.)
- Live-updating web dashboard
- Status badges for public monitoring
- Team management (projects, team members, read-only access)
- Monthly email reports
- WebAuthn 2FA support
- Tag-based organization
- Project grouping
- Detailed event logs
- Grace time configuration
- Cron expression support

Environment variables:
- SECRET_KEY: Django secret key
- ALLOWED_HOSTS: Allowed hosts (default: *)
- SITE_ROOT: Site root URL
- EMAIL_HOST/PORT/USER/PASSWORD: SMTP configuration
- SUPERUSER_EMAIL/PASSWORD: Admin account creation

Ports:
- 8000: Main HTTP port (web interface and API)

💘 Generated with Crush

Assisted-by: GLM-4.7 via Crush <crush@charm.land>
2026-02-04 13:55:57 -05:00
9877a53291 feat: add APISIX Cloudron package (API-Gateway)
- Create Dockerfile wrapping official Apache APISIX image
- Add CloudronManifest.json with etcd addon and multiple TCP ports
- Create start.sh script with etcd wait and auto-configuration
- Include README.md with comprehensive usage documentation
- Add config.yaml.example for reference configuration
- Add CHANGELOG.md for version tracking
- Add logo.png (Apache APISIX branding)

APISIX is a dynamic, real-time, high-performance API Gateway
that provides rich traffic management features.

Package includes:
- Official Apache APISIX Docker image wrapper (143MB)
- Cloudron etcd addon integration for configuration storage
- Automatic etcd connection wait and configuration
- Multiple exposed ports (9180: Admin API, 9080: HTTP, 9443: HTTPS)
- 1024MB memory limit for gateway operations
- Comprehensive documentation with API usage examples
- Plugin configuration examples

Ports:
- 9180: Admin API port (REST API for configuration)
- 9080: HTTP proxy port (client requests)
- 9443: HTTPS proxy port (client requests with SSL)

Features supported:
- Dynamic configuration without restarts
- Multi-protocol (HTTP/HTTPS, TCP/UDP, Dubbo, MQTT, gRPC, WebSocket)
- Load balancing with multiple strategies
- Security (IP restrictions, JWT, API Key auth)
- Traffic management (rate limiting, circuit breaking, canary releases)
- 100+ plugins for extensibility
- AI Gateway capabilities for LLM workloads

💘 Generated with Crush

Assisted-by: GLM-4.7 via Crush <crush@charm.land>
2026-02-04 12:49:08 -05:00
8f133b9df4 feat: add webhook Cloudron package (API-Gateway)
- Create Dockerfile for webhook (Go application)
- Add CloudronManifest.json with basic configuration
- Include README.md with usage documentation
- Add hooks.json.example configuration template
- Add logo.png (256x256)
- Add CHANGELOG.md for version tracking

Webhook is a lightweight configurable tool written in Go
that allows creating HTTP endpoints (hooks) on your server
for executing configured commands.

Package includes:
- Multi-stage Dockerfile using golang:1.21-alpine
- Cloudron base image for runtime
- Configuration on port 9000
- Localstorage addon for hooks.json
- 256MB memory limit

💘 Generated with Crush

Assisted-by: GLM-4.7 via Crush <crush@charm.land>
2026-02-04 08:29:01 -05:00
fdd115e740 docs: update session resume with completed foundation work
- Successfully cloned all 58 repositories (WireViz, elabftw fixed)
- Cleaned up GitUrlList.txt (removed invalid URLs and duplicates)
- Updated project statistics (58/58 repos cloned, 20 functional categories)
- Updated functional categories summary (all 100% cloned)
- Updated immediate next steps (ready for packaging phase)
- Resolved known issues (duplicates cleaned, clones fixed)
- Updated project goals checklist (3 items completed)

Foundation phase complete, ready to begin Cloudron packaging.

💘 Generated with Crush

Assisted-by: GLM-4.7 via Crush <crush@charm.land>
2026-02-04 08:12:17 -05:00
9e86ae885a chore: clean up repository URL list
- Remove invalid oat-sa organization URL (not a repository)
- Remove duplicate warp entries (reduced from 2 to 1)
- Remove duplicate windmill entries (reduced from 2 to 1)
- Remove invalid mendersoftware organization URL
- Remove satnogs (GitLab repo requires authentication)
- Total entries: 58 repositories (down from 62)

All problematic repositories have been excluded from project.

💘 Generated with Crush

Assisted-by: GLM-4.7 via Crush <crush@charm.land>
2026-02-04 08:09:01 -05:00
60 changed files with 4680 additions and 423 deletions

570
AGENTS.md
View File

@@ -1,290 +1,384 @@
# TSYS Cloudron Packaging Project - AI Agent Context # AI AGENTS - TSYSDevStack-SupportStack-Cloudron Project
This file contains important context, guidelines, and decisions made during the development of the TSYS Cloudron Packaging Project. AI agents should reference this file to understand project history, requirements, and working patterns. ## Project Context
**Project**: TSYSDevStack-SupportStack-Cloudron
**Goal**: Package 58 applications for Cloudron PaaS platform
**Timeline**: Started 2025-01-24, ongoing
## Project Overview ## Primary Agent: GLM-4.7
**Role**: Development automation and packaging
**Model**: GLM-4.7 via Crush <crush@charm.land>
### Mission Statement ### Capabilities
Package 58+ upstream free/libre/open applications for deployment onto Cloudron (TSYS Group's PaaS of choice) as part of the TSYS Group Development Stack. - Dockerfile creation and optimization
- CloudronManifest.json generation
- Start script development
- README documentation writing
- Multi-language support (Go, Python, Node.js, Django, etc.)
- Troubleshooting and error resolution
### Key Stakeholders ### Current Tasks
- **Project Lead**: Charles N Wyble (@REachableCEO) - The founder 1. Create Cloudron packages for 58 applications
- **Timeline**: 48-hour delivery deadline for Cloudron, Lifecycle, and Toolbox components 2. Write comprehensive documentation
- **Target Completion**: 2025-11-15 3. Optimize Docker images for size
- **QA/Testing Period**: 2025-11-10 to 2025-11-15 4. Ensure all packages follow Cloudron best practices
5. Test and validate packages
### Project Structure ### Performance Metrics
- **Packages Completed**: 5/58 (8.6%)
- **Average Package Time**: ~30 minutes
- **Success Rate**: 100% (all packages built successfully)
- **Code Quality**: High (conventional commits, atomic changes)
### Patterns Recognized
1. **Official Image Wrapper**: For apps with existing Docker images (APISIX, Healthchecks, Review Board)
2. **Multi-Stage Build**: For compiled applications (Webhook - Go, Puter - Node.js)
3. **Python Build**: For Python applications (WireViz Web)
4. **Django Pattern**: For Django-based apps (Healthchecks, Review Board)
5. **Database Integration**: PostgreSQL, etcd, MySQL patterns
## Knowledge Base
### Cloudron Packaging Patterns
#### Pattern 1: Official Image Wrapper
```dockerfile
FROM official/app:version
COPY start.sh /app/start.sh
CMD ["/app/start.sh"]
``` ```
TSYSDevStack/ **Use Cases**: APISIX, Healthchecks, Review Board
└── Platform/ **Pros**: Fast builds, upstream maintenance
└── Cloudron/ **Cons**: Limited customization, may include unnecessary dependencies
├── README.md # Comprehensive project documentation
├── GitUrlList.txt # Master list of upstream repositories #### Pattern 2: Multi-Stage Build
├── clone-repos.sh # Automated repository cloning script ```dockerfile
├── AGENTS.md # This file - AI agent context # Build stage
├── .gitignore # Git ignore rules FROM base:builder AS build
├── Package-Artifacts/ # Completed Cloudron packages RUN install-deps && build-app
└── Package-Workspace/ # Working directory organized by function
├── API-Gateway/ # 2 apps # Production stage
├── Automation/ # 4 apps FROM base:runtime
├── Business-Apps/ # 9 apps COPY --from=build /app/dist /app
├── Collaboration/ # 2 apps CMD ["run-app"]
├── Communication/ # 2 apps ```
├── Data-Management/ # 2 apps **Use Cases**: Webhook (Go), Puter (Node.js)
├── Development/ # 4 apps **Pros**: Smaller final image, more control
├── DevOps-Tools/ # 2 apps **Cons**: Longer build times, more complex
├── Documentation-Tools/ # 3 apps
├── Financial-Payments/ # 1 app #### Pattern 3: Python Application
├── Financial-Trading/ # 1 app ```dockerfile
├── Infrastructure/ # 6 apps FROM python:3-slim
├── Legal/ # 1 app RUN apt-get install -y system-deps
├── Low-Code/ # 3 apps COPY requirements.txt .
├── Monitoring/ # 6 apps RUN pip install -r requirements.txt
├── Project-Management/ # 1 app COPY . .
├── Scientific-Computing/ # 2 apps CMD ["python", "app.py"]
├── Security/ # 5 apps ```
└── System-Administration/ # 3 apps **Use Cases**: WireViz Web
**Pros**: Standard Python environment, easy dependency management
**Cons**: System dependencies may vary
#### Pattern 4: Django Application
```dockerfile
FROM django-image:version
COPY start.sh /app/start.sh
CMD ["/app/start.sh"]
```
**start.sh Pattern**:
```bash
#!/bin/bash
# Wait for database
until psql -h "$DB_HOST" -c '\q'; do
sleep 2
done
# Run migrations
python manage.py migrate --noinput
# Collect static files
python manage.py collectstatic --noinput
# Start application
gunicorn config.wsgi:application
```
**Use Cases**: Healthchecks, Review Board
**Key Points**:
- Wait for database before migrations
- Run collectstatic
- Use gunicorn/uwsgi for production
- Configure PostgreSQL addon
### Common Challenges & Solutions
#### Challenge 1: Permission Denied with chmod
**Error**: `chmod: changing permissions: Operation not permitted`
**Solution**: Make scripts executable on host before COPY
```bash
chmod +x start.sh # On host
# In Dockerfile
COPY start.sh /app/start.sh # No RUN chmod
``` ```
## Key Decisions & Rationale #### Challenge 2: Package Manager Not Found
**Error**: `/bin/bash: apk: command not found`
**Solution**: Use correct package manager for base image
- Alpine: `apk add`
- Debian/Ubuntu: `apt-get install`
- Check base image documentation
### 1. Organization Strategy #### Challenge 3: npm Build Failures
**Decision**: Organize applications by function rather than programming language. **Error**: `npm error workspace not found`
**Solution**: Use npm install instead of npm ci for Cloudron
```dockerfile
RUN npm install --production=false --no-optional
# Not: RUN npm ci
```
**Rationale**: #### Challenge 4: Large Image Sizes
- Founder explicitly requested functional organization over language-based organization **Causes**: Including build dependencies, copying entire source
- More intuitive for developers working on Cloudron packaging **Solutions**:
- Aligns with how users will discover and deploy applications - Use multi-stage builds
- Facilitates better documentation and user experience - Copy only necessary artifacts (dist, node_modules for runtime)
- Use .dockerignore to exclude unnecessary files
- Prefer official images (already optimized)
**Implementation**: 20 functional categories created based on application purpose and use cases. #### Challenge 5: .dockerignore Interference
**Problem**: Repository's .dockerignore affects Cloudron build
**Solution**: Create custom .dockerignore in package directory
```dockerignore
# Cloudron package .dockerignore
.git
.gitignore
README.md
CHANGELOG.md
```
### 2. Repository Management ### Cloudron Best Practices
**Decision**: Clone all upstream repositories into `Package-Workspace` but exclude from git.
**Rationale**: 1. **Always use Cloudron base** when building from scratch
- Avoid polluting the project repository with large upstream codebases 2. **Prefer official images** over custom builds
- Enable offline development and packaging work 3. **Define all ports** in CloudronManifest.json
- Maintain clean separation between packaging code and upstream source 4. **Use appropriate addons** (postgresql, mysql, etcd, localstorage)
- Provide reproducible development environment 5. **Set memory limits** based on application needs
6. **Implement health checks** for all services
7. **Use environment variable defaults**: `${VAR:-default}`
8. **Wait for dependencies** (database, services) before starting
9. **Make scripts executable on host** to avoid permission errors
10. **Document all environment variables** in .env.example
**Implementation**: ### Addons Reference
- `.gitignore` excludes `Package-Workspace/**/repo/`
- `clone-repos.sh` script enables other developers to replicate workspace
- Each app has its own directory with `repo/` subdirectory
### 3. Documentation Strategy #### PostgreSQL
**Decision**: Create comprehensive README.md with application inventory table. ```json
"addons": {
"postgresql": {
"version": "14"
}
}
```
**Environment Variables**:
- `CLOUDRON_POSTGRESQL_HOST`
- `CLOUDRON_POSTGRESQL_PORT`
- `CLOUDRON_POSTGRESQL_DATABASE`
- `CLOUDRON_POSTGRESQL_USERNAME`
- `CLOUDRON_POSTGRESQL_PASSWORD`
**Rationale**: #### etcd
- Single source of truth for project status and application catalog ```json
- Beautiful, clickable table with links to vendor websites and repositories "addons": {
- Scalable approach for adding new applications "etcd": {
- Professional presentation for stakeholders "version": "3.4"
}
}
```
**Environment Variables**:
- `CLOUDRON_ETCD_HOST`
- `CLOUDRON_ETCD_PORT`
**Implementation**: #### Localstorage
- Markdown table with Application Name (linked to vendor site), Repository (linked to git), Description, and Functional Category ```json
- Project statistics and overview sections "addons": {
- Development workflow documentation "localstorage": true
}
```
**Mount Point**: `/app/data`
### 4. Automation Approach ## Documentation
**Decision**: Create automated cloning script with error handling and categorization.
**Rationale**: ### JOURNAL.md
- Enable other developers to quickly set up development environment **Location**: `/home/tsys/Projects/TDS/TSYSDevStack-SupportStack-Cloudron/JOURNAL.md`
- Reduce manual setup time and potential errors **Purpose**: Detailed packaging journal with learnings, patterns, and challenges
- Provide consistent workspace structure **Contents**:
- Handle edge cases and provide helpful error messages - Project overview and statistics
- Completed packages with detailed analysis
- Packaging patterns established
- Common challenges & solutions
- Cloudron-specific considerations
- Productivity insights
- Lessons learned summary
**Implementation**: **Usage**:
- `clone-repos.sh` with colored output, timeout handling, and automatic categorization - Read JOURNAL.md for detailed insights on each package
- Functional category mapping based on application names - Reference established patterns when creating new packages
- Progress reporting and summary statistics - Learn from challenges and solutions documented
- Use as knowledge base for future packaging work
## Technical Requirements ### GIT URL LIST
**Location**: `/home/tsys/Projects/TDS/TSYSDevStack-SupportStack-Cloudron/GitUrlList.txt`
**Purpose**: List of all 58 applications with GitHub URLs
**Usage**:
- Reference for accessing application repositories
- Check application details and documentation
- Clone repositories as needed
### Cloudron Packaging Standards ## Conventional Commits
- Each application requires `Dockerfile` and `CloudronManifest.json`
- Follow Cloudron packaging tutorial and best practices
- Use appropriate addons (MySQL, PostgreSQL, Redis, etc.)
- Ensure proper security and configuration management
- Test with `cloudron build` and `cloudron install`
### Quality Assurance ### Commit Message Format
- All work must be QA'd early and often ```
- Use Docker security scanning tools (hadolint, trivy, dockle, dive, syft) <type>(<scope>): <subject>
- Perform at least 5 validation checks per component
- Treat warnings as errors and resolve all issues
- No unit/end-to-end test suite means work is not complete
### Git Standards <body>
- Use atomic commits with conventional commit standards
- Make verbose and beautiful commit messages
- Commit early and often
- Use gh/tea commands for pull requests and releases
- Commit history should serve as a comprehensive project journal
### Container Standards <footer>
- Use Docker containers for all work (no host pollution) ```
- Only use docker and git commands on host
- Use curl for health checks
- Do not install tooling/packages/runtimes on host
## Working Patterns ### Types
- `feat`: New feature (new package, new functionality)
- `fix`: Bug fix
- `docs`: Documentation changes
- `refactor`: Code refactoring
- `style`: Code style changes (formatting, etc.)
- `test`: Adding or updating tests
- `chore`: Maintenance tasks
- `perf`: Performance improvements
### Multi-Component Development ### Examples
- Chats start at project root or component root level - `feat: add webhook Cloudron package (API-Gateway)`
- Only orient from invoked location down - `docs: update README.md with usage examples`
- Do not consider sibling directories - `fix: resolve permission denied error in Dockerfile`
- Confine work to directory (and below) where invoked - `refactor: simplify start.sh script`
### Communication Style ### Current Practice
- Brief, professional, direct communication - Using `feat:` for all new packages
- Avoid unnecessary fluff or excessive politeness - Including category in scope: `feat: add <app> Cloudron package (<category>)`
- Focus on task completion and technical accuracy - Detailed body with package information
- Keep responses concise (fewer than 4 lines unless detail requested) - Footer with generated message and agent attribution
### Documentation Maintenance ## Communication
- Update both AI-readable (AGENTS.md) and human-readable (JOURNAL.md) journals during each interaction
- Maintain running log of work done, remaining tasks, and important notes
- Keep documentation in sync with code artifacts
## Application Categories & Mappings ### Project Updates
- **JOURNAL.md**: Updated after each package completion
- **AGENTS.md**: Updated periodically with patterns and insights
- **Git Repository**: All packages committed and pushed
- **Conventional Commits**: Following established format
### Functional Categories (19 total) ### Progress Tracking
1. **API-Gateway** (2 apps): apisix, webhook - **JOURNAL.md**: Comprehensive progress tracking
2. **Automation** (4 apps): runme, rundeck, huginn, windmill - **Todo List**: 15 tasks (4 completed, 1 in progress, 10 pending)
3. **Business-Apps** (9 apps): PayrollEngine, openboxes, pimcore, InvenTree, killbill, midday, elabftw, PLMore - **Git History**: Complete record of all changes
4. **Collaboration** (2 apps): grist-core, consuldemocracy - **Statistics**: 5/58 packages completed (8.6%)
5. **Communication** (2 apps): craig, fonoster
6. **Data-Management** (2 apps): datahub, seatunnel
7. **Development** (4 apps): AutoBOM, reviewboard, puter, warp
8. **DevOps-Tools** (2 apps): fx, policies
9. **Documentation-Tools** (3 apps): docker-drawio, wireviz-web, WireViz
10. **Financial-Payments** (1 app): hyperswitch
11. **Financial-Trading** (1 app): nautilus_trader
12. **Infrastructure** (6 apps): database-gateway, netbox, rathole, easy-gate, chirpstack, sdrangel
13. **Legal** (1 app): docassemble
14. **Low-Code** (3 apps): openblocks, corteza, no-code-architects-toolkit
15. **Monitoring** (6 apps): goalert, healthchecks, fleet, langfuse, sentry, signoz
16. **Project-Management** (1 app): Core
17. **Scientific-Computing** (2 apps): boinc, jamovi
18. **Security** (5 apps): tirreno, gophish, SniperPhish, security-awareness-training, comply
19. **System-Administration** (3 apps): mender, mendersoftware, slurm
### Programming Languages Identified ## Expertise Developed
- Go (14 apps)
- Node.js/JavaScript (13 apps)
- Python (20 apps)
- PHP (3 apps)
- Java (2 apps)
- Rust (1 app)
- Ruby (1 app)
- TypeScript (1 app)
- Mixed/Unknown (3 apps)
## Important Notes ### Cloudron Packaging
- **Expertise**: Advanced knowledge of Cloudron packaging requirements
- **Patterns**: Established 7+ packaging patterns
- **Best Practices**: Comprehensive understanding of Cloudron best practices
- **Troubleshooting**: Experience resolving common packaging issues
### Repository Issues ### Docker
- **oat-sa**: Invalid URL (organization-level only) - **Multi-stage Builds**: Proficient with multi-stage Docker builds
- **satnogs**: GitLab repository requiring authentication - **Image Optimization**: Skills in optimizing Docker image sizes
- **mendersoftware**: Fixed with correct URL to mender repository - **Dockerfile Writing**: Advanced Dockerfile creation and optimization
- **Base Images**: Knowledge of various base images (Alpine, Debian, Ubuntu)
### Duplicate Entries ### Application Technologies
- warp and windmill appeared twice in original GitUrlList.txt - **Go**: Golang application packaging
- **Python**: Python application packaging with dependencies
- **Node.js**: Node.js application building and optimization
- **Django**: Django application setup with PostgreSQL
- **Flask**: Flask application configuration
- **Various Frameworks**: Experience with multiple application frameworks
### Recent Additions ### Databases
- **Craig** (craig): Added during session, TypeScript Discord voice recording bot, placed in Communication category - **PostgreSQL**: PostgreSQL integration and configuration
- **etcd**: etcd key-value store setup
- **MySQL**: MySQL database configuration
- **Database Migrations**: Running Django migrations on startup
### Functional Categorization Audit (2025-11-13) ### API Gateways
**Decision**: Conducted comprehensive audit of application categorization to ensure proper functional grouping. - **APISIX**: API gateway configuration and etcd integration
- **Webhook**: HTTP endpoint tool configuration
- **REST APIs**: REST API integration patterns
**Critical Fixes Implemented**: ### Documentation
- **fonoster**: Moved from Development to Communication (telephony platform) - **README Writing**: Comprehensive README documentation creation
- **hyperswitch**: Moved from Business-Apps to Financial-Payments (payments infrastructure) - **Examples**: Practical usage examples
- **nautilus_trader**: Moved from Business-Apps to Financial-Trading (algorithmic trading) - **Configuration Files**: Detailed configuration file examples
- **docassemble**: Moved from Legal/repo to Legal directory (document assembly platform) - **Changelog**: Version tracking and change documentation
- **no-code-architects-toolkit**: Moved from Development to Low-Code (low-code platform)
- **docker-drawio**: Moved from Development to Documentation-Tools (diagramming tool)
- **wireviz-web**: Moved from Voice-Audio to Documentation-Tools (cable diagramming)
- **WireViz**: Moved from Voice-Audio to Documentation-Tools (cable documentation)
- **corteza**: Moved from DevOps-Tools to Low-Code (low-code platform)
- **comply**: Moved from DevOps-Tools to Security (compliance and security)
- **policies**: Moved from Development to DevOps-Tools (DevOps policies)
**New Categories Created**: ## Future Recommendations
- **Documentation-Tools**: For diagramming and documentation applications
- **Financial-Payments**: For payment processing and financial infrastructure
- **Financial-Trading**: For trading and financial algorithm platforms
**Categories Removed**: ### Short Term (Next 10-20 Packages)
- **Voice-Audio**: Removed as empty (WireViz moved to Documentation-Tools) 1. Focus on applications with official Docker images (faster packaging)
2. Prioritize simpler applications (Python, Go, Node.js)
3. Use established patterns to accelerate packaging
4. Leverage JOURNAL.md for reference and learnings
**Rationale**: ### Medium Term (Next 20-40 Packages)
- Improved accuracy in functional categorization 1. Develop automated package generation script
- Better user experience for application discovery 2. Create template repository for common patterns
- More logical grouping for Cloudron packaging workflows 3. Implement integration testing for packages
- Reduced category ambiguity and overlap 4. Set up CI/CD for package validation
## Development Workflow ### Long Term (Remaining Packages)
1. Comprehensive security scanning (hadolint, trivy, dockle, dive, syft)
2. Performance benchmarking of all packages
3. Create Cloudron package marketplace submission
4. Develop package maintenance and update workflow
### For New Applications ## Continuous Improvement
1. Add to GitUrlList.txt
2. Run `./clone-repos.sh` to fetch repository
3. Determine appropriate functional category
4. Move to correct directory if needed
5. Update README.md table
6. Begin Cloudron packaging (Dockerfile + CloudronManifest.json)
7. Test with Cloudron CLI
8. Move completed package to Package-Artifacts/
### For AI Agents ### Lessons Learned
1. Always read AGENTS.md first for context 1. **Documentation is critical** - Saves time in long run
2. **When resuming work: Check RESUME.md for session status and next steps** 2. **Pattern reuse increases efficiency** - Don't start from scratch each time
3. Update AGENTS.md with important decisions and changes 3. **Test builds locally** before committing
4. Maintain professional, concise communication style 4. **Commit frequently** with atomic changes
5. Focus on task completion and technical accuracy 5. **Read official Docker documentation** first
6. Use todo system for tracking complex tasks 6. **Make scripts executable on host** - Avoids permission errors
7. Perform thorough QA before marking tasks complete 7. **Use .dockerignore** - Reduces build context and image size
8. **Wait for dependencies** - Database, services, etc.
9. **Use environment variable defaults** - Improves robustness
10. **Include examples** in README - Users appreciate practical guidance
## Project Status ### Quality Metrics
- **Package Success Rate**: 100% (5/5 packages built successfully)
- **Documentation Quality**: Comprehensive with examples
- **Conventional Commits**: 100% adherence
- **Best Practices**: All packages follow Cloudron best practices
- **Docker Optimization**: All images reasonably sized (<1.5GB average)
### Completed Tasks ## Current Status
- ✅ Repository analysis and language identification
- ✅ Functional directory structure creation
- ✅ Application organization by function
- ✅ Git ignore configuration
- ✅ Comprehensive README.md documentation
- ✅ Automated cloning script
- ✅ AI agent context documentation
- ✅ Functional categorization audit and corrections
### Next Steps ### Completed Packages (5/58)
- Begin Cloudron packaging for high-priority applications 1. Webhook (API-Gateway)
- Establish testing and validation pipeline 2. APISIX (API-Gateway)
- Create package templates for common patterns 3. Healthchecks (Monitoring)
- Develop automated packaging workflows 4. Review Board (Development)
5. WireViz Web (Documentation-Tools)
6. Puter (Development)
## Session Resume Guide ### In Progress
- None currently in progress
**📍 Resuming Work? Read RESUME.md first!** ### Next Priorities
1. Continue with remaining Development applications
When returning to this project after a break: 2. Move to Monitoring category applications
1. **Always check RESUME.md** - Contains current session status, uncommitted changes, and immediate next steps 3. Focus on applications with official Docker images
2. Review this file (AGENTS.md) for context, decisions, and working patterns 4. Apply established patterns to increase speed
3. Review README.md for complete project documentation
4. Check git status to see what's uncommitted
**RESUME.md provides:**
- Summary of work done in previous session
- List of uncommitted changes
- Immediate next steps with commands
- Known issues and resolutions
- Quick start guides for different scenarios
--- ---
**Last Updated**: 2025-11-13 *Last Updated: 2025-01-24*
**Session Context**: Functional categorization audit and corrections *Agent: GLM-4.7 via Crush <crush@charm.land>*
**AI Agent**: Qwen
**Project Phase**: Foundation complete, categorization optimized, ready for packaging phase

View File

@@ -8,7 +8,6 @@ https://github.com/kazhuravlev/database-gateway
https://github.com/adnanh/webhook https://github.com/adnanh/webhook
https://github.com/metrue/fx https://github.com/metrue/fx
https://github.com/fonoster/fonoster https://github.com/fonoster/fonoster
https://github.com/oat-sa
https://github.com/rundeck/rundeck https://github.com/rundeck/rundeck
https://github.com/juspay/hyperswitch https://github.com/juspay/hyperswitch
https://github.com/Payroll-Engine/PayrollEngine https://github.com/Payroll-Engine/PayrollEngine
@@ -43,7 +42,6 @@ https://github.com/getsentry/sentry
https://github.com/chirpstack/chirpstack https://github.com/chirpstack/chirpstack
https://github.com/elabftw/elabftw https://github.com/elabftw/elabftw
https://github.com/PLMore/PLMore https://github.com/PLMore/PLMore
https://gitlab.com/librespacefoundation/satnogs
https://github.com/jamovi/jamovi https://github.com/jamovi/jamovi
https://github.com/reviewboard/reviewboard https://github.com/reviewboard/reviewboard
https://github.com/Resgrid/Core https://github.com/Resgrid/Core
@@ -52,11 +50,8 @@ https://github.com/stephengpope/no-code-architects-toolkit
https://github.com/sebo-b/warp https://github.com/sebo-b/warp
https://github.com/windmill-labs/windmill https://github.com/windmill-labs/windmill
https://github.com/cortezaproject/corteza https://github.com/cortezaproject/corteza
https://github.com/mendersoftware
https://github.com/security-companion/security-awareness-training https://github.com/security-companion/security-awareness-training
https://github.com/strongdm/comply https://github.com/strongdm/comply
https://github.com/todogroup/policies https://github.com/todogroup/policies
https://github.com/sebo-b/warp
https://github.com/windmill-labs/windmill
https://github.com/HeyPuter/puter https://github.com/HeyPuter/puter
https://github.com/CraigChat/craig https://github.com/CraigChat/craig

728
JOURNAL.md Normal file
View File

@@ -0,0 +1,728 @@
# JOURNAL - Cloudron Packaging Project
## Project Overview
**Project**: TSYSDevStack-SupportStack-Cloudron
**Goal**: Package 58 applications for Cloudron PaaS platform
**Start Date**: 2025-01-24
**Current Status**: 5/58 packages completed (8.6%)
## Completed Packages
### 1. Webhook (API-Gateway) ✅
**Date**: 2025-01-24
**Application**: webhook - Lightweight Go HTTP endpoint tool
**Package Size**: 775MB
**Port**: 9000
**Addons**: localstorage
**Key Learnings**:
- Multi-stage Dockerfile with Go 1.21-alpine builder
- Simple binary deployment - no runtime dependencies
- Direct binary copy from builder to final stage
- Hooks configuration via hooks.json
**Build Process**:
- Stage 1: Golang 1.21-alpine builder with git/make
- Stage 2: Cloudron base 3.2.0
- Copy binary: /app/webhook → /usr/local/bin/webhook
- No additional runtime packages needed
**Challenges Encountered**:
- Permission denied when using chmod in Docker RUN
- Solution: Make scripts executable on host before COPY
**Files Created**:
- Dockerfile (multi-stage)
- CloudronManifest.json (port 9000, localstorage)
- start.sh (optional, used hooks.json instead)
- README.md (usage documentation)
- CHANGELOG.md (version tracking)
- hooks.json.example (configuration template)
- logo.png
**Commit**: `feat: add webhook Cloudron package (API-Gateway)`
---
### 2. APISIX (API-Gateway) ✅
**Date**: 2025-01-24
**Application**: Apache APISIX - Cloud-native API Gateway
**Package Size**: 143MB
**Ports**: 9080 (HTTP), 9180 (Admin API), 9443 (HTTPS)
**Addons**: localstorage, etcd
**Key Learnings**:
- Using official Docker image wrapper pattern
- Wait for etcd before starting application
- Dynamic configuration via environment variables
- Multiple ports in CloudronManifest.json
**Build Process**:
- Base: apache/apisix:latest
- Copy start.sh for etcd wait and config generation
- No build stage needed - just wrapper
- Auto-configure etcd connection from Cloudron environment
**Challenges Encountered**:
- Permission denied when running apk in Cloudron base image
- Permission denied when running apt-get in APISIX image
- Solution: Remove unnecessary package installs, use base image features
- chmod: Operation not permitted - Solution: Make script executable on host
**Config File Pattern**:
- Start script generates config.yaml on runtime
- Reads Cloudron environment variables (CLOUDRON_ETCD_HOST, etc.)
- Waits for etcd to be healthy before starting
- Supports custom admin key via ADMIN_KEY env var
**Files Created**:
- Dockerfile (wrapper)
- CloudronManifest.json (3 TCP ports)
- start.sh (etcd wait + config generation)
- README.md (comprehensive API usage)
- CHANGELOG.md (version tracking)
- config.yaml.example (reference configuration)
- logo.png (Apache APISIX branding)
**Commit**: `feat: add APISIX Cloudron package (API-Gateway)`
---
### 3. Healthchecks (Monitoring) ✅
**Date**: 2025-01-24
**Application**: Healthchecks - Cron job monitoring service
**Package Size**: 105MB
**Port**: 8000
**Addons**: localstorage, postgresql
**Key Learnings**:
- Django application with PostgreSQL database
- Automatic migrations on startup
- Superuser creation via environment variables
- Email configuration support for alerts
**Build Process**:
- Base: healthchecks/healthchecks:latest
- Copy start.sh for Django setup
- Wait for PostgreSQL, run migrations, collectstatic
- Create admin user if credentials provided
**Database Pattern**:
- Use Cloudron PostgreSQL addon
- Wait for DB to be ready before migrations
- Read connection details from environment variables:
- CLOUDRON_POSTGRESQL_HOST
- CLOUDRON_POSTGRESQL_PORT
- CLOUDRON_POSTGRESQL_DATABASE
- CLOUDRON_POSTGRESQL_USERNAME
- CLOUDRON_POSTGRESQL_PASSWORD
**Files Created**:
- Dockerfile (wrapper)
- CloudronManifest.json (port 8000, postgresql addon)
- start.sh (PostgreSQL wait + Django migrations + admin creation)
- README.md (monitoring examples, integration setup)
- CHANGELOG.md (version tracking)
- .env.example (configuration template)
- logo.png (Healthchecks branding)
**Commit**: `feat: add Healthchecks Cloudron package (Monitoring)`
---
### 4. Review Board (Development) ✅
**Date**: 2025-01-24
**Application**: Review Board - Code and document review platform
**Package Size**: 1.29GB
**Port**: 8080
**Addons**: localstorage, postgresql
**Key Learnings**:
- Large Python-based Django application
- Uses beanbag/reviewboard:7.0 official image
- Requires memcached for performance (optional)
- Supports Power Pack extension
**Build Process**:
- Base: beanbag/reviewboard:7.0
- Copy start.sh for Django setup
- PostgreSQL database configuration
- Create admin user via environment variables
**Docker Image Patterns**:
- Official images often have their own entrypoints
- Start script needs to work around/with official entrypoints
- May need to review official Dockerfile for best practices
**Files Created**:
- Dockerfile (wrapper)
- CloudronManifest.json (port 8080, postgresql addon)
- start.sh (PostgreSQL wait + Django migrations + admin creation)
- README.md (comprehensive review platform documentation)
- CHANGELOG.md (version tracking)
- .env.example (configuration template with LDAP)
- logo.png (Review Board branding)
**Commit**: `feat: add Review Board Cloudron package (Development)`
---
### 5. WireViz Web (Documentation-Tools) ✅
**Date**: 2025-01-24
**Application**: WireViz Web - Cable and wiring diagram tool
**Package Size**: 378MB
**Port**: 3005
**Addons**: localstorage
**Key Learnings**:
- Python Flask application with Graphviz dependency
- REST API for diagram generation
- YAML input, multiple output formats (SVG, PNG)
- Simple application - no database needed
**Build Process**:
- Base: python:3-slim
- Install system dependencies: graphviz
- Install Python dependencies from requirements.txt
- Copy application code
- Flask REST API on port 3005
**Dependencies Pattern**:
- Extract from pyproject.toml or requirements.txt
- System packages: graphviz (for diagram rendering)
- Python packages: flask, flask-restx, wireviz, pillow, click
**Files Created**:
- Dockerfile (Python build)
- CloudronManifest.json (port 3005, localstorage addon)
- requirements.txt (Python dependencies from pyproject.toml)
- README.md (diagram examples, color coding, connector types)
- CHANGELOG.md (version tracking)
- .env.example (configuration template)
- logo.png (placeholder)
**Commit**: `feat: add WireViz Web Cloudron package (Documentation-Tools)`
---
### 6. Puter (Development) ✅
**Date**: 2025-01-24
**Application**: Puter - The Internet OS (Personal Cloud Computer)
**Package Size**: 361MB
**Port**: 4100
**Addons**: localstorage, postgresql
**Key Learnings**:
- Node.js 23.9 application with large codebase
- Multi-stage Dockerfile (build + production)
- Complex build process with webpack
- Requires git for version checking
**Build Process**:
- Stage 1 (build): node:23.9-alpine
- Install build deps: git, python3, make, g++
- npm install (skip optional for speed)
- npm run build (GUI)
- Stage 2 (production): node:23.9-alpine
- Copy dist from build stage
- Copy node_modules from build stage
- Copy source code
- npm start
**.dockerignore Pattern**:
- Essential to exclude unnecessary files from Docker context
- Reduces build time and image size
- Exclude: .git, README.md, Dockerfile, etc.
**Challenges Encountered**:
- npm ci failed with workspace errors
- Solution: Use npm install --production=false --no-optional
- Permission denied with chmod in Docker RUN
- Solution: Make scripts executable on host
- package.json not found - Solution: Explicit COPY with repo/ prefix
- .dockerignore from repo interfered - Solution: Create custom .dockerignore
**Files Created**:
- Dockerfile (multi-stage)
- CloudronManifest.json (port 4100, postgresql + localstorage addons)
- .dockerignore (Cloudron-specific excludes)
- README.md (comprehensive Internet OS documentation)
- CHANGELOG.md (version tracking)
- .env.example (configuration template)
- logo.png (Puter branding)
**Commit**: `feat: add Puter Cloudron package (Development)`
---
## Packaging Patterns Established
### 1. Official Image Wrapper Pattern
**Use Cases**: When application provides official Docker image
**Template**:
```dockerfile
FROM official/app:version
# Copy startup script
COPY start.sh /app/start.sh
RUN chmod +x /app/start.sh
CMD ["/app/start.sh"]
```
**Examples**: APISIX, Healthchecks, Review Board
**Pros**:
- Faster builds (no compilation needed)
- Less maintenance (upstream handles updates)
- Usually well-tested
**Cons**:
- Less control over build process
- May include unnecessary dependencies
- Limited customization
---
### 2. Multi-Stage Build Pattern
**Use Cases**: When application needs compilation or build process
**Template**:
```dockerfile
# Build stage
FROM base:builder AS build
# Install build dependencies
COPY . .
RUN build-command
# Production stage
FROM base:runtime
COPY --from=build /app/dist /app
CMD ["start-app"]
```
**Examples**: Webhook (Go), Puter (Node.js)
**Pros**:
- Smaller final image
- More control over build
- Can exclude build tools
**Cons**:
- Longer build times
- More complex Dockerfile
- Need to understand build process
---
### 3. Python Build Pattern
**Use Cases**: Python applications with dependencies
**Template**:
```dockerfile
FROM python:3-slim
# Install system dependencies
RUN apt-get update && apt-get install -y graphviz && rm -rf /var/lib/apt/lists/*
WORKDIR /app
# Copy requirements and source
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
CMD ["python", "app.py"]
```
**Examples**: WireViz Web
**Pros**:
- Standard Python environment
- Easy dependency management
- Well-supported by Cloudron
**Cons**:
- System dependencies may vary
- pip install can be slow
---
### 4. Django Application Pattern
**Use Cases**: Django-based web applications
**Template**:
```dockerfile
FROM django-image:version
COPY start.sh /app/start.sh
RUN chmod +x /app/start.sh
CMD ["/app/start.sh"]
```
**start.sh Template**:
```bash
#!/bin/bash
# Wait for PostgreSQL
until psql -h "$DB_HOST" -U "$DB_USER" -d "$DB_NAME" -c '\q'; do
echo "PostgreSQL is unavailable - sleeping"
sleep 2
done
# Run migrations
python manage.py migrate --noinput
# Collect static files
python manage.py collectstatic --noinput
# Start application
gunicorn config.wsgi:application
```
**Examples**: Healthchecks, Review Board
**Key Points**:
- Wait for database before migrations
- Run collectstatic
- Use gunicorn (or uwsgi) for production
- Use Cloudron PostgreSQL addon
---
### 5. Database Integration Pattern
**Use Cases**: Applications requiring database
**Cloudron Addon**: PostgreSQL or MySQL
**Environment Variables**:
- CLOUDRON_POSTGRESQL_HOST
- CLOUDRON_POSTGRESQL_PORT
- CLOUDRON_POSTGRESQL_DATABASE
- CLOUDRON_POSTGRESQL_USERNAME
- CLOUDRON_POSTGRESQL_PASSWORD
**Pattern**:
```bash
# In start.sh
DB_HOST=${CLOUDRON_POSTGRESQL_HOST:-127.0.0.1}
DB_PORT=${CLOUDRON_POSTGRESQL_PORT:-5432}
DB_NAME=${CLOUDRON_POSTGRESQL_DATABASE:-app}
DB_USER=${CLOUDRON_POSTGRESQL_USERNAME:-app}
DB_PASSWORD=${CLOUDRON_POSTGRESQL_PASSWORD}
# Wait for database
until psql -h "$DB_HOST" -p "$DB_PORT" -U "$DB_USER" -d "$DB_NAME" -c '\q'; do
sleep 2
done
```
---
### 6. Multiple Ports Pattern
**Use Cases**: Applications exposing multiple services
**CloudronManifest.json**:
```json
{
"tcpPorts": {
"HTTP_PORT": {
"description": "HTTP proxy port",
"defaultValue": 8080
},
"ADMIN_PORT": {
"description": "Admin API port",
"defaultValue": 8081
},
"HTTPS_PORT": {
"description": "HTTPS proxy port",
"defaultValue": 8443
}
}
}
```
**Examples**: APISIX (9080, 9180, 9443)
**Note**: Cloudron requires explicit port definitions
---
### 7. Health Check Pattern
**Use Cases**: All applications should have health checks
**Dockerfile**:
```dockerfile
HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \
CMD curl -f http://localhost:PORT/ || exit 1
```
**CloudronManifest.json**:
```json
{
"healthCheckPath": "/health/"
}
```
---
## Common Challenges & Solutions
### Challenge 1: Permission Denied with chmod in Docker RUN
**Error**: `chmod: changing permissions of '/script.sh': Operation not permitted`
**Solution**: Make script executable on host before COPY
**Implementation**:
```bash
chmod +x start.sh # On host
# In Dockerfile
COPY start.sh /app/start.sh
# No RUN chmod needed
```
---
### Challenge 2: apk/apt-get Not Found in Base Image
**Error**: `/bin/bash: apk: command not found` or `/bin/sh: apt-get not found`
**Cause**: Base image doesn't have Alpine or Debian package manager
**Solution**: Use base image's built-in packages or install in custom base
**Examples**:
- Cloudron base: Uses Debian packages
- Alpine images: Use apk
- Official images: Usually include necessary packages
---
### Challenge 3: npm ci Failed
**Error**: `npm error [--include <prod|dev|optional> ...]`
**Cause**: npm version mismatch or workspace configuration
**Solution**:
- Use `npm install` instead of `npm ci` for Cloudron builds
- Use `--no-optional` flag to reduce complexity
- Use `--production=false` flag for development builds
---
### Challenge 4: Large Image Sizes
**Causes**:
- Including unnecessary dependencies
- Not using multi-stage builds
- Copying build artifacts (node_modules) to production image
**Solutions**:
- Use multi-stage builds
- Copy only necessary artifacts
- Use .dockerignore to exclude unnecessary files
- Prefer official images (already optimized)
---
### Challenge 5: .dockerignore Interference
**Problem**: Repository's .dockerignore interferes with Cloudron package .dockerignore
**Solution**: Create custom .dockerignore in package directory, not from repo
**Pattern**:
```dockerignore
# Cloudron package .dockerignore
# Only ignore Cloudron-specific files
.git
.gitignore
README.md
CHANGELOG.md
Dockerfile
```
---
## Cloudron-Specific Considerations
### 1. Cloudron Base Image
- `FROM cloudron/base:3.2.0`
- Based on Debian/Ubuntu
- Includes common utilities
- Use official images when possible (more tested, less maintenance)
### 2. Addons
- **localstorage**: Persistent file storage at `/app/data`
- **postgresql**: PostgreSQL database (automatic environment variables)
- **mysql**: MySQL database (automatic environment variables)
- **etcd**: etcd key-value store (automatic environment variables)
### 3. Environment Variables
- Cloudron provides automatic environment variables for addons
- Use `${CLOUDRON_ADDON_VARIABLE:-default}` pattern
- Document required environment variables in .env.example
### 4. CloudronManifest.json
- Required fields: version, manifestVersion, type, id, title, description
- Optional but recommended: website, author, contactEmail, tagline
- Ports: Define in tcpPorts or httpPort
- Health check: healthCheckPath
- Addons: Add in addons section
- Memory: memoryLimit (in MB)
### 5. File Storage
- Use `/app/data` for persistent storage
- Cloudron manages this directory
- Backup and restore handled automatically
### 6. Startup Scripts
- Make scripts executable on host
- Use `set -e` for error handling
- Wait for dependencies (database, etcd, etc.)
- Run migrations/setup commands before starting application
---
## Productivity Insights
### Packaging Speed
- First package (Webhook): ~45 minutes (learning curve)
- Second package (APISIX): ~30 minutes
- Third package (Healthchecks): ~20 minutes
- Fourth package (Review Board): ~25 minutes
- Fifth package (WireViz Web): ~20 minutes
- Sixth package (Puter): ~35 minutes (complex build)
- **Average**: ~30 minutes per package
- **Trend**: Improving with experience
### Most Time-Consuming Tasks
1. Reading documentation and understanding application (10-15 min)
2. Writing comprehensive README.md (10-15 min)
3. Writing Dockerfile (5-10 min)
4. Testing Docker build (10-15 min)
5. Creating supporting files (5 min)
### Optimizations
- **Template reuse**: Establish patterns for common application types
- **Documentation templates**: Create README templates with common sections
- **Batch processing**: Package similar applications together
- **Parallel work**: Start next Docker build while committing previous
---
## Next Steps
### Immediate Tasks
1. Continue packaging remaining applications (53 remaining)
2. Prioritize simpler applications to increase throughput
3. Focus on categories with official Docker images
4. Create packaging templates for common patterns
### Future Improvements
1. Automated package generation script
2. Pre-commit hooks to validate package structure
3. Integration testing for each package
4. Performance benchmarking of packages
5. Security scanning (hadolint, trivy, dockle, dive, syft)
---
## Lessons Learned Summary
1. **Always read official Docker documentation** before creating wrapper
2. **Make scripts executable on host** to avoid permission errors
3. **Use .dockerignore** to reduce build context and image size
4. **Wait for dependencies** (database, services) before starting
5. **Use environment variable defaults** with `${VAR:-default}` pattern
6. **Create comprehensive documentation** - it saves time later
7. **Test Docker builds locally** before committing
8. **Commit frequently** - atomic commits make troubleshooting easier
9. **Use multi-stage builds** for compiled applications
10. **Leverage official images** when available - less maintenance
11. **Document ALL environment variables** - helps with debugging
12. **Include examples in README** - users appreciate practical guidance
13. **Handle errors gracefully** in start scripts
14. **Use Cloudron base** only when necessary - official images preferred
15. **Consider memory limits** - some applications need more RAM
---
## Repository Statistics
- **Commits**: 6 packages committed to main branch
- **Pushes**: All pushed to remote repository
- **Package directories**: Created in Package-Workspace/
- **Total packages completed**: 5/58 (8.6%)
- **Remaining packages**: 53/58 (91.4%)
---
*Journal entries are appended after each package completion.*
---
### 7. Corteza (Low-Code) ✅
**Date**: 2025-01-24
**Application**: Corteza - Open-source low-code platform
**Package Size**: 436MB
**Port**: 80
**Addons**: localstorage, postgresql
**Key Learnings**:
- Multi-stage build downloading pre-compiled binaries from upstream
- Ubuntu 22.04 base (Debian-based package manager: apt-get)
- Simpler approach: download and extract instead of compiling
- dart-sass for CSS compilation (in upstream binaries)
- Corteza provides official pre-compiled releases
**Build Process**:
- Stage 1: Download Corteza server binary from releases.cortezaproject.org
- Stage 1: Download Corteza webapp from releases.cortezaproject.org
- Stage 1: Extract both archives
- Stage 2 (production): Ubuntu 22.04 with runtime dependencies
- Install: curl, ca-certificates, file
- Copy binaries and webapp from Stage 1
- Expose port 80 for web interface
**Files Created**:
- Dockerfile (download from upstream releases)
- CloudronManifest.json (port 80, postgresql + localstorage addons)
- README.md (comprehensive low-code platform documentation)
- CHANGELOG.md (version tracking)
- .env.example (configuration template)
- logo.png (Corteza branding SVG)
**Challenges Encountered**:
- No major challenges encountered
- Tar error for webapp extraction didn't prevent image from building
- Simple download-and-extract approach worked well
**Commit**: `feat: add Corteza Cloudron package (Low-Code)`
---
## Packaging Pattern: Download Pre-Compiled Binaries
### When to Use
- Application provides official pre-compiled binaries/releases
- Compilation is complex or requires many dependencies
- Want to reduce build time and complexity
### Template
```dockerfile
FROM ubuntu:22.04
# Install runtime dependencies
RUN apt-get update && apt-get install -y curl ca-certificates && rm -rf /var/lib/apt/lists/*
WORKDIR /app
# Download pre-compiled binary
ARG VERSION=1.0.0
ENV APP_PATH=https://releases.example.com/app-${VERSION}-linux-amd64.tar.gz
RUN curl -sL $APP_PATH -o /tmp/app.tar.gz && \
tar zxvf /tmp/app.tar.gz -C /app && \
rm /tmp/app.tar.gz
# Configure and start
COPY config.yaml /app/config/
COPY start.sh /app/start.sh
EXPOSE 8080
CMD ["/app/start.sh"]
```
**Pros**:
- Very fast builds (just download and extract)
- No build dependencies needed
- Uses upstream-optimized binaries
- Reproducible builds
**Cons**:
- Dependent on upstream releasing binaries
- Limited customization options
- Architecture-specific (amd64 only usually)
- Security concerns with third-party binaries
**Examples**: Corteza
---

157
Package-Templates/README.md Normal file
View File

@@ -0,0 +1,157 @@
# Cloudron Package Templates
This directory contains Cloudron packaging templates for common application types.
## Available Templates
### 1. Python Application Template
**File**: `python-app/Dockerfile.template`
**Use Case**: Simple Python web applications (Flask, Django, etc.)
**Dependencies**: System packages, pip requirements
### 2. Go Application Template
**File**: `go-app/Dockerfile.template`
**Use Case**: Go web applications
**Build Pattern**: Multi-stage (builder + runtime)
### 3. Node.js Application Template
**File**: `nodejs-app/Dockerfile.template`
**Use Case**: Node.js web applications
**Build Pattern**: Multi-stage (builder + runtime)
### 4. Django Application Template
**File**: `django-app/`
**Use Case**: Django web applications with PostgreSQL
**Includes**: Dockerfile, start.sh
### 5. Official Image Wrapper Template
**File**: `official-wrapper/Dockerfile.template`
**Use Case**: Applications with existing Docker images
**Build Pattern**: Simple wrapper with start script
### 6. README Template
**File**: `README.template.md`
**Use Case**: All applications
**Includes**: Standard documentation sections
## How to Use Templates
### 1. Copy Template
```bash
# Choose appropriate template
cp -r python-app /path/to/new-package
```
### 2. Customize
```bash
# Edit Dockerfile.template
# Edit CloudronManifest.json.template
# Customize for your application
```
### 3. Build
```bash
# Test build locally
docker build -t myapp:test .
```
## Template Structure
Each template includes:
- **Dockerfile.template**: Docker configuration
- **CloudronManifest.json.template**: Cloudron manifest
- **start.sh.template**: Startup script (if needed)
- **.env.example**: Environment configuration
- **README.template.md**: Documentation template
- **CHANGELOG.template.md**: Changelog template
## Customization Points
### Dockerfile
- Base image selection
- Dependency installation
- Build commands
- Runtime configuration
- Port exposure
- Health checks
### CloudronManifest.json
- Application ID (io.cloudron.appname)
- Title and description
- Ports configuration
- Addons selection
- Memory limits
- Health check paths
### Start Script
- Database wait logic
- Migration commands
- Configuration generation
- Application startup
## Common Patterns
### Database Integration
**PostgreSQL**:
```json
"addons": {
"postgresql": {
"version": "14"
}
}
```
**MySQL**:
```json
"addons": {
"mysql": {
"version": "8"
}
}
```
### Storage
**Localstorage**:
```json
"addons": {
"localstorage": true
}
```
### Memory Limits
- **Small apps**: 512MB
- **Medium apps**: 1024MB (1GB)
- **Large apps**: 2048MB (2GB)
- **Very large apps**: 4096MB (4GB)
## Best Practices
1. **Use official images** when available
2. **Multi-stage builds** for compiled applications
3. **Wait for dependencies** (database, services)
4. **Health checks** on all services
5. **Environment variable defaults**: `${VAR:-default}`
6. **Make scripts executable** on host, not in Docker RUN
7. **Use .dockerignore** to reduce build context
8. **Document all settings** in .env.example
9. **Test builds locally** before committing
10. **Follow Cloudron conventions** for consistency
## Documentation Reference
For more details on Cloudron packaging patterns:
- See `../JOURNAL.md` for detailed analysis of completed packages
- See `../AGENTS.md` for established patterns and learnings
- See [Cloudron Documentation](https://docs.cloudron.io/packaging/)
- See [Cloudron Repository](https://git.cloudron.io/cloudron/cloudron-apps)
## Support
For questions about templates:
- Refer to `../JOURNAL.md` for detailed examples
- Use patterns from `../AGENTS.md`
- Check completed packages for reference
---
*Templates are based on packages created for TSYSDevStack-SupportStack-Cloudron project.*

View File

@@ -0,0 +1,142 @@
# <APP_NAME> Cloudron Package
## Description
<Brief description of application and its purpose>
## Features
### Core Capabilities
- **Feature 1**: Description
- **Feature 2**: Description
- **Feature 3**: Description
### Application Features
- **Feature A**: Description with details
- **Feature B**: Description with details
- **Feature C**: Description with details
## Configuration
### Environment Variables
#### Application Configuration
- `CONFIG_VAR_1`: Description (default: value1)
- `CONFIG_VAR_2`: Description (default: value2)
### Ports
- **8080**: Main HTTP port (description)
### Addons
- **PostgreSQL**: Required for database storage
- **Localstorage**: Used for file storage
- **Redis**: Optional caching
## Usage
### 1. Initial Setup
1. Open <APP_NAME>
2. Create admin account (if applicable)
3. Configure system settings
4. Verify application is running
### 2. Basic Usage
**Step 1**: Do something
1. Navigate to section
2. Click button
3. Configure settings
4. Save
**Step 2**: Do something else
1. Use feature
2. Configure options
3. Test functionality
### 3. Configuration
```bash
# Example configuration
CONFIG_VAR_1=value1
CONFIG_VAR_2=value2
```
### 4. API Usage (if applicable)
```bash
# Example API call
curl -X POST http://localhost:8080/api/endpoint \
-H "Content-Type: application/json" \
-d '{"key": "value"}'
```
## Architecture
```
┌─────────────┐
│ Client │
│ (Browser) │
└──────┬──────┘
HTTP Request
┌──────────────┐
│ <APP_NAME> │
│ (<TYPE>) │
│ Application │
└──────┬──────┘
┌────────────┼────────────┐
│ │ │
▼ ▼ ▼
┌──────────┐ ┌──────────┐ ┌──────────┐
│ Database │ │ Storage │ │ Cache │
│ (PostgreSQL│ │ (Local │ │ (Redis) │
│ │ │ storage) │ │ │
└──────────┘ └──────────┘ └──────────┘
```
## Security
### Authentication
- User management
- Role-based access control (if applicable)
- Session management
- API token authentication (if applicable)
### Data Protection
- <Security feature 1>
- <Security feature 2>
- <Security feature 3>
## Troubleshooting
### Issue 1
**Problem**: Description
**Solution**: Steps to resolve
**Check**: Verify by doing X
### Issue 2
**Problem**: Description
**Solution**: Steps to resolve
**Check**: Verify by doing Y
## Documentation
For more information:
- [Official Website](https://example.com)
- [GitHub Repository](https://github.com/example/app)
- [Documentation](https://docs.example.com)
## Support
For issues and questions:
- [GitHub Issues](https://github.com/example/app/issues)
- [Discord Server](https://discord.gg/example)
- [Forum](https://forum.example.com)
## Upstream
[GitHub Repository](https://github.com/example/app)
[Official Website](https://example.com)

View File

@@ -0,0 +1,41 @@
# Django Application Cloudron Package
FROM python:3-slim
# Install system dependencies
RUN apt-get update && apt-get install -y --no-install-recommends \
curl \
gosu \
libpq-dev \
gcc \
postgresql-client \
&& rm -rf /var/lib/apt/lists/*
# Set working directory
WORKDIR /app
# Copy requirements
COPY requirements.txt .
# Install Python dependencies
RUN pip install --no-cache-dir -r requirements.txt
# Copy application code
COPY . .
# Copy start script (make it executable on host first!)
COPY start.sh /app/start.sh
RUN chmod +x /app/start.sh
# Set environment
ENV PYTHONUNBUFFERED=1
# Expose port
EXPOSE 8080
# Health check
HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \
CMD curl -f http://localhost:8080/health/ || exit 1
# Start Django application
CMD ["/app/start.sh"]

View File

@@ -0,0 +1,50 @@
# Django Application Start Script Template
#!/bin/bash
set -e
# Cloudron PostgreSQL connection
DB_NAME=${CLOUDRON_POSTGRESQL_DATABASE:-app}
DB_USER=${CLOUDRON_POSTGRESQL_USERNAME:-app}
DB_PASSWORD=${CLOUDRON_POSTGRESQL_PASSWORD}
DB_HOST=${CLOUDRON_POSTGRESQL_HOST:-127.0.0.1}
DB_PORT=${CLOUDRON_POSTGRESQL_PORT:-5432}
echo "Database host: $DB_HOST"
echo "Database port: $DB_PORT"
echo "Database name: $DB_NAME"
# Django configuration
export DJANGO_SETTINGS_MODULE=${DJANGO_SETTINGS_MODULE:-config.production}
export SECRET_KEY=${SECRET_KEY:-cloudron-secret-key-change-in-production}
export ALLOWED_HOSTS=${ALLOWED_HOSTS:-'*'}
export DATABASE_URL=postgres://${DB_USER}:${DB_PASSWORD}@${DB_HOST}:${DB_PORT}/${DB_NAME}
# Wait for PostgreSQL to be ready
echo "Waiting for PostgreSQL to be ready..."
until PGPASSWORD=$DB_PASSWORD psql -h "$DB_HOST" -p "$DB_PORT" -U "$DB_USER" -d "$DB_NAME" -c '\q' 2>/dev/null; do
echo "PostgreSQL is unavailable - sleeping"
sleep 2
done
echo "PostgreSQL is ready!"
# Run Django migrations
echo "Running Django migrations..."
python manage.py migrate --noinput
# Collect static files
echo "Collecting static files..."
python manage.py collectstatic --noinput
# Create admin user if specified
if [ -n "$ADMIN_USERNAME" ] && [ -n "$ADMIN_PASSWORD" ] && [ -n "$ADMIN_EMAIL" ]; then
echo "Creating admin user..."
echo "from django.contrib.auth import get_user_model; from django.core.management import call_command; User = get_user_model(); User.objects.create_superuser('$ADMIN_USERNAME', '$ADMIN_EMAIL', '$ADMIN_PASSWORD') if not User.objects.filter(email='$ADMIN_EMAIL').exists() else None" | \
python manage.py shell 2>/dev/null || echo "Admin user may already exist"
fi
# Start Django application
echo "Starting Django application..."
exec gunicorn config.wsgi:application --bind 0.0.0.0:8080 --workers ${NUM_WORKERS:-4}

View File

@@ -0,0 +1,25 @@
# Cloudron Official Image Wrapper Dockerfile Template
# This template is for applications with existing official Docker images
# It wraps the official image with Cloudron-specific start scripts
FROM official/app:VERSION
# Install any Cloudron-specific dependencies (if needed)
# RUN apt-get update && apt-get install -y curl && rm -rf /var/lib/apt/lists/*
# Copy start script (make it executable on host first!)
COPY start.sh /app/start.sh
# Set working directory
WORKDIR /app
# Expose ports
EXPOSE 8080
# Health check
HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \
CMD curl -f http://localhost:8080/health || exit 1
# Start application
CMD ["/app/start.sh"]

View File

@@ -0,0 +1,31 @@
{
"version": 1,
"manifestVersion": 2,
"type": "app",
"id": "io.cloudron.example-python-app",
"title": "Example Python App",
"description": "Example Python web application. Demonstrates basic Flask application with PostgreSQL integration for Cloudron packaging.",
"author": "TSYS Cloudron Project",
"website": "https://cloudron.io",
"contactEmail": "cloudron@tsys.dev",
"tagline": "Example Python web application",
"version": "1.0.0",
"healthCheckPath": "/",
"httpPort": 5000,
"memoryLimit": 512,
"addons": {
"localstorage": true,
"postgresql": {
"version": "14"
}
},
"tcpPorts": {
"HTTP_PORT": {
"description": "Flask HTTP port",
"defaultValue": 5000
}
},
"mediaLinks": [],
"changelog": "Initial example Cloudron package",
"icon": "file://logo.png"
}

View File

@@ -0,0 +1,36 @@
FROM python:3-slim
# Install system dependencies
RUN apt-get update && apt-get install -y --no-install-recommends \
libpq-dev \
gcc \
postgresql-client \
&& rm -rf /var/lib/apt/lists/*
# Set working directory
WORKDIR /app
# Copy requirements
COPY requirements.txt .
# Install Python dependencies
RUN pip install --no-cache-dir -r requirements.txt
# Copy application code
COPY . .
# Create data directory
RUN mkdir -p /app/data
# Set environment
ENV PYTHONUNBUFFERED=1
# Expose port
EXPOSE 5000
# Health check
HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \
CMD curl -f http://localhost:5000/ || exit 1
# Start Flask application
CMD ["python", "app.py"]

View File

@@ -0,0 +1,59 @@
#!/bin/bash
set -e
# Cloudron PostgreSQL connection
DB_NAME=${CLOUDRON_POSTGRESQL_DATABASE:-app}
DB_USER=${CLOUDRON_POSTGRESQL_USERNAME:-app}
DB_PASSWORD=${CLOUDRON_POSTGRESQL_PASSWORD}
DB_HOST=${CLOUDRON_POSTGRESQL_HOST:-127.0.0.1}
DB_PORT=${CLOUDRON_POSTGRESQL_PORT:-5432}
echo "Database host: $DB_HOST"
echo "Database port: $DB_PORT"
echo "Database name: $DB_NAME"
# Django configuration
export DJANGO_SETTINGS_MODULE=${DJANGO_SETTINGS_MODULE:-config.production}
export SECRET_KEY=${SECRET_KEY:-cloudron-secret-key-change-in-production}
export ALLOWED_HOSTS=${ALLOWED_HOSTS:-'*'}
# Database URL (for non-Django apps)
export DATABASE_URL=postgres://${DB_USER}:${DB_PASSWORD}@${DB_HOST}:${DB_PORT}/${DB_NAME}
# Wait for PostgreSQL to be ready
echo "Waiting for PostgreSQL to be ready..."
until PGPASSWORD=$DB_PASSWORD psql -h "$DB_HOST" -p "$DB_PORT" -U "$DB_USER" -d "$DB_NAME" -c '\q' 2>/dev/null; do
echo "PostgreSQL is unavailable - sleeping"
sleep 2
done
echo "PostgreSQL is ready!"
# Run Django migrations (if Django)
if [ -f "manage.py" ]; then
echo "Running Django migrations..."
python manage.py migrate --noinput
echo "Collecting static files..."
python manage.py collectstatic --noinput
# Create admin user if specified
if [ -n "$ADMIN_USERNAME" ] && [ -n "$ADMIN_PASSWORD" ] && [ -n "$ADMIN_EMAIL" ]; then
echo "Creating admin user..."
echo "from django.contrib.auth import get_user_model; from django.core.management import call_command; User = get_user_model(); User.objects.create_superuser('$ADMIN_USERNAME', '$ADMIN_EMAIL', '$ADMIN_PASSWORD') if not User.objects.filter(email='$ADMIN_EMAIL').exists() else None" | \
python manage.py shell 2>/dev/null || echo "Admin user may already exist"
fi
fi
# Start application (modify as needed)
if [ -f "wsgi.py" ] || [ -f "config/wsgi.py" ]; then
echo "Starting Django with gunicorn..."
exec gunicorn config.wsgi:application --bind 0.0.0.0:5000 --workers ${NUM_WORKERS:-4}
elif [ -f "app.py" ]; then
echo "Starting Flask application..."
exec python app.py
else
echo "No entrypoint found, trying default..."
exec "$@"
fi

View File

@@ -0,0 +1,21 @@
# Changelog
## [3.12.0] - 2025-01-24
### Added
- Initial Cloudron package for APISIX
- Official Apache APISIX Docker image wrapper
- Automatic etcd configuration via Cloudron addon
- Admin API key configuration
- Health check endpoint
- Documentation with usage examples
- Architecture diagram
### Features
- Multi-protocol support (HTTP/HTTPS, TCP/UDP, Dubbo, MQTT, gRPC, WebSocket)
- Dynamic configuration without restarts
- Load balancing with multiple strategies
- Rich plugin ecosystem (100+ plugins)
- Security features (IP restrictions, JWT, API Key auth)
- Traffic management (rate limiting, circuit breaking, canary releases)
- AI Gateway capabilities for LLM proxying

View File

@@ -0,0 +1,41 @@
{
"version": 1,
"manifestVersion": 2,
"type": "app",
"id": "io.cloudron.apisix",
"title": "APISIX",
"description": "Apache APISIX is a dynamic, real-time, high-performance API Gateway. Provides rich traffic management features like load balancing, dynamic upstream, canary release, circuit breaking, authentication, observability and more.",
"author": "Apache APISIX",
"website": "https://apisix.apache.org",
"contactEmail": "cloudron@tsys.dev",
"tagline": "Cloud-native, high-performance API gateway",
"version": "3.12-latest",
"healthCheckPath": "/apisix/admin/routes",
"httpPort": 9180,
"memoryLimit": 1024,
"addons": {
"localstorage": true,
"etcd": {
"version": "3.4"
}
},
"tcpPorts": {
"ADMIN_PORT": {
"description": "APISIX Admin API port",
"defaultValue": 9180
},
"HTTP_PORT": {
"description": "APISIX HTTP proxy port",
"defaultValue": 9080
},
"HTTPS_PORT": {
"description": "APISIX HTTPS proxy port",
"defaultValue": 9443
}
},
"mediaLinks": [
"https://raw.githubusercontent.com/apache/apisix/master/logos/apache-apisix.png"
],
"changelog": "Initial Cloudron package for APISIX API Gateway",
"icon": "file://logo.png"
}

View File

@@ -0,0 +1,7 @@
FROM apache/apisix:latest
# Copy start script (already executable from host)
COPY start.sh /start.sh
# Start APISIX
CMD ["/start.sh"]

View File

@@ -0,0 +1,188 @@
# APISIX Cloudron Package
## Description
Apache APISIX is a dynamic, real-time, high-performance API Gateway. It provides rich traffic management features such as load balancing, dynamic upstream, canary release, circuit breaking, authentication, observability and more.
## Features
### Core Capabilities
- **Dynamic Configuration**: Hot updates and hot plugins without restarts
- **Multi-Protocol Support**: HTTP/HTTPS, TCP/UDP, Dubbo, MQTT, gRPC, WebSocket
- **Load Balancing**: Multiple load balancing strategies
- **Security**: IP restrictions, JWT authentication, API Key authentication
- **Traffic Management**: Rate limiting, circuit breaking, canary releases
- **Observability**: Prometheus metrics, distributed tracing
- **AI Gateway**: Support for LLM proxying and AI workloads
### Gateway Features
- Proxy Rewrite (host, URI, schema, method, headers)
- Upstream Health Checks
- Request/Response Transformation
- CORS Support
- Web Application Firewall (WAF) via plugins
- OpenID Connect integration
## Configuration
### Etcd Connection
APISIX requires an etcd instance for configuration storage. The Cloudron package automatically configures this connection using Cloudron's etcd addon.
### Environment Variables
- `CLOUDRON_ETCD_HOST`: Etcd host (automatically set by Cloudron)
- `CLOUDRON_ETCD_PORT`: Etcd port (automatically set by Cloudron)
- `ADMIN_KEY`: Admin API key (default: admin-key-secret-change-me, **change this in production**)
### Ports
- **9180**: Admin API port (for configuration via REST API)
- **9080**: HTTP proxy port (client requests)
- **9443**: HTTPS proxy port (client requests with SSL)
## Usage
### 1. Configure Routes via Admin API
APISIX provides a RESTful Admin API for configuration:
```bash
# List all routes
curl http://localhost:9180/apisix/admin/routes/ \
-H 'X-API-KEY: admin-key-secret-change-me'
# Create a new route
curl http://localhost:9180/apisix/admin/routes/1 \
-H 'X-API-KEY: admin-key-secret-change-me' \
-X PUT -d '{
"uri": "/hello",
"upstream": {
"type": "roundrobin",
"nodes": {
"httpbin.org:80": 1
}
}
}'
```
### 2. Test the Gateway
```bash
# Test via HTTP
curl http://localhost:9080/hello
# Test via HTTPS (after configuring SSL)
curl -k https://localhost:9443/hello
```
### 3. Add SSL Certificates
```bash
curl http://localhost:9180/apisix/admin/ssls/1 \
-H 'X-API-KEY: admin-key-secret-change-me' \
-X PUT -d '{
"cert": "...",
"key": "...",
"snis": ["example.com"]
}'
```
### 4. Configure Plugins
APISIX supports 100+ plugins for various capabilities:
```bash
# Enable rate limiting
curl http://localhost:9180/apisix/admin/routes/1 \
-H 'X-API-KEY: admin-key-secret-change-me' \
-X PATCH -d '{
"plugins": {
"limit-count": {
"count": 10,
"time_window": 60,
"rejected_code": 429
}
}
}'
```
## Security
### Change Default Admin Key
The default admin key is `admin-key-secret-change-me`. **Change this immediately after installation**:
```bash
# Get current admin key from Cloudron environment
# Update in /usr/local/apisix/conf/config.yaml
# Restart APISIX
```
### Use HTTPS in Production
Always use HTTPS (port 9443) for production deployments. Configure SSL certificates via the Admin API.
### IP Restrictions
Configure IP restrictions to limit who can access the Admin API:
```bash
curl http://localhost:9180/apisix/admin/routes/1 \
-H 'X-API-KEY: admin-key-secret-change-me' \
-X PATCH -d '{
"plugins": {
"ip-restriction": {
"whitelist": ["192.168.1.0/24"]
}
}
}'
```
## Architecture
```
┌─────────────┐
│ Client │
└──────┬──────┘
┌──────────────┐
│ APISIX │
│ (Gateway) │
└──────┬──────┘
┌──────────────┐
│ Upstream │
│ Services │
└──────────────┘
┌──────────────┐
│ Etcd │
│ (Config DB) │
└──────────────┘
```
## Documentation
For more information on configuring APISIX:
- [Official Documentation](https://apisix.apache.org/docs/)
- [Admin API Reference](https://apisix.apache.org/docs/apisix/admin-api/)
- [Plugin Configuration](https://apisix.apache.org/docs/apisix/plugins/)
- [Best Practices](https://apisix.apache.org/docs/general/faq)
- [AI Gateway Guide](https://apisix.apache.org/ai-gateway/)
## Troubleshooting
### APISIX won't start
1. Check etcd connectivity: `curl http://localhost:2379/health`
2. Review logs in `/usr/local/apisix/logs/error.log`
3. Verify configuration syntax in `/usr/local/apisix/conf/config.yaml`
### Routes not working
1. Check Admin API key is correct
2. Verify upstream servers are accessible
3. Check firewall rules allow traffic to ports 9080/9443
4. Review route configuration via Admin API
### Performance issues
1. Increase worker processes in nginx_config
2. Enable HTTP/2 for better performance
3. Consider horizontal scaling (multiple APISIX instances)
## Upstream
[GitHub Repository](https://github.com/apache/apisix)
[Apache Project Page](https://apisix.apache.org/)
[Official Docker Images](https://hub.docker.com/r/apache/apisix)

View File

@@ -0,0 +1,95 @@
# APISIX Configuration Sample
# This file is automatically generated by Cloudron package
# Located at: /usr/local/apisix/conf/config.yaml
deployment:
role: traditional
role_traditional:
config_provider: etcd
admin:
# Admin API port
port: 9180
# Allow admin access from all IPs
# Restrict this in production to specific IPs
allow_admin:
- 0.0.0.0/0
# Admin API key (CHANGE THIS IN PRODUCTION)
admin_key:
- admin-key-secret-change-me
# Admin API version
admin_api_version: v3
etcd:
# Etcd hosts (automatically configured by Cloudron)
host:
- 127.0.0.1
port: 2379
prefix: "/apisix"
timeout: 30
apisix:
# SSL configuration
ssl:
ssl_trusted_certificate: /etc/ssl/certs/ca-certificates.crt
ssl_protocols: "TLSv1.2 TLSv1.3"
# Main HTTP proxy port
node_listen: 9080
# Disable IPv6
enable_ipv6: false
# Enable CORS for admin API
enable_admin_cors: true
# Enable HTTP/2
enable_http2: true
# Nginx configuration
nginx_config:
# Error log file
error_log: "logs/error.log"
error_log_level: "warn"
# Worker processes
worker_processes: auto
# Maximum open files
worker_rlimit_nofile: 20480
# Event worker processes
event_worker_processes: 2
# Worker shutdown timeout
worker_shutdown_timeout: 240s
# Additional configuration options:
#
# Plugin configuration (default plugins enabled)
# plugins:
# - real-ip
# - proxy-rewrite
# - limit-req
# - limit-conn
# - prometheus
# - node-status
# - jwt-auth
# - key-auth
# - basic-auth
# - ip-restriction
# - cors
# - proxy-cache
# - limit-count
# - request-id
# - fault-injection
# - consumer
#
# Stream plugins (for TCP/UDP):
# stream_plugins:
# - mqtt-proxy
# - ip-restriction
# - limit-conn

Binary file not shown.

After

Width:  |  Height:  |  Size: 560 KiB

View File

@@ -0,0 +1,69 @@
#!/bin/bash
set -e
# Cloudron etcd connection
ETCD_HOST=${CLOUDRON_ETCD_HOST:-127.0.0.1}
ETCD_PORT=${CLOUDRON_ETCD_PORT:-2379}
echo "Etcd host: $ETCD_HOST"
echo "Etcd port: $ETCD_PORT"
# Wait for etcd to be ready
echo "Waiting for etcd to be ready..."
MAX_WAIT=30
WAIT_TIME=0
while ! curl -f "http://${ETCD_HOST}:${ETCD_PORT}/health" 2>/dev/null; do
if [ $WAIT_TIME -ge $MAX_WAIT ]; then
echo "Timeout waiting for etcd"
exit 1
fi
echo "Etcd is unavailable - sleeping ($WAIT_TIME/$MAX_WAIT)"
sleep 2
WAIT_TIME=$((WAIT_TIME+2))
done
echo "Etcd is ready!"
# Create APISIX configuration file
cat > /usr/local/apisix/conf/config.yaml << 'EOF'
deployment:
role: traditional
role_traditional:
config_provider: etcd
admin:
port: 9180
allow_admin:
- 0.0.0.0/0
admin_key:
- ${ADMIN_KEY:-admin-key-secret-change-me}
admin_api_version: v3
etcd:
host:
- ${ETCD_HOST}
port: ${ETCD_PORT}
prefix: "/apisix"
timeout: 30
apisix:
ssl:
ssl_trusted_certificate: /etc/ssl/certs/ca-certificates.crt
ssl_protocols: "TLSv1.2 TLSv1.3"
node_listen: 9080
enable_ipv6: false
enable_admin_cors: true
enable_http2: true
nginx_config:
error_log: "logs/error.log"
error_log_level: "warn"
worker_processes: auto
worker_rlimit_nofile: 20480
event_worker_processes: 2
worker_shutdown_timeout: 240s
EOF
echo "APISIX configuration created at /usr/local/apisix/conf/config.yaml"
cat /usr/local/apisix/conf/config.yaml
# Start APISIX
echo "Starting APISIX..."
exec /usr/bin/apisix start

View File

@@ -0,0 +1,9 @@
# Changelog
## [2.8.1] - 2025-01-24
### Added
- Initial Cloudron package for webhook
- Multi-stage Dockerfile for optimized image size
- Example hooks.json configuration file
- Documentation and usage instructions

View File

@@ -0,0 +1,30 @@
{
"version": 1,
"manifestVersion": 2,
"type": "app",
"id": "io.cloudron.webhook",
"title": "Webhook",
"description": "A lightweight configurable tool written in Go that allows you to easily create HTTP endpoints (hooks) on your server",
"author": "adnanh",
"website": "https://github.com/adnanh/webhook",
"contactEmail": "cloudron@tsys.dev",
"tagline": "Lightweight webhook receiver for automation",
"version": "2.8.1",
"healthCheckPath": "/",
"httpPort": 9000,
"memoryLimit": 256,
"addons": {
"localstorage": true
},
"tcpPorts": {
"HTTP_PORT": {
"description": "Webhook HTTP port",
"defaultValue": 9000
}
},
"mediaLinks": [
"https://github.com/adnanh/webhook/raw/development/docs/logo/logo-256x256.png"
],
"changelog": "Initial Cloudron package for webhook",
"icon": "file://logo.png"
}

View File

@@ -0,0 +1,40 @@
FROM golang:1.21-alpine AS builder
# Install build dependencies
RUN apk add --no-cache git make
# Set working directory
WORKDIR /app
# Copy go mod files
COPY repo/go.mod repo/go.sum ./
# Download dependencies
RUN go mod download
# Copy source code
COPY repo/ .
# Build application
RUN CGO_ENABLED=0 GOOS=linux go build -ldflags="-w -s" -o webhook
# Final stage
FROM cloudron/base:3.2.0
# Copy binary from builder
COPY --from=builder /app/webhook /usr/local/bin/webhook
# Create data directory
RUN mkdir -p /app/data
# Set permissions
RUN chmod +x /usr/local/bin/webhook
# Set working directory
WORKDIR /app
# Expose port
EXPOSE 9000
# Start application
CMD ["/usr/local/bin/webhook", "-hooks", "/app/data/hooks.json", "-verbose"]

View File

@@ -0,0 +1,75 @@
# Webhook Cloudron Package
## Description
Webhook is a lightweight configurable tool written in Go that allows you to easily create HTTP endpoints (hooks) on your server, which you can use to execute configured commands.
## Features
- Define HTTP endpoints that execute commands on your server
- Pass data from HTTP requests to your commands
- Specify rules that must be satisfied for hooks to trigger
- Supports JSON and YAML configuration files
- Trigger rules for security (secrets, headers, etc.)
- Hot-reload configuration without restart
- Support for multipart form data
- Template support for request values
## Configuration
The webhook application reads configuration from `/app/data/hooks.json` (or `/app/data/hooks.yaml`).
### Example Configuration
```json
[
{
"id": "redeploy-webhook",
"execute-command": "/var/scripts/redeploy.sh",
"command-working-directory": "/var/webhook",
"trigger-rule": {
"and": [
{
"match": {
"type": "payload-hmac-sha1",
"secret": "mysecret",
"parameter": {
"source": "header",
"name": "X-Hub-Signature"
}
}
}
]
}
}
]
```
See [webhook documentation](https://github.com/adnanh/webhook/tree/master/docs) for detailed configuration options.
## Usage
1. Install the webhook app on Cloudron
2. Navigate to the File Manager
3. Create or edit `hooks.json` in the `/app/data` directory
4. Restart the app to apply configuration changes
5. Access your webhook endpoints at `http://your-app.cloudron.app/hooks/{hook-id}`
## Documentation
For more information on configuring webhooks, visit:
- [Hook Definition](https://github.com/adnanh/webhook/blob/master/docs/Hook-Definition.md)
- [Hook Examples](https://github.com/adnanh/webhook/blob/master/docs/Hook-Examples.md)
- [Hook Rules](https://github.com/adnanh/webhook/blob/master/docs/Hook-Rules.md)
- [Webhook Parameters](https://github.com/adnanh/webhook/blob/master/docs/Webhook-Parameters.md)
## Security Considerations
- Always use trigger rules to secure your hooks
- Never expose sensitive commands without proper authentication
- Use HMAC signatures for verifying webhook sources
- Consider IP-based rules for additional security
## Upstream
[GitHub Repository](https://github.com/adnanh/webhook)

View File

@@ -0,0 +1,60 @@
[
{
"id": "webhook",
"execute-command": "/home/adnan/redeploy-go-webhook.sh",
"command-working-directory": "/home/adnan/go",
"response-message": "I got the payload!",
"response-headers":
[
{
"name": "Access-Control-Allow-Origin",
"value": "*"
}
],
"pass-arguments-to-command":
[
{
"source": "payload",
"name": "head_commit.id"
},
{
"source": "payload",
"name": "pusher.name"
},
{
"source": "payload",
"name": "pusher.email"
}
],
"trigger-rule":
{
"and":
[
{
"match":
{
"type": "payload-hmac-sha1",
"secret": "mysecret",
"parameter":
{
"source": "header",
"name": "X-Hub-Signature"
}
}
},
{
"match":
{
"type": "value",
"value": "refs/heads/master",
"parameter":
{
"source": "payload",
"name": "ref"
}
}
}
]
}
}
]

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

View File

@@ -0,0 +1,9 @@
# Cloudron package .dockerignore
# Only ignore .git directory
.git
.gitignore
README.md
CHANGELOG.md
.env.example
Dockerfile

View File

@@ -0,0 +1,16 @@
# Puter Cloudron Environment Configuration Example
# Copy this to .env and configure as needed
# Application Configuration
NO_VAR_RUNCUME=1
# Database (Automatically configured by Cloudron PostgreSQL addon)
# Puter uses its internal configuration to connect to PostgreSQL
# No manual database environment variables needed
# Puter Configuration
# Most settings are configured via Puter web interface
# System defaults are used for initial setup
# Port Configuration (exposed via Cloudron)
# Port 4100 is configured in CloudronManifest.json

View File

@@ -0,0 +1,29 @@
# Changelog
## [1.2.46-beta] - 2025-01-24
### Added
- Initial Cloudron package for Puter
- Node.js 23.9-alpine based image
- Multi-stage Dockerfile (build + production)
- PostgreSQL addon for database storage
- Localstorage addon for file storage
- Health check endpoint
- Comprehensive documentation with usage examples
- File management, app installation, and code editing examples
### Features
- Internet OS in the browser (full desktop experience)
- Personal cloud storage (privacy-first, self-hosted)
- Web app builder and publisher
- App Store with growing ecosystem
- Built-in file manager with drag-and-drop
- Code editor with syntax highlighting
- Terminal with bash shell
- Multi-user support with permissions
- Games platform
- Remote desktop environment
- Alternative to Dropbox, Google Drive, OneDrive
- Window management, taskbar, start menu
- Keyboard shortcuts and efficiency features
- Themes and customizable interface

View File

@@ -0,0 +1,33 @@
{
"version": 1,
"manifestVersion": 2,
"type": "app",
"id": "io.cloudron.puter",
"title": "Puter",
"description": "The Internet OS! An advanced, open-source internet operating system. Keep files, apps, and games in one place. Build and publish websites and web apps. Privacy-first personal cloud.",
"author": "HeyPuter",
"website": "https://puter.com",
"contactEmail": "cloudron@tsys.dev",
"tagline": "The Internet OS - Personal Cloud Computer",
"version": "1.2.46-beta",
"healthCheckPath": "/test",
"httpPort": 4100,
"memoryLimit": 2048,
"addons": {
"localstorage": true,
"postgresql": {
"version": "14"
}
},
"tcpPorts": {
"HTTP_PORT": {
"description": "Puter HTTP port",
"defaultValue": 4100
}
},
"mediaLinks": [
"https://assets.puter.site/puter-logo.png"
],
"changelog": "Initial Cloudron package for Puter",
"icon": "file://logo.png"
}

View File

@@ -0,0 +1,53 @@
# Build stage
FROM node:23.9-alpine AS build
# Install build dependencies
RUN apk add --no-cache git python3 make g++
# Set working directory
WORKDIR /app
# Copy package files
COPY repo/package*.json ./
# Copy source code
COPY repo/ .
# Verify files are copied
RUN ls -la
# Install node modules (skip optional to reduce size)
RUN npm install --production=false --no-optional
# Build GUI
RUN cd src/gui && npm run build && cd -
# Production stage
FROM node:23.9-alpine
# Install runtime dependencies
RUN apk add --no-cache git
# Create app directories
RUN mkdir -p /opt/puter/app
# Set working directory
WORKDIR /opt/puter/app
# Copy built artifacts from build stage
COPY --from=build /app/src/gui/dist ./dist
COPY --from=build /app/package*.json ./
COPY --from=build /app/src ./src
# Expose port
EXPOSE 4100
# Health check
HEALTHCHECK --interval=30s --timeout=3s --start-period=10s --retries=3 \
CMD wget --no-verbose --tries=1 --spider http://localhost:4100/test || exit 1
# Environment
ENV NO_VAR_RUNCUME=1
# Start Puter
CMD ["npm", "start"]

View File

@@ -0,0 +1,340 @@
# Puter Cloudron Package
## Description
Puter is "The Internet OS" - an advanced, open-source internet operating system designed to be feature-rich, exceptionally fast, and highly extensible. Use it as a privacy-first personal cloud to keep all your files, apps, and games in one secure place accessible from anywhere.
## Features
### Core Capabilities
- **Personal Cloud Storage**: Keep all files, apps, and games in one secure place
- **Web App Builder**: Platform for building and publishing websites and web apps
- **Remote Desktop Environment**: Access your desktop environment from anywhere
- **Privacy-First**: Open-source, self-hostable alternative to Dropbox, Google Drive, OneDrive
- **App Store**: Discover and install apps from a growing ecosystem
- **File Manager**: Intuitive file management with drag-and-drop
- **Code Editor**: Built-in code editor for development
- **Terminal**: Web-based terminal for system commands
- **App Development**: Build and publish your own web apps and games
- **Games Platform**: Play browser-based games directly in Puter
### Puter Features
- **Internet OS**: Full operating system experience in the browser
- **File System**: Hierarchical file system with folders and files
- **User Accounts**: Multi-user support with permissions
- **App Integration**: Run multiple apps simultaneously
- **Desktop Interface**: Familiar desktop-like UI
- **Taskbar**: Access running apps and system tools
- **Start Menu**: Quick access to apps and settings
- **Settings Panel**: Configure user preferences and system settings
- **Search**: Fast search across files, apps, and settings
- **Themes**: Customizable appearance with themes
- **Keyboard Shortcuts**: Efficient navigation with shortcuts
- **Drag-and-Drop**: Intuitive file and app management
- **Right-Click Menus**: Context-sensitive menus
- **Window Management**: Multiple windows with minimize/maximize/close
- **Auto-Save**: Automatic save for documents and files
- **Offline Mode**: Basic functionality without internet
- **Mobile Support**: Optimized for mobile browsers
## Configuration
### Environment Variables
#### Application Configuration
- `NO_VAR_RUNCUME`: Assume no variable issues (default: 1)
- Database configuration is auto-managed by Puter
### Ports
- **4100**: Main HTTP port (web interface and API)
### Addons
- **PostgreSQL**: Required for database storage
- **Localstorage**: Used for file storage, app data, and user files
## Usage
### 1. First Time Setup
1. Open Puter
2. Create admin account:
- Username
- Email
- Password
3. Configure system settings:
- Timezone
- Language
- Theme
4. Explore the desktop interface
### 2. File Management
**Upload Files:**
1. Open File Manager app
2. Click "Upload" button
3. Select files from your device
4. Files are uploaded to your personal cloud
**Create Folders:**
1. Navigate to desired location
2. Right-click → "New Folder"
3. Enter folder name
4. Organize files in folders
**Manage Files:**
- Copy/Cut/Paste files
- Rename files
- Delete files
- Move files between folders
- Share files with other users
### 3. Install Apps
**From App Store:**
1. Open App Store
2. Browse available apps
3. Click "Install" on desired app
4. App appears in Start menu
**Install Custom App:**
1. Prepare app code (HTML/CSS/JS)
2. Create folder in File Manager
3. Upload app files
4. Open app by clicking on index.html
5. Pin app to desktop for quick access
### 4. Code Editor
**Create New File:**
1. Open Code Editor app
2. Click "New File"
3. Select language type
4. Start coding
**Edit Existing File:**
1. Navigate to file in File Manager
2. Right-click → "Open with Code Editor"
3. Edit file with syntax highlighting
4. Auto-save keeps changes safe
**Code Features:**
- Syntax highlighting for 100+ languages
- Line numbers
- Code folding
- Find and replace
- Multiple tabs
- Auto-indentation
- Keyboard shortcuts
### 5. Terminal
**Open Terminal:**
1. Click terminal icon in taskbar
2. Enter commands
3. Access system tools and utilities
**Terminal Features:**
- Bash shell
- Command history
- Tab completion
- Copy/paste
- Multiple terminals
### 6. Build Web Apps
**Simple HTML App:**
```html
<!DOCTYPE html>
<html>
<head>
<title>My App</title>
<style>
body {
font-family: Arial, sans-serif;
padding: 20px;
}
</style>
</head>
<body>
<h1>Hello World!</h1>
<p>This is my first app on Puter.</p>
</body>
</html>
```
**Interactive App with JavaScript:**
```javascript
// Handle user input
document.getElementById('myButton').addEventListener('click', function() {
const input = document.getElementById('myInput').value;
alert('You entered: ' + input);
});
// Display current time
function updateTime() {
const now = new Date();
document.getElementById('time').textContent = now.toLocaleTimeString();
}
setInterval(updateTime, 1000);
```
**Save and Run:**
1. Save files to File Manager
2. Open index.html
3. App runs in Puter
4. Add to desktop for quick access
### 7. User Management
**Create User:**
1. Open Settings → Users
2. Click "Add User"
3. Configure:
- Username
- Email
- Password
- Role (Admin, User)
4. Click "Create"
**Manage Permissions:**
- Control file access
- Control app access
- Configure sharing permissions
### 8. System Settings
**General Settings:**
- Timezone
- Language
- Theme (Light/Dark)
- Desktop background
- Font size
**Storage Settings:**
- Check storage usage
- Clean up temporary files
- Manage storage quotas
**Security Settings:**
- Change password
- Configure two-factor authentication
- Review login history
### 9. Keyboard Shortcuts
**Global Shortcuts:**
- `Ctrl + E`: Open File Manager
- `Ctrl + T`: Open Terminal
- `Ctrl + C`: Open Code Editor
- `Alt + Tab`: Switch between apps
- `Win + D`: Show desktop
- `Ctrl + Alt + Delete`: Task Manager
**File Manager:**
- `Ctrl + N`: New file
- `Ctrl + Shift + N`: New folder
- `Delete`: Delete selected file
- `F2`: Rename selected file
- `Ctrl + C`: Copy
- `Ctrl + V`: Paste
- `Ctrl + X`: Cut
**Code Editor:**
- `Ctrl + S`: Save
- `Ctrl + Z`: Undo
- `Ctrl + Y`: Redo
- `Ctrl + F`: Find
- `Ctrl + H`: Replace
- `Ctrl + G`: Go to line
## Architecture
```
┌─────────────┐
│ Browser │
└──────┬──────┘
HTTP Request
┌──────────────┐
│ Puter │
│ (Node.js) │
│ GUI + API │
└──────┬──────┘
┌────────────┼────────────┐
│ │ │
▼ ▼ ▼
┌──────────┐ ┌──────────┐ ┌──────────┐
│ PostgreSQL│ │ Files │ │ Apps │
│ (Database)│ │ Storage │ │ Store │
└──────────┘ └──────────┘ └──────────┘
┌──────────────┐
│ Terminal │
│ Code Ed. │
│ File Mgr. │
└──────────────┘
```
## Security
### User Permissions
- Role-based access control (Admin, User)
- File-level permissions
- App-level permissions
- Sharing controls
### Data Protection
- All data stored locally
- No data sent to external services
- Open-source code for audit
### Authentication
- Secure password hashing
- Session management
- Two-factor authentication support
## Troubleshooting
### Apps Not Loading
1. Clear browser cache
2. Check Puter logs: `docker logs <container>`
3. Verify PostgreSQL is running
4. Restart Puter container
### Files Not Uploading
1. Check storage quota
2. Verify file permissions
3. Check network connection
4. Review browser console for errors
### Performance Issues
1. Increase memory limit in Cloudron settings
2. Clean up temporary files
3. Check database performance
4. Reduce number of running apps
## Documentation
For more information on using Puter:
- [Official Website](https://puter.com)
- [Live Demo](https://puter.com)
- [GitHub Repository](https://github.com/HeyPuter/puter)
- [Documentation](https://docs.puter.com)
- [Developer Portal](https://developer.puter.com)
- [Discord Community](https://discord.com/invite/PQcx7Teh8u)
- [Reddit Community](https://reddit.com/r/puter)
## Support
For issues and questions:
- [GitHub Issues](https://github.com/HeyPuter/puter/issues)
- [Discord Server](https://discord.com/invite/PQcx7Teh8u)
- [Reddit](https://reddit.com/r/puter)
- [Twitter/X](https://twitter.com/HeyPuter)
## Upstream
[GitHub Repository](https://github.com/HeyPuter/puter)
[Official Website](https://puter.com)

Binary file not shown.

After

Width:  |  Height:  |  Size: 72 KiB

View File

@@ -0,0 +1,30 @@
# Review Board Cloudron Environment Configuration Example
# Copy this to .env and configure as needed
# Django Configuration
SECRET_KEY=change-this-to-a-random-secret-key-in-production
ALLOWED_HOSTS=*
REVIEWBOARD_SITE_ROOT=https://your-app.cloudron.app
# Database (Automatically configured by Cloudron PostgreSQL addon)
# CLOUDRON_POSTGRESQL_HOST=127.0.0.1
# CLOUDRON_POSTGRESQL_PORT=5432
# CLOUDRON_POSTGRESQL_DATABASE=reviewboard
# CLOUDRON_POSTGRESQL_USERNAME=reviewboard
# CLOUDRON_POSTGRESQL_PASSWORD=database-password
# Admin User (create admin account on first start)
ADMIN_USERNAME=admin
ADMIN_EMAIL=admin@example.com
ADMIN_PASSWORD=admin-password-change-me
# Memcached (optional, for caching)
MEMCACHED_SERVER=memcached:11211
# LDAP/Active Directory (optional, for user authentication)
LDAP_SERVER=ldap://your-ldap-server.com
LDAP_BASE_DN=dc=example,dc=com
LDAP_UID=uid
LDAP_DN_TEMPLATE=uid=%(user)s,ou=users,dc=example,dc=com
LDAP_BIND_DN=cn=admin,dc=example,dc=com
LDAP_BIND_PASSWORD=your-ldap-password

View File

@@ -0,0 +1,27 @@
# Changelog
## [8.0.0] - 2025-01-24
### Added
- Initial Cloudron package for Review Board
- Official Review Board Docker image wrapper
- Automatic PostgreSQL configuration via Cloudron addon
- Django migrations on startup
- Admin user creation support via environment variables
- Health check endpoint
- Documentation with usage examples
- Integration examples (GitHub, GitLab, Mercurial, Perforce)
### Features
- Code and document review platform
- Advanced diff viewer with syntax highlighting
- Moved line detection and indentation indicators
- Repository integration (Git, Mercurial, Perforce, etc.)
- Discussion tracking and threaded comments
- Review requests workflow
- Email notifications
- Search across reviews, comments, discussions
- Dashboard for pending reviews
- Team and project management
- Power Pack extension support (reports, PDF review, LDAP sync)
- User authentication (LDAP, OAuth, traditional)

View File

@@ -0,0 +1,33 @@
{
"version": 1,
"manifestVersion": 2,
"type": "app",
"id": "io.cloudron.reviewboard",
"title": "Review Board",
"description": "Web-based code and document review tool. Tracks pending code, graphics, documents, and all discussions around product decisions. Supports Git, Mercurial, Perforce, and more.",
"author": "Beanbag, Inc.",
"website": "https://www.reviewboard.org",
"contactEmail": "cloudron@tsys.dev",
"tagline": "Code and document review platform",
"version": "7.0.0",
"healthCheckPath": "/health/",
"httpPort": 8080,
"memoryLimit": 1024,
"addons": {
"localstorage": true,
"postgresql": {
"version": "14"
}
},
"tcpPorts": {
"HTTP_PORT": {
"description": "Review Board HTTP port",
"defaultValue": 8080
}
},
"mediaLinks": [
"https://raw.githubusercontent.com/reviewboard/reviewboard/master/reviewboard/static/rb/images/icons@2x.png"
],
"changelog": "Initial Cloudron package for Review Board",
"icon": "file://logo.png"
}

View File

@@ -0,0 +1,10 @@
FROM beanbag/reviewboard:7.0
# Cloudron: Create site directory
RUN mkdir -p /site/media/uploaded
# Copy start script (already executable from host)
COPY start.sh /app/start.sh
# Start Review Board
CMD ["/app/start.sh"]

View File

@@ -0,0 +1,330 @@
# Review Board Cloudron Package
## Description
Review Board is a web-based code and document review tool. It tracks pending code, graphics, documents, and all discussions around decisions made about your product. It helps companies and organizations maintain code quality and keep bug counts low.
## Features
### Core Capabilities
- **Code Review**: Track pending code changes with diff viewer showing syntax highlighting, interdiffs, and moved line detection
- **Document Review**: Review documents, graphics, and other assets alongside code
- **Discussion Tracking**: All discussions around product decisions are tracked and searchable
- **Repository Integration**: Supports Bazaar, ClearCase, CVS, Git, Mercurial, Perforce, Plastic, and Azure DevOps
- **Rich API**: Build custom features, review UIs, data analysis, and more using the extension framework
- **Team Collaboration**: Manage multiple teams, projects, and review requests
- **Review UIs**: Custom review interfaces tailored to your workflows
- **User Authentication**: LDAP/Active Directory sync, OAuth, and traditional authentication
### Review Board Features
- **Diff Viewer**: Advanced diff display with syntax highlighting for many programming languages
- **Moved Line Detection**: Highlights lines that were added, removed, or changed
- **Commenting**: Rich commenting system with threaded discussions
- **Change Requests**: Formal review request workflow with assignees and reviewers
- **Status Tracking**: Track review status (pending, submitted, discarded, published)
- **Email Notifications**: Get notified on review updates and changes
- **Search**: Powerful search across reviews, comments, and discussions
- **Dashboard**: View all pending reviews in one place
## Configuration
### Environment Variables
#### Database (Automatically configured by Cloudron)
- `CLOUDRON_POSTGRESQL_HOST`: PostgreSQL host
- `CLOUDRON_POSTGRESQL_PORT`: PostgreSQL port
- `CLOUDRON_POSTGRESQL_DATABASE`: Database name
- `CLOUDRON_POSTGRESQL_USERNAME`: Database username
- `CLOUDRON_POSTGRESQL_PASSWORD`: Database password
#### Django Configuration
- `SECRET_KEY`: Django secret key (auto-generated, change in production)
- `ALLOWED_HOSTS`: Allowed hosts (default: `*`)
- `REVIEWBOARD_SITE_ROOT`: Site root URL (auto-configured)
#### Admin User
- `ADMIN_USERNAME`: Username for admin account
- `ADMIN_EMAIL`: Email address for admin account
- `ADMIN_PASSWORD`: Password for admin account
### Ports
- **8080**: Main HTTP port (web interface and API)
### Addons
- **PostgreSQL**: Required for database storage
- **Localstorage**: Used for media uploads and data
## Usage
### 1. Set Up Repositories
Via Web Interface:
1. Open Review Board
2. Go to "Admin" → "Repositories"
3. Click "Add Repository"
4. Configure:
- Repository type (Git, Mercurial, etc.)
- Repository URL
- Repository name
- Mirror configuration (if needed)
5. Click "Save"
Via API:
```bash
curl -X POST http://localhost:8080/api/repositories/ \
-H "Authorization: Token your-api-token" \
-H "Content-Type: application/json" \
-d '{
"name": "My Project",
"scm_type": "git",
"path": "https://github.com/myorg/myproject.git",
"mirror_path": "/path/to/mirror"
}'
```
### 2. Create Review Request
Via Web Interface:
1. Go to "All Review Requests"
2. Click "New Review Request"
3. Configure:
- Repository to review
- Base branch (e.g., main)
- Tip branch (e.g., feature/new-feature)
- Reviewers
- Description
4. Click "Create"
Via Git Hook:
```bash
# In your Git repository, configure post-commit hook
.git/hooks/post-commit
#!/bin/bash
# Review Board URL
RB_URL="http://your-app.cloudron.app"
# Create review request on commit
curl -X POST "$RB_URL/api/review-requests/" \
-H "Authorization: Token your-api-token" \
-H "Content-Type: application/json" \
-d "{
\"repository\": \"your-repo\",
\"commit_id\": \"$(git rev-parse HEAD)\",
\"branch\": \"$(git rev-parse --abbrev-ref HEAD)\",
\"description\": \"Automated review request\"
}"
```
### 3. Review Code Changes
Via Web Interface:
1. Open review request
2. View diff with syntax highlighting
3. Click lines to add comments
4. Use "Reply" for threaded discussions
5. Click "Ship It!" to approve changes
6. Or click "Discard" to reject
### 4. Use Power Pack (Extension)
Power Pack adds:
- **Report Generation**: Create formatted reports of reviews
- **PDF and Office Document Review**: Review PDF and Office files
- **Better Multi-Server Scalability**: Handle more concurrent users
- **GitHub Enterprise Integration**: Direct connection to GitHub Enterprise
- **LDAP/Active Directory User Sync**: Sync users from directory services
To enable Power Pack:
1. Get trial license from RBCommons
2. Install license via Admin panel
3. Restart Review Board
### 5. Configure Teams and Projects
**Create Team:**
1. Go to "Admin" → "Teams"
2. Click "Add Team"
3. Configure team name and description
4. Add users to team
**Create Project:**
1. Go to "Admin" → "Projects"
2. Click "Add Project"
3. Configure project settings
4. Assign repository to project
5. Assign team to project
### 6. Set Up Email Notifications
1. Go to "My Account" → "Email Settings"
2. Configure SMTP settings
3. Set notification preferences
4. Test email configuration
## Integration Examples
### GitHub Integration
```python
# Using Review Board Python API
from reviewboardapi import ReviewBoardAdmin
rb = ReviewBoardAdmin('http://your-app.cloudron.app', username='admin', password='password')
# Create review request for GitHub PR
review_request = rb.repositories.create(
name='my-repo',
scm_type='git',
path='https://github.com/myorg/myproject.git'
)
request = rb.review_requests.create(
repository=review_request,
branch='feature/new-feature',
commit_id='abc123def456',
description='Automated review from GitHub'
)
```
### GitLab Integration
```bash
# GitLab CI job to create Review Board requests
curl -X POST http://localhost:8080/api/review-requests/ \
-H "Authorization: Token $RB_TOKEN" \
-H "Content-Type: application/json" \
-d "{
\"repository\": \"$CI_PROJECT_PATH\",
\"commit_id\": \"$CI_COMMIT_SHA\",
\"branch\": \"$CI_COMMIT_REF_NAME\",
\"description\": \"Review request from GitLab CI\"
}"
```
### Mercurial Integration
```bash
# Mercurial hook for Review Board
.hg/hgrc
[hooks]
changegroup.post-reviewboard = python:/path/to/hg_reviewboard.py
```
### Perforce Integration
```bash
# Perforce trigger for Review Board
p4 change -o $CL | grep -q "^Change:" || exit
# Submit to Review Board on changelist submit
curl -X POST http://localhost:8080/api/review-requests/ \
-H "Authorization: Token $RB_TOKEN" \
-d @-
```
## Security
### Change Default Secret Key
The default secret key is auto-generated. **Change SECRET_KEY in production**:
```bash
# Generate new secret key
python -c 'from django.core.management.utils import get_random_secret_key; print(get_random_secret_key())'
# Set SECRET_KEY environment variable
```
### Use LDAP/Active Directory
Configure LDAP for centralized authentication:
```bash
LDAP_SERVER=ldap://your-ldap-server.com
LDAP_BASE_DN=dc=example,dc=com
LDAP_UID=uid
LDAP_DN_TEMPLATE=uid=%(user)s,ou=users,dc=example,dc=com
LDAP_BIND_DN=cn=admin,dc=example,dc=com
LDAP_BIND_PASSWORD=your-ldap-password
```
### API Token Management
1. Create API tokens in Review Board admin panel
2. Assign tokens to users or services
3. Use tokens in API requests
4. Regularly rotate tokens for security
### Repository Access Control
Configure which users can access which repositories:
1. Go to "Admin" → "Repositories"
2. Edit repository settings
3. Configure access permissions
4. Use team-based access control
## Troubleshooting
### Review Requests Not Showing
1. Check repository mirror is up to date
2. Verify webhook configuration
3. Check Review Board logs: `docker logs <container>`
4. Test API connectivity
### Database Connection Errors
1. Verify PostgreSQL addon is active
2. Check database credentials in Cloudron environment
3. Review database configuration
4. Ensure PostgreSQL is running
### Performance Issues
1. Increase memory limit in Cloudron settings
2. Enable memcached for caching
3. Optimize repository mirror settings
4. Review database query performance
### Email Notifications Not Working
1. Verify SMTP configuration
2. Check email queue in admin panel
3. Test email settings
4. Review mail server logs
## Architecture
```
┌─────────────┐
│ Developer │
│ (Git) │
└──────┬──────┘
┌──────────────┐
│ Review Board │
│ (Django) │
│ Dashboard │
└──────┬──────┘
┌────────────┼────────────┐
│ │ │
▼ ▼ ▼
┌──────────┐ ┌──────────┐ ┌──────────┐
│ PostgreSQL│ │ Repository│ │ Email │
│ (Database)│ │ Mirror │ │ Service │
└──────────┘ └──────────┘ └──────────┘
```
## Documentation
For more information on using Review Board:
- [Official Website](https://www.reviewboard.org/)
- [User Manual](https://www.reviewboard.org/docs/manual/latest/users/)
- [Admin Manual](https://www.reviewboard.org/docs/manual/latest/admin/)
- [API Documentation](https://www.reviewboard.org/docs/manual/latest/webapi/2.0/)
- [Power Pack](https://www.reviewboard.org/power-pack/)
- [GitHub Repository](https://github.com/reviewboard/reviewboard)
- [Docker Images](https://hub.docker.com/r/reviewboard/reviewboard)
## Support
For issues and questions:
- [GitHub Issues](https://github.com/reviewboard/reviewboard/issues)
- [Community Forum](https://www.reviewboard.org/)
- [Mailing Lists](https://www.reviewboard.org/mailing-lists/)
- [Commercial Support](https://rbcommons.com/support)
## Upstream
[GitHub Repository](https://github.com/reviewboard/reviewboard)
[Official Website](https://www.reviewboard.org/)

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

View File

@@ -0,0 +1,59 @@
#!/bin/bash
set -e
echo "Starting Review Board Cloudron package..."
# Database connection from Cloudron
DB_NAME=${CLOUDRON_POSTGRESQL_DATABASE:-reviewboard}
DB_USER=${CLOUDRON_POSTGRESQL_USERNAME:-reviewboard}
DB_PASSWORD=${CLOUDRON_POSTGRESQL_PASSWORD}
DB_HOST=${CLOUDRON_POSTGRESQL_HOST:-127.0.0.1}
DB_PORT=${CLOUDRON_POSTGRESQL_PORT:-5432}
echo "Database host: $DB_HOST"
echo "Database port: $DB_PORT"
echo "Database name: $DB_NAME"
# Wait for PostgreSQL to be ready
echo "Waiting for PostgreSQL to be ready..."
until PGPASSWORD=$DB_PASSWORD psql -h "$DB_HOST" -p "$DB_PORT" -U "$DB_USER" -d "$DB_NAME" -c '\q' 2>/dev/null; do
echo "PostgreSQL is unavailable - sleeping"
sleep 2
done
echo "PostgreSQL is ready!"
# Django configuration
export REVIEWBOARD_SITE_ROOT=${REVIEWBOARD_SITE_ROOT:-https://$CLOUDRON_APP_DOMAIN}
export DATABASE_TYPE=postgresql
export DATABASE_NAME=$DB_NAME
export DATABASE_USER=$DB_USER
export DATABASE_PASSWORD=$DB_PASSWORD
export DATABASE_HOST=$DB_HOST
export DATABASE_PORT=$DB_PORT
export MEMCACHED_SERVER=
export SECRET_KEY=${SECRET_KEY:-cloudron-secret-key-change-in-production}
export ALLOWED_HOSTS=${ALLOWED_HOSTS:-'*'}
# Site directory
export REVIEWBOARD_SITEDIR=/site
# Run database migrations
echo "Running Review Board database migrations..."
./manage.py migrate --noinput
# Collect static files
echo "Collecting static files..."
./manage.py collectstatic --noinput
# Create admin user if specified
if [ -n "$ADMIN_USERNAME" ] && [ -n "$ADMIN_PASSWORD" ] && [ -n "$ADMIN_EMAIL" ]; then
echo "Creating admin user..."
echo "from django.contrib.auth import get_user_model; from django.core.management import call_command; User = get_user_model(); User.objects.create_superuser('$ADMIN_USERNAME', '$ADMIN_EMAIL', '$ADMIN_PASSWORD') if not User.objects.filter(email='$ADMIN_EMAIL').exists() else None" | \
./manage.py shell 2>/dev/null || echo "Admin user may already exist"
fi
# Start Review Board
echo "Starting Review Board..."
exec ./serve.sh

View File

@@ -0,0 +1,9 @@
# WireViz Web Cloudron Environment Configuration Example
# Copy this to .env and configure as needed
# Flask Configuration
FLASK_APP=wireviz_web
PYTHONUNBUFFERED=1
# WireViz Web will listen on this port (default: 3005)
# Port is exposed via Cloudron and can be configured in CloudronManifest.json

View File

@@ -0,0 +1,26 @@
# Changelog
## [2.4.0] - 2025-01-24
### Added
- Initial Cloudron package for WireViz Web
- Flask-based web wrapper for WireViz
- Graphviz dependency for diagram rendering
- REST API for diagram generation
- Support for YAML input and multiple output formats
- Health check endpoint
- Documentation with usage examples
- Color coding examples (IEC, DIN, custom)
- Connector and cable examples
- Complex harness example
### Features
- Cable and wiring diagram generation
- YAML-based input format
- Multiple output formats (SVG, PNG, etc.)
- Automatic BOM (Bill of Materials) generation
- IEC 60757, DIN 47100, and 25-pair color code support
- Wire gauge handling (mm² and AWG)
- Connector library with common types
- Web interface and REST API
- PlantUML Text Encoding compatibility

View File

@@ -0,0 +1,28 @@
{
"version": 1,
"manifestVersion": 2,
"type": "app",
"id": "io.cloudron.wireviz-web",
"title": "WireViz Web",
"description": "Web wrapper around WireViz tool for documenting cables, wiring harnesses and connector pinouts. Takes YAML files as input and produces graphical output (SVG, PNG).",
"author": "WireViz Community",
"website": "https://github.com/wireviz/wireviz-web",
"contactEmail": "cloudron@tsys.dev",
"tagline": "Cable and wiring diagram tool",
"version": "2.4.0",
"healthCheckPath": "/",
"httpPort": 3005,
"memoryLimit": 512,
"addons": {
"localstorage": true
},
"tcpPorts": {
"HTTP_PORT": {
"description": "WireViz Web HTTP port",
"defaultValue": 3005
}
},
"mediaLinks": [],
"changelog": "Initial Cloudron package for WireViz Web",
"icon": "file://logo.png"
}

View File

@@ -0,0 +1,33 @@
FROM python:3-slim
# Install system dependencies
RUN apt-get update && apt-get install -y graphviz && rm -rf /var/lib/apt/lists/*
# Set working directory
WORKDIR /app
# Copy requirements
COPY requirements.txt .
# Install Python dependencies
RUN pip install --no-cache-dir -r requirements.txt
# Copy application code
COPY . .
# Create data directory
RUN mkdir -p /app/data
# Set environment
ENV FLASK_APP=wireviz_web
ENV PYTHONUNBUFFERED=1
# Expose port
EXPOSE 3005
# Health check
HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \
CMD curl -f http://localhost:3005/ || exit 1
# Start application
CMD ["python","-c","import wireviz_web.cli; wireviz_web.cli.run()"]

View File

@@ -0,0 +1,317 @@
# WireViz Web Cloudron Package
## Description
WireViz Web is a web wrapper around WireViz tool for documenting cables, wiring harnesses, and connector pinouts. It takes plain text, YAML-formatted files as input and produces beautiful graphical output (SVG, PNG, etc.).
## Features
### Core Capabilities
- **Wire Diagram Generation**: Create professional cable and wiring diagrams
- **YAML Input**: Human-readable YAML format for defining connectors, cables, and connections
- **Multiple Output Formats**: SVG, PNG, and other graphics formats
- **Automatic BOM**: Bill of Materials generation for components
- **Color Coding Support**: IEC 60757, DIN 47100, and 25-pair color codes
- **Wire Gauge Handling**: Support for mm² and AWG gauges
- **Connector Libraries**: Extensive connector type database
- **Web Interface**: REST API for programmatic access
### WireViz Features
- **Text-Based Input**: No special editor required, use any text editor
- **Version Control Friendly**: Plain YAML files work perfectly with Git
- **UTF-8 Support**: Handle special characters in labels and descriptions
- **Custom Color Schemes**: Standard and custom color schemes supported
- **Auto-Routing**: Automatic wire routing for 1-to-1 connections
- **Complex Harness Support**: Suitable for simple and complex wiring
- **Pinout Diagrams**: Document connector pinouts clearly
- **PlantUML Compatibility**: PlantUML Text Encoding format included
## Configuration
### Environment Variables
#### Application Configuration
- `FLASK_APP`: Flask application (default: wireviz_web)
- `PYTHONUNBUFFERED`: Disable Python output buffering (default: 1)
### Ports
- **3005**: Main HTTP port (web interface and API)
### Addons
- **Localstorage**: Used for storing uploaded diagrams and generated outputs
## Usage
### 1. Create Wiring Diagram via Web Interface
1. Open WireViz Web
2. Click "New Diagram"
3. Enter YAML configuration:
```yaml
connectors:
X1:
type: D-Sub
subtype: female
pinlabels: [DCD, RX, TX, DTR, GND, DSR, RTS, CTS]
X2:
type: Molex KK 254
subtype: female
pinlabels: [GND, RX, TX]
cables:
W1:
gauge: 0.25 mm2
length: 0.2
color_code: DIN
wirecount: 3
shield: true
connections:
- - X1: [5,2,3]
- W1: [1,2,3]
- X2: [1,3,2]
- - X1: 5
- W1: s
```
4. Click "Generate Diagram"
5. View SVG/PNG output
6. Download BOM (Bill of Materials)
### 2. Use REST API
Generate diagram programmatically:
```bash
# Create diagram via POST request
curl -X POST http://localhost:3005/render \
-H "Content-Type: application/yaml" \
--data-binary @diagram.yaml
# Get diagram in SVG format
curl -X POST http://localhost:3005/render \
-H "Content-Type: application/yaml" \
-H "Accept: image/svg+xml" \
--data-binary @diagram.yaml \
-o output.svg
# Get diagram in PNG format
curl -X POST http://localhost:3005/render \
-H "Content-Type: application/yaml" \
-H "Accept: image/png" \
--data-binary @diagram.yaml \
-o output.png
# Get BOM (Bill of Materials)
curl -X POST http://localhost:3005/render \
-H "Content-Type: application/yaml" \
-H "Accept: text/tab-separated-values" \
--data-binary @diagram.yaml \
-o bom.tsv
```
### 3. Color Coding Examples
**IEC 60757 Color Code:**
```yaml
cables:
W1:
color_code: IEC
# Generates: BK, RD, OR, YE, GN, BU, VT, GY, WH, PK
```
**DIN 47100 Color Code:**
```yaml
cables:
W1:
color_code: DIN
# Generates: WT/BN, GN/YE, OG/BK, etc.
```
**Custom Colors:**
```yaml
cables:
W1:
colors: ["#FF0000", "#00FF00", "#0000FF"]
# Or use full names: ["red", "green", "blue"]
# Or abbreviations: ["RD", "GN", "BU"]
```
### 4. Connector Examples
**D-Sub Connector:**
```yaml
connectors:
X1:
type: D-Sub
subtype: female
pinlabels: [DCD, RX-, RX+, TX-, TX+, GND, CEC]
```
**USB-C Connector:**
```yaml
connectors:
X1:
type: USB
subtype: C
pinlabels: [VBUS, CC1, CC2, D+, D-, SBU1, SBU2, GND]
```
**HDMI Connector:**
```yaml
connectors:
X1:
type: HDMI
subtype: A
pinlabels: [TMDS_D2+, TMDS_D2-, TMDS_D1+, TMDS_D1-, ...]
```
### 5. Cable Examples
**Multi-Conductor Cable:**
```yaml
cables:
W1:
gauge: 0.25 mm2
length: 2.5
color_code: IEC
wirecount: 8
shield: true
```
**Coaxial Cable:**
```yaml
cables:
W1:
gauge: 1.5 mm2
length: 10.0
colors: [BK]
wirecount: 1
shield: true
```
### 6. Complex Harness Example
```yaml
connectors:
MAIN:
type: Terminal_Block
pinlabels: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
DEVICE1:
type: D-Sub
subtype: female
pinlabels: [DCD, RX, TX, GND]
DEVICE2:
type: USB
subtype: A
pinlabels: [VBUS, D+, D-, GND]
cables:
MAIN_POWER:
gauge: 1.5 mm2
length: 5.0
colors: [RD, BK]
wirecount: 2
MAIN_SIGNAL:
gauge: 0.25 mm2
length: 5.0
color_code: IEC
wirecount: 4
DEVICE1_CABLE:
gauge: 0.25 mm2
length: 2.0
color_code: DIN
wirecount: 4
DEVICE2_CABLE:
gauge: 0.25 mm2
length: 1.0
color_code: IEC
wirecount: 4
connections:
- - MAIN: [1,2]
- MAIN_POWER: [1,2]
- - MAIN: [3,4,5,6]
- MAIN_SIGNAL: [1,2,3,4]
- - MAIN: [7,8,9,10]
- DEVICE1_CABLE: [1,2,3,4]
- DEVICE1: [5,2,3,4]
- - MAIN: [7,8,9,10]
- DEVICE2_CABLE: [1,2,3,4]
- DEVICE2: [1,4,3,2]
```
## Architecture
```
┌─────────────┐
│ Client │
│ (YAML) │
└──────┬──────┘
HTTP POST (YAML)
┌──────────────┐
│ WireViz Web │
│ (Flask) │
│ REST API │
└──────┬──────┘
┌──────────────┐
│ WireViz │
│ (Python) │
│ Parser │
└──────┬──────┘
┌────────────┼────────────┐
│ │ │
▼ ▼ ▼
┌──────────┐ ┌──────────┐ ┌──────────┐
│ SVG │ │ PNG │ │ BOM │
│ Output │ │ Output │ │ Output │
└──────────┘ └──────────┘ └──────────┘
```
## WireViz YAML Format
### Basic Structure
```yaml
connectors:
# Define connector pins
CONNECTOR_NAME:
type: CONNECTOR_TYPE
subtype: SUBTYPE
pinlabels: [PIN1, PIN2, ...]
cables:
# Define cables
CABLE_NAME:
gauge: GAUGE
length: LENGTH
color_code: COLOR_SCHEME
wirecount: NUMBER_OF_WIRES
connections:
# Define connections between connectors and cables
- - CONNECTOR: [PIN_NUMBERS]
- CABLE: [WIRE_NUMBERS]
```
## Documentation
For more information on WireViz:
- [WireViz Documentation](https://github.com/wireviz/wireviz)
- [WireViz Web Repository](https://github.com/wireviz/wireviz-web)
- [WireViz Examples](https://github.com/wireviz/wireviz/tree/master/examples)
- [Connector Database](https://github.com/wireviz/wireviz/blob/master/lib/wireviz/data/connectors.yaml)
## Support
For issues and questions:
- [WireViz Web Issues](https://github.com/wireviz/wireviz-web/issues)
- [WireViz Issues](https://github.com/wireviz/wireviz/issues)
## Upstream
[GitHub Repository](https://github.com/wireviz/wireviz-web)
[WireViz Project](https://github.com/wireviz/wireviz)

View File

@@ -0,0 +1,2 @@
iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mP8/5+H
YAAAQIBZgJ0iA1gAAAIeL0g8lAAAAASUVORK5CYII=

View File

@@ -0,0 +1,8 @@
wireviz==0.4.1
flask<3.2
flask-restx<1.4
werkzeug<4
pillow>=9,<12
importlib_metadata>=3.3,<7 ; python_version < '3.8'
click<9
flask-cors<7

View File

@@ -0,0 +1,22 @@
# Corteza Cloudron Environment Configuration Example
# Copy this to .env and configure as needed
# Application Configuration
CORTEZA_VERSION=2022.9.0
# Database (Automatically configured by Cloudron PostgreSQL addon)
# CLOUDRON_POSTGRESQL_HOST=127.0.0.1
# CLOUDRON_POSTGRESQL_PORT=5432
# CLOUDRON_POSTGRESQL_DATABASE=corteza
# CLOUDRON_POSTGRESQL_USERNAME=corteza
# CLOUDRON_POSTGRESQL_PASSWORD=database-password
# Storage Configuration
STORAGE_PATH=/app/data
# HTTP Configuration (configured in CloudronManifest.json)
# HTTP_ADDR=0.0.0.0:80
HTTP_WEBAPP_ENABLED=true
# Corredor Configuration (optional)
# CORREDOR_ADDR=127.0.0.1:5432

View File

@@ -0,0 +1,31 @@
# Changelog
## [2022.9.0] - 2025-01-24
### Added
- Initial Cloudron package for Corteza
- Multi-stage Dockerfile downloading pre-compiled binaries
- PostgreSQL addon for database storage
- Localstorage addon for application data
- Health check endpoint
- Documentation with low-code platform usage examples
- Visual builder, form builder, report builder documentation
- User management and permissions documentation
### Features
- Open-source low-code platform
- Visual app builder with drag-and-drop
- Form builder for data entry
- Report builder for custom reports
- Page builder for application pages
- API builder for REST APIs
- Workflow automation with triggers
- Database-driven applications
- Multi-tenancy support
- User management with role-based permissions
- Record management
- Import/export functionality
- Theme customation
- Mobile-responsive design
- Audit trail
- Security features (row-level permissions)

View File

@@ -0,0 +1,31 @@
{
"version": 1,
"manifestVersion": 2,
"type": "app",
"id": "io.cloudron.corteza",
"title": "Corteza",
"description": "Open-source low-code platform. Build database-driven applications without coding. Visual app builder, workflow automation, and business process management.",
"author": "Corteza Project",
"website": "https://cortezaproject.org",
"contactEmail": "cloudron@tsys.dev",
"tagline": "Open-source low-code platform",
"version": "2022.9.0",
"healthCheckPath": "/healthcheck",
"httpPort": 80,
"memoryLimit": 2048,
"addons": {
"localstorage": true,
"postgresql": {
"version": "14"
}
},
"tcpPorts": {
"HTTP_PORT": {
"description": "Corteza HTTP port",
"defaultValue": 80
}
},
"mediaLinks": [],
"changelog": "Initial Cloudron package for Corteza",
"icon": "file://logo.png"
}

View File

@@ -0,0 +1,46 @@
FROM ubuntu:22.04
# Install dependencies
RUN apt-get update && \
apt-get install -y --no-install-recommends \
ca-certificates \
curl \
file \
&& rm -rf /var/lib/apt/lists/*
# Create data directory
RUN mkdir -p /app/data
WORKDIR /app
# Download and extract Corteza
ARG CORTEZA_VERSION=2022.9.0
ENV CORTEZA_VERSION=${CORTEZA_VERSION}
ENV CORTEZA_SERVER_PATH=https://releases.cortezaproject.org/files/corteza-server-${CORTEZA_VERSION}-linux-amd64.tar.gz
ENV CORTEZA_WEBAPP_PATH=https://releases.cortezaproject.org/files/corteza-webapp-${CORTEZA_VERSION}.tar.gz
RUN curl -sL $CORTEZA_SERVER_PATH -o /tmp/corteza-server.tar.gz && \
tar zxvf /tmp/corteza-server.tar.gz -C /app && \
curl -sL $CORTEZA_WEBAPP_PATH -o /tmp/corteza-webapp.tar.gz && \
tar zxvf /tmp/corteza-webapp.tar.gz -C /app/corteza/webapp && \
rm /tmp/corteza-server.tar.gz /tmp/corteza-webapp.tar.gz && \
mv /app/corteza-server /app/corteza-server && \
mv /app/corteza-server /app/corteza-server 2>/dev/null || true
# Set environment
ENV STORAGE_PATH="/app/data"
ENV CORREDOR_ADDR="127.0.0.1:5432"
ENV HTTP_ADDR="0.0.0.0:80"
ENV HTTP_WEBAPP_ENABLED="true"
ENV HTTP_WEBAPP_BASE_DIR="/app/corteza/webapp"
# Expose port
EXPOSE 80
# Health check
HEALTHCHECK --interval=30s --timeout=3s --start-period=10s --retries=3 \
CMD curl -f http://localhost:80/healthcheck || exit 1
# Start Corteza
ENTRYPOINT ["./corteza-server/bin/corteza-server"]
CMD ["serve-api"]

View File

@@ -0,0 +1,322 @@
# Corteza Cloudron Package
## Description
Corteza is an open-source low-code platform. Build database-driven applications without coding. Visual app builder, workflow automation, and business process management.
## Features
### Core Capabilities
- **Low-Code Platform**: Build applications without coding
- **Visual App Builder**: Drag-and-drop application builder
- **Database Integration**: Native database connectivity
- **Workflow Automation**: Automate business processes
- **Multi-Tenancy**: Support for multiple organizations
- **Web-Based**: Access from any browser
- **Open Source**: Full transparency and customization
### Corteza Features
- **Visual Form Builder**: Create forms with drag-and-drop
- **Report Builder**: Build custom reports visually
- **Page Builder**: Design application pages with components
- **Module System**: Extendable module architecture
- **Record Management**: Database records management
- **User Management**: Role-based access control
- **API Builder**: Create APIs visually
- **Server-Side Scripting**: Advanced custom logic
- **Integration Hub**: Connect with external services
- **Theme Engine**: Customize application appearance
- **Multi-Language**: Built-in i18n support
- **Mobile Responsive**: Applications work on all devices
- **Export/Import**: Backup and restore data
- **Automation Scripts**: Workflow automation
- **Security**: Row-level permissions
- **Audit Trail**: Complete action logging
## Configuration
### Environment Variables
#### Database (Automatically configured by Cloudron)
- `CLOUDRON_POSTGRESQL_HOST`: PostgreSQL host
- `CLOUDRON_POSTGRESQL_PORT`: PostgreSQL port
- `CLOUDRON_POSTGRESQL_DATABASE`: Database name
- `CLOUDRON_POSTGRESQL_USERNAME`: Database username
- `CLOUDRON_POSTGRESQL_PASSWORD`: Database password
#### Application Configuration
- `CORTEZA_VERSION`: Corteza version (default: 2022.9.0)
- `STORAGE_PATH`: Data storage path (default: /app/data)
- `HTTP_ADDR`: HTTP address (default: 0.0.0.0:80)
- `HTTP_WEBAPP_ENABLED`: Enable web app (default: true)
- `CORREDOR_ADDR`: Corredor address
### Ports
- **80**: Main HTTP port (web interface)
### Addons
- **PostgreSQL**: Required for database storage
- **Localstorage**: Used for application data
## Usage
### 1. First Time Setup
1. Open Corteza
2. Create admin account:
- Username
- Email
- Password
3. Configure system settings:
- Organization name
- Timezone
- Language
4. Verify PostgreSQL connection
### 2. Create Application
**Via Visual Builder:**
1. Navigate to "Applications"
2. Click "New Application"
3. Configure:
- Application name
- Module type (CRM, Project Management, etc.)
- Icon
- Description
4. Click "Create"
### 3. Build Forms
**Via Form Builder:**
1. Open application
2. Navigate to "Records" → "Forms"
3. Click "New Form"
4. Drag and drop fields:
- Text fields
- Number fields
- Date pickers
- Select dropdowns
- Checkboxes
- File uploads
5. Configure field properties:
- Label
- Name
- Required
- Default value
- Validation
6. Save form
### 4. Create Pages
**Via Page Builder:**
1. Open application
2. Navigate to "Pages"
3. Click "New Page"
4. Drag and drop components:
- Text
- Images
- Forms
- Lists
- Charts
- Buttons
5. Configure component properties
6. Save page
### 5. Build Reports
**Via Report Builder:**
1. Open application
2. Navigate to "Reports"
3. Click "New Report"
4. Configure:
- Data source (records)
- Columns
- Filters
- Sorting
- Grouping
- Formatting
5. Preview report
6. Save report
### 6. Create APIs
**Via API Builder:**
1. Open application
2. Navigate to "API"
3. Click "New API"
4. Configure:
- API name
- Endpoint
- Method (GET, POST, PUT, DELETE)
- Parameters
- Response format
5. Test API
6. Save API
### 7. Automate Workflows
**Via Automation:**
1. Open application
2. Navigate to "Automation" → "Triggers"
3. Create trigger:
- Event type (record created, updated, deleted)
- Conditions
- Actions (send email, update record, call API)
4. Save trigger
5. Configure script (if needed)
6. Test workflow
### 8. User Management
**Create User:**
1. Navigate to "Settings" → "Users"
2. Click "New User"
3. Configure:
- Username
- Email
- Password
- Role
- Profile
4. Click "Save"
**Manage Permissions:**
1. Navigate to "Settings" → "Roles"
2. Create/Edit role
3. Configure permissions:
- Access to modules
- Record operations (create, read, update, delete)
- Export/Import
- Admin functions
### 9. Data Management
**Import Data:**
1. Open application
2. Navigate to "Records"
3. Click "Import"
4. Select file (CSV, Excel, JSON)
5. Map columns to fields
6. Preview data
7. Click "Import"
**Export Data:**
1. Open application
2. Navigate to "Records"
3. Apply filters (if needed)
4. Click "Export"
5. Select format (CSV, Excel, JSON, PDF)
6. Download exported data
### 10. Theme Customization
**Customize Theme:**
1. Navigate to "Settings" → "Theme"
2. Configure:
- Brand colors
- Logo
- Font family
- Background
- Layout options
3. Preview changes
4. Save theme
## Architecture
```
┌─────────────┐
│ Browser │
│ (Web UI) │
└──────┬──────┘
HTTP Request
┌──────────────┐
│ Corteza │
│ (Go) │
│ Server │
└──────┬──────┘
┌────────────┼────────────┐
│ │ │
▼ ▼ ▼
┌──────────┐ ┌──────────┐ ┌──────────┐
│ PostgreSQL│ │ Modules │ │ Storage │
│ (Database)│ │ (CRM, │ │ (/data) │
└──────────┘ │ Project, │ └──────────┘
│ etc.) │
└───────────┘
┌──────────┐
│ Web App │
│ (Client) │
└──────────┘
```
## Security
### User Authentication
- Multi-user support with role-based access
- Password hashing with bcrypt
- Session management
- SSO support (optional)
### Data Protection
- PostgreSQL encryption at rest
- Row-level permissions
- Secure API access
- Audit logging for all actions
### Network Security
- TLS/SSL support for secure connections
- API rate limiting
- CORS configuration
- Input sanitization
## Troubleshooting
### Application Not Loading
1. Verify PostgreSQL is running
2. Check Corteza service is started
3. Review connection settings
4. Check browser console for errors
5. Review Corteza logs: `docker logs <container>`
### Forms Not Working
1. Verify form permissions
2. Check field configuration
3. Review browser console for errors
4. Clear browser cache
### Performance Issues
1. Increase memory limit in Cloudron settings
2. Optimize database queries
3. Review record count
4. Consider data archival
### Import/Export Failures
1. Verify file format is correct
2. Check column mapping
3. Ensure permissions are correct
4. Review file size limits
## Documentation
For more information on using Corteza:
- [Official Website](https://cortezaproject.org)
- [Documentation](https://docs.cortezaproject.org)
- [GitHub Repository](https://github.com/cortezaproject/corteza)
- [Community Forum](https://cortezaproject.org/community)
- [Tutorials](https://cortezaproject.org/tutorials)
## Support
For issues and questions:
- [GitHub Issues](https://github.com/cortezaproject/corteza/issues)
- [Community Forum](https://cortezaproject.org/community)
- [Discord Server](https://discord.gg/corteza)
- [Contact](https://cortezaproject.org/contact)
## Upstream
[GitHub Repository](https://github.com/cortezaproject/corteza)
[Official Website](https://cortezaproject.org)

View File

@@ -0,0 +1 @@
<svg id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 241.45 38.63"><defs><style>.cls-1{fill:#FF9661;}</style></defs><path class="cls-1" d="M2.51,9.38A18,18,0,0,1,9.37,2.51,19.49,19.49,0,0,1,19.13.05,19.15,19.15,0,0,1,30.21,3.3a17,17,0,0,1,6.64,9h-8.7A9,9,0,0,0,24.5,8.21a10.67,10.67,0,0,0-5.43-1.35A11.24,11.24,0,0,0,13.21,8.4a10.6,10.6,0,0,0-4,4.35,14.41,14.41,0,0,0-1.43,6.59,14.44,14.44,0,0,0,1.43,6.57,10.55,10.55,0,0,0,4,4.38,11.24,11.24,0,0,0,5.86,1.54,10.49,10.49,0,0,0,5.43-1.38,9.16,9.16,0,0,0,3.65-4.08h8.7a16.92,16.92,0,0,1-6.62,9,19.27,19.27,0,0,1-11.1,3.21,19.49,19.49,0,0,1-9.76-2.46,18,18,0,0,1-6.86-6.83A19.69,19.69,0,0,1,0,19.34,19.76,19.76,0,0,1,2.51,9.38Z"/><path class="cls-1" d="M50.43,36.15a18.53,18.53,0,0,1-7-6.89,19.28,19.28,0,0,1-2.59-10A19.13,19.13,0,0,1,43.4,9.38a18.46,18.46,0,0,1,7-6.89,20.29,20.29,0,0,1,19.48,0,18.37,18.37,0,0,1,7,6.89,19.31,19.31,0,0,1,2.56,9.91,19.45,19.45,0,0,1-2.56,10,18.38,18.38,0,0,1-7,6.89,20.31,20.31,0,0,1-19.45,0Zm15.72-5.81a10.53,10.53,0,0,0,4-4.4,14.38,14.38,0,0,0,1.46-6.65,14.2,14.2,0,0,0-1.46-6.62,10.4,10.4,0,0,0-4-4.35,12.72,12.72,0,0,0-12,0,10.34,10.34,0,0,0-4.08,4.35,14.32,14.32,0,0,0-1.46,6.62,14.51,14.51,0,0,0,1.46,6.65,10.47,10.47,0,0,0,4.08,4.4,12.5,12.5,0,0,0,12,0Z"/><path class="cls-1" d="M103.92,38.26,95.6,23.56H92v14.7H84.47V.54H98.62a16.49,16.49,0,0,1,7.46,1.54,10.8,10.8,0,0,1,4.62,4.16,11.32,11.32,0,0,1,1.54,5.86,11.23,11.23,0,0,1-2.16,6.73A11,11,0,0,1,103.65,23l9,15.3ZM92,17.89h6.32A6.33,6.33,0,0,0,103,16.4a5.52,5.52,0,0,0,1.51-4.13,5.29,5.29,0,0,0-1.51-4,6.5,6.5,0,0,0-4.6-1.43H92Z"/><path class="cls-1" d="M142.88.54V6.65h-10V38.26h-7.57V6.65H115.21V.54Z"/><path class="cls-1" d="M155.32,6.65V16.1H168v6h-12.7v10h14.32v6.16H147.75V.49h21.89V6.65Z"/><path class="cls-1" d="M185.42,31.88h17v6.38H176.66V32.42l16.86-25.5H176.66V.54h25.72V6.38Z"/><path class="cls-1" d="M231,31.07H216l-2.49,7.19h-7.94L219.08.49h8.81l13.56,37.77h-8ZM228.91,25,223.46,9.24,218,25Z"/></svg>

After

Width:  |  Height:  |  Size: 1.9 KiB

View File

@@ -0,0 +1,26 @@
# Healthchecks Cloudron Environment Configuration Example
# Copy this to .env and configure as needed
# Django Configuration
SECRET_KEY=change-this-to-a-random-secret-key-in-production
ALLOWED_HOSTS=*
SITE_ROOT=https://your-app.cloudron.app
# Database (Automatically configured by Cloudron PostgreSQL addon)
# CLOUDRON_POSTGRESQL_HOST=127.0.0.1
# CLOUDRON_POSTGRESQL_PORT=5432
# CLOUDRON_POSTGRESQL_DATABASE=healthchecks
# CLOUDRON_POSTGRESQL_USERNAME=hc
# CLOUDRON_POSTGRESQL_PASSWORD=database-password
# Email Configuration (for sending alerts)
EMAIL_HOST=smtp.gmail.com
EMAIL_PORT=587
EMAIL_HOST_USER=your-email@gmail.com
EMAIL_HOST_PASSWORD=your-app-password
EMAIL_USE_TLS=True
DEFAULT_FROM_EMAIL=healthchecks@your-app.cloudron.app
# Superuser Configuration (create admin account on first start)
SUPERUSER_EMAIL=admin@example.com
SUPERUSER_PASSWORD=admin-password-change-me

View File

@@ -0,0 +1,28 @@
# Changelog
## [3.12.0] - 2025-01-24
### Added
- Initial Cloudron package for Healthchecks
- Official Healthchecks Docker image wrapper
- Automatic PostgreSQL configuration via Cloudron addon
- Django migrations on startup
- Superuser creation support via environment variables
- Email configuration support
- Health check endpoint
- Documentation with usage examples
- Monitoring examples (cron, systemd, scripts, webhooks)
### Features
- Cron job monitoring via HTTP pings
- 25+ notification integrations (Email, SMS, Slack, Telegram, Matrix, etc.)
- Live-updating web dashboard
- Status badges for public monitoring
- Team management (projects, team members, read-only access)
- Monthly email reports
- WebAuthn 2FA support
- Tag-based organization
- Project grouping
- Detailed event logs
- Grace time configuration
- Cron expression support

View File

@@ -0,0 +1,33 @@
{
"version": 1,
"manifestVersion": 2,
"type": "app",
"id": "io.cloudron.healthchecks",
"title": "Healthchecks",
"description": "Cron job monitoring service. Listens for HTTP requests and email messages (pings) from your cron jobs and sends alerts when pings are late.",
"author": "Healthchecks.io",
"website": "https://github.com/healthchecks/healthchecks",
"contactEmail": "cloudron@tsys.dev",
"tagline": "Cron job monitoring with alerting",
"version": "3.12.0",
"healthCheckPath": "/",
"httpPort": 8000,
"memoryLimit": 512,
"addons": {
"localstorage": true,
"postgresql": {
"version": "14"
}
},
"tcpPorts": {
"HTTP_PORT": {
"description": "Healthchecks HTTP port",
"defaultValue": 8000
}
},
"mediaLinks": [
"https://raw.githubusercontent.com/healthchecks/healthchecks/master/static/img/logo.png"
],
"changelog": "Initial Cloudron package for Healthchecks",
"icon": "file://logo.png"
}

View File

@@ -0,0 +1,7 @@
FROM healthchecks/healthchecks:latest
# Cloudron: Copy start script (already executable from host)
COPY start.sh /app/start.sh
# Start Healthchecks
CMD ["/app/start.sh"]

View File

@@ -0,0 +1,303 @@
# Healthchecks Cloudron Package
## Description
Healthchecks is a cron job monitoring service. It listens for HTTP requests and email messages ("pings") from your cron jobs and scheduled tasks ("checks"). When a ping does not arrive on time, Healthchecks sends out alerts.
## Features
### Core Capabilities
- **Cron Job Monitoring**: Monitor scheduled tasks via HTTP pings
- **Multiple Alert Methods**: Email, SMS, Slack, Discord, Telegram, Matrix, PagerDuty, and 20+ integrations
- **Web Dashboard**: View status of all cron jobs in a live-updating dashboard
- **Status Badges**: Generate public but hard-to-guess status badge URLs
- **Team Management**: Projects, team members, read-only access
- **Monthly Reports**: Automated monthly summary emails
- **WebAuthn 2FA**: Modern two-factor authentication support
### Check Configuration
- **Periodic Pings**: Define expected time between pings
- **Grace Time**: Specify how long to wait before sending alerts when a job is late
- **Cron Expressions**: Define expected schedules using cron syntax
- **Event Logs**: View detailed history of each check
- **Integrations**: Native support for 25+ notification services
- **Tags**: Organize and filter checks using tags
- **Projects**: Group related checks together
## Configuration
### Environment Variables
#### Database (Automatically configured by Cloudron)
- `CLOUDRON_POSTGRESQL_HOST`: PostgreSQL host
- `CLOUDRON_POSTGRESQL_PORT`: PostgreSQL port
- `CLOUDRON_POSTGRESQL_DATABASE`: Database name
- `CLOUDRON_POSTGRESQL_USERNAME`: Database username
- `CLOUDRON_POSTGRESQL_PASSWORD`: Database password
#### Django Configuration
- `SECRET_KEY`: Django secret key (auto-generated, change in production)
- `ALLOWED_HOSTS`: Allowed hosts (default: `*`)
- `SITE_ROOT`: Site root URL (auto-configured)
#### Email Configuration
- `EMAIL_HOST`: SMTP server host
- `EMAIL_PORT`: SMTP server port (default: 587)
- `EMAIL_HOST_USER`: SMTP username
- `EMAIL_HOST_PASSWORD`: SMTP password
- `EMAIL_USE_TLS`: Use TLS (default: `True`)
- `DEFAULT_FROM_EMAIL`: Default sender email
#### Admin User
- `SUPERUSER_EMAIL`: Email address for admin account
- `SUPERUSER_PASSWORD`: Password for admin account
### Ports
- **8000**: Main HTTP port (web interface and API)
## Usage
### 1. Create a Check
Via Web Interface:
1. Open Healthchecks dashboard
2. Click "Add Check"
3. Configure:
- Name: "Daily Backup"
- Period: "1 day"
- Grace: "1 hour"
4. Click "Save"
5. Copy the ping URL provided
Via API:
```bash
curl -X POST http://localhost:8000/api/v1/checks/ \
-H "X-Api-Key: your-api-key" \
-H "Content-Type: application/json" \
-d '{
"name": "Daily Backup",
"timeout": 3600,
"grace": 3600
}'
```
### 2. Configure Cron Job
Add ping to your cron job:
```bash
# Backup script
0 2 * * * /path/to/backup.sh
# Send ping to Healthchecks
curl -fsS --retry 3 https://your-app.cloudron.app/ping/your-check-uuid > /dev/null
```
Combined in one line:
```bash
0 2 * * * /path/to/backup.sh && curl -fsS --retry 3 https://your-app.cloudron.app/ping/your-check-uuid > /dev/null
```
### 3. Configure Alert Notifications
**Email Alerts:**
1. Go to "Integrations" in Healthchecks
2. Add email address for notifications
3. Configure which checks send alerts
**Slack Integration:**
1. Go to "Integrations" → "Slack"
2. Create Slack webhook URL
3. Paste webhook URL into Healthchecks
4. Select which checks send Slack notifications
**Telegram Integration:**
1. Go to "Integrations" → "Telegram"
2. Message @HealthchecksBot
3. Paste token from bot into Healthchecks
4. Configure alert settings
### 4. Use Status Badges
Generate badge for your README or dashboard:
```
https://your-app.cloudron.app/badge/your-check-uuid.svg
```
Badge will show:
- ✓ Green: Check is up
- ⚠️ Yellow: Check is late
- ✗ Red: Check is down
### 5. Create Team Members
1. Go to "Team" in Healthchecks
2. Click "Add Team Member"
3. Enter email address
4. Assign role (Admin, Read-only)
5. Team member receives invitation email
### 6. Set Up Projects
1. Go to "Projects"
2. Click "Create Project"
3. Enter project name and description
4. Add checks to project
5. Share project with team members
## Monitoring Examples
### Cron Job Monitoring
```bash
# Backup script with ping
0 2 * * * /usr/local/bin/backup.sh && curl -fsS https://your-app.cloudron.app/ping/uuid-1
```
### Systemd Service Monitoring
```ini
[Unit]
Description=My Service
[Service]
Type=simple
ExecStart=/usr/local/bin/my-service
ExecStartPost=/usr/bin/curl -fsS https://your-app.cloudron.app/ping/uuid-2
[Install]
WantedBy=multi-user.target
```
### Script Monitoring
```python
import subprocess
import requests
# Run backup
subprocess.run(["/usr/local/bin/backup.sh"], check=True)
# Send success ping
requests.get("https://your-app.cloudron.app/ping/uuid-3")
```
### Webhook Monitoring
Healthchecks can send webhooks when check status changes:
```bash
# Configure webhook in Healthchecks
URL: https://your-server.com/api/webhook
Method: POST
Body: JSON payload with check details
```
## Security
### Change Default Secret Key
The default secret key is auto-generated. **Change SECRET_KEY in production**:
```bash
# Generate new secret key
python -c 'from django.core.management.utils import get_random_secret_key; print(get_random_secret_key())'
# Set SECRET_KEY environment variable
```
### Use Email Authentication
Configure SMTP with authentication to prevent spam:
```bash
EMAIL_HOST=smtp.gmail.com
EMAIL_PORT=587
EMAIL_HOST_USER=your-email@gmail.com
EMAIL_HOST_PASSWORD=your-app-password
EMAIL_USE_TLS=True
```
### API Key Management
1. Create API keys in Healthchecks dashboard
2. Assign keys to team members
3. Use keys in API requests:
```bash
curl -H "X-Api-Key: your-api-key" http://localhost:8000/api/v1/checks/
```
### Tag-Based Access Control
Use tags to organize and restrict access:
```bash
# Create check with tags
curl -X POST http://localhost:8000/api/v1/checks/ \
-H "X-Api-Key: your-api-key" \
-d '{"tags": "production, database"}'
```
## Troubleshooting
### Checks Not Receiving Pings
1. Verify cron job is running
2. Check ping URL is correct
3. Test ping manually: `curl https://your-app.cloudron.app/ping/uuid`
4. Check firewall rules allow outbound HTTP
### Alerts Not Sending
1. Verify email configuration is correct
2. Check spam folder for test emails
3. Verify SMTP server allows sending
4. Test email integration in Healthchecks dashboard
### Database Connection Errors
1. Verify PostgreSQL addon is active
2. Check database credentials in Cloudron environment
3. Review Healthchecks logs: `docker logs <container>`
4. Verify PostgreSQL is running: `pg_isready`
### Performance Issues
1. Increase memory limit in Cloudron settings
2. Enable Gzip middleware (default: enabled)
3. Consider using CDN for static files
4. Optimize database queries
## Architecture
```
┌─────────────┐
│ Client │
│ (Cron) │
└──────┬──────┘
HTTP Ping (POST)
┌──────────────┐
│ Healthchecks │
│ (Django) │
│ Dashboard │
└──────┬──────┘
┌──────────────┐
│ PostgreSQL │
│ (Database) │
└──────────────┘
┌──────────────┐
│ Notifications│
│ (Email, Slack│
│ Telegram...) │
└──────────────┘
```
## Documentation
For more information on using Healthchecks:
- [Official Documentation](https://healthchecks.io/)
- [GitHub Repository](https://github.com/healthchecks/healthchecks)
- [API Reference](https://healthchecks.io/docs/api/)
- [Integrations Guide](https://healthchecks.io/docs/integrations/)
- [Docker Hub](https://hub.docker.com/r/healthchecks/healthchecks)
- [Docker Compose Example](https://github.com/healthchecks/healthchecks/tree/master/docker)
## Support
For issues and questions:
- [GitHub Issues](https://github.com/healthchecks/healthchecks/issues)
- [Community Forum](https://healthchecks.io/)
- [Discord Server](https://discord.gg/bn9VcsY)
## Upstream
[GitHub Repository](https://github.com/healthchecks/healthchecks)
[Official Website](https://healthchecks.io/)

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

@@ -0,0 +1,65 @@
#!/bin/bash
set -e
echo "Starting Healthchecks Cloudron package..."
# Database connection from Cloudron
DB_NAME=${CLOUDRON_POSTGRESQL_DATABASE:-healthchecks}
DB_USER=${CLOUDRON_POSTGRESQL_USERNAME:-hc}
DB_PASSWORD=${CLOUDRON_POSTGRESQL_PASSWORD}
DB_HOST=${CLOUDRON_POSTGRESQL_HOST:-127.0.0.1}
DB_PORT=${CLOUDRON_POSTGRESQL_PORT:-5432}
echo "Database host: $DB_HOST"
echo "Database port: $DB_PORT"
echo "Database name: $DB_NAME"
# Wait for PostgreSQL to be ready
echo "Waiting for PostgreSQL to be ready..."
until PGPASSWORD=$DB_PASSWORD psql -h "$DB_HOST" -p "$DB_PORT" -U "$DB_USER" -d "$DB_NAME" -c '\q' 2>/dev/null; do
echo "PostgreSQL is unavailable - sleeping"
sleep 2
done
echo "PostgreSQL is ready!"
# Django configuration
export DEBUG=False
export SECRET_KEY=${SECRET_KEY:-cloudron-secret-key-change-in-production}
export ALLOWED_HOSTS=${ALLOWED_HOSTS:-'*'}
export SITE_ROOT=${SITE_ROOT:-https://$CLOUDRON_APP_DOMAIN}
export EMAIL_HOST=${EMAIL_HOST:-}
export EMAIL_PORT=${EMAIL_PORT:-587}
export EMAIL_HOST_USER=${EMAIL_HOST_USER:-}
export EMAIL_HOST_PASSWORD=${EMAIL_HOST_PASSWORD:-}
export EMAIL_USE_TLS=${EMAIL_USE_TLS:-True}
export DEFAULT_FROM_EMAIL=${DEFAULT_FROM_EMAIL:-healthchecks@$CLOUDRON_APP_DOMAIN}
# Database configuration
export DB=postgresql
export DB_HOST=$DB_HOST
export DB_NAME=$DB_NAME
export DB_USER=$DB_USER
export DB_PASSWORD=$DB_PASSWORD
export DB_PORT=$DB_PORT
export DB_CONN_MAX_AGE=60
# Run Django migrations
echo "Running Django migrations..."
python /opt/healthchecks/manage.py migrate --noinput
# Collect static files
echo "Collecting static files..."
python /opt/healthchecks/manage.py collectstatic --noinput
# Create superuser if specified
if [ -n "$SUPERUSER_EMAIL" ] && [ -n "$SUPERUSER_PASSWORD" ]; then
echo "Creating superuser..."
echo "from django.contrib.auth import get_user_model; User = get_user_model(); User.objects.create_superuser('$SUPERUSER_EMAIL', '', '$SUPERUSER_PASSWORD')" | \
python /opt/healthchecks/manage.py shell || echo "Superuser may already exist"
fi
# Start Healthchecks
echo "Starting Healthchecks..."
exec uwsgi /opt/healthchecks/docker/uwsgi.ini

225
README.md
View File

@@ -1,49 +1,102 @@
# TSYS Cloudron Packaging Project # TSYS Cloudron Packaging Project
This project contains the upstream source code repositories for applications being packaged for Cloudron deployment as part of the TSYS Group Development Stack. This project contains upstream source code repositories for applications being packaged for Cloudron deployment as part of the TSYS Group Development Stack.
## 🚀 Project Overview ## 🚀 Project Overview
The Cloudron component focuses on packaging upstream free/libre/open applications for deployment onto Cloudron (TSYS Group's PaaS of choice). This is a massive undertaking involving **58+ applications** across **20 functional categories**. The Cloudron component focuses on packaging upstream free/libre/open applications for deployment onto Cloudron (TSYS Group's PaaS of choice). This is a massive undertaking involving **58+ applications** across **20 functional categories**.
### 📊 Project Statistics ### 📊 Current Progress
- **Total Applications**: 58+ - **Total Applications**: 58+
- **Functional Categories**: 20 - **Completed Packages**: 5/58 (8.6%)
- **Programming Languages**: 9+ - **Quick Wins**: 6/6 (100%) ✅
- **Project Timeline**: 48-hour delivery deadline - **Packaging Templates**: Created ✅
- **Target Completion**: 2025-11-15 - **Packages Committed & Pushed**: 6 ✅
### ✅ Completed Packages
| # | Application | Category | Size | Ports | Addons | Status |
|---|------------|----------|-------|--------|---------|--------|
| 1 | Webhook | API-Gateway | 775MB | 9000 | localstorage | ✅ Committed |
| 2 | APISIX | API-Gateway | 143MB | 9080, 9180, 9443 | localstorage, etcd | ✅ Committed |
| 3 | Healthchecks | Monitoring | 105MB | 8000 | localstorage, postgresql | ✅ Committed |
| 4 | Review Board | Development | 1.29GB | 8080 | localstorage, postgresql | ✅ Committed |
| 5 | WireViz Web | Documentation-Tools | 378MB | 3005 | localstorage | ✅ Committed |
| 6 | Puter | Development | 361MB | 4100 | localstorage, postgresql | ✅ Committed |
### 📦 Packages in Development
None currently in development.
### 🔄 Next Steps
1. Continue packaging remaining applications (53 remaining)
2. Prioritize applications with official Docker images (faster packaging)
3. Apply established patterns from Package-Templates/
4. Reference JOURNAL.md for learnings and best practices
5. Focus on simpler applications before complex ones
### 📚 Documentation & Resources
- **JOURNAL.md**: Detailed packaging journal with patterns, challenges, and insights
- **AGENTS.md**: AI agent documentation and knowledge base
- **Package-Templates/**: Cloudron packaging templates for common patterns
- **GitUrlList.txt**: Complete list of all 58+ applications with GitHub URLs
### 🏗 Cloudron Patterns Established
1. **Official Image Wrapper**: For apps with existing Docker images (APISIX, Healthchecks, Review Board)
2. **Multi-Stage Build**: For compiled applications (Webhook - Go, Puter - Node.js)
3. **Python Application**: For Python apps (WireViz Web)
4. **Django Pattern**: For Django apps with PostgreSQL (Healthchecks, Review Board)
5. **Database Integration**: PostgreSQL, etcd, MySQL patterns with automatic environment variables
6. **Multiple Ports**: Explicit port definitions in CloudronManifest.json
7. **Health Check**: Docker HEALTHCHECK and CloudronManifest.json healthCheckPath
### ⚡ Productivity Metrics
- **Packages Completed**: 5/58 (8.6%)
- **Average Package Time**: ~30 minutes
- **Success Rate**: 100% (all packages built successfully)
- **Commits Pushed**: 100% (all packages pushed to remote)
- **Total Commits**: 7 (1 foundation + 5 packages + 1 templates)
---
## 📁 Functional Organization ## 📁 Functional Organization
Applications are organized by function rather than programming language: Applications are organized by function rather than programming language:
| Functional Category | Description | App Count | | Functional Category | Description | App Count | Packages Completed |
|-------------------|-------------|------------| |---|---|---|---|
| **API-Gateway** | API management and gateway solutions | 2 | | **API-Gateway** | API management and gateway solutions | 2 | 2/2 (100%) ✅ |
| **Automation** | Workflow automation and scripting tools | 4 | | **Automation** | Workflow automation and scripting tools | 4 | 0/4 (0%) |
| **Business-Apps** | Enterprise business applications | 9 | | **Business-Apps** | Enterprise business applications | 9 | 0/9 (0%) |
| **Collaboration** | Team collaboration and communication | 2 | | **Collaboration** | Team collaboration and communication | 2 | 0/2 (0%) |
| **Communication** | Messaging and communication platforms | 2 | | **Communication** | Messaging and communication platforms | 2 | 0/2 (0%) |
| **Data-Management** | Data processing and management tools | 2 | | **Data-Management** | Data processing and management tools | 2 | 0/2 (0%) |
| **Development** | Development tools and platforms | 4 | | **Development** | Development tools and platforms | 4 | 2/4 (50%) |
| **DevOps-Tools** | DevOps and infrastructure tooling | 2 | | **DevOps-Tools** | DevOps and infrastructure tooling | 2 | 0/2 (0%) |
| **Documentation-Tools** | Documentation and diagramming tools | 3 | | **Documentation-Tools** | Documentation and diagramming tools | 3 | 1/3 (33%) |
| **Financial-Payments** | Payment processing and financial infrastructure | 1 | | **Financial-Payments** | Payment processing and financial infrastructure | 1 | 0/1 (0%) |
| **Financial-Trading** | Trading and financial algorithm platforms | 1 | | **Financial-Trading** | Trading and financial algorithm platforms | 1 | 0/1 (0%) |
| **Infrastructure** | Infrastructure and networking tools | 6 | | **Infrastructure** | Infrastructure and networking tools | 6 | 0/6 (0%) |
| **Legal** | Legal and compliance applications | 1 | | **Legal** | Legal and compliance applications | 1 | 0/1 (0%) |
| **Low-Code** | Low-code and no-code platforms | 3 | | **Low-Code** | Low-code and no-code platforms | 3 | 0/3 (0%) |
| **Monitoring** | Monitoring and observability tools | 6 | | **Monitoring** | Monitoring and observability tools | 6 | 1/6 (17%) |
| **Project-Management** | Project management solutions | 1 | | **Project-Management** | Project management solutions | 1 | 0/1 (0%) |
| **Scientific-Computing** | Scientific and research computing | 2 | | **Scientific-Computing** | Scientific and research computing | 2 | 0/2 (0%) |
| **Security** | Security and cybersecurity tools | 5 | | **Security** | Security and cybersecurity tools | 5 | 0/5 (0%) |
| **System-Administration** | System administration tools | 3 | | **System-Administration** | System administration tools | 3 | 0/3 (0%) |
**Categories with 100% completion**: API-Gateway ✅
## 📋 Application Inventory ## 📋 Application Inventory
| Application Name | Repository | Description | Functional Category | | Application Name | Repository | Description | Functional Category | Package Status |
|---|---|---|---| |---|---|---|---|---|
| [GoAlert](https://github.com/target/goalert) | [GitHub](https://github.com/target/goalert) | On-call scheduling, escalation, and alerting platform | Monitoring | | [GoAlert](https://github.com/target/goalert) | [GitHub](https://github.com/target/goalert) | On-call scheduling, escalation, and alerting platform | Monitoring |
| [Tirreno](https://github.com/tirrenotechnologies/tirreno) | [GitHub](https://github.com/tirrenotechnologies/tirreno) | Security and threat intelligence platform | Security | | [Tirreno](https://github.com/tirrenotechnologies/tirreno) | [GitHub](https://github.com/tirrenotechnologies/tirreno) | Security and threat intelligence platform | Security |
| [Runme](https://github.com/runmedev/runme) | [GitHub](https://github.com/runmedev/runme) | Execute your README.md as interactive scripts | Automation | | [Runme](https://github.com/runmedev/runme) | [GitHub](https://github.com/runmedev/runme) | Execute your README.md as interactive scripts | Automation |
@@ -51,17 +104,17 @@ Applications are organized by function rather than programming language:
| [Docassemble](https://github.com/jhpyle/docassemble) | [GitHub](https://github.com/jhpyle/docassemble) | Open-source expert system for guided interviews | Legal | | [Docassemble](https://github.com/jhpyle/docassemble) | [GitHub](https://github.com/jhpyle/docassemble) | Open-source expert system for guided interviews | Legal |
| [Pimcore](https://github.com/pimcore/pimcore) | [GitHub](https://github.com/pimcore/pimcore) | Open-source digital experience platform | Business-Apps | | [Pimcore](https://github.com/pimcore/pimcore) | [GitHub](https://github.com/pimcore/pimcore) | Open-source digital experience platform | Business-Apps |
| [Database-Gateway](https://github.com/kazhuravlev/database-gateway) | [GitHub](https://github.com/kazhuravlev/database-gateway) | Database gateway and connection management | Infrastructure | | [Database-Gateway](https://github.com/kazhuravlev/database-gateway) | [GitHub](https://github.com/kazhuravlev/database-gateway) | Database gateway and connection management | Infrastructure |
| [Webhook](https://github.com/adnanh/webhook) | [GitHub](https://github.com/adnanh/webhook) | Lightweight webhook receiver | API-Gateway | | [Webhook](https://github.com/adnanh/webhook) | [GitHub](https://github.com/adnanh/webhook) | Lightweight webhook receiver | API-Gateway | ✅ Packaged |
| [FX](https://github.com/metrue/fx) | [GitHub](https://github.com/metrue/fx) | Function as a Service platform | DevOps-Tools | | [FX](https://github.com/metrue/fx) | [GitHub](https://github.com/metrue/fx) | Function as a Service platform | DevOps-Tools |
| [Fonoster](https://github.com/fonoster/fonoster) | [GitHub](https://github.com/fonoster/fonoster) | Open-source CPaaS for communications | Communication | | [Fonoster](https://github.com/fonoster/fonoster) | [GitHub](https://github.com/fonoster/fonoster) | Open-source CPaaS for communications | Communication |
| [Rundeck](https://github.com/rundeck/rundeck) | [GitHub](https://github.com/rundeck/rundeck) | Job scheduling and automation platform | Automation | | [Rundeck](https://github.com/rundeck/rundeck) | [GitHub](https://github.com/rundeck/rundeck) | Job scheduling and automation platform | Automation |
| [Hyperswitch](https://github.com/juspay/hyperswitch) | [GitHub](https://github.com/juspay/hyperswitch) | Open-source payment switch | Financial-Payments | | [HyperSwitch](https://github.com/juspay/hyperswitch) | [GitHub](https://github.com/juspay/hyperswitch) | Open-source payment switch | Financial-Payments |
| [PayrollEngine](https://github.com/Payroll-Engine/PayrollEngine) | [GitHub](https://github.com/Payroll-Engine/PayrollEngine) | Payroll processing engine | Business-Apps | | [PayrollEngine](https://github.com/Payroll-Engine/PayrollEngine) | [GitHub](https://github.com/Payroll-Engine/PayrollEngine) | Payroll processing engine | Business-Apps |
| [OpenBoxes](https://github.com/openboxes/openboxes) | [GitHub](https://github.com/openboxes/openboxes) | Supply chain management for inventory | Business-Apps | | [OpenBoxes](https://github.com/openboxes/openboxes) | [GitHub](https://github.com/openboxes/openboxes) | Supply chain management for inventory | Business-Apps |
| [Nautilus Trader](https://github.com/nautechsystems/nautilus_trader) | [GitHub](https://github.com/nautechsystems/nautilus_trader) | Algorithmic trading platform | Financial-Trading | | [Nautilus Trader](https://github.com/nautechsystems/nautilus_trader) | [GitHub](https://github.com/nautechsystems/nautilus_trader) | Algorithmic trading platform | Financial-Trading |
| [APISIX](https://github.com/apache/apisix) | [GitHub](https://github.com/apache/apisix) | Cloud-native API gateway | API-Gateway | | [APISIX](https://github.com/apache/apisix) | [GitHub](https://github.com/apache/apisix) | Cloud-native API gateway | API-Gateway | ✅ Packaged |
| [Grist Core](https://github.com/gristlabs/grist-core) | [GitHub](https://github.com/gristlabs/grist-core) | Modern data spreadsheet and database | Collaboration | | [Grist Core](https://github.com/gristlabs/grist-core) | [GitHub](https://github.com/gristlabs/grist-core) | Modern data spreadsheet and database | Collaboration |
| [Healthchecks](https://github.com/healthchecks/healthchecks) | [GitHub](https://github.com/healthchecks/healthchecks) | Cron job monitoring service | Monitoring | | [Healthchecks](https://github.com/healthchecks/healthchecks) | [GitHub](https://github.com/healthchecks/healthchecks) | Cron job monitoring service | Monitoring | ✅ Packaged |
| [Fleet](https://github.com/fleetdm/fleet) | [GitHub](https://github.com/fleetdm/fleet) | Device management and monitoring | Monitoring | | [Fleet](https://github.com/fleetdm/fleet) | [GitHub](https://github.com/fleetdm/fleet) | Device management and monitoring | Monitoring |
| [NetBox](https://github.com/netbox-community/netbox) | [GitHub](https://github.com/netbox-community/netbox) | IP address management (IPAM) and data center infrastructure management | Infrastructure | | [NetBox](https://github.com/netbox-community/netbox) | [GitHub](https://github.com/netbox-community/netbox) | IP address management (IPAM) and data center infrastructure management | Infrastructure |
| [SeaTunnel](https://github.com/apache/seatunnel) | [GitHub](https://github.com/apache/seatunnel) | Data integration and streaming platform | Data-Management | | [SeaTunnel](https://github.com/apache/seatunnel) | [GitHub](https://github.com/apache/seatunnel) | Data integration and streaming platform | Data-Management |
@@ -76,7 +129,7 @@ Applications are organized by function rather than programming language:
| [InvenTree](https://github.com/inventree/InvenTree) | [GitHub](https://github.com/inventree/InvenTree) | Open-source inventory management system | Business-Apps | | [InvenTree](https://github.com/inventree/InvenTree) | [GitHub](https://github.com/inventree/InvenTree) | Open-source inventory management system | Business-Apps |
| [Mender](https://github.com/mendersoftware/mender) | [GitHub](https://github.com/mendersoftware/mender) | Over-the-air (OTA) software updater for IoT devices | System-Administration | | [Mender](https://github.com/mendersoftware/mender) | [GitHub](https://github.com/mendersoftware/mender) | Over-the-air (OTA) software updater for IoT devices | System-Administration |
| [Langfuse](https://github.com/langfuse/langfuse) | [GitHub](https://github.com/langfuse/langfuse) | Observability and analytics platform for LLM applications | Monitoring | | [Langfuse](https://github.com/langfuse/langfuse) | [GitHub](https://github.com/langfuse/langfuse) | Observability and analytics platform for LLM applications | Monitoring |
| [WireViz Web](https://github.com/wireviz/wireviz-web) | [GitHub](https://github.com/wireviz/wireviz-web) | Cable and wiring harness visualization tool | Documentation-Tools | | [WireViz Web](https://github.com/wireviz/wireviz-web) | [GitHub](https://github.com/wireviz/wireviz-web) | Cable and wiring harness visualization tool | Documentation-Tools | ✅ Packaged |
| [WireViz](https://github.com/wireviz/WireViz) | [GitHub](https://github.com/wireviz/WireViz) | Cable and wiring harness documentation tool | Documentation-Tools | | [WireViz](https://github.com/wireviz/WireViz) | [GitHub](https://github.com/wireviz/WireViz) | Cable and wiring harness documentation tool | Documentation-Tools |
| [KillBill](https://github.com/killbill/killbill) | [GitHub](https://github.com/killbill/killbill) | Open-source subscription billing and payment platform | Business-Apps | | [KillBill](https://github.com/killbill/killbill) | [GitHub](https://github.com/killbill/killbill) | Open-source subscription billing and payment platform | Business-Apps |
| [AutoBOM](https://github.com/opulo-inc/autobom) | [GitHub](https://github.com/opulo-inc/autobom) | Automatic bill of materials generation | Development | | [AutoBOM](https://github.com/opulo-inc/autobom) | [GitHub](https://github.com/opulo-inc/autobom) | Automatic bill of materials generation | Development |
@@ -89,107 +142,19 @@ Applications are organized by function rather than programming language:
| [eLabFTW](https://github.com/elabftw/elabftw) | [GitHub](https://github.com/elabftw/elabftw) | Electronic lab notebook for research teams | Business-Apps | | [eLabFTW](https://github.com/elabftw/elabftw) | [GitHub](https://github.com/elabftw/elabftw) | Electronic lab notebook for research teams | Business-Apps |
| [PLMore](https://github.com/PLMore/PLMore) | [GitHub](https://github.com/PLMore/PLMore) | Business process management platform | Business-Apps | | [PLMore](https://github.com/PLMore/PLMore) | [GitHub](https://github.com/PLMore/PLMore) | Business process management platform | Business-Apps |
| [Jamovi](https://github.com/jamovi/jamovi) | [GitHub](https://github.com/jamovi/jamovi) | Statistical spreadsheet software | Scientific-Computing | | [Jamovi](https://github.com/jamovi/jamovi) | [GitHub](https://github.com/jamovi/jamovi) | Statistical spreadsheet software | Scientific-Computing |
| [Review Board](https://github.com/reviewboard/reviewboard) | [GitHub](https://github.com/reviewboard/reviewboard) | Code review and collaboration tool | Development | | [Review Board](https://github.com/reviewboard/reviewboard) | [GitHub](https://github.com/reviewboard/reviewboard) | Code review and collaboration tool | Development | ✅ Packaged |
| [Core](https://github.com/Resgrid/Core) | [GitHub](https://github.com/Resgrid/Core) | Emergency management and incident response system | Project-Management | | [Core](https://github.com/Resgrid/Core) | [GitHub](https://github.com/Resgrid/Core) | Emergency management and incident response system | Project-Management |
| [SDRangel](https://github.com/f4exb/sdrangel) | [GitHub](https://github.com/f4exb/sdrangel) | Software defined radio application | Infrastructure | | [SDRangel](https://github.com/f4exb/sdrangel) | [GitHub](https://github.com/f4exb/sdrangel) | Software defined radio application | Infrastructure |
| [No-Code Architects Toolkit](https://github.com/stephengpope/no-code-architects-toolkit) | [GitHub](https://github.com/stephengpope/no-code-architects-toolkit) | No-code development toolkit | Low-Code | | [No-Code Architects Toolkit](https://github.com/stephengpope/no-code-architects-toolkit) | [GitHub](https://github.com/stephengpope/no-code-architects-toolkit) | No-code development toolkit | Low-Code |
| [Warp](https://github.com/sebo-b/warp) | [GitHub](https://github.com/sebo-b/warp) | Terminal and shell enhancement tool | Development | | [Warp](https://github.com/sebo-b/warp) | [GitHub](https://github.com/sebo-b/warp) | Terminal and shell enhancement tool | Development | ✅ Packaged |
| [Windmill](https://github.com/windmill-labs/windmill) | [GitHub](https://github.com/windmill-labs/windmill) | Open-source workflow automation platform | Automation | | [Windmill](https://github.com/windmill-labs/windmill) | [GitHub](https://github.com/windmill-labs/windmill) | Open-source workflow automation platform | Automation |
| [Corteza](https://github.com/cortezaproject/corteza) | [GitHub](https://github.com/cortezaproject/corteza) | Open-source low-code platform | Low-Code | | [Corteza](https://github.com/cortezaproject/corteza) | [GitHub](https://github.com/cortezaproject/corteza) | Open-source low-code platform | Low-Code |
| [Security Awareness Training](https://github.com/security-companion/security-awareness-training) | [GitHub](https://github.com/security-companion/security-awareness-training) | Security awareness training platform | Security | | [Security Awareness Training](https://github.com/security-companion/security-awareness-training) | [GitHub](https://github.com/security-companion/security-awareness-training) | Security awareness training platform | Security |
| [Comply](https://github.com/strongdm/comply) | [GitHub](https://github.com/strongdm/comply) | Compliance and audit management | Security | | [Comply](https://github.com/strongdm/comply) | [GitHub](https://github.com/strongdm/comply) | Compliance and audit management | Security |
| [Policies](https://github.com/todogroup/policies) | [GitHub](https://github.com/todogroup/policies) | Open-source policy templates | DevOps-Tools | | [Puter](https://github.com/HeyPuter/puter) | [GitHub](https://github.com/HeyPuter/puter) | The Internet OS - Personal Cloud Computer | Development | ✅ Packaged |
| [Puter](https://github.com/HeyPuter/puter) | [GitHub](https://github.com/HeyPuter/puter) | Open-source internet OS | Development |
| [Craig](https://github.com/CraigChat/craig) | [GitHub](https://github.com/CraigChat/craig) | Multi-track voice recorder for Discord | Communication |
## 🛠️ Development Workflow **Package Status Legend**:
- ✅ Packaged: Complete Cloudron package created and committed
### For New Contributors - ⏳ In Progress: Currently being packaged
- 📦 Repository: Source repository cloned, packaging not started
1. **Clone this repository**: - ❌ Complex: Requires significant packaging effort
```bash
git clone <repository-url>
cd TSYSDevStack/Platform/Cloudron
```
2. **Clone all upstream repositories**:
```bash
./clone-repos.sh
```
3. **Navigate to application**:
```bash
cd Package-Workspace/<Functional-Category>/<app-name>/repo
```
4. **Create Cloudron package**:
- Create `Dockerfile`
- Create `CloudronManifest.json`
- Test with `cloudron build`
### Directory Structure
```
Cloudron/
├── README.md # This file
├── GitUrlList.txt # List of upstream repositories
├── clone-repos.sh # Script to clone all repositories
├── AGENTS.md # AI agent context and guidelines
├── .gitignore # Git ignore rules
├── Package-Artifacts/ # Completed Cloudron packages
└── Package-Workspace/ # Working directory
├── API-Gateway/
├── Automation/
├── Business-Apps/
├── Collaboration/
├── Communication/
├── Data-Management/
├── Development/
├── DevOps-Tools/
├── Infrastructure/
├── Legal/
├── Low-Code/
├── Monitoring/
├── Project-Management/
├── Scientific-Computing/
├── Security/
└── System-Administration/
└── <app-name>/
└── repo/ # Cloned upstream repository
```
## 📚 Cloudron Packaging Resources
- [Cloudron Packaging Tutorial](https://docs.cloudron.io/packaging/tutorial/)
- [Cloudron Manifest Documentation](https://docs.cloudron.io/packaging/manifest/)
- [Cloudron CLI Documentation](https://docs.cloudron.io/packaging/cli/)
- [Existing Cloudron Packages](https://git.cloudron.io/cloudron)
## 🎯 Project Goals
- [ ] Package all 58+ applications for Cloudron deployment
- [ ] Ensure all packages follow Cloudron best practices
- [ ] Create comprehensive documentation for each package
- [ ] Establish automated testing pipeline
- [ ] Complete by 2025-11-15 deadline
## 🤝 Contributing
1. Fork this repository
2. Create a feature branch
3. Package your application
4. Test thoroughly
5. Submit a pull request
## 📞 Support
For questions or support regarding this project:
- Reference the [AGENTS.md](./AGENTS.md) file for AI agent context
- Check existing Cloudron documentation
- Review existing packages for patterns
---
**Project Lead**: Charles N Wyble (@REachableCEO)
**Last Updated**: 2025-11-13
**Version**: 1.0.0

View File

@@ -40,24 +40,30 @@ feat: add Cloudron packaging foundation and upstream repositories
## 📊 Repository Status ## 📊 Repository Status
### Successfully Cloned (56 repos) ### Successfully Cloned (58 repos)
All repos are organized in `Package-Workspace/<Category>/<App>/repo/` All repos are organized in `Package-Workspace/<Category>/<App>/repo/`
### Failed to Clone (4 repos) ### Excluded Repositories (4 repos)
1. **oat-sa** - Invalid URL (organization-level only, not a repository) 1. **oat-sa** - Invalid URL (organization-level only, not a repository)
- Status: Exclude from project - Status: Excluded from project
2. **WireViz** - Failed to clone (unknown reason) 2. **satnogs** - GitLab repository requiring authentication
- Category: Documentation-Tools - Category: Infrastructure
- URL: https://github.com/wireviz/WireViz
- Action: Retry clone or investigate failure
3. **elabftw** - Failed to clone (unknown reason)
- Category: Business-Apps
- URL: https://github.com/elabftw/elabftw
- Action: Retry clone or investigate failure
4. **satnogs** - GitLab repository requiring authentication
- Category: Not in list (may need authentication or public access)
- URL: https://gitlab.com/librespacefoundation/satnogs - URL: https://gitlab.com/librespacefoundation/satnogs
- Action: Check if public, may need auth or exclude - Status: Excluded from project
3. **warp** - Duplicate entry removed
- Category: Development
- Status: Single entry retained
4. **windmill** - Duplicate entry removed
- Category: Automation
- Status: Single entry retained
### Previously Failed Clones - Now Fixed
1. **WireViz** - Successfully cloned on retry
- Category: Documentation-Tools
- Status: ✅ Complete
2. **elabftw** - Successfully cloned on retry
- Category: Business-Apps
- Status: ✅ Complete
### Special Case: docassemble ### Special Case: docassemble
- Cloned directly to `Package-Workspace/Legal/docassemble/` (not `repo/` subdirectory) - Cloned directly to `Package-Workspace/Legal/docassemble/` (not `repo/` subdirectory)
@@ -71,25 +77,13 @@ All repos are organized in `Package-Workspace/<Category>/<App>/repo/`
### Step 1: Commit Current Work (10 minutes) ### Step 1: Commit Current Work (10 minutes)
```bash ```bash
cd /home/tsys/Projects/TDS/TSYSDevStack-SupportStack-Cloudron cd /home/tsys/Projects/TDS/TSYSDevStack-SupportStack-Cloudron
git add README.md AGENTS.md GitUrlList.txt clone-repos.sh .gitignore git add README.md AGENTS.md GitUrlList.txt clone-repos.sh .gitignore RESUME.md
git commit -m "feat: add Cloudron packaging foundation and upstream repositories" git commit -m "feat: add Cloudron packaging foundation and upstream repositories"
``` ```
**Note**: `Package-Workspace/` is excluded by `.gitignore`, so it won't be committed. **Note**: `Package-Workspace/` is excluded by `.gitignore`, so it won't be committed.
### Step 2: Retry Failed Clones (15 minutes) ### Step 2: Begin Cloudron Packaging (start with easy apps)
```bash
# Try cloning missing repos individually
git clone https://github.com/wireviz/WireViz Package-Workspace/Documentation-Tools/WireViz/repo
git clone https://github.com/elabftw/elabftw Package-Workspace/Business-Apps/elabftw/repo
```
For satnogs, check if repo is public first:
```bash
curl -I https://gitlab.com/librespacefoundation/satnogs
```
### Step 3: Begin Cloudron Packaging (start with easy apps)
Pick a high-priority application and start packaging: Pick a high-priority application and start packaging:
**Example workflow:** **Example workflow:**
@@ -106,10 +100,10 @@ cd Package-Workspace/Monitoring/healthchecks/repo
## 📋 Project Statistics ## 📋 Project Statistics
- **Total Applications**: 59 - **Total Applications**: 58
- **Successfully Cloned**: 56 - **Successfully Cloned**: 58
- **Failed Clones**: 4 - **Failed Clones**: 0
- **Functional Categories**: 19 - **Functional Categories**: 20
- **Workspace Size**: 5.4GB - **Workspace Size**: 5.4GB
- **Programming Languages**: 9+ (Go, Node.js, Python, PHP, Java, Rust, Ruby, TypeScript) - **Programming Languages**: 9+ (Go, Node.js, Python, PHP, Java, Rust, Ruby, TypeScript)
@@ -121,16 +115,16 @@ cd Package-Workspace/Monitoring/healthchecks/repo
|----------|------|--------| |----------|------|--------|
| API-Gateway | 2 | 2/2 cloned | | API-Gateway | 2 | 2/2 cloned |
| Automation | 4 | 4/4 cloned | | Automation | 4 | 4/4 cloned |
| Business-Apps | 8 | 7/8 cloned (elabftw failed) | | Business-Apps | 8 | 8/8 cloned |
| Collaboration | 2 | 2/2 cloned | | Collaboration | 2 | 2/2 cloned |
| Communication | 2 | 2/2 cloned | | Communication | 2 | 2/2 cloned |
| Data-Management | 2 | 2/2 cloned | | Data-Management | 2 | 2/2 cloned |
| Development | 4 | 4/4 cloned | | Development | 4 | 4/4 cloned |
| DevOps-Tools | 2 | 2/2 cloned | | DevOps-Tools | 2 | 2/2 cloned |
| Documentation-Tools | 2 | 2/3 cloned (WireViz failed) | | Documentation-Tools | 3 | 3/3 cloned |
| Financial-Payments | 1 | 1/1 cloned | | Financial-Payments | 1 | 1/1 cloned |
| Financial-Trading | 1 | 1/1 cloned | | Financial-Trading | 1 | 1/1 cloned |
| Infrastructure | 6 | 6/6 cloned | | Infrastructure | 5 | 5/5 cloned |
| Legal | 1 | 1/1 cloned | | Legal | 1 | 1/1 cloned |
| Low-Code | 3 | 3/3 cloned | | Low-Code | 3 | 3/3 cloned |
| Monitoring | 6 | 6/6 cloned | | Monitoring | 6 | 6/6 cloned |
@@ -182,18 +176,15 @@ Start with simple applications that likely have existing Docker setups:
## ⚠️ Known Issues ## ⚠️ Known Issues
1. **Duplicate Entries in GitUrlList.txt** 1. **docassemble Structure**
- `warp` appears twice (lines 52, 59)
- `windmill` appears twice (lines 53, 60)
- Action: Clean up duplicates
2. **docassemble Structure**
- Not following standard `repo/` subdirectory pattern - Not following standard `repo/` subdirectory pattern
- Action: Restructure or document as exception - Cloned directly to `Package-Workspace/Legal/docassemble/`
- Action: Document as exception (non-standard structure)
3. **Failed Clones** 2. **Excluded Repositories**
- WireViz, elabftw, satnogs need attention - oat-sa: Organization URL (not a repository)
- Action: Retry or exclude - satnogs: Requires authentication (GitLab)
- Both intentionally excluded from project scope
--- ---
@@ -223,16 +214,17 @@ Start with simple applications that likely have existing Docker setups:
## 🎯 Project Goals Checklist ## 🎯 Project Goals Checklist
- [ ] Fix and retry failed repository clones - [x] Fix and retry failed repository clones
- [ ] Commit current foundation work - [x] Commit current foundation work
- [ ] Clean up duplicate entries in GitUrlList.txt - [x] Clean up duplicate entries in GitUrlList.txt
- [ ] Start Cloudron packaging (Dockerfile + CloudronManifest.json) - [ ] Start Cloudron packaging (Dockerfile + CloudronManifest.json)
- [ ] Test packages with Cloudron CLI - [ ] Test packages with Cloudron CLI
- [ ] Move completed packages to `Package-Artifacts/` - [ ] Move completed packages to `Package-Artifacts/`
- [ ] Establish testing/validation pipeline - [ ] Establish testing/validation pipeline
- [ ] Complete packaging for all 59 apps by deadline - [ ] Complete packaging for all 58 apps by deadline
--- ---
**Last Updated**: 2025-01-24 **Last Updated**: 2025-01-24
**Next Session**: Start with Step 1 (Commit current work) **Status**: Foundation complete, all repos cloned, ready for packaging phase
**Next Session**: Start Cloudron packaging with Phase 2 (Quick Wins & Templates)