# Download the Nextoria Hub self-hosted bundlecurl -fsSL https://nextoriahub.com/install.sh | bash# Navigate to the directorycd nextoriahub# Copy and configure the environment filecp .env.example .envnano .env# Start all servicesdocker compose up -d
The application will be available at http://your-server-ip:3000.
Helm charts for Kubernetes deployment are available for Scale customers. Contact your dedicated Success Manager for the Helm chart package and deployment guidance.
{"docsConfig":{"$schema":"https://mintlify.com/docs.json","theme":"mint","name":"Nextoria Hub","colors":{"primary":"#7C3AED","light":"#A78BFA","dark":"#5B21B6"},"favicon":"/favicon.svg","logo":{"light":"https://mintlify.s3.us-west-1.amazonaws.com/nextoriaagency/logo/light.svg","dark":"https://mintlify.s3.us-west-1.amazonaws.com/nextoriaagency/logo/dark.svg"},"navbar":{"links":[{"label":"Support","href":"mailto:support@nextoriahub.com"}],"primary":{"type":"button","label":"Get Started","href":"https://nexthub-agency-os.vercel.app"}},"search":{"prompt":"Search Nextoria Hub docs..."},"footer":{"socials":{"twitter":"https://twitter.com/nextoriahub","github":"https://github.com/AymanSdk/nexthub-agency-os","linkedin":"https://linkedin.com/company/nextoriahub"}},"styling":{"latex":true},"navigation":{"global":{"anchors":[{"anchor":"Community","href":"https://nextoriahub.com/community","icon":"slack"},{"anchor":"Changelog","href":"https://nextoriahub.com/changelog","icon":"list"},{"anchor":"Status","href":"https://status.nextoriahub.com","icon":"circle-check"}]},"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"nextoriaagency","hasAudioNarration":false,"actualSubdomain":"nextoriaagency","customDomains":["docs.nextoriahub.tech"],"gitSource":{"type":"github","owner":"aymansdk","repo":"nexthub-agency-os","deployBranch":"main","contentDirectory":"docs","isPrivate":true,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6a21dcc329c7042dd5f5dcad","collectionId":"5a53073d-8098-4152-aa07-a3fbf84e1711","schemaVersion":"v2"},"entitlements":{},"buildId":"6a21dcc329c7042dd5f5dcad:success","clientVersion":"0.0.4021","searchFilterCounts":[{"language":"default","tag":"Documentation","count":24},{"language":"default","tag":"Integrations","count":10},{"language":"default","tag":"API Reference","count":8},{"language":"default","tag":"Features","count":8},{"language":"default","tag":"Workflow","count":6},{"language":"default","tag":"Get Started","count":5},{"language":"default","tag":"Deployment","count":3},{"language":"default","tag":"Pricing \u0026 Plans","count":2}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"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":"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":"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":"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":[],"page":{"pagePath":"deployment/self-hosted","slug":"/deployment/self-hosted","pageMetadata":{"title":"Self-Hosted Deployment","description":"Run Nextoria Hub on your own infrastructure using Docker or Kubernetes.","href":"/deployment/self-hosted"},"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: \"Run Nextoria Hub on your own infrastructure using Docker or Kubernetes.\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,code:`code`,p:`p`,pre:`pre`,span:`span`,strong:`strong`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,..._provideComponents(),...props.components},{CodeBlock,Heading,Table,Warning}=_components;if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Table)_missingMdxReference(`Table`,true);if(!Warning)_missingMdxReference(`Warning`,true);return _jsxs(_Fragment,{children:[_jsx(Warning,{children:_jsxs(_components.p,{children:[`Self-hosted deployment is available on the `,_jsx(_components.strong,{children:`Scale plan`}),` only. A valid\nScale-tier license key is required to run the self-hosted build.`]})}),`\n`,_jsx(Heading,{level:`2`,id:`requirements`,children:`Requirements`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Component`}),_jsx(_components.th,{children:`Minimum`}),_jsx(_components.th,{children:`Recommended`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`CPU`}),_jsx(_components.td,{children:`2 vCPU`}),_jsx(_components.td,{children:`4 vCPU`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`RAM`}),_jsx(_components.td,{\"data-numeric\":`true`,children:`4 GB`}),_jsx(_components.td,{\"data-numeric\":`true`,children:`8 GB`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Storage`}),_jsx(_components.td,{children:`50 GB SSD`}),_jsx(_components.td,{children:`200 GB SSD`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`OS`}),_jsx(_components.td,{children:`Ubuntu 22.04 LTS`}),_jsx(_components.td,{children:`Ubuntu 22.04 LTS`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Docker`}),_jsx(_components.td,{children:`24.x`}),_jsx(_components.td,{children:`24.x`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Docker Compose`}),_jsx(_components.td,{children:`2.x`}),_jsx(_components.td,{children:`2.x`})]})]})]}),`\n`,_jsx(Heading,{level:`2`,id:`quick-start-with-docker-compose`,children:`Quick Start with Docker Compose`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`12`,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:`12`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`# Download the Nextoria Hub self-hosted bundle`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`curl`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -fsSL`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` https://nextoriahub.com/install.sh`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` |`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:` bash`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`# Navigate to the directory`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#DCDCAA`},children:`cd`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` nextoriahub`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`# Copy and configure the environment file`})}),`\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`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`nano`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` .env`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`# Start all services`})}),`\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:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` up`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -d`})]}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`The application will be available at `,_jsx(_components.code,{children:`http://your-server-ip:3000`}),`.`]}),`\n`,_jsx(Heading,{level:`2`,id:`environment-configuration`,children:`Environment Configuration`}),`\n`,_jsxs(_components.p,{children:[`Edit the `,_jsx(_components.code,{children:`.env`}),` file with your configuration:`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`32`,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:`32`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`# Application`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`APP_URL=https://app.youragency.com`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`LICENSE_KEY=YOUR_SCALE_LICENSE_KEY`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`# Database (PostgreSQL)`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`DATABASE_URL=postgresql://user:password@db:5432/nextoriahub`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`# Authentication`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`JWT_SECRET=your-256-bit-secret`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`SESSION_SECRET=another-256-bit-secret`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`# Stripe`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`STRIPE_SECRET_KEY=sk_live_...`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`STRIPE_WEBHOOK_SECRET=whsec_...`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`# Stream Chat`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`STREAM_API_KEY=...`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`STREAM_API_SECRET=...`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`# File Storage (S3-compatible)`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`S3_BUCKET=nextoriahub-files`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`S3_REGION=us-east-1`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`S3_ACCESS_KEY_ID=...`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`S3_SECRET_ACCESS_KEY=...`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`# Email (SMTP)`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`SMTP_HOST=smtp.yourmailprovider.com`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`SMTP_PORT=587`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`SMTP_USER=notifications@youragency.com`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`SMTP_PASSWORD=...`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`EMAIL_FROM=Nextoria Hub \u003cno-reply@youragency.com>`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsx(Heading,{level:`2`,id:`docker-compose-services`,children:`Docker Compose Services`}),`\n`,_jsx(_components.p,{children:`The self-hosted bundle runs the following services:`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Service`}),_jsx(_components.th,{children:`Description`}),_jsx(_components.th,{children:`Port`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`app`})}),_jsx(_components.td,{children:`Nextoria Hub web application`}),_jsx(_components.td,{\"data-numeric\":`true`,children:`3000`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`api`})}),_jsx(_components.td,{children:`Backend API server`}),_jsx(_components.td,{\"data-numeric\":`true`,children:`4000`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`db`})}),_jsx(_components.td,{children:`PostgreSQL 16 database`}),_jsx(_components.td,{\"data-numeric\":`true`,children:`5432`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`redis`})}),_jsx(_components.td,{children:`Redis for sessions and queues`}),_jsx(_components.td,{\"data-numeric\":`true`,children:`6379`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`minio`})}),_jsx(_components.td,{children:`S3-compatible file storage (if not using AWS S3)`}),_jsx(_components.td,{\"data-numeric\":`true`,children:`9000`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`nginx`})}),_jsx(_components.td,{children:`Reverse proxy + SSL termination`}),_jsx(_components.td,{\"data-numeric\":`true`,children:`80, 443`})]})]})]}),`\n`,_jsx(Heading,{level:`2`,id:`ssl-configuration`,children:`SSL Configuration`}),`\n`,_jsxs(_components.p,{children:[`The included `,_jsx(_components.code,{children:`nginx`}),` service handles SSL termination via Let’s Encrypt (Certbot):`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`7`,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:`7`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`# Issue SSL certificate for your domain`})}),`\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:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` run`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --rm`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` certbot`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` certonly`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --webroot`}),_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:` --webroot-path=/var/www/certbot`}),_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:` -d`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` app.youragency.com`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`# Restart nginx to load the certificate`})}),`\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:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` restart`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` nginx`})]}),`\n`]})})}),`\n`,_jsx(Heading,{level:`2`,id:`updates`,children:`Updates`}),`\n`,_jsx(_components.p,{children:`Pull and apply updates:`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`3`,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:`3`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`docker`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` compose`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` 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:`#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:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` exec`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` api`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` bun`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` db:migrate`})]}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`We recommend subscribing to `,_jsx(_components.a,{href:`https://nextoriahub.com/changelog`,children:`nextoriahub.com/changelog`}),` for release notifications.`]}),`\n`,_jsx(Heading,{level:`2`,id:`backups`,children:`Backups`}),`\n`,_jsx(_components.p,{children:`Automate database backups with a cron job:`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`2`,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:`2`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`# Add to crontab: crontab -e`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`0`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:` 2`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` *`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` *`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` *`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` docker`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` compose`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` exec`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -T`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` db`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` pg_dump`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -U`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` postgres`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` nextoriahub`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` |`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:` gzip`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` >`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` /backups/nextoriahub-`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`$(`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`date`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` +%Y%m%d`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`)`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`.sql.gz`})]}),`\n`]})})}),`\n`,_jsx(_components.p,{children:`Retain at least 30 days of daily backups and store them off-server (S3, Backblaze, etc.).`}),`\n`,_jsx(Heading,{level:`2`,id:`kubernetes`,children:`Kubernetes`}),`\n`,_jsx(_components.p,{children:`Helm charts for Kubernetes deployment are available for Scale customers. Contact your dedicated Success Manager for the Helm chart package and deployment guidance.`})]})}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":"Self-Hosted Deployment","description":"Run Nextoria Hub on your own infrastructure using Docker or Kubernetes.","href":"/deployment/self-hosted"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Requirements","slug":"requirements","depth":2,"children":[]},{"title":"Quick Start with Docker Compose","slug":"quick-start-with-docker-compose","depth":2,"children":[]},{"title":"Environment Configuration","slug":"environment-configuration","depth":2,"children":[]},{"title":"Docker Compose Services","slug":"docker-compose-services","depth":2,"children":[]},{"title":"SSL Configuration","slug":"ssl-configuration","depth":2,"children":[]},{"title":"Updates","slug":"updates","depth":2,"children":[]},{"title":"Backups","slug":"backups","depth":2,"children":[]},{"title":"Kubernetes","slug":"kubernetes","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":[],"subdomain":"nextoriaagency","siteName":"Nextoria Hub","title":"Self-Hosted Deployment - Nextoria Hub","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-04-09T13:29:10.652Z","originalFileLocation":"deployment/self-hosted.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=\"Run Nextoria Hub on your own infrastructure using Docker or Kubernetes.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Nextoria Hub\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/nextoriaagency/q7juw7GcLGJcPjOQ/_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/nextoriaagency/q7juw7GcLGJcPjOQ/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/nextoriaagency/q7juw7GcLGJcPjOQ/_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/nextoriaagency/q7juw7GcLGJcPjOQ/_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/nextoriaagency/q7juw7GcLGJcPjOQ/_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/nextoriaagency/q7juw7GcLGJcPjOQ/_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/nextoriaagency/q7juw7GcLGJcPjOQ/_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/nextoriaagency/q7juw7GcLGJcPjOQ/_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/nextoriaagency/q7juw7GcLGJcPjOQ/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Self-Hosted Deployment - Nextoria Hub\">\u003cmeta data-mint-head property=\"og:description\" content=\"Run Nextoria Hub on your own infrastructure using Docker or Kubernetes.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Nextoria Hub\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.nextoriahub.tech/deployment/self-hosted\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://nextoriaagency.mintlify.app/_mintlify/api/og/v2?division=Deployment\u0026amp;title=Self-Hosted+Deployment\u0026amp;description=Run+Nextoria+Hub+on+your+own+infrastructure+using+Docker+or+Kubernetes.\u0026amp;theme=ad1f99ffdf50e1081e7143f2\u0026amp;signature=073022b2027f3c614ab9ddf68b1f4bde55b7f91d233ab4dda7bc630a292fe953\">\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=\"Self-Hosted Deployment - Nextoria Hub\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Run Nextoria Hub on your own infrastructure using Docker or Kubernetes.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://nextoriaagency.mintlify.app/_mintlify/api/og/v2?division=Deployment\u0026amp;title=Self-Hosted+Deployment\u0026amp;description=Run+Nextoria+Hub+on+your+own+infrastructure+using+Docker+or+Kubernetes.\u0026amp;theme=ad1f99ffdf50e1081e7143f2\u0026amp;signature=073022b2027f3c614ab9ddf68b1f4bde55b7f91d233ab4dda7bc630a292fe953\">\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/nextoriaagency/q7juw7GcLGJcPjOQ/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Nextoria Hub\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#7C3AED\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.nextoriahub.tech/deployment/self-hosted\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/deployment/self-hosted.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.nextoriahub.tech/#organization\",\"name\":\"Nextoria Hub\",\"url\":\"https://docs.nextoriahub.tech\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintlify.s3.us-west-1.amazonaws.com/nextoriaagency/logo/light.svg\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.nextoriahub.tech#website\",\"name\":\"Nextoria Hub\",\"url\":\"https://docs.nextoriahub.tech\",\"publisher\":{\"@id\":\"https://docs.nextoriahub.tech/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.nextoriahub.tech/deployment/self-hosted#webpage\",\"url\":\"https://docs.nextoriahub.tech/deployment/self-hosted\",\"name\":\"Self-Hosted Deployment\",\"description\":\"Run Nextoria Hub on your own infrastructure using Docker or Kubernetes.\",\"dateModified\":\"2026-04-09T13:29:10.652Z\",\"isPartOf\":{\"@id\":\"https://docs.nextoriahub.tech#website\"},\"breadcrumb\":{\"@id\":\"https://docs.nextoriahub.tech/deployment/self-hosted#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.nextoriahub.tech/deployment/self-hosted#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Deployment\",\"item\":\"https://docs.nextoriahub.tech/deployment/overview\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Self-Hosted Deployment\",\"item\":\"https://docs.nextoriahub.tech/deployment/self-hosted\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.nextoriahub.tech/deployment/self-hosted#article\",\"headline\":\"Self-Hosted Deployment\",\"name\":\"Self-Hosted Deployment\",\"description\":\"Run Nextoria Hub on your own infrastructure using Docker or Kubernetes.\",\"url\":\"https://docs.nextoriahub.tech/deployment/self-hosted\",\"mainEntityOfPage\":{\"@id\":\"https://docs.nextoriahub.tech/deployment/self-hosted#webpage\"},\"dateModified\":\"2026-04-09T13:29:10.652Z\",\"publisher\":{\"@id\":\"https://docs.nextoriahub.tech/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.nextoriahub.tech#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Nextoria Hub\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Nextoria Hub","nav":{"global":{"anchors":[{"anchor":"Community","href":"https://nextoriahub.com/community","icon":"slack"},{"anchor":"Changelog","href":"https://nextoriahub.com/changelog","icon":"list"},{"anchor":"Status","href":"https://status.nextoriahub.com","icon":"circle-check"}]},"tabs":[{"tab":"Documentation","groups":[{"group":"Get Started","pages":[{"title":"Introduction","href":"/introduction"},{"title":"Quickstart","href":"/quickstart"},{"title":"Platform Overview","href":"/getting-started/overview"},{"title":"Installation","href":"/getting-started/installation"},{"title":"Workspace Setup","href":"/getting-started/workspace-setup"}]},{"group":"Features","pages":[{"title":"Features Overview","href":"/features/overview"},{"title":"Project \u0026 Task Management","href":"/features/project-management"},{"title":"Client Portal","href":"/features/client-portal"},{"title":"Team Communication","href":"/features/team-communication"},{"title":"Invoicing \u0026 Billing","href":"/features/invoicing-billing"},{"title":"File Management","href":"/features/file-management"},{"title":"Content Calendar","href":"/features/content-calendar"},{"title":"Analytics","href":"/features/analytics"}]},{"group":"Workflow","pages":[{"title":"Agency Workflow","href":"/workflow/overview"},{"title":"Proposal Stage","href":"/workflow/proposal"},{"title":"Onboarding Stage","href":"/workflow/onboarding"},{"title":"Execution Stage","href":"/workflow/execution"},{"title":"Delivery Stage","href":"/workflow/delivery"},{"title":"Invoicing Stage","href":"/workflow/invoicing"}]},{"group":"Pricing \u0026 Plans","pages":[{"title":"Plans \u0026 Pricing","href":"/pricing/plans"},{"title":"Pricing FAQ","href":"/pricing/faq"}]},{"group":"Deployment","pages":[{"title":"Deployment Overview","description":"Deploy Nextoria Hub on Vercel, other cloud platforms, or self-hosted on your own infrastructure.","href":"/deployment/overview"},{"title":"Self-Hosted Deployment","href":"/deployment/self-hosted"},{"title":"Custom Domain Setup","description":"Configure your own domain for the Nextoria Hub dashboard and client portal.","href":"/deployment/custom-domain"}]}]},{"tab":"Integrations","pages":[{"title":"Integrations","href":"/integrations/overview"}]},{"tab":"API Reference","pages":[{"title":"API Reference","href":"/api-reference/authentication"}]}]},"title":"Self-Hosted Deployment - Nextoria Hub","buildId":"dpl_EnxDqhjaNc9a8MVa833TGULPd9uJ","deploymentId":"dpl_EnxDqhjaNc9a8MVa833TGULPd9uJ","dynamics":[],"chunks":[]}