Install Weles on-premises with Docker Compose and vendor-supplied production container images, then harden Keycloak, TLS, and network access.
The supplied Compose deployment runs Weles from prebuilt images; no source build is needed. Contact the vendor for the deployment package, image registry, approved image version, registry credentials, licensing details, and deployment-specific configuration.
The supplied Compose file is a starting point, not a fully hardened production environment. It exposes several service ports and starts Keycloak in development mode. Its realm contains example accounts and localhost-oriented client settings. Before production use, replace default credentials, review the realm and clients, configure production-grade Keycloak and TLS, and restrict network access with your security team. Do not expose internal services to untrusted networks.
Copy the vendor-supplied docker-compose.prod.yml, keycloak-realm.json, and keycloak-theme/weles directory into a protected deployment directory. Compose mounts the realm and theme from these paths.
Create the shared directory for uploads, workflow file exchange, and license data.
For the search profile, also provide searxng/settings.yml. For the Matrix profile, securely provide matrix_connector/.env.
Create a protected .env file using the vendor’s instructions. Do not publish it or reuse example passwords and keys.
Set the image registry, repository, and version, database credentials, Keycloak URLs and credentials, AI endpoint, storage paths, retention policy, encryption key, and license-service settings. See Configuration.
The image variables IMAGE_REGISTRY, IMAGE_REPO, and IMAGE_TAG form service-specific image names. Use the vendor-supplied registry and version; pinning an approved version helps make upgrades reproducible. The included PostgreSQL service is addressed as db on container port 5432; distinguish that internal port from a host-published port.
Confirm the containers are running, the frontend is reachable through the approved URL, Keycloak login works, and the application can reach the configured provider and licensing service. Container status alone does not prove that the system is ready.
Available Compose profiles include search, matrix, vector_db, knowledge_graph, and mcp. Enable only the integrations you need and review their credentials, ports, storage, and network restrictions. For example:
docker compose -f docker-compose.prod.yml --profile vector_db up -d
Back up persistent data and configuration, follow the vendor’s release and migration guidance, select an approved image version, pull the images, and recreate the services. Validate the deployment afterward. Do not use down -v as a routine stop command: removing volumes can destroy data.Continue with first configuration and licensing.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Weles Documentation","description":"Weles documentation: deploy and operate an on-premises AI assistant platform for company knowledge, AI agent workflows, intelligent document processing, and OCR.","colors":{"primary":"#16A34A","light":"#07C983","dark":"#15803D"},"logo":{"light":"https://mintcdn.com/weles-ai/69L-b7AW2V9Rp9yL/images/logo.svg?fit=max\u0026auto=format\u0026n=69L-b7AW2V9Rp9yL\u0026q=85\u0026s=a20ff2971489b24d3f0f65c738b6f807","dark":"https://mintcdn.com/weles-ai/XixGqBqwYLWYtsXP/images/logo-white.svg?fit=max\u0026auto=format\u0026n=XixGqBqwYLWYtsXP\u0026q=85\u0026s=507bcc794d6e5ec0cd503590b4227e97","href":"https://welesai.com"},"favicon":{"light":"https://mintcdn.com/weles-ai/69L-b7AW2V9Rp9yL/images/logo.svg?fit=max\u0026auto=format\u0026n=69L-b7AW2V9Rp9yL\u0026q=85\u0026s=a20ff2971489b24d3f0f65c738b6f807","dark":"https://mintcdn.com/weles-ai/XixGqBqwYLWYtsXP/images/logo-white.svg?fit=max\u0026auto=format\u0026n=XixGqBqwYLWYtsXP\u0026q=85\u0026s=507bcc794d6e5ec0cd503590b4227e97"},"navbar":{"links":[{"href":"mailto:support@welesai.com","label":"Support"}],"primary":{"type":"button","label":"Weles","href":"https://welesai.com"}},"seo":{"metatags":{"keywords":"Weles, WelesAI, on-premises AI, AI assistant, AI agents, agent workflows, intelligent document processing, IDP, OCR, LLM, self-hosted AI","author":"WelesAI","robots":"index, follow","og:locale":"en_US","theme-color":"#16A34A"}},"icons":{"library":"fontawesome"},"contextual":{"options":["copy","view","chatgpt","claude","perplexity","mcp","cursor","vscode"],"display":"header"},"styling":{"latex":false},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"weles-ai","hasAudioNarration":false,"actualSubdomain":"weles-ai","customDomains":["docs.welesai.com"],"gitSource":{"type":"artifacts","owner":"prod","repo":"6af1e377576b5817482d859e","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":"","_id":"6af1e407332b36706b716649"},"entitlements":{"AI_CHAT":{"status":"ENABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6af24f2eddd7e7bcd0c78922","clientVersion":"0.0.4102","searchFilterCounts":[{"language":"default","tag":"Administration","count":6},{"language":"default","tag":"Workflows","count":5},{"language":"default","tag":"For AI Agents","count":3},{"language":"default","tag":"Getting Started","count":3}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"","hasChatPermissions":true,"hasWebMcpPermissions":true,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-rbac-roles","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":"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":"editor-metadata","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}],"googleFontsInlined":false},"customCss":[{"filePath":"style.css","content":"img.nav-logo{height:4rem!important;width:auto!important}#navbar{padding-top:0.5rem;padding-bottom:0.5rem}a:has(>img.nav-logo){display:flex!important;align-items:center;gap:0.5rem}a:has(>img.nav-logo)::after{content:\"Weles\";font-size:1.5rem;font-weight:700;line-height:1;color:#111827}html.dark a:has(>img.nav-logo)::after{color:#ffffff}"}],"page":{"pagePath":"quickstart","slug":"/quickstart","pageMetadata":{"title":"Install from production images","description":"Install Weles on-premises with Docker Compose and vendor-supplied production container images, then harden Keycloak, TLS, and network access.","sidebarTitle":"Production installation","keywords":["Weles installation","Docker Compose","on-premises deployment","container images","Keycloak"],"href":"/quickstart"},"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: \"Install Weles on-premises with Docker Compose and vendor-supplied production container images, then harden Keycloak, TLS, and network access.\"\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`,ul:`ul`,..._provideComponents(),...props.components},{CodeBlock,Heading,Warning}=_components;if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Warning)_missingMdxReference(`Warning`,true);return _jsxs(_Fragment,{children:[_jsx(_components.p,{children:`The supplied Compose deployment runs Weles from prebuilt images; no source build is needed. Contact the vendor for the deployment package, image registry, approved image version, registry credentials, licensing details, and deployment-specific configuration.`}),`\n`,_jsx(Warning,{children:_jsx(_components.p,{children:`The supplied Compose file is a starting point, not a fully hardened production environment. It exposes several service ports and starts Keycloak in development mode. Its realm contains example accounts and localhost-oriented client settings. Before production use, replace default credentials, review the realm and clients, configure production-grade Keycloak and TLS, and restrict network access with your security team. Do not expose internal services to untrusted networks.`})}),`\n`,_jsx(Heading,{level:`2`,id:`prerequisites`,children:`Prerequisites`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Docker Engine and the Docker Compose plugin on the deployment host.`}),`\n`,_jsx(_components.li,{children:`Access to the vendor’s registry and a separately provided license service.`}),`\n`,_jsx(_components.li,{children:`A plan for persistent storage, capacity, backups, monitoring, recovery, DNS, TLS, proxies, and firewall rules.`}),`\n`,_jsx(_components.li,{children:`Approved AI provider and OCR settings, including credentials when required.`}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`prepare-the-deployment`,children:`Prepare the deployment`}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[`Copy the vendor-supplied `,_jsx(_components.code,{children:`docker-compose.prod.yml`}),`, `,_jsx(_components.code,{children:`keycloak-realm.json`}),`, and `,_jsx(_components.code,{children:`keycloak-theme/weles`}),` directory into a protected deployment directory. Compose mounts the realm and theme from these paths.`]}),`\n`,_jsxs(_components.li,{children:[`Create the `,_jsx(_components.code,{children:`shared`}),` directory for uploads, workflow file exchange, and license data.`]}),`\n`,_jsxs(_components.li,{children:[`For the search profile, also provide `,_jsx(_components.code,{children:`searxng/settings.yml`}),`. For the Matrix profile, securely provide `,_jsx(_components.code,{children:`matrix_connector/.env`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`Create a protected `,_jsx(_components.code,{children:`.env`}),` file using the vendor’s instructions. Do not publish it or reuse example passwords and keys.`]}),`\n`,_jsxs(_components.li,{children:[`Set the image registry, repository, and version, database credentials, Keycloak URLs and credentials, AI endpoint, storage paths, retention policy, encryption key, and license-service settings. See `,_jsx(_components.a,{href:`/administration/configuration`,children:`Configuration`}),`.`]}),`\n`]}),`\n`,_jsxs(_components.p,{children:[`The image variables `,_jsx(_components.code,{children:`IMAGE_REGISTRY`}),`, `,_jsx(_components.code,{children:`IMAGE_REPO`}),`, and `,_jsx(_components.code,{children:`IMAGE_TAG`}),` form service-specific image names. Use the vendor-supplied registry and version; pinning an approved version helps make upgrades reproducible. The included PostgreSQL service is addressed as `,_jsx(_components.code,{children:`db`}),` on container port `,_jsx(_components.code,{children:`5432`}),`; distinguish that internal port from a host-published port.`]}),`\n`,_jsx(Heading,{level:`2`,id:`pull-and-start`,children:`Pull and start`}),`\n`,_jsx(_components.p,{children:`From the deployment directory, authenticate if the registry is private:`}),`\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:`docker`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` login`})]}),`\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.prod.yml`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` pull`})]}),`\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.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`,_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.prod.yml`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` ps`})]}),`\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.prod.yml`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` logs`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --tail=100`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` backend`})]}),`\n`]})})}),`\n`,_jsx(_components.p,{children:`Confirm the containers are running, the frontend is reachable through the approved URL, Keycloak login works, and the application can reach the configured provider and licensing service. Container status alone does not prove that the system is ready.`}),`\n`,_jsx(Heading,{level:`2`,id:`optional-services`,children:`Optional services`}),`\n`,_jsxs(_components.p,{children:[`Available Compose profiles include `,_jsx(_components.code,{children:`search`}),`, `,_jsx(_components.code,{children:`matrix`}),`, `,_jsx(_components.code,{children:`vector_db`}),`, `,_jsx(_components.code,{children:`knowledge_graph`}),`, and `,_jsx(_components.code,{children:`mcp`}),`. Enable only the integrations you need and review their credentials, ports, storage, and network restrictions. For example:`]}),`\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:`#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:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --profile`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` vector_db`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` up`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -d`})]}),`\n`]})})}),`\n`,_jsx(Heading,{level:`2`,id:`updates-and-data-protection`,children:`Updates and data protection`}),`\n`,_jsxs(_components.p,{children:[`Back up persistent data and configuration, follow the vendor’s release and migration guidance, select an approved image version, pull the images, and recreate the services. Validate the deployment afterward. Do not use `,_jsx(_components.code,{children:`down -v`}),` as a routine stop command: removing volumes can destroy data.`]}),`\n`,_jsxs(_components.p,{children:[`Continue with `,_jsx(_components.a,{href:`/administration/configuration`,children:`first configuration`}),` and `,_jsx(_components.a,{href:`/administration/licensing`,children:`licensing`}),`.`]})]})}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":"Install from production images","description":"Install Weles on-premises with Docker Compose and vendor-supplied production container images, then harden Keycloak, TLS, and network access.","sidebarTitle":"Production installation","keywords":["Weles installation","Docker Compose","on-premises deployment","container images","Keycloak"],"href":"/quickstart"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Prerequisites","slug":"prerequisites","depth":2,"children":[]},{"title":"Prepare the deployment","slug":"prepare-the-deployment","depth":2,"children":[]},{"title":"Pull and start","slug":"pull-and-start","depth":2,"children":[]},{"title":"Optional services","slug":"optional-services","depth":2,"children":[]},{"title":"Updates and data protection","slug":"updates-and-data-protection","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":[],"subdomain":"weles-ai","siteName":"Weles Documentation","title":"Install from production images - Weles Documentation","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-11-09T19:00:31.032Z","originalFileLocation":"quickstart.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=\"Install Weles on-premises with Docker Compose and vendor-supplied production container images, then harden Keycloak, TLS, and network access.\">\u003cmeta data-mint-head name=\"keywords\" content=\"Weles, WelesAI, on-premises AI, AI assistant, AI agents, agent workflows, intelligent document processing, IDP, OCR, LLM, self-hosted AI\">\u003cmeta data-mint-head name=\"application-name\" content=\"Weles Documentation\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003cmeta data-mint-head name=\"robots\" content=\"index, follow\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/weles-ai/WuQ_JNnkvlzL7wf3/_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/weles-ai/WuQ_JNnkvlzL7wf3/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/weles-ai/WuQ_JNnkvlzL7wf3/_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/weles-ai/WuQ_JNnkvlzL7wf3/_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/weles-ai/WuQ_JNnkvlzL7wf3/_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/weles-ai/WuQ_JNnkvlzL7wf3/_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/weles-ai/WuQ_JNnkvlzL7wf3/_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/weles-ai/WuQ_JNnkvlzL7wf3/_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/weles-ai/WuQ_JNnkvlzL7wf3/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Install from production images - Weles Documentation\">\u003cmeta data-mint-head property=\"og:description\" content=\"Install Weles on-premises with Docker Compose and vendor-supplied production container images, then harden Keycloak, TLS, and network access.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Weles Documentation\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.welesai.com/quickstart\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://weles-ai.mintlify.site/_mintlify/api/og/v2?division=Getting+Started\u0026amp;title=Install+from+production+images\u0026amp;description=Install+Weles+on-premises+with+Docker+Compose+and+vendor-supplied+production+container+images%2C+then+harden+Keycloak%2C+TLS%2C+and+network+access.\u0026amp;theme=6e7c9dd4f0cf6ebab663dfed\u0026amp;signature=e3ee0b932635306631f603641ba244edbacc9cfdd0f3530e5477669178051729\">\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=\"Install from production images - Weles Documentation\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Install Weles on-premises with Docker Compose and vendor-supplied production container images, then harden Keycloak, TLS, and network access.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://weles-ai.mintlify.site/_mintlify/api/og/v2?division=Getting+Started\u0026amp;title=Install+from+production+images\u0026amp;description=Install+Weles+on-premises+with+Docker+Compose+and+vendor-supplied+production+container+images%2C+then+harden+Keycloak%2C+TLS%2C+and+network+access.\u0026amp;theme=6e7c9dd4f0cf6ebab663dfed\u0026amp;signature=e3ee0b932635306631f603641ba244edbacc9cfdd0f3530e5477669178051729\">\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/weles-ai/WuQ_JNnkvlzL7wf3/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Weles Documentation\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#16A34A\">\u003cmeta data-mint-head name=\"og:locale\" content=\"en_US\">\u003cmeta data-mint-head name=\"author\" content=\"WelesAI\">\u003cmeta data-mint-head name=\"theme-color\" content=\"#16A34A\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.welesai.com/quickstart\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/quickstart.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.welesai.com/#organization\",\"name\":\"Weles Documentation\",\"url\":\"https://docs.welesai.com\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/weles-ai/69L-b7AW2V9Rp9yL/images/logo.svg?fit=max\u0026auto=format\u0026n=69L-b7AW2V9Rp9yL\u0026q=85\u0026s=a20ff2971489b24d3f0f65c738b6f807\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.welesai.com#website\",\"name\":\"Weles Documentation\",\"url\":\"https://docs.welesai.com\",\"publisher\":{\"@id\":\"https://docs.welesai.com/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.welesai.com/quickstart#webpage\",\"url\":\"https://docs.welesai.com/quickstart\",\"name\":\"Install from production images\",\"description\":\"Install Weles on-premises with Docker Compose and vendor-supplied production container images, then harden Keycloak, TLS, and network access.\",\"dateModified\":\"2026-11-09T19:00:31.032Z\",\"isPartOf\":{\"@id\":\"https://docs.welesai.com#website\"},\"breadcrumb\":{\"@id\":\"https://docs.welesai.com/quickstart#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.welesai.com/quickstart#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Getting Started\",\"item\":\"https://docs.welesai.com\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Install from production images\",\"item\":\"https://docs.welesai.com/quickstart\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.welesai.com/quickstart#article\",\"headline\":\"Install from production images\",\"name\":\"Install from production images\",\"description\":\"Install Weles on-premises with Docker Compose and vendor-supplied production container images, then harden Keycloak, TLS, and network access.\",\"url\":\"https://docs.welesai.com/quickstart\",\"mainEntityOfPage\":{\"@id\":\"https://docs.welesai.com/quickstart#webpage\"},\"dateModified\":\"2026-11-09T19:00:31.032Z\",\"keywords\":\"Weles installation, Docker Compose, on-premises deployment, container images, Keycloak\",\"publisher\":{\"@id\":\"https://docs.welesai.com/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.welesai.com#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Weles Documentation\",\"publisher\":{\"@type\":\"Organization\",\"name\":\"Weles Documentation\"},\"provider\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","agentPointerHref":"/quickstart.md","siteName":"Weles Documentation","nav":{"global":null,"pages":[{"group":"Getting Started","pages":[{"title":"Welcome to Weles","description":"Weles is an on-premises AI assistant platform for company knowledge, configurable AI agent workflows, intelligent document processing, and OCR.","sidebarTitle":"Introduction","href":"/index"},{"title":"Install from production images","sidebarTitle":"Production installation","href":"/quickstart"},{"title":"Using Weles","description":"Upload documents, verify extracted data, and chat with configured agents.","href":"/guides/using-weles"}]},{"group":"Administration","pages":[{"title":"Configuration and first setup","href":"/administration/configuration"},{"title":"Licensing","href":"/administration/licensing"},{"title":"Troubleshooting","href":"/administration/troubleshooting"},{"title":"Configure AI providers","href":"/administration/llm-providers"},{"title":"Dashboard","href":"/administration/dashboard"},{"title":"Administration areas","href":"/administration/application-areas"}]},{"group":"Workflows","pages":[{"title":"Create document types","href":"/workflows/document-types"},{"title":"Create your first workflow","href":"/workflows/first-workflow"},{"title":"Build an agent workflow","href":"/workflows/agent-workflow"},{"title":"Add and configure agent tools","href":"/workflows/agent-tools"},{"title":"Workflow stages reference","href":"/workflows/stages"}]},{"group":"For AI Agents","pages":[{"title":"Start here: building Weles with AI","href":"/ai-agents/start-here"},{"title":"Generate workflow imports with AI","sidebarTitle":"Generate workflow imports","href":"/workflows/ai-generated-imports"},{"title":"Create Tool Manager packages","href":"/ai-agents/tool-packages"}]}]},"basePath":"","title":"Install from production images - Weles Documentation","buildId":"dpl_596ePT575z4qnAFksq1biRW97aLY","deploymentId":"dpl_596ePT575z4qnAFksq1biRW97aLY","dynamics":[],"chunks":[]}