# Installation

You'll need a code provided by the Fairwinds team in order to try out the self hosted version of Insights. If you're interested, schedule some time to chat (opens new window)

# Quickstart

These instructions are for a quick demo of self hosted Insights. For production grade installations, you'll want to use the instructions here to harden your installation.

helm repo add fairwinds-stable https://charts.fairwinds.com/stable
# These options are for quickstart only. See documentation for hardening tips
helm install fairwinds-insights fairwinds-stable/fairwinds-insights \
  --namespace fairwinds-insights \
  --create-namespace=true \
  --set options.autogenerateKeys=true \
  --set options.allowHTTPCookies=true \
  --set postgresql.sslMode=disable \
  --set postgresql.password=THISISASECRET \
  --set installationCode="$FAIRWINDS_PROVIDED_CODE"

You can then access the dashboard via port-forward:

kubectl port-forward -n fairwinds-insights svc/fairwinds-insights-dashboard 8080:80

# Hardening

The default configuration will give you a working version of Fairwinds Insights. But there are a few issues you'll want to solve before starting to use it seriously:

  • Database: set up a durable Postgres database for your data
  • File Storage: set up a durable place to store files (S3 or Minio)
  • Ingress: host Insights behind a custom domain
  • Sessions: Generate permanent session keys in order to preserve running sessions when Insights is updated
  • Email: In order to confirm email addresses and add new users, you'll need to set up an email provider

Some of these simply involve passing new data to the Helm chart. Others may require the creation of new Kubernetes secrets.

For example, a hardened setup might look like this:

values.yaml:

fairwindsInsights:
  host: https://insights.example.com
  adminEmail: admin@example.com
ingress:
  enabled: true
  hostedZones:
    - insights.example.com
  annotations:
    kubernetes.io/ingress.class: "nginx-ingress"
email:
  strategy: smtp
  smtpHost: smtp.gmail.com
  smtpUsername: you@gmail.com
  smtpPort: "465"
postgresql:
  ephemeral: false
  passwordSecret: fwinsights-postgresql
  postgresqlUsername: your_username
  postgresqlDatabase: desired_database_name
  postgresqlHost: your-server.us-east-1.rds.amazonaws.com
  sslMode: require
  service:
    port: 5432

secrets.yaml:

apiVersion: v1
data:
    COOKIE_HASH_KEY: TjZCbzAzMVJ0U1lXS2RPaE9sU0ZERDJJdXpTNFhLeG91VWFYdU9DcU9kTkpmenlFNWFsT29sajZ3VGpNbjNSSA==
    COOKIE_BLOCK_KEY: RDFNVVhWVzM4QllJd0Z5NXNIT1kxV1RrVWNweWRnbmM=
    SESSION_AUTH_KEY: NTczV0o0NGFBeGtXVzduZjZHV25FdFZMb0s5TE5SSWU3bG00YkNtaE93bHZUVW1VSXZUYW9ya2UzdHE2eFZXSA==
    SESSION_ENCRYPTION_KEY: ME1LeFRPdTYwOVU0YlVvUGVEUUdQYjZnbTlyZUh4b2I=
    SMTP_PASSWORD: aGVsbG93b3JsZA==
    AWS_ACCESS_KEY_ID: aGVsbG93b3JsZA==
    AWS_SECRET_ACCESS_KEY: aGVsbG93b3JsZA==
kind: Secret
metadata:
    name: fwinsights-secrets
type: Opaque

postgres-secret.yaml:

apiVersion: v1
data:
    postgresql-password: aGVsbG93b3JsZA==
kind: Secret
metadata:
    name: fwinsights-postgresql
type: Opaque