Skip to main content

Overview

Infisical is an open-source secrets-management platform: store, version, scope, and serve application secrets through a web UI and REST API, with projects, environments, and access controls. This template deploys a stateless Infisical server tier backed by PostgreSQL (the durable secret store) and HA Redis with Sentinel (cache and background-job queues).

Architecture

  • Infisical server — A stateless standard workload serving the web UI and API on port 8080 from the standalone image. Runs its database migrations automatically on boot; scale with infisical.replicas (a startup lock ensures migrations run exactly once even when multiple replicas boot concurrently).
  • PostgreSQL (postgres subchart) — The durable store for all secrets, versions, projects, and users.
  • Redis + Sentinel (redis subchart) — Cache and background-job queues, deployed HA (3 Redis + 3 Sentinel replicas, master mymaster). The server connects Sentinel-aware, so Redis failover is transparent. Required — Infisical will not boot without Redis.

What Gets Created

  • Standard Infisical Workload — One or more stateless replicas serving the UI and API on port 8080.
  • Stateful PostgreSQL Workload — Single-replica Postgres with a persistent volume set for all Infisical data.
  • Redis Workloads — A Redis master-replica set plus Redis Sentinel for cache and job queues.
  • DB-credentials Secret — A template-created dictionary secret used to assemble the server’s DB_CONNECTION_URI.
  • Identity & Policy — An identity bound to the server with least-privilege reveal on exactly the secrets it mounts, including your prerequisite secret.
This template does not create a GVC. You must deploy it into an existing GVC.

Prerequisites

You must create a dictionary secret before installing. The server references it by name (secrets.name, default my-infisical-secrets) and the deployment wedges until the secret exists. Create it first as a dictionary secret holding Infisical’s root-of-trust keys:
  • ENCRYPTION_KEY — a 16-byte hex key (openssl rand -hex 16) that encrypts every secret stored in Infisical.
  • AUTH_SECRET — a 32-byte base64 key (openssl rand -base64 32) that signs sessions and tokens.
Both keys are write-once — never rotate them. Rotating ENCRYPTION_KEY corrupts every stored secret; rotating AUTH_SECRET invalidates all sessions.
Create the secret with the CLI:
Optional, only for authenticated SMTP: a dictionary secret with SMTP_USERNAME and SMTP_PASSWORD, referenced via smtp.auth.secretName. Leave smtp.auth.secretName empty for unauthenticated relays and mail catchers.
Install the template using your preferred method:

UI

Browse, install, and manage templates visually

CLI

Manage templates from your terminal

Terraform

Declare templates in your Terraform configurations

Pulumi

Declare templates in your Pulumi programs

Configuration

The default values.yaml for this template:

Infisical server

  • infisical.image — The standalone Infisical image (API + web UI in one container). Pin a concrete tag.
  • infisical.replicas — Number of stateless server replicas. 1 is the proven single-replica shape; 2 or more gives an HA tier over the shared PostgreSQL and Redis, with zero-downtime rolling restarts. Boot migrations are serialized by a startup lock, so they run exactly once no matter how many replicas start at once.
  • infisical.siteUrl — The public base URL Infisical advertises in links, cookies, and callbacks. Leave empty to derive it automatically from the canonical *.cpln.app endpoint; set it (including https://) only when you front the workload with a custom domain.
  • infisical.resources — CPU and memory per replica. Keep maxMemory at 2Gi — a cold multi-replica boot runs out of memory at 1Gi.

Prerequisite secret

  • secrets.name — Name of the user-created dictionary secret holding ENCRYPTION_KEY and AUTH_SECRET. It must exist before install — see Prerequisites.

SMTP / email

Off by default — the zero-config install works via the no-email admin-signup bootstrap. Enable it for email invites, address verification, and password reset:
  • smtp.enabled — Turn email on. smtp.host and smtp.fromAddress are required when enabled.
  • smtp.requireTls — STARTTLS is required by default; set false only for a plaintext mail catcher (e.g. Mailpit on port 1025).
  • smtp.auth.secretName — Name of an optional dictionary secret with SMTP_USERNAME and SMTP_PASSWORD for authenticated SMTP. Empty means no authentication; when set, the workload is granted reveal on exactly that secret.

Access

  • publicAccess.enabled — Serve the UI and API on the canonical *.cpln.app HTTPS endpoint (default). Set to false for an internal-only instance.
  • internalAccess.type — Internal firewall scope of the server workload:

PostgreSQL

  • postgres.config.password — The bundled database password. Change it before installing.
  • postgres.volumeset.capacity — Initial volume size in GiB (minimum 10).
PostgreSQL stores everything: secrets, versions, projects, environments, and users.

Redis

  • redis.redis.auth.password.enabled — When false (default), Redis runs authless with the same-GVC firewall as the boundary. Set to true to require AUTH on the data nodes; the master password is then wired into Infisical as REDIS_PASSWORD (Sentinels stay authless). Both paths are tested end to end, including Sentinel monitoring the auth-protected master.
  • redis.redis.replicas / redis.sentinel.replicas — Redis and Sentinel replica counts (3 + 3 by default).
Redis is required — Infisical will not boot without it, so the template hard-wires the dependency (no enable/disable toggle).

Connecting

The canonical *.cpln.app hostname appears under status.canonicalEndpoint (cpln workload get {release}-infisical -o yaml).
The first account to sign up becomes the super-admin. There are no admin bootstrap variables — with public access enabled, create your admin account immediately after install, then disable open sign-ups in the Admin panel.

Important Notes

  • The prerequisite secret must exist before installsecrets.name is a dictionary secret with ENCRYPTION_KEY and AUTH_SECRET. A missing secret wedges the deployment and makes it look broken.
  • ENCRYPTION_KEY and AUTH_SECRET are write-once — never rotate them. ENCRYPTION_KEY encrypts every stored secret; AUTH_SECRET signs all sessions.
  • The first account to sign up becomes super-admin — create it immediately after install, then disable open sign-ups in the Admin panel.
  • Redis is required, not optional — Infisical will not boot without it (authless behind the same-GVC firewall by default).
  • Keep infisical.resources.maxMemory at 2Gi — a cold boot with replicas ≥ 2 runs out of memory at 1Gi.
  • Stored secrets live in PostgreSQL and survive an app restart or reinstall — to wipe all data you must also reinstall the PostgreSQL dependency (which deletes its volume set).
  • First boot takes roughly 2–5 minutes — the server waits for PostgreSQL to finish initializing and runs its migrations, logging transient Boot up migration failed retries in the meantime. This self-heals; the workload becomes ready once migrations complete.
  • Set smtp.requireTls: false only for a plaintext mail catcher — real providers on port 587 need it left true.

External References

Infisical Documentation

Official Infisical documentation

Self-Hosting Configuration

Environment variable reference for self-hosted Infisical

Standalone Deployment

The standalone image this template deploys

Email Service Setup

SMTP setup for invites, verification, and password reset

Infisical Template

View the source files, default values, and chart definition