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.What Gets Created
Prerequisites
Two dictionary secrets must exist before you install. The template creates neither; it references yours by name and grants Logtoreveal on exactly those secrets.
Create the admin account secret
username and password. Logto creates the Admin Console account from it on first boot:_, 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.Create the database credentials secret
username, password and database. The bundled PostgreSQL initializes with them and Logto connects with them:-, _, .). 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.Read the admin password back when you need it
-o yaml is required; without it the command prints only a summary table:Installation
Install from the marketplace registry, naming your two secrets: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
CLI
Terraform
Pulumi
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, setpostgresHA.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:status.canonicalEndpoint:
http://localhost:3002/console:
First Run
Open the Administrators URL from the table above, sign in with the admin secret’susername 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 thebackup 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
Logto never starts and cpln logs returns nothing
Logto never starts and cpln logs returns nothing
status.versions[].message as shown in Prerequisites, create the secret, then run cpln workload force-redeployment RELEASE_NAME-logto --gvc GVC_NAME.The Admin Console workload is ready but its URL returns 503
The Admin Console workload is ready but its URL returns 503
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:FATAL bootstrap with password.rejected
FATAL bootstrap with password.rejected
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.A port-forwarded Admin Console signs in but shows no data
A port-forwarded Admin Console signs in but shows no data
adminConsole.publicAccess.enabled: false and use the port-forward.The Admin Console URL shows the sign-in service instead of the Console
The Admin Console URL shows the sign-in service instead of the Console
*.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
publicAccessand 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.allowInternalTargetsoff 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.appAdmin 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 upgradeafter 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.