{"id":29487625,"url":"https://github.com/ankosoftware/jsreport-helm","last_synced_at":"2026-03-07T15:34:40.887Z","repository":{"id":264049182,"uuid":"891741833","full_name":"ankosoftware/jsreport-helm","owner":"ankosoftware","description":null,"archived":false,"fork":false,"pushed_at":"2025-11-29T12:39:41.000Z","size":36,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-12-01T00:50:18.709Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Smarty","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ankosoftware.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2024-11-20T21:51:42.000Z","updated_at":"2025-11-29T12:39:34.000Z","dependencies_parsed_at":null,"dependency_job_id":"d63df2db-ebb6-46c8-a254-826d123e0159","html_url":"https://github.com/ankosoftware/jsreport-helm","commit_stats":null,"previous_names":["ankosoftware/jsreport-helm"],"tags_count":7,"template":false,"template_full_name":null,"purl":"pkg:github/ankosoftware/jsreport-helm","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ankosoftware%2Fjsreport-helm","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ankosoftware%2Fjsreport-helm/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ankosoftware%2Fjsreport-helm/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ankosoftware%2Fjsreport-helm/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ankosoftware","download_url":"https://codeload.github.com/ankosoftware/jsreport-helm/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ankosoftware%2Fjsreport-helm/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30219542,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-07T14:02:48.375Z","status":"ssl_error","status_checked_at":"2026-03-07T14:02:43.192Z","response_time":53,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-07-15T09:14:44.822Z","updated_at":"2026-03-07T15:34:40.877Z","avatar_url":"https://github.com/ankosoftware.png","language":"Smarty","funding_links":[],"categories":[],"sub_categories":[],"readme":"# JSReport Helm Chart\n\nA Helm chart for deploying [JSReport](https://jsreport.net/) on Kubernetes. JSReport is a powerful reporting platform for generating reports from JavaScript templates.\n\n## Table of Contents\n\n- [Prerequisites](#prerequisites)\n- [Installation](#installation)\n- [Uninstallation](#uninstallation)\n- [Configuration](#configuration)\n- [Values](#values)\n- [Examples](#examples)\n- [Upgrading](#upgrading)\n- [Contributing](#contributing)\n\n## Prerequisites\n\n- Kubernetes 1.18+\n- Helm 3.0+\n- PV provisioner support in the underlying infrastructure (if persistence is required)\n\n## Installation\n\n### Add Helm Repository\n\n```bash\n# Add the JSReport Helm repository\nhelm repo add jsreport-helm https://ankosoftware.github.io/jsreport-helm/\nhelm repo update\n```\n\n### Install the Chart\n\n```bash\n# Install with default values\nhelm install my-jsreport jsreport-helm/jsreport\n\n# Install with custom values\nhelm install my-jsreport jsreport-helm/jsreport -f my-values.yaml\n\n# Install in a specific namespace\nhelm install my-jsreport jsreport-helm/jsreport --namespace jsreport --create-namespace\n\n# Install from local chart (for development)\nhelm install my-jsreport charts/jsreport\n```\n\n### Verify Installation\n\n```bash\nkubectl get pods -l \"app.kubernetes.io/name=jsreport\"\n```\n\n## Uninstallation\n\n```bash\nhelm uninstall my-jsreport\n```\n\n## Configuration\n\nThe following table lists the configurable parameters of the JSReport chart and their default values.\n\n## Values\n\n| Key                                          | Type   | Default                                                                                        | Description                                      |\n| -------------------------------------------- | ------ | ---------------------------------------------------------------------------------------------- | ------------------------------------------------ |\n| `replicaCount`                               | int    | `1`                                                                                            | Number of JSReport replicas                      |\n| `image.repository`                           | string | `\"jsreport/jsreport\"`                                                                          | JSReport image repository                        |\n| `image.pullPolicy`                           | string | `\"IfNotPresent\"`                                                                               | Image pull policy                                |\n| `image.tag`                                  | string | `\"4.11.0-full\"`                                                                                 | JSReport image tag                               |\n| `env`                                        | list   | See values.yaml                                                                                | Environment variables for JSReport configuration |\n| `imagePullSecrets`                           | list   | `[]`                                                                                           | Image pull secrets                               |\n| `nameOverride`                               | string | `\"\"`                                                                                           | Override name of the chart                       |\n| `fullnameOverride`                           | string | `\"\"`                                                                                           | Override fullname of the chart                   |\n| `serviceAccount.create`                      | bool   | `true`                                                                                         | Create service account                           |\n| `serviceAccount.automount`                   | bool   | `true`                                                                                         | Automount service account token                  |\n| `serviceAccount.annotations`                 | object | `{}`                                                                                           | Service account annotations                      |\n| `serviceAccount.name`                        | string | `\"\"`                                                                                           | Service account name                             |\n| `podAnnotations`                             | object | `{}`                                                                                           | Pod annotations                                  |\n| `podLabels`                                  | object | `{}`                                                                                           | Pod labels                                       |\n| `podSecurityContext`                         | object | `{}`                                                                                           | Pod security context                             |\n| `securityContext`                            | object | `{}`                                                                                           | Container security context                       |\n| `service.type`                               | string | `\"ClusterIP\"`                                                                                  | Service type                                     |\n| `service.port`                               | int    | `5488`                                                                                         | Service port                                     |\n| `ingress.enabled`                            | bool   | `false`                                                                                        | Enable ingress                                   |\n| `ingress.className`                          | string | `\"\"`                                                                                           | Ingress class name                               |\n| `ingress.annotations`                        | object | `{}`                                                                                           | Ingress annotations                              |\n| `ingress.hosts`                              | list   | `[{\"host\": \"jsreport.local\", \"paths\": [{\"path\": \"/\", \"pathType\": \"ImplementationSpecific\"}]}]` | Ingress hosts                                    |\n| `ingress.tls`                                | list   | `[]`                                                                                           | Ingress TLS configuration                        |\n| `resources`                                  | object | `{\"limits\": {\"cpu\": \"1000m\", \"memory\": \"2Gi\"}, \"requests\": {\"cpu\": \"500m\", \"memory\": \"1Gi\"}}`  | Resource limits and requests                     |\n| `livenessProbe`                              | object | HTTP probe on port 5488                                                                        | Liveness probe configuration                     |\n| `readinessProbe`                             | object | HTTP probe on port 5488                                                                        | Readiness probe configuration                    |\n| `autoscaling.enabled`                        | bool   | `false`                                                                                        | Enable horizontal pod autoscaler                 |\n| `autoscaling.minReplicas`                    | int    | `1`                                                                                            | Minimum number of replicas                       |\n| `autoscaling.maxReplicas`                    | int    | `100`                                                                                          | Maximum number of replicas                       |\n| `autoscaling.targetCPUUtilizationPercentage` | int    | `80`                                                                                           | Target CPU utilization percentage                |\n| `volumes`                                    | list   | `[]`                                                                                           | Additional volumes                               |\n| `volumeMounts`                               | list   | `[]`                                                                                           | Additional volume mounts                         |\n| `nodeSelector`                               | object | `{}`                                                                                           | Node selector                                    |\n| `tolerations`                                | list   | `[]`                                                                                           | Tolerations                                      |\n| `affinity`                                   | object | `{}`                                                                                           | Affinity                                         |\n\n### Environment Variables\n\nThe chart includes several important environment variables for JSReport configuration:\n\n**Chrome/Puppeteer Configuration:**\n\n- `chrome_launchOptions_args`: Chrome launch options optimized for Kubernetes\n- Additional Chrome flags for stability and security\n\n**Authentication Configuration:**\n\n- `extensions_authentication_admin_username`: Admin username (default: \"admin\")\n- `extensions_authentication_admin_password`: Admin password (default: \"ChangeMe!Password!\")\n- `extensions_authentication_cookieSession_secret`: Session secret (default: \"ChangeMe!Secret!\")\n\n**Performance and Stability Settings:**\n\n- `NODE_ENV`: Set to \"production\" for optimal performance\n- `workers_numberOfWorkers`: Number of worker processes (default: 2)\n- `workers_timeout`: Worker timeout in milliseconds (default: 120000)\n- `NODE_OPTIONS`: Node.js memory management settings\n\n**⚠️ Important Security Note**: Change the default admin password and session secret in production deployments!\n\n## Examples\n\n### Basic Installation\n\n```bash\nhelm install jsreport jsreport-helm/jsreport\n```\n\n### Production Deployment with Custom Values\n\nCreate a `production-values.yaml` file:\n\n```yaml\nreplicaCount: 3\n\nimage:\n  tag: \"4.9.0-full\"\n\nenv:\n  - name: chrome_launchOptions_args\n    value: \"--no-sandbox,--disable-dev-shm-usage,--disable-gpu\"\n  - name: extensions_authentication_admin_username\n    value: \"admin\"\n  - name: extensions_authentication_admin_password\n    value: \"YourSecurePassword123!\"\n  - name: extensions_authentication_cookieSession_secret\n    value: \"YourSecureSessionSecret456!\"\n\nresources:\n  limits:\n    cpu: 1000m\n    memory: 2Gi\n  requests:\n    cpu: 500m\n    memory: 1Gi\n\n# Security settings\nsecurityContext:\n  runAsNonRoot: true\n  runAsUser: 1000\n  runAsGroup: 1000\n  capabilities:\n    drop:\n      - ALL\n  allowPrivilegeEscalation: false\n\n# Optimized environment variables\nenv:\n  - name: NODE_ENV\n    value: \"production\"\n  - name: workers_numberOfWorkers\n    value: \"2\"\n  - name: NODE_OPTIONS\n    value: \"--max-old-space-size=1536\"\n\ningress:\n  enabled: true\n  className: \"nginx\"\n  annotations:\n    kubernetes.io/tls-acme: \"true\"\n    cert-manager.io/cluster-issuer: \"letsencrypt-prod\"\n  hosts:\n    - host: jsreport.yourdomain.com\n      paths:\n        - path: /\n          pathType: ImplementationSpecific\n  tls:\n    - secretName: jsreport-tls\n      hosts:\n        - jsreport.yourdomain.com\n\nautoscaling:\n  enabled: true\n  minReplicas: 2\n  maxReplicas: 10\n  targetCPUUtilizationPercentage: 70\n```\n\nDeploy with:\n\n```bash\nhelm install jsreport jsreport-helm/jsreport -f production-values.yaml\n```\n\n### Deployment with Persistent Storage\n\n```yaml\n# For persistent data storage\nvolumes:\n  - name: jsreport-data\n    persistentVolumeClaim:\n      claimName: jsreport-pvc\n  # Temporary volumes are automatically configured\n  - name: tmp-volume\n    emptyDir:\n      sizeLimit: 1Gi\n\nvolumeMounts:\n  - name: jsreport-data\n    mountPath: /app/data\n  - name: tmp-volume\n    mountPath: /tmp\n```\n\n### Accessing JSReport\n\nAfter installation, get the application URL:\n\n```bash\n# For ClusterIP service (default)\nexport POD_NAME=$(kubectl get pods -l \"app.kubernetes.io/name=jsreport\" -o jsonpath=\"{.items[0].metadata.name}\")\nkubectl port-forward $POD_NAME 8080:5488\necho \"Visit http://127.0.0.1:8080 to use JSReport\"\n\n# For LoadBalancer service\nkubectl get svc jsreport\n\n# For Ingress\nkubectl get ingress jsreport\n```\n\n## Upgrading\n\n### Upgrade the Chart\n\n```bash\nhelm upgrade my-jsreport jsreport-helm/jsreport\n```\n\n### Upgrade with New Values\n\n```bash\nhelm upgrade my-jsreport jsreport-helm/jsreport -f my-new-values.yaml\n```\n\n### Check Upgrade History\n\n```bash\nhelm history my-jsreport\n```\n\n### Rollback\n\n```bash\nhelm rollback my-jsreport 1\n```\n\n## JSReport-Specific Considerations\n\n### Resource Requirements\n\nJSReport requires significant resources due to Chrome/Puppeteer for PDF generation:\n\n- **Minimum Memory**: 1Gi (recommended: 2Gi)\n- **Minimum CPU**: 500m (recommended: 1000m)\n- **Temporary Storage**: Required for Chrome cache and temp files\n\n### Chrome/Puppeteer Configuration\n\nThe chart includes optimized Chrome launch options for Kubernetes:\n\n- `--no-sandbox`: Required for running Chrome in containers\n- `--disable-dev-shm-usage`: Prevents /dev/shm size issues\n- `--disable-gpu`: Disables GPU acceleration (not needed for headless)\n- Additional flags for stability and security\n\n### Worker Configuration\n\nJSReport supports multiple worker processes for better performance:\n\n- Default: 2 workers per container\n- Workers handle PDF generation in parallel\n- Configurable timeout and port ranges\n\n### Memory Management\n\nNode.js memory settings are optimized for container environments:\n\n- `--max-old-space-size=1536`: Prevents memory issues in containers\n- Aligned with container memory limits\n\n## Security Considerations\n\n1. **Change Default Credentials**: Always change the default admin username and password in production\n2. **Use Strong Session Secrets**: Generate a strong, random session secret\n3. **Enable HTTPS**: Use TLS/SSL for production deployments\n4. **Resource Limits**: Set appropriate resource limits to prevent resource exhaustion\n5. **Security Context**: Configure appropriate security contexts for your environment\n6. **Non-Root User**: The chart runs as non-root user (UID 1000) by default\n7. **Capability Dropping**: All unnecessary Linux capabilities are dropped\n\n## Troubleshooting\n\n### Common Issues\n\n1. **Pod not starting**: Check resource limits and node capacity\n2. **Chrome crashes**: Ensure the `--no-sandbox` flag is set in chrome launch options\n3. **Authentication issues**: Verify environment variables are set correctly\n4. **Memory issues**: Increase memory limits for resource-intensive reports\n\n### Debugging Commands\n\n```bash\n# Check pod status\nkubectl get pods -l \"app.kubernetes.io/name=jsreport\"\n\n# View pod logs\nkubectl logs -l \"app.kubernetes.io/name=jsreport\"\n\n# Describe pod for events\nkubectl describe pod \u003cpod-name\u003e\n\n# Check service\nkubectl get svc jsreport\n```\n\n## Contributing\n\n1. Fork the repository\n2. Create a feature branch\n3. Make your changes\n4. Test the chart\n5. Submit a pull request\n\n### Testing the Chart\n\n```bash\n# Lint the chart\nhelm lint charts/jsreport\n\n# Template the chart\nhelm template jsreport charts/jsreport\n\n# Install in test mode\nhelm install jsreport charts/jsreport --dry-run --debug\n```\n\n## License\n\nThis Helm chart is licensed under the [MIT License](LICENSE).\n\n## Support\n\n- [JSReport Documentation](https://jsreport.net/learn)\n- [JSReport GitHub](https://github.com/jsreport/jsreport)\n- [Kubernetes Documentation](https://kubernetes.io/docs/)\n- [Helm Documentation](https://helm.sh/docs/)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fankosoftware%2Fjsreport-helm","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fankosoftware%2Fjsreport-helm","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fankosoftware%2Fjsreport-helm/lists"}