Configure LightShip with environment variables for ClickHouse, Postgres, caching, resource limits, and admin credentials.
LightShip reads all settings from environment variables at startup. You can set them in a .env file with Docker Compose or export them directly in your deployment environment.
Read-only connection to the trace database. Common DSN forms: https://USER:PASSWORD@INSTANCE.clickhouse.cloud:8443/DATABASE?secure=true and clickhouse://HOST:9000/DATABASE.
POSTGRES_PASSWORD
lightship
Password used by the Postgres service in the Compose stack.
DATABASE_URL
required outside Compose
Postgres connection string. Docker Compose constructs it from POSTGRES_PASSWORD.
LIGHTSHIP_ADMIN_PASSWORD_HASH
generated on first boot
Bootstrap or recovery hash for admin. Changing it rotates the credential; an unchanged value does not overwrite a later UI password change.
LIGHTSHIP_ADDR
:8080
HTTP listen address inside the container. The port mapping in docker-compose.yml publishes this to the host.
PORT
unset
Hosting-provider port fallback used only when LIGHTSHIP_ADDR is unset.
LIGHTSHIP_MODEL_TTL
1m
Maximum age of the access-model cache in each process. Must be a positive Go duration; a malformed value stops the service at boot.
LIGHTSHIP_AUDIT_RETENTION_DAYS
90
Number of days to keep audit log entries. Positive integer; pruning runs in-process.
LIGHTSHIP_LOGIN_CONCURRENCY
4
Maximum simultaneous password verifications per process. Saturated requests receive 429.
LIGHTSHIP_QUERY_CONCURRENCY
8
Shared maximum simultaneous REST and MCP trace requests per process. Saturated requests receive 429.
LIGHTSHIP_QUERY_TIMEOUT
30s
Deadline applied to REST and MCP trace requests. Must be a positive Go duration.
LIGHTSHIP_MAX_QUERY_WINDOW
744h
Maximum requested trace time range (31 days). Must be a positive Go duration.
LIGHTSHIP_DEMO_MODE
false
Explicitly enables the disposable public-demo runtime. Demo-specific settings are rejected unless this is true.
LIGHTSHIP_DEMO_USERNAME
disabled
Username displayed on the sign-in screen of an intentionally public, disposable demo. Must be set with LIGHTSHIP_DEMO_PASSWORD.
LIGHTSHIP_DEMO_PASSWORD
disabled
Plaintext password displayed for the demo account. It must match the account’s stored password hash.
LIGHTSHIP_DEMO_DATASET_FROM
disabled
Optional RFC3339 lower bound exposed as the fixed Demo dataset range. Must be set with LIGHTSHIP_DEMO_DATASET_TO.
LIGHTSHIP_DEMO_DATASET_TO
disabled
Optional RFC3339 upper bound for the fixed demo range. Must be later than LIGHTSHIP_DEMO_DATASET_FROM.
Demo mode deliberately publishes an ordinary account credential. The account retains its assigned
roles, so displaying an administrator credential gives visitors administrative access. Demo API
keys expire within 24 hours, and the displayed account cannot change its own password.Enable this mode only on a dedicated deployment backed by synthetic traces and disposable
control-plane state. Public demos still require TLS and edge rate limits.
Change POSTGRES_PASSWORD from the default before the first boot. Postgres bakes the password into its data volume during initialization. Changing it later requires resetting the volume or running ALTER ROLE inside Postgres manually.
Run lightship check to compile the access model stored in Postgres and print its status. From a
Docker Compose checkout, run:
docker compose run --rm control-plane check
The command does not start the server, apply migrations, validate the serving environment, or test
ClickHouse connectivity and schema compatibility. A missing source binding is reported as a
warning. See CLI reference for details.
{"docsConfig":{"theme":"palm","$schema":"https://mintlify.com/docs.json","name":"LightShip","colors":{"primary":"#0F766E","light":"#5EEAD4","dark":"#0F766E"},"styling":{"latex":false},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"lightship","hasAudioNarration":false,"actualSubdomain":"lightship","customDomains":[],"gitSource":{"type":"github","owner":"lightshiphq","repo":"lightship","deployBranch":"main","contentDirectory":"docs","isPrivate":false,"mountPath":"","label":""},"chroma":{"latestBuiltDeploymentHistoryId":"6ad99bb2d68bf1c24a1d046b","collectionId":"e413c391-e6ca-4d14-9bb9-fd3daca2c62d","liveDeploymentHistoryId":"6ad99bb2d68bf1c24a1d046b","schemaVersion":"v3"},"entitlements":{},"buildId":"6ad99bb2d68bf1c24a1d046b","clientVersion":"0.0.4074","searchFilterCounts":[{"language":"default","tag":"Documentation","count":19},{"language":"default","tag":"API Reference","count":16},{"language":"default","tag":"Identity","count":5},{"language":"default","tag":"Get Started","count":5},{"language":"default","tag":"Operate","count":5},{"language":"default","tag":"Access Model","count":3},{"language":"default","tag":"Overview","count":3},{"language":"default","tag":"Traces","count":3},{"language":"default","tag":"Core Concepts","count":3},{"language":"default","tag":"Configure","count":3}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"rbac-expansion","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"live-agents","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"comment-mode","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"operate/configuration","slug":"/operate/configuration","pageMetadata":{"title":"Configuration","sidebarTitle":"Configuration","description":"Configure LightShip with environment variables for ClickHouse, Postgres, caching, resource limits, and admin credentials.","href":"/operate/configuration"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Configure LightShip with environment variables for ClickHouse, Postgres, caching, resource limits, and admin credentials.\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,code:`code`,p:`p`,pre:`pre`,span:`span`,strong:`strong`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,..._provideComponents(),...props.components},{CodeBlock,Heading,Table,Warning}=_components;if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Table)_missingMdxReference(`Table`,true);if(!Warning)_missingMdxReference(`Warning`,true);return _jsxs(_Fragment,{children:[_jsxs(_components.p,{children:[`LightShip reads all settings from environment variables at startup. You can set them in a `,_jsx(_components.code,{children:`.env`}),` file with Docker Compose or export them directly in your deployment environment.`]}),`\n`,_jsx(Heading,{level:`2`,id:`environment-variables`,children:`Environment variables`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Variable`}),_jsx(_components.th,{children:`Default`}),_jsx(_components.th,{children:`Purpose`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`CLICKHOUSE_DSN`})}),_jsx(_components.td,{children:`required`}),_jsxs(_components.td,{children:[`Read-only connection to the trace database. Common DSN forms: `,_jsx(_components.code,{children:`https://USER:PASSWORD@INSTANCE.clickhouse.cloud:8443/DATABASE?secure=true`}),` and `,_jsx(_components.code,{children:`clickhouse://HOST:9000/DATABASE`}),`.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`POSTGRES_PASSWORD`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`lightship`})}),_jsx(_components.td,{children:`Password used by the Postgres service in the Compose stack.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`DATABASE_URL`})}),_jsx(_components.td,{children:`required outside Compose`}),_jsxs(_components.td,{children:[`Postgres connection string. Docker Compose constructs it from `,_jsx(_components.code,{children:`POSTGRES_PASSWORD`}),`.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`LIGHTSHIP_ADMIN_PASSWORD_HASH`})}),_jsx(_components.td,{children:`generated on first boot`}),_jsxs(_components.td,{children:[`Bootstrap or recovery hash for `,_jsx(_components.code,{children:`admin`}),`. Changing it rotates the credential; an unchanged value does not overwrite a later UI password change.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`LIGHTSHIP_ADDR`})}),_jsx(_components.td,{\"data-numeric\":`true`,children:_jsx(_components.code,{children:`:8080`})}),_jsxs(_components.td,{children:[`HTTP listen address inside the container. The port mapping in `,_jsx(_components.code,{children:`docker-compose.yml`}),` publishes this to the host.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`PORT`})}),_jsx(_components.td,{children:`unset`}),_jsxs(_components.td,{children:[`Hosting-provider port fallback used only when `,_jsx(_components.code,{children:`LIGHTSHIP_ADDR`}),` is unset.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`LIGHTSHIP_MODEL_TTL`})}),_jsx(_components.td,{\"data-numeric\":`true`,children:_jsx(_components.code,{children:`1m`})}),_jsx(_components.td,{children:`Maximum age of the access-model cache in each process. Must be a positive Go duration; a malformed value stops the service at boot.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`LIGHTSHIP_AUDIT_RETENTION_DAYS`})}),_jsx(_components.td,{\"data-numeric\":`true`,children:_jsx(_components.code,{children:`90`})}),_jsx(_components.td,{children:`Number of days to keep audit log entries. Positive integer; pruning runs in-process.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`LIGHTSHIP_LOGIN_CONCURRENCY`})}),_jsx(_components.td,{\"data-numeric\":`true`,children:_jsx(_components.code,{children:`4`})}),_jsxs(_components.td,{children:[`Maximum simultaneous password verifications per process. Saturated requests receive `,_jsx(_components.code,{children:`429`}),`.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`LIGHTSHIP_QUERY_CONCURRENCY`})}),_jsx(_components.td,{\"data-numeric\":`true`,children:_jsx(_components.code,{children:`8`})}),_jsxs(_components.td,{children:[`Shared maximum simultaneous REST and MCP trace requests per process. Saturated requests receive `,_jsx(_components.code,{children:`429`}),`.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`LIGHTSHIP_QUERY_TIMEOUT`})}),_jsx(_components.td,{\"data-numeric\":`true`,children:_jsx(_components.code,{children:`30s`})}),_jsx(_components.td,{children:`Deadline applied to REST and MCP trace requests. Must be a positive Go duration.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`LIGHTSHIP_MAX_QUERY_WINDOW`})}),_jsx(_components.td,{\"data-numeric\":`true`,children:_jsx(_components.code,{children:`744h`})}),_jsx(_components.td,{children:`Maximum requested trace time range (31 days). Must be a positive Go duration.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`LIGHTSHIP_DEMO_MODE`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`false`})}),_jsxs(_components.td,{children:[`Explicitly enables the disposable public-demo runtime. Demo-specific settings are rejected unless this is `,_jsx(_components.code,{children:`true`}),`.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`LIGHTSHIP_DEMO_USERNAME`})}),_jsx(_components.td,{children:`disabled`}),_jsxs(_components.td,{children:[`Username displayed on the sign-in screen of an intentionally public, disposable demo. Must be set with `,_jsx(_components.code,{children:`LIGHTSHIP_DEMO_PASSWORD`}),`.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`LIGHTSHIP_DEMO_PASSWORD`})}),_jsx(_components.td,{children:`disabled`}),_jsx(_components.td,{children:`Plaintext password displayed for the demo account. It must match the account’s stored password hash.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`LIGHTSHIP_DEMO_DATASET_FROM`})}),_jsx(_components.td,{children:`disabled`}),_jsxs(_components.td,{children:[`Optional RFC3339 lower bound exposed as the fixed `,_jsx(_components.strong,{children:`Demo dataset`}),` range. Must be set with `,_jsx(_components.code,{children:`LIGHTSHIP_DEMO_DATASET_TO`}),`.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`LIGHTSHIP_DEMO_DATASET_TO`})}),_jsx(_components.td,{children:`disabled`}),_jsxs(_components.td,{children:[`Optional RFC3339 upper bound for the fixed demo range. Must be later than `,_jsx(_components.code,{children:`LIGHTSHIP_DEMO_DATASET_FROM`}),`.`]})]})]})]}),`\n`,_jsx(Heading,{level:`3`,id:`hosted-demo-mode`,children:`Hosted demo mode`}),`\n`,_jsx(_components.p,{children:`Demo mode deliberately publishes an ordinary account credential. The account retains its assigned\nroles, so displaying an administrator credential gives visitors administrative access. Demo API\nkeys expire within 24 hours, and the displayed account cannot change its own password.`}),`\n`,_jsx(_components.p,{children:`Enable this mode only on a dedicated deployment backed by synthetic traces and disposable\ncontrol-plane state. Public demos still require TLS and edge rate limits.`}),`\n`,_jsx(Warning,{children:_jsxs(_components.p,{children:[`Change `,_jsx(_components.code,{children:`POSTGRES_PASSWORD`}),` from the default before the first boot. Postgres bakes the password into its data volume during initialization. Changing it later requires resetting the volume or running `,_jsx(_components.code,{children:`ALTER ROLE`}),` inside Postgres manually.`]})}),`\n`,_jsx(Heading,{level:`2`,id:`validating-configuration`,children:`Validating configuration`}),`\n`,_jsxs(_components.p,{children:[`Run `,_jsx(_components.code,{children:`lightship check`}),` to compile the access model stored in Postgres and print its status. From a\nDocker Compose checkout, run:`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`docker`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` compose`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` run`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --rm`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` control-plane`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` check`})]}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`The command does not start the server, apply migrations, validate the serving environment, or test\nClickHouse connectivity and schema compatibility. A missing source binding is reported as a\nwarning. See `,_jsx(_components.a,{href:`/operate/cli#lightship-check`,children:`CLI reference`}),` for details.`]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Configuration","sidebarTitle":"Configuration","description":"Configure LightShip with environment variables for ClickHouse, Postgres, caching, resource limits, and admin credentials.","href":"/operate/configuration"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Environment variables","slug":"environment-variables","depth":2,"children":[{"title":"Hosted demo mode","slug":"hosted-demo-mode","depth":3,"children":[]}]},{"title":"Validating configuration","slug":"validating-configuration","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":[],"subdomain":"lightship","siteName":"LightShip","title":"Configuration - LightShip","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-09-10T11:46:23.056Z","originalFileLocation":"operate/configuration.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Configure LightShip with environment variables for ClickHouse, Postgres, caching, resource limits, and admin credentials.\">\u003cmeta data-mint-head name=\"application-name\" content=\"LightShip\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"https://mintlify.s3.us-west-1.amazonaws.com/lightship/_generated/favicon/apple-touch-icon.png?v=3\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"https://mintlify.s3.us-west-1.amazonaws.com/lightship/_generated/favicon/favicon-32x32.png?v=3\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"https://mintlify.s3.us-west-1.amazonaws.com/lightship/_generated/favicon/favicon-16x16.png?v=3\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"https://mintlify.s3.us-west-1.amazonaws.com/lightship/_generated/favicon/favicon.ico?v=3\">\u003cmeta data-mint-head property=\"og:title\" content=\"Configuration - LightShip\">\u003cmeta data-mint-head property=\"og:description\" content=\"Configure LightShip with environment variables for ClickHouse, Postgres, caching, resource limits, and admin credentials.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"LightShip\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://lightship.mintlify.app/operate/configuration\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://lightship.mintlify.site/_mintlify/api/og/v2?division=Operate\u0026amp;title=Configuration\u0026amp;description=Configure+LightShip+with+environment+variables+for+ClickHouse%2C+Postgres%2C+caching%2C+resource+limits%2C+and+admin+credentials.\u0026amp;theme=4451605dc365fc6b8cecb93b\u0026amp;signature=3893d0af846c6f269f033011ac470db96fa7bdafc862da75c5fefa2be99cd73b\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Configuration - LightShip\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Configure LightShip with environment variables for ClickHouse, Postgres, caching, resource limits, and admin credentials.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://lightship.mintlify.site/_mintlify/api/og/v2?division=Operate\u0026amp;title=Configuration\u0026amp;description=Configure+LightShip+with+environment+variables+for+ClickHouse%2C+Postgres%2C+caching%2C+resource+limits%2C+and+admin+credentials.\u0026amp;theme=4451605dc365fc6b8cecb93b\u0026amp;signature=3893d0af846c6f269f033011ac470db96fa7bdafc862da75c5fefa2be99cd73b\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"https://mintlify.s3.us-west-1.amazonaws.com/lightship/_generated/favicon/browserconfig.xml?v=3\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"LightShip\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#0F766E\">\u003clink data-mint-head rel=\"canonical\" href=\"https://lightship.mintlify.app/operate/configuration\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/operate/configuration.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://lightship.mintlify.app/#organization\",\"name\":\"LightShip\",\"url\":\"https://lightship.mintlify.app\"},{\"@type\":\"WebSite\",\"@id\":\"https://lightship.mintlify.app#website\",\"name\":\"LightShip\",\"url\":\"https://lightship.mintlify.app\",\"publisher\":{\"@id\":\"https://lightship.mintlify.app/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://lightship.mintlify.app/operate/configuration#webpage\",\"url\":\"https://lightship.mintlify.app/operate/configuration\",\"name\":\"Configuration\",\"description\":\"Configure LightShip with environment variables for ClickHouse, Postgres, caching, resource limits, and admin credentials.\",\"dateModified\":\"2026-09-10T11:46:23.056Z\",\"isPartOf\":{\"@id\":\"https://lightship.mintlify.app#website\"},\"breadcrumb\":{\"@id\":\"https://lightship.mintlify.app/operate/configuration#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://lightship.mintlify.app/operate/configuration#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"LightShip\",\"item\":\"https://lightship.mintlify.app\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Configuration\",\"item\":\"https://lightship.mintlify.app/operate/configuration\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://lightship.mintlify.app/operate/configuration#article\",\"headline\":\"Configuration\",\"name\":\"Configuration\",\"description\":\"Configure LightShip with environment variables for ClickHouse, Postgres, caching, resource limits, and admin credentials.\",\"url\":\"https://lightship.mintlify.app/operate/configuration\",\"mainEntityOfPage\":{\"@id\":\"https://lightship.mintlify.app/operate/configuration#webpage\"},\"dateModified\":\"2026-09-10T11:46:23.056Z\",\"publisher\":{\"@id\":\"https://lightship.mintlify.app/#organization\"},\"isPartOf\":{\"@id\":\"https://lightship.mintlify.app#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"LightShip\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"LightShip","nav":{"global":null,"tabs":[{"tab":"Documentation","groups":[{"group":"Get Started","pages":[{"title":"LightShip","sidebarTitle":"Introduction","href":""},{"title":"Quickstart","sidebarTitle":"Quickstart","href":"/quickstart"},{"title":"Install LightShip","sidebarTitle":"Install","href":"/get-started/install"},{"title":"Authentication","sidebarTitle":"Authentication","href":"/get-started/authentication"},{"title":"Architecture","sidebarTitle":"Architecture","href":"/concepts/architecture"}]},{"group":"Core Concepts","pages":[{"title":"Access Model","sidebarTitle":"Access Model","href":"/concepts/access-model"},{"title":"Policies","sidebarTitle":"Policies","href":"/concepts/policies"},{"title":"Audit Log","sidebarTitle":"Audit","href":"/concepts/audit"}]},{"group":"Configure","pages":[{"title":"Connect Trace Data","sidebarTitle":"Connect Trace Data","href":"/configure/discover-trace-source"},{"title":"Define Roles","sidebarTitle":"Define Roles","href":"/configure/roles-and-policies"},{"title":"Manage Users","sidebarTitle":"Manage Users","href":"/configure/users"}]},{"group":"Guides","pages":[{"title":"Configure Tenant-Scoped Trace Access","sidebarTitle":"Tenant-Scoped Trace Access","href":"/guides/tenant-scoped-trace-access"}]},{"group":"Use LightShip","pages":[{"title":"Use the Web UI","sidebarTitle":"Web UI","href":"/use/web-ui"},{"title":"Connect LightShip MCP","sidebarTitle":"MCP Clients","description":"Connect an AI client to LightShip for trace investigation.","href":"/use/mcp"}]},{"group":"Operate","pages":[{"title":"Configuration","sidebarTitle":"Configuration","href":"/operate/configuration"},{"title":"Admin Recovery","sidebarTitle":"Admin Recovery","description":"Recover the LightShip admin account if the generated password is lost. Generate a new hash with the CLI and rotate it safely without losing data.","href":"/operate/admin-recovery"},{"title":"Deployment","sidebarTitle":"Deployment","href":"/operate/deployment"},{"title":"CLI Reference","sidebarTitle":"CLI Reference","href":"/operate/cli"},{"title":"Limitations","sidebarTitle":"Limitations","href":"/operate/limitations"}]}]},{"tab":"API Reference","pages":[{"title":"API Reference","href":"/api-reference/introduction"}]}]},"basePath":"","title":"Configuration - LightShip","buildId":"dpl_BLQvU86QFwq3AhPofSTw6q8dGWKm","deploymentId":"dpl_BLQvU86QFwq3AhPofSTw6q8dGWKm","dynamics":[],"chunks":[]}