mirror of
https://github.com/rtomik/helm-charts.git
synced 2026-04-20 12:14:55 +00:00
version bump norish
This commit is contained in:
@ -1,140 +1,43 @@
|
||||
# Recipya Helm Chart
|
||||
|
||||
A Helm chart for deploying [Recipya](https://github.com/reaper47/recipya) on Kubernetes.
|
||||
|
||||
[Source Code](https://github.com/rtomik/helm-charts/tree/main/charts%2Frecipya)
|
||||
A Helm chart for deploying [Recipya](https://github.com/reaper47/recipya), a recipe management application, on Kubernetes.
|
||||
|
||||
## Introduction
|
||||
|
||||
This chart deploys Recipya recipe manager on a Kubernetes cluster using the Helm package manager.
|
||||
This chart deploys Recipya on a Kubernetes cluster using the Helm package manager. Recipya includes optimized Traefik ingress configuration with Content Security Policy support and sticky session handling for authentication.
|
||||
|
||||
Source code can be found here:
|
||||
- https://github.com/rtomik/helm-charts/tree/main/charts/recipya
|
||||
Source code: https://github.com/rtomik/helm-charts/tree/main/charts/recipya
|
||||
|
||||
## Prerequisites
|
||||
|
||||
- Kubernetes 1.19+
|
||||
- Helm 3.2.0+
|
||||
- PV provisioner support in the underlying infrastructure (if persistence is needed)
|
||||
- PV provisioner support (if persistence is needed)
|
||||
|
||||
## Installing the Chart
|
||||
|
||||
To install the chart with the release name `recipya`:
|
||||
|
||||
```bash
|
||||
helm repo add recipya-chart https://rtomik.github.io/helm-charts
|
||||
helm install recipya recipya-chart/recipya -n recipya
|
||||
helm repo add rtomik https://rtomik.github.io/helm-charts
|
||||
helm install recipya rtomik/recipya
|
||||
```
|
||||
|
||||
The command deploys Recipya on the Kubernetes cluster in the default configuration. The [Parameters](#parameters) section lists the parameters that can be configured during installation.
|
||||
|
||||
## Uninstalling the Chart
|
||||
|
||||
To uninstall/delete the `recipya` deployment:
|
||||
|
||||
```bash
|
||||
helm uninstall recipya -n recipya
|
||||
helm uninstall recipya
|
||||
```
|
||||
|
||||
## Important Configuration Notes
|
||||
## Configuration Examples
|
||||
|
||||
### Server URL
|
||||
### Minimal Installation
|
||||
|
||||
When deploying with an ingress, it's **critical** to set `config.server.url` to match your ingress URL (including https if you're using TLS). This ensures that redirects after login work correctly:
|
||||
> **Important**: Set `config.server.url` to match your ingress URL including the scheme. This is required for post-login redirects to work correctly.
|
||||
|
||||
```yaml
|
||||
config:
|
||||
server:
|
||||
url: "https://your-recipya-domain.com"
|
||||
```
|
||||
url: "https://recipya.example.com"
|
||||
|
||||
### Ingress Configuration
|
||||
|
||||
This chart includes optimized ingress configurations for Traefik, with support for WebSockets and proper security headers. If you're using a different ingress controller, you may need to adjust annotations accordingly.
|
||||
|
||||
## Parameters
|
||||
|
||||
### Global parameters
|
||||
|
||||
| Name | Description | Value |
|
||||
|--------------------------|--------------------------------------|-----------------|
|
||||
| `image.repository` | Recipya image repository | `reaper99/recipya` |
|
||||
| `image.tag` | Recipya image tag | `v1.2.2` |
|
||||
| `image.pullPolicy` | Recipya image pull policy | `IfNotPresent` |
|
||||
| `replicaCount` | Number of Recipya replicas | `1` |
|
||||
| `revisionHistoryLimit` | Number of revisions to keep | `3` |
|
||||
|
||||
### Security parameters
|
||||
|
||||
| Name | Description | Value |
|
||||
|-----------------------------------------|--------------------------------------------------|-----------|
|
||||
| `podSecurityContext.fsGroup` | Group ID for the Recipya container | `1000` |
|
||||
| `containerSecurityContext` | Security context for the container | `{}` |
|
||||
|
||||
### Recipya configuration parameters
|
||||
|
||||
| Name | Description | Value |
|
||||
|-----------------------------------------|-------------------------------------------------------|---------------------|
|
||||
| `config.server.port` | Server port | `8078` |
|
||||
| `config.server.autologin` | Whether to login automatically | `false` |
|
||||
| `config.server.is_demo` | Whether the app is a demo version | `false` |
|
||||
| `config.server.is_prod` | Whether the app is in production | `false` |
|
||||
| `config.server.no_signups` | Whether to disable user account registrations | `false` |
|
||||
| `config.server.url` | Base URL for the application | `http://0.0.0.0` |
|
||||
| `config.email.address` | The email address for SendGrid | `""` |
|
||||
| `config.email.sendgrid` | SendGrid API key | `""` |
|
||||
| `config.documentIntelligence.endpoint` | Azure Document Intelligence endpoint | `""` |
|
||||
| `config.documentIntelligence.key` | Azure Document Intelligence key | `""` |
|
||||
|
||||
### Service parameters
|
||||
|
||||
| Name | Description | Value |
|
||||
|--------------------------|--------------------------------------------------|-------------|
|
||||
| `service.type` | Recipya service type | `ClusterIP` |
|
||||
| `service.port` | Recipya service port | `8078` |
|
||||
|
||||
### Ingress parameters
|
||||
|
||||
| Name | Description | Value |
|
||||
|-------------------------------|--------------------------------------------------|------------------------|
|
||||
| `ingress.enabled` | Enable ingress controller resource | `false` |
|
||||
| `ingress.className` | IngressClass that will be used | `"traefik"` |
|
||||
| `ingress.annotations` | Additional ingress annotations | See values.yaml |
|
||||
| `ingress.hosts[0].host` | Default host for the ingress resource | `chart-example.local` |
|
||||
| `ingress.tls` | TLS configuration | `[]` |
|
||||
|
||||
### Persistence parameters
|
||||
|
||||
| Name | Description | Value |
|
||||
|--------------------------------------|------------------------------------------|------------------|
|
||||
| `persistence.enabled` | Enable persistence using PVC | `true` |
|
||||
| `persistence.accessMode` | PVC Access Mode | `ReadWriteOnce` |
|
||||
| `persistence.size` | PVC Storage Request | `1Gi` |
|
||||
| `persistence.storageClass` | Storage class of backing PVC | `""` |
|
||||
|
||||
### Resource parameters
|
||||
|
||||
| Name | Description | Value |
|
||||
|-------------------------------|------------------------------------------|-----------|
|
||||
| `resources.limits.cpu` | CPU limit | `500m` |
|
||||
| `resources.limits.memory` | Memory limit | `512Mi` |
|
||||
| `resources.requests.cpu` | CPU request | `100m` |
|
||||
| `resources.requests.memory` | Memory request | `128Mi` |
|
||||
|
||||
### Probe parameters
|
||||
|
||||
| Name | Description | Value |
|
||||
|--------------------------------------|--------------------------------------------|-----------|
|
||||
| `probes.liveness.enabled` | Enable liveness probe | `true` |
|
||||
| `probes.liveness.path` | Path for liveness probe | `/` |
|
||||
| `probes.readiness.enabled` | Enable readiness probe | `true` |
|
||||
| `probes.readiness.path` | Path for readiness probe | `/` |
|
||||
|
||||
## Traefik Ingress Configuration
|
||||
|
||||
The chart includes specially configured middlewares for Traefik to ensure proper functioning of Recipya:
|
||||
|
||||
```yaml
|
||||
ingress:
|
||||
enabled: true
|
||||
className: "traefik"
|
||||
@ -150,37 +53,19 @@ ingress:
|
||||
pathType: ImplementationSpecific
|
||||
tls:
|
||||
- hosts:
|
||||
- recipya.example.com
|
||||
- recipya.example.com
|
||||
```
|
||||
|
||||
This configuration includes:
|
||||
|
||||
1. Custom Content Security Policy allowing essential scripts from unpkg.com
|
||||
2. Sticky sessions for maintaining authentication
|
||||
3. Proper headers for proxy operation
|
||||
|
||||
## Content Security Policy Configuration
|
||||
|
||||
The chart includes a custom middleware that configures the proper Content Security Policy for Recipya. This is particularly important as the application requires access to external scripts from unpkg.com:
|
||||
### With SendGrid Email
|
||||
|
||||
```yaml
|
||||
contentSecurityPolicy: >-
|
||||
default-src 'self';
|
||||
script-src 'self' 'unsafe-inline' 'unsafe-eval' blob: data: https://unpkg.com;
|
||||
style-src 'self' 'unsafe-inline';
|
||||
img-src 'self' data: blob:;
|
||||
font-src 'self' data:;
|
||||
connect-src 'self' ws: wss: *;
|
||||
worker-src 'self' blob:;
|
||||
frame-src 'self';
|
||||
media-src 'self' blob:;
|
||||
object-src 'none';
|
||||
form-action 'self';
|
||||
config:
|
||||
email:
|
||||
address: "your-email@example.com"
|
||||
sendgrid: "SG.your-sendgrid-api-key"
|
||||
```
|
||||
|
||||
## Using Existing Secrets
|
||||
|
||||
If you want to use existing secrets for sensitive data:
|
||||
### With SendGrid and Azure Document Intelligence via Existing Secrets
|
||||
|
||||
```yaml
|
||||
config:
|
||||
@ -194,6 +79,127 @@ config:
|
||||
keyKey: "di_key"
|
||||
```
|
||||
|
||||
## Configuration
|
||||
## Parameters
|
||||
|
||||
See the [Recipya documentation](https://recipes.musicavis.ca/docs/installation/docker/#environment-variables) for details on all available configuration options.
|
||||
### Global Parameters
|
||||
|
||||
| Name | Description | Default |
|
||||
|------|-------------|---------|
|
||||
| `nameOverride` | Override the release name | `""` |
|
||||
| `fullnameOverride` | Fully override the release name | `""` |
|
||||
| `replicaCount` | Number of replicas | `1` |
|
||||
| `revisionHistoryLimit` | Revisions to retain | `3` |
|
||||
|
||||
### Image Parameters
|
||||
|
||||
| Name | Description | Default |
|
||||
|------|-------------|---------|
|
||||
| `image.repository` | Recipya image repository | `reaper99/recipya` |
|
||||
| `image.tag` | Image tag | `v1.2.2` |
|
||||
| `image.pullPolicy` | Image pull policy | `IfNotPresent` |
|
||||
| `imagePullSecrets` | Image pull secrets | `[]` |
|
||||
|
||||
### Pod Security Parameters
|
||||
|
||||
| Name | Description | Default |
|
||||
|------|-------------|---------|
|
||||
| `podSecurityContext.fsGroup` | Filesystem group ID | `1000` |
|
||||
| `containerSecurityContext` | Container security context | `{}` |
|
||||
|
||||
### Application Configuration
|
||||
|
||||
| Name | Description | Default |
|
||||
|------|-------------|---------|
|
||||
| `config.server.port` | Server port | `8078` |
|
||||
| `config.server.url` | Base URL (must match ingress) | `http://0.0.0.0` |
|
||||
| `config.server.autologin` | Auto-login | `false` |
|
||||
| `config.server.is_demo` | Demo mode | `false` |
|
||||
| `config.server.is_prod` | Production mode | `true` |
|
||||
| `config.server.no_signups` | Disable user registration | `false` |
|
||||
| `config.email.address` | SendGrid email address | `""` |
|
||||
| `config.email.sendgrid` | SendGrid API key | `""` |
|
||||
| `config.email.existingSecret` | Existing secret for email | `""` |
|
||||
| `config.email.addressKey` | Key for email address in secret | `email` |
|
||||
| `config.email.sendgridKey` | Key for SendGrid key in secret | `sendgrid` |
|
||||
| `config.documentIntelligence.endpoint` | Azure Document Intelligence endpoint | `""` |
|
||||
| `config.documentIntelligence.key` | Azure Document Intelligence key | `""` |
|
||||
| `config.documentIntelligence.existingSecret` | Existing secret for Azure DI | `""` |
|
||||
| `config.documentIntelligence.endpointKey` | Key for endpoint in secret | `di_endpoint` |
|
||||
| `config.documentIntelligence.keyKey` | Key for API key in secret | `di_key` |
|
||||
|
||||
### Service Parameters
|
||||
|
||||
| Name | Description | Default |
|
||||
|------|-------------|---------|
|
||||
| `service.type` | Service type | `ClusterIP` |
|
||||
| `service.port` | Service port | `8078` |
|
||||
|
||||
### Ingress Parameters
|
||||
|
||||
| Name | Description | Default |
|
||||
|------|-------------|---------|
|
||||
| `ingress.enabled` | Enable ingress | `false` |
|
||||
| `ingress.className` | Ingress class name | `""` |
|
||||
| `ingress.annotations` | Ingress annotations | See values.yaml |
|
||||
| `ingress.hosts` | Ingress hosts | See values.yaml |
|
||||
| `ingress.tls` | TLS configuration | `[]` |
|
||||
|
||||
### Persistence Parameters
|
||||
|
||||
| Name | Description | Default |
|
||||
|------|-------------|---------|
|
||||
| `persistence.enabled` | Enable persistence | `false` |
|
||||
| `persistence.storageClass` | Storage class | `""` |
|
||||
| `persistence.accessMode` | Access mode | `ReadWriteOnce` |
|
||||
| `persistence.size` | PVC size | `5Gi` |
|
||||
| `persistence.annotations` | PVC annotations | `{}` |
|
||||
|
||||
### Resource Parameters
|
||||
|
||||
| Name | Description | Default |
|
||||
|------|-------------|---------|
|
||||
| `resources` | Resource limits and requests | `{}` |
|
||||
|
||||
### Health Check Parameters
|
||||
|
||||
| Name | Description | Default |
|
||||
|------|-------------|---------|
|
||||
| `probes.liveness.enabled` | Enable liveness probe | `true` |
|
||||
| `probes.liveness.path` | Liveness probe path | `/` |
|
||||
| `probes.liveness.initialDelaySeconds` | Liveness initial delay | `30` |
|
||||
| `probes.liveness.periodSeconds` | Liveness period | `10` |
|
||||
| `probes.readiness.enabled` | Enable readiness probe | `true` |
|
||||
| `probes.readiness.path` | Readiness probe path | `/` |
|
||||
| `probes.readiness.initialDelaySeconds` | Readiness initial delay | `30` |
|
||||
| `probes.readiness.periodSeconds` | Readiness period | `10` |
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
### Post-Login Redirect Fails
|
||||
|
||||
Ensure `config.server.url` matches your ingress URL exactly, including the scheme (`https://`).
|
||||
|
||||
### Content Security Policy Errors
|
||||
|
||||
The chart includes a Traefik middleware with a CSP policy allowing scripts from `unpkg.com`. If using a different ingress controller, configure an equivalent CSP policy:
|
||||
|
||||
```
|
||||
default-src 'self';
|
||||
script-src 'self' 'unsafe-inline' 'unsafe-eval' blob: data: https://unpkg.com;
|
||||
style-src 'self' 'unsafe-inline';
|
||||
img-src 'self' data: blob:;
|
||||
connect-src 'self' ws: wss: *;
|
||||
```
|
||||
|
||||
### Debugging
|
||||
|
||||
```bash
|
||||
kubectl logs deployment/recipya -f
|
||||
kubectl describe pod -l app.kubernetes.io/name=recipya
|
||||
```
|
||||
|
||||
## Links
|
||||
|
||||
- [Recipya GitHub](https://github.com/reaper47/recipya)
|
||||
- [Recipya Documentation](https://recipes.musicavis.ca/docs/installation/docker/#environment-variables)
|
||||
- [Chart Source](https://github.com/rtomik/helm-charts/tree/main/charts/recipya)
|
||||
|
||||
Reference in New Issue
Block a user