Pros: Simple setup for smaller deployments or initial testing.
Cons: Limited scalability and fault tolerance.
Setup: Follow the Docker Compose instructions, ensuring production-ready configuration in your .env file (strong passwords, S3 storage, proper domain/SSL setup via Traefik or another proxy).
# Ensure .env is configured for productioncp .env.example .env# Edit .env with production values (DB creds, S3, Traefik email, domain, etc.)docker network create web # If using Traefik default configdocker compose -f docker-compose.yml -f docker-compose.prod.yml up -d
We only provide amd64 images, if you are using Mac OS with Apple Sillicon, you
will need to enable amd64 emulation and download the amd64 images.
Pros: Scalability, high availability, automated management.
Cons: More complex initial setup.
Setup: Requires creating deployment manifests (e.g., Kubernetes YAML, ECS Task Definitions) for each Latitude service (web, gateway, worker, websockets). You’ll need to manage database and Redis instances separately (e.g., using managed cloud services like RDS/ElastiCache or deploying them within the orchestrator).
Configure ingress controllers (like Nginx Ingress or Traefik Ingress) for routing.
The chart is automatically published to GitHub Container Registry by the workflow
.github/workflows/publish-helm-chart.yml on tags matching helm-chart-v*. Install it with:
helm install latitude oci://ghcr.io/<owner>/latitude \ --version <version> \ -n latitude --create-namespace \ -f charts/latitude/values.yaml \ -f charts/latitude/values.secrets.yaml
Regardless of the method, ensure these are configured correctly:
.env File: Set strong POSTGRES_PASSWORD, configure APP_DOMAIN and APP_URL, set up MAIL_TRANSPORT (e.g., SMTP, Mailgun) with valid credentials, configure DRIVE_DISK (recommend s3).
Storage: Use S3-compatible object storage (DRIVE_DISK=s3) for scalability and persistence. Configure bucket names and IAM roles or access keys securely.
Database & Redis: Use managed services (RDS, ElastiCache, Memorystore) or ensure your self-hosted instances are properly configured for performance, backups, and security.
Latitude Analytics: We collect anonymous usage data to improve the product. You can opt-out by setting OPT_OUT_ANALYTICS=true in your .env file.
Reverse Proxy/SSL: Configure your reverse proxy (Traefik, Nginx, etc.) to handle SSL termination (e.g., using Let’s Encrypt) and route traffic correctly to the Latitude services.
Resource Allocation: Ensure sufficient CPU, memory, and disk space for each service, especially the database and workers.
In a self-hosted setup, Latitude needs access to your AI provider API keys (OpenAI, Anthropic, etc.) to function.
Configuration Method: Add these keys securely to the environment where the Latitude services (specifically the gateway and potentially workers/API) run.
Docker Compose: Add them to your .env file (e.g., OPENAI_API_KEY=sk-...).
Kubernetes: Store them as Kubernetes Secrets and mount them as environment variables in your deployments.
ECS: Use AWS Secrets Manager or Parameter Store integrated with Task Definitions.
Latitude UI: Once configured in the environment, you might still need to “register” the provider within the Latitude Admin UI (Settings > Providers), but you typically won’t need to paste the key directly into the UI if it’s available in the environment.
Scaling: With orchestrators, you can scale services horizontally by increasing replica counts (especially for web, gateway, worker, websockets). Scale database and Redis resources vertically or use managed services that scale.
Updating: Pull the latest official Docker images from the Latitude GitHub Container Registry (or build your own from the latest source) and update your deployments (e.g., docker compose pull && docker compose up -d, kubectl rollout restart deployment, update ECS service).
Migrations: Ensure database migrations run automatically on startup (the default docker-compose.yml includes a migrations service) or run them manually before updating application services (cd packages/core && pnpm db:migrate).
Security: Restrict access to database and Redis ports, use strong passwords, keep dependencies updated, configure firewall rules, secure API keys and secrets.
Backups: Implement regular backups for your PostgreSQL database. If using local storage (DRIVE_DISK=local), ensure the storage volume is backed up.
Logging: Configure Docker log drivers or orchestrator logging to aggregate logs from all services (web, gateway, worker, etc.).
Monitoring: Use tools like Prometheus/Grafana, Datadog, or cloud provider monitoring services to track resource usage (CPU, memory), error rates, request latency, and queue lengths.
Health Checks: Configure health check endpoints in your load balancer or orchestrator to monitor service availability.
Optional Integrations: Configure Sentry (SENTRY_DSN) or PostHog in your .env for enhanced error tracking and analytics.
Consult specific documentation for your chosen orchestrator or PaaS.
Was this page helpful?
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Latitude Docs","colors":{"primary":"#0080ff","light":"#0080ff","dark":"#0080ff"},"logo":{"light":"https://mintcdn.com/latitudellms/Ssq9dzRdSVyjHEcj/logo/light.svg?fit=max\u0026auto=format\u0026n=Ssq9dzRdSVyjHEcj\u0026q=85\u0026s=0f5a2f28c08aa15169274fb611bb7cb4","dark":"https://mintcdn.com/latitudellms/Ssq9dzRdSVyjHEcj/logo/dark.svg?fit=max\u0026auto=format\u0026n=Ssq9dzRdSVyjHEcj\u0026q=85\u0026s=1865443ef1242937e62677890c184176"},"favicon":"https://mintcdn.com/latitudellms/Ssq9dzRdSVyjHEcj/favicon.svg?fit=max\u0026auto=format\u0026n=Ssq9dzRdSVyjHEcj\u0026q=85\u0026s=82111b5b93980b0770d626f2ae5d1c63","navbar":{"primary":{"type":"button","label":"Get started","href":"https://app.latitude.so/"}},"footer":{"socials":{"twitter":"https://twitter.com/trylatitude","github":"https://github.com/latitude-dev/latitude-llm","linkedin":"https://www.linkedin.com/company/trylatitude"}},"seo":{"metatags":{"robots":"noindex"}},"contextual":{"options":["copy","view","chatgpt","claude"],"display":"header"},"styling":{"latex":false},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"latitudellms","hasAudioNarration":false,"actualSubdomain":"latitudellms","customDomains":["docs-v1.latitude.so"],"gitSource":{"type":"github","owner":"latitude-dev","repo":"latitude-llm","deployBranch":"latitude-v1","contentDirectory":"docs","isPrivate":false,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6a98bdaf1a3978f98e37244e","collectionId":"67766419-42b4-45ee-b0c0-17e625e4564c","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6a98bdaf1a3978f98e37244e"},"feedback":{"thumbs":true},"entitlements":{"AI_CHAT":{"status":"ENABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6a98bdaf1a3978f98e37244e","clientVersion":"0.0.3990","searchFilterCounts":[{"language":"default","tag":"Examples","count":36},{"language":"default","tag":"Latitude","count":35},{"language":"default","tag":"Developers","count":26},{"language":"default","tag":"Providers","count":18},{"language":"default","tag":"PromptL","count":14},{"language":"default","tag":"Overview","count":10},{"language":"default","tag":"SDK examples","count":10},{"language":"default","tag":"Prompting Techniques","count":10},{"language":"default","tag":"Use cases","count":8},{"language":"default","tag":"Deployment","count":8}]},"assistantConfig":{},"basePath":"","hasChatPermissions":true,"hasWebMcpPermissions":true,"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":"editor-v7-file-tree","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":"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":"pause-universal-search-reconcile","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":"per-site-search-delta","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":"editor-private-page-search","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":"editor-nav-generations","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":"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":"byok-sep-25","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":"editor-agent-model-picker","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-updated-9-15","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":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"isAtlas":false,"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"guides/self-hosted/production-setup","slug":"/guides/self-hosted/production-setup","pageMetadata":{"title":"Production Deployment","description":"Deploying and managing a self-hosted Latitude instance for production use.","href":"/guides/self-hosted/production-setup"},"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: \"Deploying and managing a self-hosted Latitude instance for production use.\"\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`,li:`li`,ol:`ol`,p:`p`,pre:`pre`,span:`span`,strong:`strong`,ul:`ul`,..._provideComponents(),...props.components},{CodeBlock,Heading,Tip}=_components;if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Tip)_missingMdxReference(`Tip`,true);return _jsxs(_Fragment,{children:[_jsx(Heading,{level:`2`,id:`infrastructure-components`,children:`Infrastructure Components`}),`\n`,_jsx(_components.p,{children:`A typical production deployment involves several key services:`}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Web Application`}),`: The main Next.js frontend (e.g., `,_jsx(_components.code,{children:`app`}),` service).`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`API Gateway`}),`: Handles incoming API requests (e.g., `,_jsx(_components.code,{children:`gateway`}),` service).`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Workers`}),`: Processes background jobs like evaluations and dataset generation (e.g., `,_jsx(_components.code,{children:`worker`}),` service).`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`WebSockets`}),`: Manages real-time connections (e.g., `,_jsx(_components.code,{children:`websockets`}),` service).`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Database`}),`: PostgreSQL for storing persistent data.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Cache/Queue`}),`: Redis for caching and message queuing.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Reverse Proxy/Load Balancer`}),`: (e.g., Traefik, Nginx, Caddy, Cloud Load Balancer) Handles incoming traffic, SSL termination, and routing to services.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Object Storage (Recommended)`}),`: S3-compatible storage for files like uploaded datasets or images.`]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`installation-methods`,children:`Installation Methods`}),`\n`,_jsxs(_components.p,{children:[`While Latitude can be run using `,_jsx(_components.code,{children:`docker compose`}),` on a single machine, production deployments often benefit from more robust methods:`]}),`\n`,_jsx(Heading,{level:`3`,id:`1-docker-compose-single-server`,children:`1. Docker Compose (Single Server)`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Pros`}),`: Simple setup for smaller deployments or initial testing.`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Cons`}),`: Limited scalability and fault tolerance.`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Setup`}),`: Follow the Docker Compose instructions, ensuring production-ready configuration in your `,_jsx(_components.code,{children:`.env`}),` file (strong passwords, S3 storage, proper domain/SSL setup via Traefik or another proxy).`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`5`,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:`5`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`# Ensure .env is configured for production`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`cp`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` .env.example`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` .env`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`# Edit .env with production values (DB creds, S3, Traefik email, domain, etc.)`})}),`\n`,_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:` network`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` create`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` web`}),_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:` # If using Traefik default config`})]}),`\n`,_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:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -f`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` docker-compose.yml`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -f`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` docker-compose.prod.yml`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` up`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -d`})]}),`\n`]})})}),`\n`]}),`\n`]}),`\n`,_jsx(Tip,{children:_jsx(_components.p,{children:`We only provide amd64 images, if you are using Mac OS with Apple Sillicon, you\nwill need to enable amd64 emulation and download the amd64 images.`})}),`\n`,_jsx(Heading,{level:`3`,id:`2-container-orchestration-kubernetes-ecs-etc`,children:`2. Container Orchestration (Kubernetes, ECS, etc.)`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Pros`}),`: Scalability, high availability, automated management.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Cons`}),`: More complex initial setup.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Setup`}),`: Requires creating deployment manifests (e.g., Kubernetes YAML, ECS Task Definitions) for each Latitude service (web, gateway, worker, websockets). You’ll need to manage database and Redis instances separately (e.g., using managed cloud services like RDS/ElastiCache or deploying them within the orchestrator).`,`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Configure ingress controllers (like Nginx Ingress or Traefik Ingress) for routing.`}),`\n`,_jsx(_components.li,{children:`Manage secrets securely (e.g., Kubernetes Secrets, AWS Secrets Manager).`}),`\n`,_jsx(_components.li,{children:`Set up persistent volumes for the database.`}),`\n`]}),`\n`]}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`3-platform-as-a-service-paas`,children:`3. Platform-as-a-Service (PaaS)`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Services like Heroku, Render, or Fly.io might be suitable, often requiring Docker container deployments.`}),`\n`,_jsx(_components.li,{children:`You’ll need to configure buildpacks or Dockerfiles and manage addons for databases and Redis.`}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`4-helm-chart-oci`,children:`4. Helm Chart (OCI)`}),`\n`,_jsxs(_components.p,{children:[`The chart is automatically published to GitHub Container Registry by the workflow\n`,_jsx(_components.code,{children:`.github/workflows/publish-helm-chart.yml`}),` on tags matching `,_jsx(_components.code,{children:`helm-chart-v*`}),`. Install it with:`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`5`,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:`5`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`helm`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` install`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` latitude`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` oci://ghcr.io/`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`\u003c`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`owne`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`r`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`>`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`/latitude`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --version`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` \u003c`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`versio`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`n`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`>`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -n`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` latitude`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --create-namespace`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -f`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` charts/latitude/values.yaml`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -f`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` charts/latitude/values.secrets.yaml`})]}),`\n`]})})}),`\n`,_jsx(Heading,{level:`2`,id:`configuration-for-production`,children:`Configuration for Production`}),`\n`,_jsx(_components.p,{children:`Regardless of the method, ensure these are configured correctly:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsxs(_components.strong,{children:[_jsx(_components.code,{children:`.env`}),` File`]}),`: Set strong `,_jsx(_components.code,{children:`POSTGRES_PASSWORD`}),`, configure `,_jsx(_components.code,{children:`APP_DOMAIN`}),` and `,_jsx(_components.code,{children:`APP_URL`}),`, set up `,_jsx(_components.code,{children:`MAIL_TRANSPORT`}),` (e.g., SMTP, Mailgun) with valid credentials, configure `,_jsx(_components.code,{children:`DRIVE_DISK`}),` (recommend `,_jsx(_components.code,{children:`s3`}),`).`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Storage`}),`: Use S3-compatible object storage (`,_jsx(_components.code,{children:`DRIVE_DISK=s3`}),`) for scalability and persistence. Configure bucket names and IAM roles or access keys securely.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Database \u0026 Redis`}),`: Use managed services (RDS, ElastiCache, Memorystore) or ensure your self-hosted instances are properly configured for performance, backups, and security.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Latitude Analytics`}),`: We collect `,_jsx(_components.a,{href:`https://github.com/latitude-dev/latitude-llm/blob/main/packages/core/src/lib/analytics/collectors/OpenSource.ts`,children:`anonymous usage data`}),` to improve the product. You can opt-out by setting `,_jsx(_components.code,{children:`OPT_OUT_ANALYTICS=true`}),` in your `,_jsx(_components.code,{children:`.env`}),` file.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Reverse Proxy/SSL`}),`: Configure your reverse proxy (Traefik, Nginx, etc.) to handle SSL termination (e.g., using Let’s Encrypt) and route traffic correctly to the Latitude services.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Resource Allocation`}),`: Ensure sufficient CPU, memory, and disk space for each service, especially the database and workers.`]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`connecting-provider-api-keys`,children:`Connecting Provider API Keys`}),`\n`,_jsx(_components.p,{children:`In a self-hosted setup, Latitude needs access to your AI provider API keys (OpenAI, Anthropic, etc.) to function.`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Configuration Method`}),`: Add these keys securely to the environment where the Latitude services (specifically the gateway and potentially workers/API) run.`,`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Docker Compose`}),`: Add them to your `,_jsx(_components.code,{children:`.env`}),` file (e.g., `,_jsx(_components.code,{children:`OPENAI_API_KEY=sk-...`}),`).`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Kubernetes`}),`: Store them as Kubernetes Secrets and mount them as environment variables in your deployments.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`ECS`}),`: Use AWS Secrets Manager or Parameter Store integrated with Task Definitions.`]}),`\n`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Latitude UI`}),`: Once configured in the environment, you might still need to “register” the provider within the Latitude Admin UI (Settings > Providers), but you typically won’t need to paste the key directly into the UI if it’s available in the environment.`]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`scaling-and-updating`,children:`Scaling and Updating`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Scaling`}),`: With orchestrators, you can scale services horizontally by increasing replica counts (especially for `,_jsx(_components.code,{children:`web`}),`, `,_jsx(_components.code,{children:`gateway`}),`, `,_jsx(_components.code,{children:`worker`}),`, `,_jsx(_components.code,{children:`websockets`}),`). Scale database and Redis resources vertically or use managed services that scale.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Updating`}),`: Pull the latest official Docker images from the `,_jsx(_components.a,{href:`https://github.com/orgs/latitude-dev/packages`,children:`Latitude GitHub Container Registry`}),` (or build your own from the latest source) and update your deployments (e.g., `,_jsx(_components.code,{children:`docker compose pull \u0026\u0026 docker compose up -d`}),`, `,_jsx(_components.code,{children:`kubectl rollout restart deployment`}),`, update ECS service).`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Migrations`}),`: Ensure database migrations run automatically on startup (the default `,_jsx(_components.code,{children:`docker-compose.yml`}),` includes a migrations service) or run them manually before updating application services (`,_jsx(_components.code,{children:`cd packages/core \u0026\u0026 pnpm db:migrate`}),`).`]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`security-and-backups`,children:`Security and Backups`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Security`}),`: Restrict access to database and Redis ports, use strong passwords, keep dependencies updated, configure firewall rules, secure API keys and secrets.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Backups`}),`: Implement regular backups for your PostgreSQL database. If using local storage (`,_jsx(_components.code,{children:`DRIVE_DISK=local`}),`), ensure the storage volume is backed up.`]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`self-hosting-mcp-integrations`,children:`Self-Hosting MCP Integrations`}),`\n`,_jsxs(_components.p,{children:[`If using `,_jsx(_components.a,{href:`/guides/integration/mcp-integrations`,children:`Third-Party Integrations via MCP`}),`, you’ll need to deploy and manage those MCP servers within your infrastructure as well.`]}),`\n`,_jsx(Heading,{level:`2`,id:`monitoring-and-logging`,children:`Monitoring and Logging`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Logging`}),`: Configure Docker log drivers or orchestrator logging to aggregate logs from all services (web, gateway, worker, etc.).`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Monitoring`}),`: Use tools like Prometheus/Grafana, Datadog, or cloud provider monitoring services to track resource usage (CPU, memory), error rates, request latency, and queue lengths.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Health Checks`}),`: Configure health check endpoints in your load balancer or orchestrator to monitor service availability.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Optional Integrations`}),`: Configure Sentry (`,_jsx(_components.code,{children:`SENTRY_DSN`}),`) or PostHog in your `,_jsx(_components.code,{children:`.env`}),` for enhanced error tracking and analytics.`]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`next-steps`,children:`Next Steps`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Review the `,_jsx(_components.a,{href:`/guides/self-hosted/development-setup`,children:`Local Development Setup`})]}),`\n`,_jsx(_components.li,{children:`Consult specific documentation for your chosen orchestrator or PaaS.`}),`\n`]})]})}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":"Production Deployment","description":"Deploying and managing a self-hosted Latitude instance for production use.","href":"/guides/self-hosted/production-setup"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Infrastructure Components","slug":"infrastructure-components","depth":2,"children":[]},{"title":"Installation Methods","slug":"installation-methods","depth":2,"children":[{"title":"1. Docker Compose (Single Server)","slug":"1-docker-compose-single-server","depth":3,"children":[]},{"title":"2. Container Orchestration (Kubernetes, ECS, etc.)","slug":"2-container-orchestration-kubernetes-ecs-etc","depth":3,"children":[]},{"title":"3. Platform-as-a-Service (PaaS)","slug":"3-platform-as-a-service-paas","depth":3,"children":[]},{"title":"4. Helm Chart (OCI)","slug":"4-helm-chart-oci","depth":3,"children":[]}]},{"title":"Configuration for Production","slug":"configuration-for-production","depth":2,"children":[]},{"title":"Connecting Provider API Keys","slug":"connecting-provider-api-keys","depth":2,"children":[]},{"title":"Scaling and Updating","slug":"scaling-and-updating","depth":2,"children":[]},{"title":"Security and Backups","slug":"security-and-backups","depth":2,"children":[]},{"title":"Self-Hosting MCP Integrations","slug":"self-hosting-mcp-integrations","depth":2,"children":[]},{"title":"Monitoring and Logging","slug":"monitoring-and-logging","depth":2,"children":[]},{"title":"Next Steps","slug":"next-steps","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":["/_mintlify/custom/latitudellms/98203f04b0eae836/script.js"],"subdomain":"latitudellms","siteName":"Latitude Docs","title":"Production Deployment - Latitude Docs","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-01-26T17:21:36.329Z","originalFileLocation":"guides/self-hosted/production-setup.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=\"Deploying and managing a self-hosted Latitude instance for production use.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Latitude Docs\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003cmeta data-mint-head name=\"robots\" content=\"noindex\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/latitudellms/nd8UhULMfcLSBoZ-/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/latitudellms/nd8UhULMfcLSBoZ-/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/latitudellms/nd8UhULMfcLSBoZ-/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/latitudellms/nd8UhULMfcLSBoZ-/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/latitudellms/nd8UhULMfcLSBoZ-/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/latitudellms/nd8UhULMfcLSBoZ-/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/latitudellms/nd8UhULMfcLSBoZ-/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/latitudellms/nd8UhULMfcLSBoZ-/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/latitudellms/nd8UhULMfcLSBoZ-/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Production Deployment - Latitude Docs\">\u003cmeta data-mint-head property=\"og:description\" content=\"Deploying and managing a self-hosted Latitude instance for production use.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Latitude Docs\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs-v1.latitude.so/guides/self-hosted/production-setup\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://latitudellms.mintlify.app/_mintlify/api/og/v2?division=Self-Hosting\u0026amp;title=Production+Deployment\u0026amp;description=Deploying+and+managing+a+self-hosted+Latitude+instance+for+production+use.\u0026amp;theme=ab9bfabc69091edb5dcaeb95\u0026amp;signature=f743e780373b864e3048cb58568561484cefcf79018277a8f4404e13a3caa523\">\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=\"Production Deployment - Latitude Docs\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Deploying and managing a self-hosted Latitude instance for production use.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://latitudellms.mintlify.app/_mintlify/api/og/v2?division=Self-Hosting\u0026amp;title=Production+Deployment\u0026amp;description=Deploying+and+managing+a+self-hosted+Latitude+instance+for+production+use.\u0026amp;theme=ab9bfabc69091edb5dcaeb95\u0026amp;signature=f743e780373b864e3048cb58568561484cefcf79018277a8f4404e13a3caa523\">\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=\"/mintlify-assets/_mintlify/favicons/latitudellms/nd8UhULMfcLSBoZ-/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Latitude Docs\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#0080ff\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs-v1.latitude.so/guides/self-hosted/production-setup\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/guides/self-hosted/production-setup.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs-v1.latitude.so/#organization\",\"name\":\"Latitude Docs\",\"url\":\"https://docs-v1.latitude.so\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/latitudellms/Ssq9dzRdSVyjHEcj/logo/light.svg?fit=max\u0026auto=format\u0026n=Ssq9dzRdSVyjHEcj\u0026q=85\u0026s=0f5a2f28c08aa15169274fb611bb7cb4\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs-v1.latitude.so#website\",\"name\":\"Latitude Docs\",\"url\":\"https://docs-v1.latitude.so\",\"publisher\":{\"@id\":\"https://docs-v1.latitude.so/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs-v1.latitude.so/guides/self-hosted/production-setup#webpage\",\"url\":\"https://docs-v1.latitude.so/guides/self-hosted/production-setup\",\"name\":\"Production Deployment\",\"description\":\"Deploying and managing a self-hosted Latitude instance for production use.\",\"dateModified\":\"2026-01-26T17:21:36.329Z\",\"isPartOf\":{\"@id\":\"https://docs-v1.latitude.so#website\"},\"breadcrumb\":{\"@id\":\"https://docs-v1.latitude.so/guides/self-hosted/production-setup#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs-v1.latitude.so/guides/self-hosted/production-setup#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Self-Hosting\",\"item\":\"https://docs-v1.latitude.so/guides/self-hosted/development-setup\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Production Deployment\",\"item\":\"https://docs-v1.latitude.so/guides/self-hosted/production-setup\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs-v1.latitude.so/guides/self-hosted/production-setup#article\",\"headline\":\"Production Deployment\",\"name\":\"Production Deployment\",\"description\":\"Deploying and managing a self-hosted Latitude instance for production use.\",\"url\":\"https://docs-v1.latitude.so/guides/self-hosted/production-setup\",\"mainEntityOfPage\":{\"@id\":\"https://docs-v1.latitude.so/guides/self-hosted/production-setup#webpage\"},\"dateModified\":\"2026-01-26T17:21:36.329Z\",\"publisher\":{\"@id\":\"https://docs-v1.latitude.so/#organization\"},\"isPartOf\":{\"@id\":\"https://docs-v1.latitude.so#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Latitude Docs\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Latitude Docs","nav":{"global":null,"tabs":[{"tab":"Latitude","groups":[{"group":"Overview","pages":[{"title":"Introduction","href":"/guides/getting-started/introduction"}]},{"group":"Getting started","pages":[{"group":"Developers","pages":[{"title":"Developers","href":"/guides/getting-started/quick-start-dev"}]},{"group":"No-code","pages":[{"title":"No Code","href":"/guides/getting-started/quick-start-pm"}]}]},{"group":"Prompts","pages":[{"title":"Editor","href":"/guides/prompt-manager/overview"},{"title":"Configuration","href":"/guides/prompt-manager/configuration"},{"title":"Playground","href":"/guides/prompt-manager/playground"},{"title":"Version Control","href":"/guides/prompt-manager/version-control"},{"title":"Structured Output","href":"/guides/prompt-manager/json-output"},{"title":"Tool use","href":"/guides/prompt-manager/tools"},{"title":"Triggers","href":"/guides/prompt-manager/triggers"},{"title":"Best Practices","href":"/guides/prompt-manager/prompt-best-practices"}]},{"group":"Agents","pages":[{"title":"Agents","href":"/guides/prompt-manager/agents"},{"title":"Subagents","href":"/guides/prompt-manager/subagents"}]},{"group":"Evaluations","pages":[{"title":"Overview","href":"/guides/evaluations/overview"},{"group":"Types","pages":[{"title":"LLM-as-Judges","href":"/guides/evaluations/llm-as-judges"},{"title":"Programmatic Rules","href":"/guides/evaluations/programmatic-rules"},{"title":"Humans-in-the-Loop","href":"/guides/evaluations/humans-in-the-loop"},{"title":"Composite Scores","href":"/guides/evaluations/composite-scores"}]},{"title":"Running Evaluations","href":"/guides/evaluations/running-evaluations"},{"title":"Prompt Suggestions","href":"/guides/evaluations/prompt-suggestions"},{"title":"Evaluation Workflows","href":"/guides/evaluations/integrating-evaluations-workflow"}]},{"group":"Datasets","pages":[{"title":"Overview","href":"/guides/datasets/overview"},{"title":"Golden Datasets","href":"/guides/datasets/golden-datasets"}]},{"group":"Experiments","pages":[{"title":"Overview","href":"/guides/experiments/overview"}]},{"group":"Deployment","pages":[{"group":"Latitude SDK","pages":[{"title":"TypeScript","href":"/guides/sdk/typescript"},{"title":"Python","href":"/guides/sdk/python"}]},{"group":"HTTP API","pages":[{"title":"API Access","href":"/guides/api/api-access"},{"title":"Streaming Events","href":"/guides/api/streaming-events"},{"title":"Webhooks","href":"/guides/api/webhooks"}]},{"group":"CLI","pages":[{"title":"CLI Overview","href":"/guides/cli/overview"},{"title":"Installation \u0026 Auth","href":"/guides/cli/installation"},{"title":"Command Reference","href":"/guides/cli/commands"}]}]},{"group":"Self-Hosting","pages":[{"title":"Development Setup","description":"Set up a local Latitude instance using Docker for development and testing.","href":"/guides/self-hosted/development-setup"},{"title":"Production Deployment","href":"/guides/self-hosted/production-setup"}]},{"group":"Support","pages":[{"title":"Community and Support","description":"Get help, share feedback, and connect with the Latitude community.","href":"/guides/integration/community-support"}]}]},{"tab":"PromptL","pages":[{"title":"PromptL","href":"/promptl/getting-started/introduction"}]},{"tab":"Developers","pages":[{"title":"Developers","href":"/developers/overview"}]},{"tab":"Examples","pages":[{"title":"Examples","href":"/examples/overview"}]}]},"title":"Production Deployment - Latitude Docs","buildId":"dpl_2oYXwqkEXirXBPk8wV1FtM5USFWi","deploymentId":"dpl_2oYXwqkEXirXBPk8wV1FtM5USFWi","dynamics":[],"chunks":[]}