Skip to main content

Overview

Logto is an open-source sign-in and user-management platform. Your apps send users to Logto for sign-in and sign-up over OIDC or OAuth, and Logto provides users, roles, organizations, social and passwordless connectors, MFA, and a Management API, with an Admin Console to manage them. This template runs two interchangeable Logto replicas on a bundled highly available PostgreSQL by default, serves the Admin Console from its own workload, and creates the Admin Console account from a secret you provide. All state, including signing keys and the admin account, lives in PostgreSQL. Replicas share only the database.
This template deploys into an existing GVC. It does not create or manage one. Every resource lands in the GVC you install into. Use a single-location GVC: the bundled database runs in one location.

What Gets Created

Prerequisites

Two dictionary secrets must exist before you install. The template creates neither; it references yours by name and grants Logto reveal on exactly those secrets.
1

Create the admin account secret

A dictionary secret with exactly the keys username and password. Logto creates the Admin Console account from it on first boot:
The username may contain letters, digits and _, and must start with a letter or _. The password needs 8 or more characters and must not be a known breached password. Set admin.secretName to this name.
2

Create the database credentials secret

A dictionary secret holding username, password and database. The bundled PostgreSQL initializes with them and Logto connects with them:
All three values must be URL-safe (letters, digits, -, _, .). Set postgresHA.config.credentialsSecretName (HA, the default) or postgres.config.credentialsSecretName (single-instance) to this name. Secret names are org-wide, so give each release its own secrets.
3

Read the admin password back when you need it

-o yaml is required; without it the command prints only a summary table:
A missing prerequisite secret wedges the install silently. The install exits 0, every resource is created, and Logto then waits. Because the container never ran, cpln logs returns nothing.The only place the missing secret is named is status.versions[].message:
It is get-deployments — plain cpln workload get has no versions key. Once you create the secret the deployment recovers on its own; to skip the wait, force a redeployment:
Custom domains (optional). The apex domain must be registered with Control Plane, and each hostname needs a CNAME to the GVC endpoint before you install. See Custom Domains. Backups (optional). A cloud account and bucket, set up as described on the postgres-highly-available page. See Backing Up.

Installation

Install from the marketplace registry, naming your two secrets:
For the single-instance store set postgresHA.enabled=false, postgres.enabled=true and postgres.config.credentialsSecretName instead. Choose publicAccess and the custom domains now: the public URL is the OIDC issuer. To install using another method, follow the instructions for your preferred tool:

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

Logto

Admin account

Access

Custom Domains

Bare hostnames; the chart creates the domains. The core hostname becomes the OIDC issuer, so set it at install.

Internal Access and Webhooks

webhooks.allowInternalTargets is a security trade-off. By default Logto sends webhooks only to public URLs. Turning it on lets anyone who can manage webhooks (a Console admin, or an app with Management API access) make Logto call any workload it can reach inside Control Plane. Leave it off unless you need internal receivers.

Database

Highly available PostgreSQL is the default. For a lighter install, set postgresHA.enabled: false and postgres.enabled: true. The backup blocks pass through to the postgres-highly-available and postgres templates.

Connecting

Logto serves two URLs. Give each audience only its own: Find a canonical endpoint in status.canonicalEndpoint:
For a private Admin Console, open a tunnel and browse to http://localhost:3002/console:

First Run

Open the Administrators URL from the table above, sign in with the admin secret’s username and password, then create an application under Applications and copy its App ID, App secret and the issuer into your app. The Admin Console serves nothing until the admin account has been created from your secret.

Operations

Backing Up

Enable the backup block of the database you use (postgresHA.backup or postgres.backup). Bucket and cloud-account setup is on the postgres-highly-available and postgres pages. Restoring a Logto database from a backup is not documented for this template.

Scaling and Availability

replicas (1 to 4) sets the number of Logto replicas; they are interchangeable because all state is in PostgreSQL. Two keep sign-in up through restarts and upgrades. A database failover interrupts sign-in for about a minute while PostgreSQL promotes a new leader; Logto reconnects on its own.

Troubleshooting

Cause: the admin secret or the database credentials secret does not exist.Fix: read status.versions[].message as shown in Prerequisites, create the secret, then run cpln workload force-redeployment RELEASE_NAME-logto --gvc GVC_NAME.
Cause: the Admin Console workload waits for the admin account (waiting for the first admin account in its log). The account is created by the RELEASE_NAME-logto workload.Fix: look for FATAL bootstrap in the RELEASE_NAME-logto logs:
Cause: the admin password is a known breached password, is too weak, or api.pwnedpasswords.com is unreachable; Logto refuses the password when the check cannot run.Fix: correct the password in the admin secret (and allow outbound HTTPS to api.pwnedpasswords.com), then run cpln workload force-redeployment RELEASE_NAME-logto --gvc GVC_NAME.
Cause: with the public Admin Console on, Logto accepts only the public Console origin.Fix: use the public Console URL, or set adminConsole.publicAccess.enabled: false and use the port-forward.
Cause: with custom domains set, the *.cpln.app Admin Console URL serves the sign-in service.Fix: use the customDomain.adminConsole hostname for administrators and the customDomain.core hostname for users.

Important Notes

  • The admin secret is read once, when the database is first initialized. Afterwards change the admin password in the Admin Console; editing the secret changes nothing. There is no supported reset for a lost admin password, so store it safely.
  • Choose publicAccess and the custom domains at install. The public URL is the OIDC issuer, and changing it later breaks every app configured against it.
  • First boot needs outbound HTTPS to api.pwnedpasswords.com. Logto checks the admin password against known breaches and refuses it if the check cannot run.
  • To send verification and sign-in emails, add an email connector (SMTP or a provider) under Admin Console, Connectors. Logto reaches the mail server over outbound TCP, which the template allows.
  • Leave webhooks.allowInternalTargets off unless you need internal receivers. Turning it on lets anyone who can manage webhooks make Logto call any workload it can reach inside Control Plane.
  • With custom domains set, give administrators and users only the domain URLs. The *.cpln.app Admin Console URL then serves the sign-in service instead of the Console.
  • Uninstalling removes the domain resources. Reinstalling recreates them, and no re-verification is needed while the apex domain stays registered.
  • The first helm upgrade after an install can restart the bundled database, which briefly interrupts sign-in.
  • Uninstalling deletes the database volumes, and with them every user and signing key. Enable backups.
  • The open-source edition has one Admin Console account. Inviting more admins is a paid Logto feature.

External References

Logto Documentation

Official Logto documentation

Logto OSS Configuration

Core service configuration reference

Integrate an App

Quick starts for connecting your app to Logto

Logto on GitHub

Upstream source and releases

Logto Template

View the source files, default values, and chart definition