FreshRSS is a free, self-hostable feed aggregator
helm repo add christianhuth https://charts.christianhuth.de
helm repo update
helm install my-release christianhuth/freshrssFreshRSS is a self-hosted RSS and Atom feed aggregator.
This chart bootstraps FreshRSS on a Kubernetes cluster using the Helm package manager.
- Kubernetes 1.19+
To install the chart with the release name my-release:
helm repo add christianhuth https://charts.christianhuth.de
helm repo update
helm install my-release christianhuth/freshrssThese commands deploy FreshRSS on the Kubernetes cluster in the default configuration. The Values section lists the values that can be configured during installation.
Tip: List all releases using
helm list
To uninstall the my-release deployment:
helm uninstall my-releaseThe command removes all the Kubernetes components associated with the chart and deletes the release.
| Key | Type | Default | Description |
|---|---|---|---|
| affinity | object | {} |
Affinity settings for pod assignment |
| autoscaling.enabled | bool | false |
|
| autoscaling.maxReplicas | int | 100 |
|
| autoscaling.minReplicas | int | 1 |
|
| autoscaling.targetCPUUtilizationPercentage | int | 80 |
|
| deploymentStrategy | object | {} |
Update strategy for the deployment |
| externalPostgresql.auth.database | string | "" |
Name of the database to use |
| externalPostgresql.auth.existingSecret | string | "" |
Name of existing secret to use for PostgreSQL credentials |
| externalPostgresql.auth.password | string | "" |
Password to use |
| externalPostgresql.auth.userPasswordKey | string | "" |
Key in the secret containing the password |
| externalPostgresql.auth.username | string | "" |
Name of the user to use |
| externalPostgresql.hostname | string | "" |
Hostname of the PostgreSQL database |
| externalPostgresql.port | int | 5432 |
Port used to connect to PostgreSQL database |
| extraEnv | list | [] |
additional environment variables to be added to the pods |
| freshrss.baseUrl | string | "" |
URL under which FreshRSS will be available. Will use the first Ingress host if Ingress is enabled with ingress.enabled. |
| freshrss.cronjob.minutes | string | "1,31" |
Minutes to run an automatic cronjob to refresh feeds |
| freshrss.cronjob.type | string | "internal" |
How to run the CronJob to synchronize your Feeds. Supported values are internal and sidecar. |
| freshrss.database.type | string | "sqlite" |
Database type to use. Supported values are sqlite and postgresql. |
| freshrss.environment | string | "production" |
Enables additional development information if set to development (increases the level of logging and ensures that errors are displayed). |
| freshrss.initialization.admin.apiPassword | string | "" |
API Password of admin user. Will only be used if initialization is activated. |
| freshrss.initialization.admin.email | string | "" |
Email of admin user. Will only be used if initialization is activated. |
| freshrss.initialization.admin.password | string | "" |
Password of admin user. Will only be used if initialization is activated. |
| freshrss.initialization.admin.username | string | "admin" |
Username of admin user. Will only be used if initialization is activated. |
| freshrss.initialization.apiEnabled | bool | true |
enable the FreshRSS API. Will only be used if initialization is activated. |
| freshrss.initialization.enabled | bool | true |
Use Auto-install for initialization. Make sure to set this to false once the initialization is done. |
| freshrss.initialization.language | string | "en" |
Language of the FreshRSS UI. Will only be used if initialization is activated. |
| freshrss.persistence.annotations | object | {} |
Add annotations to the different FreshRSS PVCs |
| freshrss.persistence.data.accessModes | list | ["ReadWriteOnce"] |
Access Modes for the PVC for the data folder |
| freshrss.persistence.data.annotations | object | {} |
Add annotations to the PVC for the data folder |
| freshrss.persistence.data.enabled | bool | true |
Enable persistence for the data folder |
| freshrss.persistence.data.existingClaim | string | "" |
Use an existing claim as PVC for the data folder |
| freshrss.persistence.data.size | string | "5Gi" |
Define the size of the PVC for the data folder |
| freshrss.persistence.data.storageClass | string | "" |
Define the storage class of the PVC for the data folder |
| freshrss.persistence.enabled | bool | true |
Enable persistence for FreshRSS data |
| freshrss.persistence.extensions.accessModes | list | ["ReadWriteOnce"] |
Access Modes for the PVC for the extensions folder |
| freshrss.persistence.extensions.annotations | object | {} |
Add annotations to the PVC for the extensions folder |
| freshrss.persistence.extensions.enabled | bool | true |
Enable persistence for the extensions folder |
| freshrss.persistence.extensions.existingClaim | string | "" |
Use an existing claim as PVC for the extensions folder |
| freshrss.persistence.extensions.size | string | "5Gi" |
Define the size of the PVC for the extensions folder |
| freshrss.persistence.extensions.storageClass | string | "" |
Define the storage class of the PVC for the extensions folder |
| freshrss.persistence.storageClass | string | "" |
Define the storage class for the different FreshRSS PVCs |
| freshrss.timezone | string | "Europe/Berlin" |
Timezone |
| fullnameOverride | string | "" |
String to fully override "freshrss.fullname" |
| image.pullPolicy | string | "Always" |
image pull policy |
| image.registry | string | "docker.io" |
image registry |
| image.repository | string | "freshrss/freshrss" |
image repository |
| image.tag | string | "1.29.1" |
Overrides the image tag |
| image.type | string | "alpine" |
Define which type of image should be used. Supported values are alpine and debian. |
| imagePullSecrets | list | [] |
If defined, uses a Secret to pull an image from a private Docker registry or repository. |
| ingress.annotations | object | {} |
|
| ingress.className | string | "" |
|
| ingress.enabled | bool | false |
|
| ingress.hosts[0].host | string | "chart-example.local" |
|
| ingress.hosts[0].paths[0].path | string | "/" |
|
| ingress.hosts[0].paths[0].pathType | string | "ImplementationSpecific" |
|
| ingress.ip | string | "" |
ip to resolve public uri behind reverse proxy |
| ingress.tls | list | [] |
|
| nameOverride | string | "" |
Provide a name in place of freshrss |
| nodeSelector | object | {} |
Node labels for pod assignment |
| podAnnotations | object | {} |
Annotations to be added to exporter pods |
| podSecurityContext | object | {} |
pod-level security context |
| postgresql.auth.database | string | "" |
Name for a custom database to create |
| postgresql.auth.existingSecret | string | "" |
Name of existing secret to use for PostgreSQL credentials |
| postgresql.auth.password | string | "" |
Password for the custom user to create. Ignored if postgresql.auth.existingSecret is provided |
| postgresql.auth.username | string | "" |
Name for a custom user to create |
| postgresql.enabled | bool | false |
enable PostgreSQL™ subchart from Bitnami |
| replicaCount | int | 1 |
Number of replicas |
| resources | object | {} |
Resource limits and requests for the freshrss pods. |
| revisionHistoryLimit | int | 10 |
The number of old ReplicaSets to retain |
| route.main.additionalRules | list | [] |
Additional custom rules that can be added to the route |
| route.main.annotations | object | {} |
Add annotations to the route |
| route.main.apiVersion | string | "gateway.networking.k8s.io/v1" |
Set the route apiVersion, e.g. gateway.networking.k8s.io/v1 or gateway.networking.k8s.io/v1alpha2 |
| route.main.enabled | bool | false |
Enables or disables the route |
| route.main.filters | list | [] |
Filters define the filters that are applied to requests that match this rule. |
| route.main.hostnames | list | [] |
Hostnames to be matched |
| route.main.httpsRedirect | bool | false |
adds a filter for redirecting to https (HTTP 301 Moved Permanently). To redirect HTTP traffic to HTTPS, you need to have a Gateway with both HTTP and HTTPS listeners. Matches and filters do not take effect if enabled. Ref. https://gateway-api.sigs.k8s.io/guides/http-redirect-rewrite/ |
| route.main.kind | string | "HTTPRoute" |
Set the route kind Valid options are GRPCRoute, HTTPRoute, TCPRoute, TLSRoute, UDPRoute |
| route.main.labels | object | {} |
Add labels to the route |
| route.main.matches | list | see values.yaml | define conditions used for matching the rule against incoming HTTP requests. |
| route.main.parentRefs | list | [] |
Parent references (Gateway) |
| route.main.timeouts | object | {} |
defines the timeouts that can be configured for an HTTP request |
| securityContext | object | {} |
container-level security context |
| service.port | int | 8080 |
Kubernetes port where service is exposed |
| service.type | string | "ClusterIP" |
Kubernetes service type |
| serviceAccount.annotations | object | {} |
Annotations to add to the service account |
| serviceAccount.create | bool | true |
Specifies whether a service account should be created |
| serviceAccount.name | string | "" |
The name of the service account to use. If not set and create is true, a name is generated using the fullname template |
| tolerations | list | [] |
Toleration labels for pod assignment |
Specify each parameter using the --set key=value[,key=value] argument to helm install.
Alternatively, a YAML file that specifies the values for the parameters can be provided while installing the chart. For example,
helm install my-release -f values.yaml christianhuth/freshrssThis major updates the PostgreSQL subchart to its newest major, 18.1.0. Here you can find more information about the changes introduced in that version.
This Chart can initialize FreshRSS on the first installation using the attribute freshrss.initialization.enabled, which defaults to true.
The initialization will configure the database connection and create the admin user for you.
This approach however has two downsides:
- Confidential information like admin and database password have to be added to the environment variables
FRESHRSS_INSTALLandFRESHRSS_USERof the Container - Therefore you have to define these passwords using the attributes
freshrss.initialization.admin.apiPassword,freshrss.initialization.admin.password,postgresql.auth.passwordorexternalPostgresql.auth.passwordand cannot use existing Kubernetes Secrets to define these values like you would in a GitOps based setup
Make sure to set freshrss.initialization.enabled=false after the initialization has finished to remove the environment variables FRESHRSS_INSTALL and FRESHRSS_USER containing the confidential information again.
The Logs should contain something like the following:
FreshRSS install…
ℹ️ Remember to create the default user: huthcn ./cli/create-user.php --user huthcn --password 'password' --more-options
ℹ️ Remember to re-apply the appropriate access rights, such as: sudo cli/access-permissions.sh
✅ FreshRSS successfully installed.
FreshRSS creating user “huthcn”…
FreshRSS[31]: FreshRSS Favicon GET https://github.com/FreshRSS/FreshRSS/
FreshRSS[31]: FreshRSS Favicon GET https://github.githubassets.com/favicons/favicon.svg
ℹ️ Remember to refresh the feeds of the user: huthcn ./cli/actualize-user.php --user huthcn
ℹ️ Remember to re-apply the appropriate access rights, such as: sudo cli/access-permissions.sh
✅ FreshRSS user successfully created.You can of course set freshrss.initialization.enabled=false right away and initialize FreshRSS yourself using the Web UI.