Zum Inhalt springen
Sprache wählen:Deutsch

Configuration reference

Dieser Inhalt ist noch nicht in deiner Sprache verfügbar.

Kept is configured with environment variables. An environment variable always beats the same setting in the admin screens, which then shows it as locked. kept admin config prints this same table from the server you are running, so it always matches your version.

The Compose file passes the common ones through from .env; the rest go in a compose.override.yaml next to it.

Variable Default Notes
KEPT_DATABASE_URL kept_app login (required)
KEPT_AUTH_DATABASE_URL kept_auth login (required)
KEPT_SYSTEM_DATABASE_URL kept_system login (required: workers, and the setup code at web boot)
KEPT_OWNER_DATABASE_URL for kept migrate / kept admin, and on a worker with a backup target (the dump runs as kept_owner)
KEPT_SECRET_KEY generated on first boot if unset (D193); set both or neither; see §7.3
KEPT_AUTH_SECRET generated on first boot if unset (D193); set both or neither; see §7.3
KEPT_SECRET_KEY_VERSION the version of KEPT_SECRET_KEY: 1 when unset; kept admin rotate-key says what to set (§7.3)
KEPT_SECRET_KEYS_RETIRED earlier KEPT_SECRET_KEY versions, still needed to open values and backups sealed before a rotation: comma-separated version:key pairs; never logged
KEPT_PUBLIC_URL required; source of truth for links and QR codes
KEPT_ROLE all all · web · worker
KEPT_STORAGE local local · s3 (+ KEPT_S3_*)
KEPT_SMTP_URL optional; smtp:// or smtps://, with credentials if needed; unset, mail is only logged as due
KEPT_SMTP_FROM the From of every mail; default Kept <no-reply@<KEPT_PUBLIC_URL host>>
KEPT_LOG_LEVEL info pino log level
KEPT_LOG_FORMAT json pretty for docker logs
KEPT_SOURCE_URL the image’s OCI source + revision labels; forks override it (D147)
KEPT_SETUP_CODE generated; app stores may preset it (D107); 6 Crockford base32 characters
KEPT_SIGNUP_OPEN true · false; when set, locks sign-up open or closed and the admin setting shows as locked
KEPT_CONFIG_DIR /config config volume; holds only the generated secret keys
KEPT_DATA_DIR /data data volume; local file storage
KEPT_MAX_FILE_MB 25 largest file one upload may be, in MB (§3.4)
KEPT_IMAGE_CONCURRENCY images resized at once, process-wide; default 1 with under 3 GB of RAM, else 2
KEPT_S3_ENDPOINT S3 endpoint URL; empty for AWS itself (e.g. http://rustfs:9000)
KEPT_S3_PUBLIC_ENDPOINT S3 endpoint the browser reaches, for presigned URLs; empty: KEPT_S3_ENDPOINT (e.g. https://files.example.com)
KEPT_S3_REGION us-east-1 S3 region
KEPT_S3_BUCKET S3 bucket (required with KEPT_STORAGE=s3)
KEPT_S3_ACCESS_KEY_ID S3 access key id (required with KEPT_STORAGE=s3)
KEPT_S3_SECRET_ACCESS_KEY S3 secret access key (required with KEPT_STORAGE=s3); never logged
KEPT_S3_FORCE_PATH_STYLE true for path-style URLs (RustFS, MinIO, most self-hosted S3)
KEPT_TRUSTED_PROXIES comma-separated IPs/CIDRs of reverse proxies whose X-Forwarded-For is believed; empty: the socket address is the client
KEPT_METRICS_TOKEN optional bearer token required to read /metrics
OTEL_EXPORTER_OTLP_ENDPOINT optional; your OpenTelemetry collector (OTLP over HTTP): traces requests and queries there, with the image’s --import preload; the other OTEL_* variables apply; unset, nothing is loaded or sent (D84)
KEPT_ERROR_DSN optional; a Sentry-compatible DSN: a request that fails with a 5xx is reported with its request id, route and stack, never a body, header, message or user; unset, nothing is sent (D84)
KEPT_AI_MOCK 1: every AI call answers from the mock provider (tests, dev); refused in production
KEPT_BARCODE_LOOKUP true · false; when set, locks barcode lookup (Open*Facts) on or off and the admin setting shows as locked
KEPT_BARCODE_CONTACT an email for the barcode lookup’s User-Agent, as Open*Facts asks (D104)
KEPT_EVAL_DIR the extraction evaluation only (pnpm eval:extraction): the folder of labelled photos
KEPT_BACKUP_DIR nightly backup to this directory: an absolute path outside KEPT_DATA_DIR, ideally another disk; the worker also needs KEPT_OWNER_DATABASE_URL
KEPT_BACKUP_S3_BUCKET nightly backup to this S3 bucket instead of a directory (+ KEPT_BACKUP_S3_*); the worker also needs KEPT_OWNER_DATABASE_URL
KEPT_BACKUP_S3_PREFIX kept-backups/ where in the backup bucket the backups go
KEPT_BACKUP_S3_ENDPOINT the backup bucket’s S3 endpoint; empty for AWS itself
KEPT_BACKUP_S3_REGION us-east-1 the backup bucket’s region
KEPT_BACKUP_S3_ACCESS_KEY_ID access key id for the backup bucket (required with KEPT_BACKUP_S3_BUCKET)
KEPT_BACKUP_S3_SECRET_ACCESS_KEY secret access key for the backup bucket (required with KEPT_BACKUP_S3_BUCKET); never logged
KEPT_BACKUP_S3_FORCE_PATH_STYLE true for path-style URLs (RustFS, MinIO, most self-hosted S3)
KEPT_BACKUP_KEEP 7 how many backups are kept; older ones, and the files only they held, are removed
KEPT_BACKUP_TIME 02:30 when the nightly backup starts, HH:MM in UTC
KEPT_BACKUP_PASSWORD the backup repository’s password, at least 12 characters; set, it locks the password in Admin → Backups; never logged (no password, no backup)
KEPT_BACKUP_SFTP nightly backup over SFTP instead of a directory or a bucket: the repository location in restic’s sftp: syntax (+ KEPT_BACKUP_SFTP_KEY_FILE, KEPT_BACKUP_SFTP_KNOWN_HOSTS)
KEPT_BACKUP_SFTP_KEY_FILE the SFTP private key file, an absolute path (required with KEPT_BACKUP_SFTP)
KEPT_BACKUP_SFTP_KNOWN_HOSTS a known_hosts file holding the SFTP server’s pinned host key, an absolute path (required with KEPT_BACKUP_SFTP)
KEPT_BACKUP_KEEP_DAILY retention: the newest backup of each of the last N days; default 7 (D66); set, it locks the field
KEPT_BACKUP_KEEP_WEEKLY retention: the newest backup of each of the last N weeks; default 4 (D66); set, it locks the field
KEPT_BACKUP_KEEP_MONTHLY retention: the newest backup of each of the last N months; default 6 (D66); set, it locks the field
KEPT_RESTIC_BIN the restic binary; default the image’s pinned one, else restic on PATH
KEPT_RESTIC_CACHE_DIR restic’s cache, never backed up; default <KEPT_DATA_DIR>/.cache/restic
KEPT_UPDATE_CHECK true · false; when set, locks “Check for new versions” (GitHub releases, off by default, D65) on or off
KEPT_PORT 8080 the port the server listens on
KEPT_ALLOW_DOWNGRADE 1: start on a database more than one release ahead of this image, audited; for a restore runbook only (plan Q9)
KEPT_UPGRADE_SNAPSHOT auto auto · off: whether kept migrate takes a database snapshot before migrating a populated database (plan Q8)
KEPT_VAPID_PUBLIC_KEY web push: overrides the generated key pair; set both or neither
KEPT_VAPID_PRIVATE_KEY web push: the private half of KEPT_VAPID_PUBLIC_KEY; never logged
KEPT_VAPID_SUBJECT web push: who push services contact, an https: URL or mailto: address; default KEPT_PUBLIC_URL when https, else mailto: the KEPT_SMTP_FROM address, else push is unavailable
KEPT_EMBEDDINGS provider provider · local · off: where search’s embeddings come from; local is refused unless the local model’s runtime is installed (D207)
KEPT_EMBEDDINGS_DIR the local embedding model’s files, only read when KEPT_EMBEDDINGS=local; default <KEPT_DATA_DIR>/models
KEPT_OIDC_ISSUER OIDC sign-in: the issuer URL exactly as its discovery document states it; set, OIDC is on (needs KEPT_OIDC_CLIENT_ID)
KEPT_OIDC_CLIENT_ID OIDC sign-in: the client id
KEPT_OIDC_CLIENT_SECRET OIDC sign-in: the client secret (a confidential client); never logged
KEPT_OIDC_NAME OIDC OIDC sign-in: the provider’s name on “Sign in with <name>”
KEPT_OIDC_AUTOPROVISION_DOMAINS OIDC sign-in: comma-separated email domains (exact, no subdomains) whose people get an account on first sign-in; empty: invite only
KEPT_OIDC_AUTOPROVISION_GROUPS OIDC sign-in: comma-separated groups (exact) whose members get an account on first sign-in; empty: invite only
KEPT_OIDC_GROUPS_CLAIM groups OIDC sign-in: the ID token claim holding the groups
KEPT_OIDC_SCOPES openid email profile OIDC sign-in: the scopes asked for, space-separated
KEPT_GOOGLE_CLIENT_ID Google sign-in: the OAuth client id from Google Cloud; set with the secret, Google sign-in is on (invite only, never autoprovision)
KEPT_GOOGLE_CLIENT_SECRET Google sign-in: the OAuth client secret; never logged
KEPT_APPRISE_URL Apprise channels: the Apprise API server, e.g. http://apprise:8000; unset, people can’t add Apprise channels