This guide will walk you through setting up Multiwoven on an Azure VM. We’ll cover launching the VM, installing Docker, running Multiwoven with its dependencies, and finally, accessing the Multiwoven UI.Prerequisites:
An Azure account with an active VM (Ubuntu recommended).
Basic knowledge of Docker, Azure, and command-line tools.
Docker Compose installed on your local machine.
Note: This guide uses environment variables for sensitive information. Replace the placeholders with your own values before proceeding.1. Azure VM Setup:
Launch an Azure VM: Choose an Ubuntu VM with suitable specifications for your workload.Network Security Group Configuration:
Open port 22 (SSH) for inbound traffic from your IP address.
Open port 8000 (Multiwoven UI) for inbound traffic from your IP address (optional).
SSH Key Pair: Create a new key pair or use an existing one to connect to your VM.
Connect to your VM: Use SSH to connect to your Azure VM.Example:
Install Docker Compose: Download the latest version from the Docker Compose releases page and place it in a suitable directory (e.g., /usr/local/bin/docker-compose). Make the file executable: sudo chmod +x /usr/local/bin/docker-compose.
Start and enable Docker: Run sudo systemctl start docker and sudo systemctl enable docker to start Docker and configure it to start automatically on boot.
3. Download Multiwoven docker-compose.yml file and Configure Environment:
Rename the file .env.production to .env and update the environment variables if required.
mv .env.production .env
**Configure .env, This file holds environment variables for various services. Replace the placeholders with your own values, including:
DB_PASSWORD and DB_USERNAME for your PostgreSQL database
REDIS_PASSWORD for your Redis server
(Optional) Additional environment variables specific to your Multiwoven configuration
Example .env file:
DB_PASSWORD=your_db_passwordDB_USERNAME=your_db_usernameREDIS_PASSWORD=your_redis_password# Modify your Multiwoven-specific environment variables here
4. Run Multiwoven with Docker Compose:
Start Multiwoven: Navigate to the multiwoven directory and run docker-compose up -d. This will start all Multiwoven services in the background, including the Multiwoven UI.
5. Accessing Multiwoven UI:Open your web browser and navigate to http://<your_vm_public_ip>:8000 (replace <your_vm_public_ip> with your VM’s public IP address). You should now see the Multiwoven UI.6. Stopping Multiwoven:To stop Multiwoven, navigate to the multiwoven directory and run.
docker-compose down
7. Upgrading Multiwoven:
When a new version of Multiwoven is released, you can upgrade the Multiwoven using the following command.
docker-compose pull && docker-compose up -d
Make sure to run the above command from the same directory where the docker-compose.yml file is present.
Additional Notes:
Note: the frontend and backend services run on port 8000 and 3000, respectively. Make sure you update the VITE_API_HOST environment variable in the .env file to the desired backend service URL running on port 3000.
Depending on your network security group configuration, you might need to open port 8000 (Multiwoven UI) for inbound traffic.
For production deployments, consider using a reverse proxy (e.g., Nginx) and a domain name with SSL/TLS certificates for secure access to the Multiwoven UI.
Was this page helpful?
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"AI Squared","colors":{"primary":"#00249c","light":"#ffffff","dark":"#00249c"},"logo":{"light":"https://mintcdn.com/multiwoven-74/-MbwV9-QpicPIrse/logo/ai-squared-docs-logo-light.svg?fit=max\u0026auto=format\u0026n=-MbwV9-QpicPIrse\u0026q=85\u0026s=ca08017182cbe96397a10feab3cfeda6","dark":"https://mintcdn.com/multiwoven-74/-MbwV9-QpicPIrse/logo/ai-squared-docs-logo-dark.svg?fit=max\u0026auto=format\u0026n=-MbwV9-QpicPIrse\u0026q=85\u0026s=c68b55937e803881c30f296d78422e53"},"favicon":"https://mintcdn.com/multiwoven-74/-MbwV9-QpicPIrse/favicon.svg?fit=max\u0026auto=format\u0026n=-MbwV9-QpicPIrse\u0026q=85\u0026s=d664c5e29af113255a0beffa1adc634c","navbar":{"links":[{"href":"https://squared.ai","label":"Book a Demo"}],"primary":{"type":"button","label":"Back to App","href":"https://app.squared.ai"}},"footer":{"socials":{"github":"https://github.com/Multiwoven/multiwoven","linkedin":"https://www.linkedin.com/company/aisquaredinc"}},"styling":{"latex":false},"integrations":{"mixpanel":{"projectToken":"cd589b1602a01416f4cc17aa04accc66"}},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"multiwoven-74","hasAudioNarration":false,"actualSubdomain":"multiwoven-74","customDomains":["docs.squared.ai"],"gitSource":{"type":"github","owner":"multiwoven","repo":"docs","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6ae21d918c406dd2ccb3b892","collectionId":"f0db7fd7-711f-4463-8853-73d3c2368f6e","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6ae21d918c406dd2ccb3b892"},"feedback":{"thumbs":true,"edits":false,"issues":false},"entitlements":{"AI_CHAT":{"status":"ENABLED"},"REMOVE_BRANDING":{"status":"ENABLED"},"CONTEXTUAL_FEEDBACK":{"status":"DISABLED"},"CODE_SNIPPET_FEEDBACK":{"status":"DISABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6ae21d918c406dd2ccb3b892","clientVersion":"0.0.4006","searchFilterCounts":[{"language":"default","tag":"Data Movement","count":65},{"language":"default","tag":"Product Updates","count":62},{"language":"default","tag":"Destinations","count":37},{"language":"default","tag":"Business Applications","count":37},{"language":"default","tag":"Developers","count":30},{"language":"default","tag":"AI Activation","count":24},{"language":"default","tag":"Deployment \u0026 Security","count":22},{"language":"default","tag":"Sources","count":20},{"language":"default","tag":"Data Sources","count":19},{"language":"default","tag":"Deployment","count":17}]},"assistantConfig":{},"basePath":"","hasChatPermissions":false,"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}],"googleFontsInlined":false},"customCss":[{"filePath":"style.css","content":".border-primary{--tw-border-opacity:1;border-color:rgb(var(--primary)/var(--tw-border-opacity));margin-bottom:2px;border-bottom-width:.1875rem}#topbar-cta-button a{display:flex;align-items:center;padding:.475rem 1rem!important;gap:.5rem;color:#fff!important;border-radius:.25rem;font-weight:500;letter-spacing:.4px}"}],"page":{"pagePath":"deployment-and-security/setup/avm","slug":"/deployment-and-security/setup/avm","pageMetadata":{"title":"Azure VMs","description":null,"href":"/deployment-and-security/setup/avm"},"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:`deploying-multiwoven-on-azure-vms`,children:`Deploying Multiwoven on Azure VMs`}),`\n`,_jsx(_components.p,{children:`This guide will walk you through setting up Multiwoven on an Azure VM. We’ll cover launching the VM, installing Docker, running Multiwoven with its dependencies, and finally, accessing the Multiwoven UI.`}),`\n`,_jsx(_components.p,{children:_jsx(_components.strong,{children:`Prerequisites:`})}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`An Azure account with an active VM (Ubuntu recommended).`}),`\n`,_jsx(_components.li,{children:`Basic knowledge of Docker, Azure, and command-line tools.`}),`\n`,_jsx(_components.li,{children:`Docker Compose installed on your local machine.`}),`\n`]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Note:`}),` This guide uses environment variables for sensitive information. Replace the placeholders with your own values before proceeding.`]}),`\n`,_jsx(_components.p,{children:_jsx(_components.strong,{children:`1. Azure VM Setup:`})}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Launch an Azure VM:`}),` Choose an Ubuntu VM with suitable specifications for your workload.`]}),`\n`,_jsx(_components.p,{children:_jsx(_components.strong,{children:`Network Security Group Configuration:`})}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Open port 22 (SSH) for inbound traffic from your IP address.`}),`\n`,_jsx(_components.li,{children:`Open port 8000 (Multiwoven UI) for inbound traffic from your IP address (optional).`}),`\n`]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`SSH Key Pair:`}),` Create a new key pair or use an existing one to connect to your VM.`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Connect to your VM:`}),` Use SSH to connect to your Azure VM.`]}),`\n`,_jsx(_components.p,{children:_jsx(_components.strong,{children:`Example:`})}),`\n`,_jsx(CodeBlock,{numberOfLines:`2`,language:`text`,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:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`2`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`ssh -i /path/to/your-key-pair.pem azureuser@\u003cyour_vm_public_ip>`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsxs(_components.p,{children:[`Replace `,_jsx(_components.code,{children:`/path/to/your-key-pair.pem`}),` with the path to your key pair file and `,_jsx(_components.code,{children:`\u003cyour_vm_public_ip>`}),` with your VM’s public IP address.`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Update and upgrade:`}),` Run `,_jsx(_components.code,{children:`sudo apt update \u0026\u0026 sudo apt upgrade -y`}),` to ensure your system is up-to-date.`]}),`\n`]}),`\n`]}),`\n`,_jsx(_components.p,{children:_jsx(_components.strong,{children:`2. Docker and Docker Compose Installation:`})}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Install Docker:`}),` Follow the official Docker installation instructions for Ubuntu: `,_jsx(_components.a,{href:`https://docs.docker.com/engine/install/`,children:`https://docs.docker.com/engine/install/`})]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Install Docker Compose:`}),` Download the latest version from the Docker Compose releases page and place it in a suitable directory (e.g., `,_jsx(_components.code,{children:`/usr/local/bin/docker-compose`}),`). Make the file executable: `,_jsx(_components.code,{children:`sudo chmod +x /usr/local/bin/docker-compose`}),`.`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Start and enable Docker:`}),` Run `,_jsx(_components.code,{children:`sudo systemctl start docker`}),` and `,_jsx(_components.code,{children:`sudo systemctl enable docker`}),` to start Docker and configure it to start automatically on boot.`]}),`\n`]}),`\n`]}),`\n`,_jsx(_components.p,{children:_jsxs(_components.strong,{children:[`3. Download Multiwoven `,_jsx(_components.code,{children:`docker-compose.yml`}),` file and Configure Environment:`]})}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsx(_components.li,{children:_jsx(_components.strong,{children:`Download the file:`})}),`\n`]}),`\n`,_jsx(CodeBlock,{numberOfLines:`2`,language:`text`,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:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`2`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`curl -LO https://multiwoven-deployments.s3.amazonaws.com/docker/docker-compose/docker-compose.yaml`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsxs(_components.ol,{start:`2`,children:[`\n`,_jsx(_components.li,{children:_jsxs(_components.strong,{children:[`Download the `,_jsx(_components.code,{children:`.env`}),` file:`]})}),`\n`]}),`\n`,_jsx(CodeBlock,{numberOfLines:`2`,language:`text`,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:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`2`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`curl -LO https://multiwoven-deployments.s3.amazonaws.com/docker/docker-compose/.env.production`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsxs(_components.ol,{start:`3`,children:[`\n`,_jsx(_components.li,{children:`Rename the file .env.production to .env and update the environment variables if required.`}),`\n`]}),`\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:`mv`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` .env.production`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` .env`})]}),`\n`]})})}),`\n`,_jsxs(_components.ol,{start:`4`,children:[`\n`,_jsxs(_components.li,{children:[`**Configure `,_jsx(_components.code,{children:`.env`}),`, This file holds environment variables for various services. Replace the placeholders with your own values, including:`,`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`DB_PASSWORD`}),` and `,_jsx(_components.code,{children:`DB_USERNAME`}),` for your PostgreSQL database`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`REDIS_PASSWORD`}),` for your Redis server`]}),`\n`,_jsx(_components.li,{children:`(Optional) Additional environment variables specific to your Multiwoven configuration`}),`\n`]}),`\n`]}),`\n`]}),`\n`,_jsx(_components.p,{children:_jsxs(_components.strong,{children:[`Example `,_jsx(_components.code,{children:`.env`}),` file:`]})}),`\n`,_jsx(CodeBlock,{numberOfLines:`5`,language:`text`,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:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`5`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`DB_PASSWORD=your_db_password`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`DB_USERNAME=your_db_username`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`REDIS_PASSWORD=your_redis_password`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`# Modify your Multiwoven-specific environment variables here`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsx(_components.p,{children:_jsx(_components.strong,{children:`4. Run Multiwoven with Docker Compose:`})}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Start Multiwoven:`}),` Navigate to the `,_jsx(_components.code,{children:`multiwoven`}),` directory and run `,_jsx(_components.code,{children:`docker-compose up -d`}),`. This will start all Multiwoven services in the background, including the Multiwoven UI.`]}),`\n`]}),`\n`,_jsx(_components.p,{children:_jsx(_components.strong,{children:`5. Accessing Multiwoven UI:`})}),`\n`,_jsxs(_components.p,{children:[`Open your web browser and navigate to `,_jsx(_components.code,{children:`http://\u003cyour_vm_public_ip>:8000`}),` (replace `,_jsx(_components.code,{children:`\u003cyour_vm_public_ip>`}),` with your VM’s public IP address). You should now see the Multiwoven UI.`]}),`\n`,_jsx(_components.p,{children:_jsx(_components.strong,{children:`6. Stopping Multiwoven:`})}),`\n`,_jsxs(_components.p,{children:[`To stop Multiwoven, navigate to the `,_jsx(_components.code,{children:`multiwoven`}),` directory and 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-compose`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` down`})]}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`7. Upgrading Multiwoven:`}),`\nWhen a new version of Multiwoven is released, you can upgrade the Multiwoven using the following command.`]}),`\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-compose`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` pull`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` \u0026\u0026 `}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`docker-compose`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` up`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -d`})]}),`\n`]})})}),`\n`,_jsxs(Tip,{children:[` Make sure to run the above command from the same directory where the `,_jsx(_components.code,{children:`docker-compose.yml`}),` file is present.`]}),`\n`,_jsx(_components.p,{children:_jsx(_components.strong,{children:`Additional Notes:`})}),`\n`,_jsxs(Tip,{children:[_jsx(_components.strong,{children:`Note`}),`: the frontend and backend services run on port 8000 and 3000, respectively. Make sure you update the `,_jsx(_components.strong,{children:`VITE_API_HOST`}),` environment variable in the `,_jsx(_components.strong,{children:`.env`}),` file to the desired backend service URL running on port 3000. `]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Depending on your network security group configuration, you might need to open port 8000 (Multiwoven UI) for inbound traffic.`}),`\n`,_jsx(_components.li,{children:`For production deployments, consider using a reverse proxy (e.g., Nginx) and a domain name with SSL/TLS certificates for secure access to the Multiwoven UI.`}),`\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":"Azure VMs","description":null,"href":"/deployment-and-security/setup/avm"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Deploying Multiwoven on Azure VMs","slug":"deploying-multiwoven-on-azure-vms","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":["/_mintlify/custom/multiwoven-74/aaa40dfb088f7973/docs-bot.js"],"subdomain":"multiwoven-74","siteName":"AI Squared","title":"Azure VMs - AI Squared","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-10-15T19:26:29.907Z","originalFileLocation":"deployment-and-security/setup/avm.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=\"application-name\" content=\"AI Squared\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/multiwoven-74/NkrXgVYPR_dCevS6/_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/multiwoven-74/NkrXgVYPR_dCevS6/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/multiwoven-74/NkrXgVYPR_dCevS6/_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/multiwoven-74/NkrXgVYPR_dCevS6/_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/multiwoven-74/NkrXgVYPR_dCevS6/_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/multiwoven-74/NkrXgVYPR_dCevS6/_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/multiwoven-74/NkrXgVYPR_dCevS6/_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/multiwoven-74/NkrXgVYPR_dCevS6/_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/multiwoven-74/NkrXgVYPR_dCevS6/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Azure VMs - AI Squared\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"AI Squared\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.squared.ai/deployment-and-security/setup/avm\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://multiwoven-74.mintlify.app/_mintlify/api/og/v2?division=Self-Hosted+%28On-Premise%29\u0026amp;title=Azure+VMs\u0026amp;theme=f527afd5024577da42908e7f\u0026amp;signature=e6b7f9236b9c147b5f3a9b0638f0c86888def51e6d563eb272f747247ac1c4d4\">\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=\"Azure VMs - AI Squared\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://multiwoven-74.mintlify.app/_mintlify/api/og/v2?division=Self-Hosted+%28On-Premise%29\u0026amp;title=Azure+VMs\u0026amp;theme=f527afd5024577da42908e7f\u0026amp;signature=e6b7f9236b9c147b5f3a9b0638f0c86888def51e6d563eb272f747247ac1c4d4\">\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/multiwoven-74/NkrXgVYPR_dCevS6/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"AI Squared\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#00249c\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.squared.ai/deployment-and-security/setup/avm\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/deployment-and-security/setup/avm.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.squared.ai/#organization\",\"name\":\"AI Squared\",\"url\":\"https://docs.squared.ai\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/multiwoven-74/-MbwV9-QpicPIrse/logo/ai-squared-docs-logo-light.svg?fit=max\u0026auto=format\u0026n=-MbwV9-QpicPIrse\u0026q=85\u0026s=ca08017182cbe96397a10feab3cfeda6\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.squared.ai#website\",\"name\":\"AI Squared\",\"url\":\"https://docs.squared.ai\",\"publisher\":{\"@id\":\"https://docs.squared.ai/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.squared.ai/deployment-and-security/setup/avm#webpage\",\"url\":\"https://docs.squared.ai/deployment-and-security/setup/avm\",\"name\":\"Azure VMs\",\"dateModified\":\"2026-10-15T19:26:29.907Z\",\"isPartOf\":{\"@id\":\"https://docs.squared.ai#website\"},\"breadcrumb\":{\"@id\":\"https://docs.squared.ai/deployment-and-security/setup/avm#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.squared.ai/deployment-and-security/setup/avm#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Deployment\",\"item\":\"https://docs.squared.ai/deployment-and-security/cloud\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Self-Hosted (On-Premise)\",\"item\":\"https://docs.squared.ai/deployment-and-security/setup/environment-variables\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Azure VMs\",\"item\":\"https://docs.squared.ai/deployment-and-security/setup/avm\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.squared.ai/deployment-and-security/setup/avm#article\",\"headline\":\"Azure VMs\",\"name\":\"Azure VMs\",\"url\":\"https://docs.squared.ai/deployment-and-security/setup/avm\",\"mainEntityOfPage\":{\"@id\":\"https://docs.squared.ai/deployment-and-security/setup/avm#webpage\"},\"dateModified\":\"2026-10-15T19:26:29.907Z\",\"publisher\":{\"@id\":\"https://docs.squared.ai/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.squared.ai#website\"}}]}\u003c/script>","siteName":"AI Squared","nav":{"global":null,"tabs":[{"tab":"Home","pages":[{"title":"Home","href":"/home/welcome"}]},{"tab":"Getting Started","pages":[{"title":"Getting Started","href":"/getting-started/introduction"}]},{"tab":"AI Activation","pages":[{"title":"AI Activation","href":"/activation/ai-modelling/introduction"}]},{"tab":"AI Workflows","pages":[{"title":"AI Workflows","href":"/workflows/overview"}]},{"tab":"Data Movement","pages":[{"title":"Data Movement","href":"/guides/core-concepts"}]},{"tab":"Sparx","pages":[{"title":"Sparx","href":"/sparx/overview"}]},{"tab":"Proprietary Models","pages":[{"title":"Proprietary Models","href":"/overview"}]},{"tab":"Deployment \u0026 Security","groups":[{"group":"Deployment \u0026 Security","pages":[{"title":"Overview","href":"/deployment-and-security/overview"}]},{"group":"Deployment","pages":[{"title":"Cloud (Managed by AI Squared)","href":"/deployment-and-security/cloud"},{"group":"Deploy Locally","pages":[{"title":"Docker","href":"/deployment-and-security/setup/docker-compose-dev"}]},{"group":"Self-Hosted (On-Premise)","pages":[{"title":"Environment Variables","href":"/deployment-and-security/setup/environment-variables"},{"title":"Docker","href":"/deployment-and-security/setup/docker-compose"},{"title":"Helm Charts","href":"/deployment-and-security/setup/helm"},{"title":"Helm Configuration Reference","href":"/deployment-and-security/setup/configuration-reference"},{"title":"AWS EC2","href":"/deployment-and-security/setup/ec2"},{"title":"AWS ECS","href":"/deployment-and-security/setup/ecs"},{"title":"AWS EKS (Kubernetes)","href":"/deployment-and-security/setup/eks"},{"title":"Google Cloud GKE (Kubernetes)","href":"/deployment-and-security/setup/gke"},{"title":"Google Cloud Compute Engine","href":"/deployment-and-security/setup/gce"},{"title":"Azure AKS (Kubernetes)","description":null,"href":"/deployment-and-security/setup/aks"},{"title":"Azure VMs","href":"/deployment-and-security/setup/avm"},{"title":"Digital Ocean Droplets","description":"Coming soon...","href":"/deployment-and-security/setup/dod"},{"title":"Digital Ocean Kubernetes","href":"/deployment-and-security/setup/dok"},{"title":"Heroku","href":"/deployment-and-security/setup/heroku"},{"title":"OpenShift","href":"/deployment-and-security/setup/openshift"}]}]},{"group":"Authentication \u0026 Access Control","pages":[{"title":"Overview","icon":"","href":"/deployment-and-security/auth/overview"}]},{"group":"Data Security \u0026 Infrastructure","pages":[{"title":"Overview","icon":"","href":"/deployment-and-security/data-security-infra/overview"}]},{"group":"Compliance \u0026 Certifications","pages":[{"title":"SOC 2 Type II","icon":"shield","href":"/deployment-and-security/security-and-compliance/overview"}]}]},{"tab":"Developers","pages":[{"title":"Developers","href":"/api-reference/introduction"}]},{"tab":"Product Updates","pages":[{"title":"Product Updates","href":"/release-notes/2026"}]}]},"title":"Azure VMs - AI Squared","buildId":"dpl_2xiSHD9XEvLsPGPcfoMtkLTB3dy9","deploymentId":"dpl_2xiSHD9XEvLsPGPcfoMtkLTB3dy9","dynamics":[],"chunks":[]}