# Application catalog All applications are enabled by default. Disable optional applications in [charts/services/values.yaml](charts/services/values.yaml); core cluster services remain enabled. This page is the operational reference. It lists the included applications and only expands the ones that need credentials, external accounts, first-run configuration, or a non-default recovery procedure. ## Included services | Area | Services | | --- | --- | | Core platform | Traefik, cert-manager, Descheduler, ddclient, External Secrets, Reflector, Reloader, Node Feature Discovery, Local Path Provisioner | | Identity and delivery | Authentik, CrowdSec, Argo CD | | Media | Jellyfin, Jellyseerr, Sonarr, Radarr, Bazarr, Prowlarr, Tdarr, Tracearr, Chaptarr, Transmission, Unpackerr, JOAL, FlareSolverr, Gluetun | | Storage and home | Immich, Nextcloud, Filebrowser, MinIO, ArchiveBox, Home Assistant, n8n, Mosquitto | | Monitoring and notifications | Gotify, Miniflux, Speedtest Tracker, Epic Games Free Games, Wakapi | | Operations | NetBox, Homebox, Odoo, PostgreSQL, pgAdmin4, Redis, Redis Insight, Headlamp, Homer Operator | | Hardware and gaming | OctoPrint, Obico, RED Discord Bot, Minecraft Bedrock, Akri, Intel GPU, NVIDIA GPU, AMD GPU | | Backups and observability | Velero, Prometheus, Grafana, Blackbox Exporter, Loki, Tempo, Alloy, Node Problem Detector, iDRAC Exporter, IPMI Exporter | | AI and email | llama.cpp, Open WebUI, Stalwart | ## High availability Redis, PostgreSQL, Authentik, CrowdSec, and Homer Operator run with three replicas by default. On limited hardware, set `highAvailability: false` in your inventory values to run one replica of each instead. This reduces resource use and fault tolerance. ```yaml # In your inventory chartValuesOverrides or values.yaml highAvailability: false # Set to false to use 1 replica instead of 3 ``` ## Services that need manual setup ### Core platform and identity - **Traefik:** Configure the [admin secret](charts/services/templates/traefik.yaml), then open `https://traefik.`. - **cert-manager:** Configure the [Cloudflare secret](charts/services/templates/cert-manager.yaml) with the DNS-01 API token. - **Authentik:** Open `https://auth./if/flow/initial-setup/` for initial setup. Keep the trailing `/`. - **CrowdSec:** Sign in to the [CrowdSec dashboard](https://app.crowdsec.net/sign-in), copy the enrollment key from [Security Engines](https://app.crowdsec.net/security-engines), then configure the [CrowdSec secret](charts/services/templates/crowdsec.yaml) with `enroll_key` and a random `bouncer_key`. - **Argo CD:** Open `https://argo.` for initial setup. ### Media - **Jellyfin, Jellyseerr, Bazarr, Prowlarr, Radarr, Sonarr, Tdarr, Tracearr, and Chaptarr:** Open the relevant `https://.` address for its first-run configuration. - **Arr stack:** Configure the [Arr secret](charts/services/templates/arr.yaml) with API keys. Add Tdarr's API key to the same secret. - **Transmission:** Configure the [Transmission secret](charts/services/templates/transmission.yaml) with credentials. - **JOAL:** Configure the [JOAL secret](charts/services/templates/joal.yaml) with an access token. - **Gluetun:** Create an account with a [supported VPN provider](https://github.com/qdm12/gluetun-wiki/tree/main/setup/providers), then configure the [Gluetun secret](charts/services/templates/gluetun.yaml). ### Storage, home, and automation - **Immich, Nextcloud, ArchiveBox, Home Assistant, and n8n:** Open the service URL for initial setup or account creation. - **Filebrowser:** Sign in with `admin` / `admin`, then change the password. - **MinIO:** Configure the [MinIO secret](charts/services/templates/minio.yaml) with access credentials. - **Gotify:** Sign in with `admin` / `admin`, then change the password. - **Miniflux:** Configure the [Miniflux secret](charts/services/templates/miniflux.yaml) with admin credentials. - **Speedtest Tracker:** Generate an app key with `echo -n 'base64:'; openssl rand -base64 32;`, then configure the [secret](charts/services/templates/speedtest-tracker.yaml). - **Epic Games Free Games:** Create a Gotify application, then configure the [secret](charts/services/templates/epicgames-freegames.yaml). - **Wakapi:** Configure the [Wakapi secret](charts/services/templates/wakapi.yaml) with a password salt. ### Operations, hardware, and AI - **NetBox and Odoo:** Change the default `admin` / `admin` credentials after first sign-in. - **PostgreSQL:** Create an S3-compatible backup bucket and access key, then configure the [PostgreSQL secrets](charts/services/templates/postgresql.yaml) with those credentials and an encryption key. - **pgAdmin4:** Configure the [pgAdmin4 secret](charts/services/templates/pgadmin4.yaml) with an admin password. - **OctoPrint:** Create an account on first visit. - **Obico:** Configure the [Obico secret](charts/services/templates/obico.yaml) with a Django secret key. - **RED Discord Bot:** [Create a bot account](https://docs.discord.red/en/stable/bot_application_guide.html), then configure the [RED secret](charts/services/templates/red.yaml) with its token. - **Minecraft Bedrock:** Connect on UDP port 30778. - **Headlamp:** Enable `backup_keys_to_controller` to save its token to `keys_backup//headlamp-token` in the repository root on the Ansible controller. The inventory name is derived from the inventory file basename with a trailing `.yml` or `.yaml` removed. - **Velero:** Create an S3-compatible backup bucket and access key, then configure the [Velero secrets](charts/services/templates/velero.yaml) with those credentials and an encryption key. - **Prometheus and Grafana:** Configure the [Prometheus secret](charts/services/templates/prometheus.yaml) with Grafana admin credentials. - **Loki and Tempo:** Configure their [Loki](charts/services/templates/loki.yaml) and [Tempo](charts/services/templates/tempo.yaml) secrets with MinIO credentials. - **iDRAC Exporter and IPMI Exporter:** Configure the [iDRAC](charts/services/templates/idrac-exporter.yaml) and [IPMI](charts/services/templates/ipmi-exporter.yaml) secrets with credentials and target hosts. - **llama.cpp:** Configure the [Hugging Face secret](charts/services/templates/llama.cpp.yaml) with an access token for faster model downloads. - **Open WebUI:** Requires PostgreSQL. It connects to llama.cpp automatically when enabled; create an account at `https://chat.`. ### Email - **Stalwart:** Configure the [Stalwart secret](charts/services/templates/stalwart.yaml) with S3 credentials and an admin password, then open `https://mail.`. - **AWS relay:** Install [aws-smtp-relay](https://github.com/arch-anes/aws-smtp-relay) in your AWS account to relay email to and from Stalwart. - **Cloudflare:** Do not proxy the `mail.example.org` CNAME through Cloudflare, because its proxy blocks mail traffic. See the [Cloudflare discussion](https://community.cloudflare.com/t/emails-blocked-since-cloudflare-firewall-applied/659995). - **DNS records:** Open `https://mail./manage/dns//view` to download a zone file. Skip the `mail` MX and TXT records and TLSA records; add a `mail-ses` MX record for `inbound-smtp..amazonaws.com` and `mail-ses` TXT records with `v=spf1 include:amazonses.com ~all`. See the [AWS SES](https://docs.aws.amazon.com/ses/latest/dg/eb-ingress.html) and [Stalwart](https://stalw.art/docs/install/dns) references. ## Backup and disaster recovery ### PostgreSQL restore from scratch Use this when the cluster is lost and needs to be recreated from the remote backup. Add a `dataSource` block to the `PostgresCluster` manifest before applying it: ```yaml spec: dataSource: pgbackrest: stanza: db configuration: - secret: name: postgresql-backup-credentials options: - --type=time - --target="2021-06-09 14:15:11-04" global: compress-level: '1' compress-level-network: '1' compress-type: zst repo1-s3-uri-style: path repo1-cipher-type: aes-256-cbc repo: name: repo1 {{- .Values.applications.postgresql.remoteBackupLocation | toYaml | nindent 16 }} ``` Remove the `dataSource` block once the cluster is running to prevent it from re-triggering on the next reconcile. ### PostgreSQL point-in-time recovery To recover a running cluster to a specific time, add this restore configuration to the `PostgresCluster` manifest: ```yaml spec: backups: pgbackrest: restore: enabled: true repoName: repo1 options: - --type=time - --target="2021-06-09 14:15:11-04" ``` Trigger the restore, then disable it after recovery completes: ``` kubectl annotate -n default postgrescluster postgresql --overwrite \ postgres-operator.crunchydata.com/pgbackrest-restore="$(date)" ``` Once recovery is complete, disable the restore to prevent it from re-triggering: ```yaml spec: backups: pgbackrest: restore: enabled: false ``` See the [Crunchy Data recovery reference](https://access.crunchydata.com/documentation/postgres-operator/latest/tutorials/backups-disaster-recovery/disaster-recovery#perform-an-in-place-point-in-time-recovery-pitr). ### Velero With an S3-compatible bucket configured, Velero and Kopia back up the cluster and selected volumes. Use Kopia or the Kopia UI to browse backed-up files, configured with the bucket, its `keyID` and `keySecret`, the repository encryption key, and the `kopia/default/` prefix. See the [Velero restore reference](https://velero.io/docs/v1.16/restore-reference/). ### Traefik TCP router When using a TCP router, set proxy protocol version 2: ``` proxyProtocol: version: 2 ```