# 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.*
