[{"data":1,"prerenderedAt":997},["ShallowReactive",2],{"navigation":3,"\u002Fdocs\u002Fself-hosting":81,"\u002Fdocs\u002Fself-hosting-surround":992},[4,77],{"title":5,"_path":6,"children":7,"icon":76},"Docs","\u002Fdocs",[8,23,41,51,63,69],{"title":9,"_path":10,"children":11},"Getting Started","\u002Fdocs\u002Fgetting-started",[12,14,17,20],{"title":13,"_path":10},"Introduction to Datafuse",{"title":15,"_path":16},"Installation Guide","\u002Fdocs\u002Fgetting-started\u002Finstallation",{"title":18,"_path":19},"5-Minute Quickstart","\u002Fdocs\u002Fgetting-started\u002Fquickstart",{"title":21,"_path":22},"5-Minute Quickstart with curl","\u002Fdocs\u002Fgetting-started\u002Fcurl",{"title":24,"_path":25,"children":26},"Core Concepts","\u002Fdocs\u002Fcore-concepts",[27,29,32,35,38],{"title":28,"_path":25},"Conceptual Landscape",{"title":30,"_path":31},"Adding Custom Integrations","\u002Fdocs\u002Fcore-concepts\u002Fcustom-integrations",{"title":33,"_path":34},"Managed Authentication","\u002Fdocs\u002Fcore-concepts\u002Fauthentication",{"title":36,"_path":37},"Bi-Directional Triggers","\u002Fdocs\u002Fcore-concepts\u002Ftriggers",{"title":39,"_path":40},"Observability & Auditing","\u002Fdocs\u002Fcore-concepts\u002Fobservability",{"title":42,"_path":43,"children":44},"Model Context Protocol","\u002Fdocs\u002Fmcp",[45,48],{"title":46,"_path":47},"Introduction to MCP","\u002Fdocs\u002Fmcp\u002Fintroduction",{"title":49,"_path":50},"Operating MCP Servers","\u002Fdocs\u002Fmcp\u002Fmcp-servers",{"title":52,"_path":53,"children":54},"Client SDKs","\u002Fdocs\u002Fsdks",[55,57,60],{"title":56,"_path":53},"Client Overview",{"title":58,"_path":59},"Python Client Guide","\u002Fdocs\u002Fsdks\u002Fpython",{"title":61,"_path":62},"TypeScript Client Guide","\u002Fdocs\u002Fsdks\u002Ftypescript",{"title":64,"_path":65,"children":66},"Self-Hosting & VPC","\u002Fdocs\u002Fself-hosting",[67],{"title":68,"_path":65},"Self-Hosting Guide",{"title":70,"_path":71,"children":72},"Comparisons","\u002Fdocs\u002Fcomparisons",[73],{"title":74,"_path":75},"Datafuse vs. Composio","\u002Fdocs\u002Fcomparisons\u002Fcomposio","i-heroicons-book-open",{"title":78,"_path":79,"icon":80},"Pricing","\u002Fpricing","i-heroicons-credit-card",{"_path":65,"_dir":82,"_draft":84,"_partial":84,"_locale":85,"title":68,"description":86,"body":87,"_type":986,"_id":987,"_source":988,"_file":989,"_stem":990,"_extension":991},{"_path":83,"title":64},"\u002Fdocs\u002Fself-hosting\u002F_dir",false,"","Deploy the Datafuse platform completely inside your private virtual cloud (VPC) infrastructure.",{"type":88,"children":89,"toc":978},"root",[90,106,124,128,135,140,278,281,287,292,305,766,773,778,833,836,842,847,880,885,914,917,923,928,972],{"type":91,"tag":92,"props":93,"children":94},"element","p",{},[95,98,104],{"type":96,"value":97},"text","For enterprise organizations requiring strict data compliance, SOC-2\u002FHIPAA boundaries, and private network isolates, Datafuse offers a comprehensive ",{"type":91,"tag":99,"props":100,"children":101},"strong",{},[102],{"type":96,"value":103},"Self-Hosted VPC Option",{"type":96,"value":105},".",{"type":91,"tag":92,"props":107,"children":108},{},[109,111,116,118,123],{"type":96,"value":110},"This guide outlines how to deploy the FastAPI gateway services, OAuth proxies, and secure credential vaults completely within your own secure perimeter using ",{"type":91,"tag":99,"props":112,"children":113},{},[114],{"type":96,"value":115},"Docker Compose",{"type":96,"value":117}," or ",{"type":91,"tag":99,"props":119,"children":120},{},[121],{"type":96,"value":122},"K3s",{"type":96,"value":105},{"type":91,"tag":125,"props":126,"children":127},"hr",{},[],{"type":91,"tag":129,"props":130,"children":132},"h2",{"id":131},"vpc-deployment-architecture",[133],{"type":96,"value":134},"VPC Deployment Architecture",{"type":91,"tag":92,"props":136,"children":137},{},[138],{"type":96,"value":139},"Deploying self-hosted Datafuse wraps all platform services inside your private network, ensuring that no sensitive API payloads, transaction data, or client keys route through third-party servers.",{"type":91,"tag":141,"props":142,"children":145},"pre",{"className":143,"code":144,"language":96,"meta":85,"style":85},"language-text shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","               ┌─────────────────────────────────────────────────┐\n               │              YOUR PRIVATE VPC                   │\n               │                                                 │\n   LLM Client ─┼─> [ Private Load Balancer ]                     │\n   (Vercel\u002F    │            │                                    │\n   Claude Code)│            ▼                                    │\n               │   [ Datafuse Gateway API ] \u003C──> [ Redis Cache ] │\n               │            │                                    │\n               │            ▼                                    │\n               │   [ Encrypted PostgreSQL ]                      │\n               └────────────┬────────────────────────────────────┘\n                            │ (Secure Bound Outbound Requests)\n                            ▼\n               Slack \u002F GitHub \u002F Jira APIs\n",[146],{"type":91,"tag":147,"props":148,"children":149},"code",{"__ignoreMap":85},[150,161,170,179,188,197,206,215,224,233,242,251,260,269],{"type":91,"tag":151,"props":152,"children":155},"span",{"class":153,"line":154},"line",1,[156],{"type":91,"tag":151,"props":157,"children":158},{},[159],{"type":96,"value":160},"               ┌─────────────────────────────────────────────────┐\n",{"type":91,"tag":151,"props":162,"children":164},{"class":153,"line":163},2,[165],{"type":91,"tag":151,"props":166,"children":167},{},[168],{"type":96,"value":169},"               │              YOUR PRIVATE VPC                   │\n",{"type":91,"tag":151,"props":171,"children":173},{"class":153,"line":172},3,[174],{"type":91,"tag":151,"props":175,"children":176},{},[177],{"type":96,"value":178},"               │                                                 │\n",{"type":91,"tag":151,"props":180,"children":182},{"class":153,"line":181},4,[183],{"type":91,"tag":151,"props":184,"children":185},{},[186],{"type":96,"value":187},"   LLM Client ─┼─> [ Private Load Balancer ]                     │\n",{"type":91,"tag":151,"props":189,"children":191},{"class":153,"line":190},5,[192],{"type":91,"tag":151,"props":193,"children":194},{},[195],{"type":96,"value":196},"   (Vercel\u002F    │            │                                    │\n",{"type":91,"tag":151,"props":198,"children":200},{"class":153,"line":199},6,[201],{"type":91,"tag":151,"props":202,"children":203},{},[204],{"type":96,"value":205},"   Claude Code)│            ▼                                    │\n",{"type":91,"tag":151,"props":207,"children":209},{"class":153,"line":208},7,[210],{"type":91,"tag":151,"props":211,"children":212},{},[213],{"type":96,"value":214},"               │   [ Datafuse Gateway API ] \u003C──> [ Redis Cache ] │\n",{"type":91,"tag":151,"props":216,"children":218},{"class":153,"line":217},8,[219],{"type":91,"tag":151,"props":220,"children":221},{},[222],{"type":96,"value":223},"               │            │                                    │\n",{"type":91,"tag":151,"props":225,"children":227},{"class":153,"line":226},9,[228],{"type":91,"tag":151,"props":229,"children":230},{},[231],{"type":96,"value":232},"               │            ▼                                    │\n",{"type":91,"tag":151,"props":234,"children":236},{"class":153,"line":235},10,[237],{"type":91,"tag":151,"props":238,"children":239},{},[240],{"type":96,"value":241},"               │   [ Encrypted PostgreSQL ]                      │\n",{"type":91,"tag":151,"props":243,"children":245},{"class":153,"line":244},11,[246],{"type":91,"tag":151,"props":247,"children":248},{},[249],{"type":96,"value":250},"               └────────────┬────────────────────────────────────┘\n",{"type":91,"tag":151,"props":252,"children":254},{"class":153,"line":253},12,[255],{"type":91,"tag":151,"props":256,"children":257},{},[258],{"type":96,"value":259},"                            │ (Secure Bound Outbound Requests)\n",{"type":91,"tag":151,"props":261,"children":263},{"class":153,"line":262},13,[264],{"type":91,"tag":151,"props":265,"children":266},{},[267],{"type":96,"value":268},"                            ▼\n",{"type":91,"tag":151,"props":270,"children":272},{"class":153,"line":271},14,[273],{"type":91,"tag":151,"props":274,"children":275},{},[276],{"type":96,"value":277},"               Slack \u002F GitHub \u002F Jira APIs\n",{"type":91,"tag":125,"props":279,"children":280},{},[],{"type":91,"tag":129,"props":282,"children":284},{"id":283},"docker-compose-setup",[285],{"type":96,"value":286},"Docker Compose Setup",{"type":91,"tag":92,"props":288,"children":289},{},[290],{"type":96,"value":291},"For quick local testing or single-instance cloud servers, deploy Datafuse using Docker Compose.",{"type":91,"tag":92,"props":293,"children":294},{},[295,297,303],{"type":96,"value":296},"Create a ",{"type":91,"tag":147,"props":298,"children":300},{"className":299},[],[301],{"type":96,"value":302},"docker-compose.yml",{"type":96,"value":304}," file in your hosting environment:",{"type":91,"tag":141,"props":306,"children":310},{"className":307,"code":308,"language":309,"meta":85,"style":85},"language-yaml shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","version: '3.8'\n\nservices:\n  datafuse-api:\n    image: datafuse\u002Fplatform-api:latest\n    ports:\n      - \"8080:8080\"\n    environment:\n      - PORT=8080\n      - DATABASE_URL=postgresql+asyncpg:\u002F\u002Fpostgres:secretpassword@db:5432\u002Fdatafuse\n      - REDIS_URL=redis:\u002F\u002Fredis:6379\u002F0\n      - SECRET_KEY=your_global_encryption_secret_key_here\n      - CORS_ORIGINS=http:\u002F\u002Flocalhost:3000,http:\u002F\u002F127.0.0.1:3000\n    depends_on:\n      - db\n      - redis\n\n  db:\n    image: postgres:15-alpine\n    environment:\n      - POSTGRES_USER=postgres\n      - POSTGRES_PASSWORD=secretpassword\n      - POSTGRES_DB=datafuse\n    volumes:\n      - pgdata:\u002Fvar\u002Flib\u002Fpostgresql\u002Fdata\n\n  redis:\n    image: redis:7-alpine\n    volumes:\n      - redisdata:\u002Fdata\n\nvolumes:\n  pgdata:\n  redisdata:\n","yaml",[311],{"type":91,"tag":147,"props":312,"children":313},{"__ignoreMap":85},[314,345,354,367,379,396,408,431,443,455,467,479,491,503,515,528,541,549,562,579,591,604,617,630,643,656,664,677,694,706,719,727,740,753],{"type":91,"tag":151,"props":315,"children":316},{"class":153,"line":154},[317,323,329,334,340],{"type":91,"tag":151,"props":318,"children":320},{"style":319},"--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178",[321],{"type":96,"value":322},"version",{"type":91,"tag":151,"props":324,"children":326},{"style":325},"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF",[327],{"type":96,"value":328},":",{"type":91,"tag":151,"props":330,"children":331},{"style":325},[332],{"type":96,"value":333}," '",{"type":91,"tag":151,"props":335,"children":337},{"style":336},"--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D",[338],{"type":96,"value":339},"3.8",{"type":91,"tag":151,"props":341,"children":342},{"style":325},[343],{"type":96,"value":344},"'\n",{"type":91,"tag":151,"props":346,"children":347},{"class":153,"line":163},[348],{"type":91,"tag":151,"props":349,"children":351},{"emptyLinePlaceholder":350},true,[352],{"type":96,"value":353},"\n",{"type":91,"tag":151,"props":355,"children":356},{"class":153,"line":172},[357,362],{"type":91,"tag":151,"props":358,"children":359},{"style":319},[360],{"type":96,"value":361},"services",{"type":91,"tag":151,"props":363,"children":364},{"style":325},[365],{"type":96,"value":366},":\n",{"type":91,"tag":151,"props":368,"children":369},{"class":153,"line":181},[370,375],{"type":91,"tag":151,"props":371,"children":372},{"style":319},[373],{"type":96,"value":374},"  datafuse-api",{"type":91,"tag":151,"props":376,"children":377},{"style":325},[378],{"type":96,"value":366},{"type":91,"tag":151,"props":380,"children":381},{"class":153,"line":190},[382,387,391],{"type":91,"tag":151,"props":383,"children":384},{"style":319},[385],{"type":96,"value":386},"    image",{"type":91,"tag":151,"props":388,"children":389},{"style":325},[390],{"type":96,"value":328},{"type":91,"tag":151,"props":392,"children":393},{"style":336},[394],{"type":96,"value":395}," datafuse\u002Fplatform-api:latest\n",{"type":91,"tag":151,"props":397,"children":398},{"class":153,"line":199},[399,404],{"type":91,"tag":151,"props":400,"children":401},{"style":319},[402],{"type":96,"value":403},"    ports",{"type":91,"tag":151,"props":405,"children":406},{"style":325},[407],{"type":96,"value":366},{"type":91,"tag":151,"props":409,"children":410},{"class":153,"line":208},[411,416,421,426],{"type":91,"tag":151,"props":412,"children":413},{"style":325},[414],{"type":96,"value":415},"      -",{"type":91,"tag":151,"props":417,"children":418},{"style":325},[419],{"type":96,"value":420}," \"",{"type":91,"tag":151,"props":422,"children":423},{"style":336},[424],{"type":96,"value":425},"8080:8080",{"type":91,"tag":151,"props":427,"children":428},{"style":325},[429],{"type":96,"value":430},"\"\n",{"type":91,"tag":151,"props":432,"children":433},{"class":153,"line":217},[434,439],{"type":91,"tag":151,"props":435,"children":436},{"style":319},[437],{"type":96,"value":438},"    environment",{"type":91,"tag":151,"props":440,"children":441},{"style":325},[442],{"type":96,"value":366},{"type":91,"tag":151,"props":444,"children":445},{"class":153,"line":226},[446,450],{"type":91,"tag":151,"props":447,"children":448},{"style":325},[449],{"type":96,"value":415},{"type":91,"tag":151,"props":451,"children":452},{"style":336},[453],{"type":96,"value":454}," PORT=8080\n",{"type":91,"tag":151,"props":456,"children":457},{"class":153,"line":235},[458,462],{"type":91,"tag":151,"props":459,"children":460},{"style":325},[461],{"type":96,"value":415},{"type":91,"tag":151,"props":463,"children":464},{"style":336},[465],{"type":96,"value":466}," DATABASE_URL=postgresql+asyncpg:\u002F\u002Fpostgres:secretpassword@db:5432\u002Fdatafuse\n",{"type":91,"tag":151,"props":468,"children":469},{"class":153,"line":244},[470,474],{"type":91,"tag":151,"props":471,"children":472},{"style":325},[473],{"type":96,"value":415},{"type":91,"tag":151,"props":475,"children":476},{"style":336},[477],{"type":96,"value":478}," REDIS_URL=redis:\u002F\u002Fredis:6379\u002F0\n",{"type":91,"tag":151,"props":480,"children":481},{"class":153,"line":253},[482,486],{"type":91,"tag":151,"props":483,"children":484},{"style":325},[485],{"type":96,"value":415},{"type":91,"tag":151,"props":487,"children":488},{"style":336},[489],{"type":96,"value":490}," SECRET_KEY=your_global_encryption_secret_key_here\n",{"type":91,"tag":151,"props":492,"children":493},{"class":153,"line":262},[494,498],{"type":91,"tag":151,"props":495,"children":496},{"style":325},[497],{"type":96,"value":415},{"type":91,"tag":151,"props":499,"children":500},{"style":336},[501],{"type":96,"value":502}," CORS_ORIGINS=http:\u002F\u002Flocalhost:3000,http:\u002F\u002F127.0.0.1:3000\n",{"type":91,"tag":151,"props":504,"children":505},{"class":153,"line":271},[506,511],{"type":91,"tag":151,"props":507,"children":508},{"style":319},[509],{"type":96,"value":510},"    depends_on",{"type":91,"tag":151,"props":512,"children":513},{"style":325},[514],{"type":96,"value":366},{"type":91,"tag":151,"props":516,"children":518},{"class":153,"line":517},15,[519,523],{"type":91,"tag":151,"props":520,"children":521},{"style":325},[522],{"type":96,"value":415},{"type":91,"tag":151,"props":524,"children":525},{"style":336},[526],{"type":96,"value":527}," db\n",{"type":91,"tag":151,"props":529,"children":531},{"class":153,"line":530},16,[532,536],{"type":91,"tag":151,"props":533,"children":534},{"style":325},[535],{"type":96,"value":415},{"type":91,"tag":151,"props":537,"children":538},{"style":336},[539],{"type":96,"value":540}," redis\n",{"type":91,"tag":151,"props":542,"children":544},{"class":153,"line":543},17,[545],{"type":91,"tag":151,"props":546,"children":547},{"emptyLinePlaceholder":350},[548],{"type":96,"value":353},{"type":91,"tag":151,"props":550,"children":552},{"class":153,"line":551},18,[553,558],{"type":91,"tag":151,"props":554,"children":555},{"style":319},[556],{"type":96,"value":557},"  db",{"type":91,"tag":151,"props":559,"children":560},{"style":325},[561],{"type":96,"value":366},{"type":91,"tag":151,"props":563,"children":565},{"class":153,"line":564},19,[566,570,574],{"type":91,"tag":151,"props":567,"children":568},{"style":319},[569],{"type":96,"value":386},{"type":91,"tag":151,"props":571,"children":572},{"style":325},[573],{"type":96,"value":328},{"type":91,"tag":151,"props":575,"children":576},{"style":336},[577],{"type":96,"value":578}," postgres:15-alpine\n",{"type":91,"tag":151,"props":580,"children":582},{"class":153,"line":581},20,[583,587],{"type":91,"tag":151,"props":584,"children":585},{"style":319},[586],{"type":96,"value":438},{"type":91,"tag":151,"props":588,"children":589},{"style":325},[590],{"type":96,"value":366},{"type":91,"tag":151,"props":592,"children":594},{"class":153,"line":593},21,[595,599],{"type":91,"tag":151,"props":596,"children":597},{"style":325},[598],{"type":96,"value":415},{"type":91,"tag":151,"props":600,"children":601},{"style":336},[602],{"type":96,"value":603}," POSTGRES_USER=postgres\n",{"type":91,"tag":151,"props":605,"children":607},{"class":153,"line":606},22,[608,612],{"type":91,"tag":151,"props":609,"children":610},{"style":325},[611],{"type":96,"value":415},{"type":91,"tag":151,"props":613,"children":614},{"style":336},[615],{"type":96,"value":616}," POSTGRES_PASSWORD=secretpassword\n",{"type":91,"tag":151,"props":618,"children":620},{"class":153,"line":619},23,[621,625],{"type":91,"tag":151,"props":622,"children":623},{"style":325},[624],{"type":96,"value":415},{"type":91,"tag":151,"props":626,"children":627},{"style":336},[628],{"type":96,"value":629}," POSTGRES_DB=datafuse\n",{"type":91,"tag":151,"props":631,"children":633},{"class":153,"line":632},24,[634,639],{"type":91,"tag":151,"props":635,"children":636},{"style":319},[637],{"type":96,"value":638},"    volumes",{"type":91,"tag":151,"props":640,"children":641},{"style":325},[642],{"type":96,"value":366},{"type":91,"tag":151,"props":644,"children":646},{"class":153,"line":645},25,[647,651],{"type":91,"tag":151,"props":648,"children":649},{"style":325},[650],{"type":96,"value":415},{"type":91,"tag":151,"props":652,"children":653},{"style":336},[654],{"type":96,"value":655}," pgdata:\u002Fvar\u002Flib\u002Fpostgresql\u002Fdata\n",{"type":91,"tag":151,"props":657,"children":659},{"class":153,"line":658},26,[660],{"type":91,"tag":151,"props":661,"children":662},{"emptyLinePlaceholder":350},[663],{"type":96,"value":353},{"type":91,"tag":151,"props":665,"children":667},{"class":153,"line":666},27,[668,673],{"type":91,"tag":151,"props":669,"children":670},{"style":319},[671],{"type":96,"value":672},"  redis",{"type":91,"tag":151,"props":674,"children":675},{"style":325},[676],{"type":96,"value":366},{"type":91,"tag":151,"props":678,"children":680},{"class":153,"line":679},28,[681,685,689],{"type":91,"tag":151,"props":682,"children":683},{"style":319},[684],{"type":96,"value":386},{"type":91,"tag":151,"props":686,"children":687},{"style":325},[688],{"type":96,"value":328},{"type":91,"tag":151,"props":690,"children":691},{"style":336},[692],{"type":96,"value":693}," redis:7-alpine\n",{"type":91,"tag":151,"props":695,"children":697},{"class":153,"line":696},29,[698,702],{"type":91,"tag":151,"props":699,"children":700},{"style":319},[701],{"type":96,"value":638},{"type":91,"tag":151,"props":703,"children":704},{"style":325},[705],{"type":96,"value":366},{"type":91,"tag":151,"props":707,"children":709},{"class":153,"line":708},30,[710,714],{"type":91,"tag":151,"props":711,"children":712},{"style":325},[713],{"type":96,"value":415},{"type":91,"tag":151,"props":715,"children":716},{"style":336},[717],{"type":96,"value":718}," redisdata:\u002Fdata\n",{"type":91,"tag":151,"props":720,"children":722},{"class":153,"line":721},31,[723],{"type":91,"tag":151,"props":724,"children":725},{"emptyLinePlaceholder":350},[726],{"type":96,"value":353},{"type":91,"tag":151,"props":728,"children":730},{"class":153,"line":729},32,[731,736],{"type":91,"tag":151,"props":732,"children":733},{"style":319},[734],{"type":96,"value":735},"volumes",{"type":91,"tag":151,"props":737,"children":738},{"style":325},[739],{"type":96,"value":366},{"type":91,"tag":151,"props":741,"children":743},{"class":153,"line":742},33,[744,749],{"type":91,"tag":151,"props":745,"children":746},{"style":319},[747],{"type":96,"value":748},"  pgdata",{"type":91,"tag":151,"props":750,"children":751},{"style":325},[752],{"type":96,"value":366},{"type":91,"tag":151,"props":754,"children":756},{"class":153,"line":755},34,[757,762],{"type":91,"tag":151,"props":758,"children":759},{"style":319},[760],{"type":96,"value":761},"  redisdata",{"type":91,"tag":151,"props":763,"children":764},{"style":325},[765],{"type":96,"value":366},{"type":91,"tag":767,"props":768,"children":770},"h3",{"id":769},"environment-configuration-variables",[771],{"type":96,"value":772},"Environment Configuration Variables",{"type":91,"tag":92,"props":774,"children":775},{},[776],{"type":96,"value":777},"Ensure the following variables are configured in your container environments:",{"type":91,"tag":779,"props":780,"children":781},"ul",{},[782,797,819],{"type":91,"tag":783,"props":784,"children":785},"li",{},[786,795],{"type":91,"tag":99,"props":787,"children":788},{},[789],{"type":91,"tag":147,"props":790,"children":792},{"className":791},[],[793],{"type":96,"value":794},"SECRET_KEY",{"type":96,"value":796},": A secure cryptographic key used to encrypt access tokens inside the credentials vault database (never rotate this key post-deployment without backup procedures).",{"type":91,"tag":783,"props":798,"children":799},{},[800,809,811,817],{"type":91,"tag":99,"props":801,"children":802},{},[803],{"type":91,"tag":147,"props":804,"children":806},{"className":805},[],[807],{"type":96,"value":808},"DATABASE_URL",{"type":96,"value":810},": High-availability PostgreSQL connection string. Must support the ",{"type":91,"tag":147,"props":812,"children":814},{"className":813},[],[815],{"type":96,"value":816},"asyncpg",{"type":96,"value":818}," Python database driver.",{"type":91,"tag":783,"props":820,"children":821},{},[822,831],{"type":91,"tag":99,"props":823,"children":824},{},[825],{"type":91,"tag":147,"props":826,"children":828},{"className":827},[],[829],{"type":96,"value":830},"REDIS_URL",{"type":96,"value":832},": Caching and event broker address used for rate limiting and live log streaming.",{"type":91,"tag":125,"props":834,"children":835},{},[],{"type":91,"tag":129,"props":837,"children":839},{"id":838},"running-the-containers",[840],{"type":96,"value":841},"Running the Containers",{"type":91,"tag":92,"props":843,"children":844},{},[845],{"type":96,"value":846},"Deploy the services in background daemon mode:",{"type":91,"tag":141,"props":848,"children":852},{"className":849,"code":850,"language":851,"meta":85,"style":85},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","docker compose up -d\n","bash",[853],{"type":91,"tag":147,"props":854,"children":855},{"__ignoreMap":85},[856],{"type":91,"tag":151,"props":857,"children":858},{"class":153,"line":154},[859,865,870,875],{"type":91,"tag":151,"props":860,"children":862},{"style":861},"--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B",[863],{"type":96,"value":864},"docker",{"type":91,"tag":151,"props":866,"children":867},{"style":336},[868],{"type":96,"value":869}," compose",{"type":91,"tag":151,"props":871,"children":872},{"style":336},[873],{"type":96,"value":874}," up",{"type":91,"tag":151,"props":876,"children":877},{"style":336},[878],{"type":96,"value":879}," -d\n",{"type":91,"tag":92,"props":881,"children":882},{},[883],{"type":96,"value":884},"Verify that the platform health checks report operational success:",{"type":91,"tag":141,"props":886,"children":888},{"className":849,"code":887,"language":851,"meta":85,"style":85},"curl http:\u002F\u002Flocalhost:8080\u002Fhealth\n# Response: {\"status\": \"ok\"}\n",[889],{"type":91,"tag":147,"props":890,"children":891},{"__ignoreMap":85},[892,905],{"type":91,"tag":151,"props":893,"children":894},{"class":153,"line":154},[895,900],{"type":91,"tag":151,"props":896,"children":897},{"style":861},[898],{"type":96,"value":899},"curl",{"type":91,"tag":151,"props":901,"children":902},{"style":336},[903],{"type":96,"value":904}," http:\u002F\u002Flocalhost:8080\u002Fhealth\n",{"type":91,"tag":151,"props":906,"children":907},{"class":153,"line":163},[908],{"type":91,"tag":151,"props":909,"children":911},{"style":910},"--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic",[912],{"type":96,"value":913},"# Response: {\"status\": \"ok\"}\n",{"type":91,"tag":125,"props":915,"children":916},{},[],{"type":91,"tag":129,"props":918,"children":920},{"id":919},"production-security-checklist",[921],{"type":96,"value":922},"Production Security Checklist",{"type":91,"tag":92,"props":924,"children":925},{},[926],{"type":96,"value":927},"When deploying to a production enterprise VPC:",{"type":91,"tag":929,"props":930,"children":931},"ol",{},[932,942,952,962],{"type":91,"tag":783,"props":933,"children":934},{},[935,940],{"type":91,"tag":99,"props":936,"children":937},{},[938],{"type":96,"value":939},"Transport Encryption (HTTPS)",{"type":96,"value":941},": Terminate TLS\u002FSSL on your cloud load balancer (e.g. AWS ALB, Cloudflare, Nginx) so raw HTTP payloads are encrypted in transit.",{"type":91,"tag":783,"props":943,"children":944},{},[945,950],{"type":91,"tag":99,"props":946,"children":947},{},[948],{"type":96,"value":949},"Database Backups",{"type":96,"value":951},": Schedule regular automated snapshots of your PostgreSQL vault to avoid loss of connected user accounts.",{"type":91,"tag":783,"props":953,"children":954},{},[955,960],{"type":91,"tag":99,"props":956,"children":957},{},[958],{"type":96,"value":959},"Strict Security Groups",{"type":96,"value":961},": Restrict inbound security groups to only accept HTTP requests from your internal AI agent runners or authorized edge networks.",{"type":91,"tag":783,"props":963,"children":964},{},[965,970],{"type":91,"tag":99,"props":966,"children":967},{},[968],{"type":96,"value":969},"Zero-Retention Logging",{"type":96,"value":971},": Enable zero-retention logging configurations inside the FastAPI containers to prevent caching raw inputs on local storage nodes.",{"type":91,"tag":973,"props":974,"children":975},"style",{},[976],{"type":96,"value":977},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":85,"searchDepth":163,"depth":163,"links":979},[980,981,984,985],{"id":131,"depth":163,"text":134},{"id":283,"depth":163,"text":286,"children":982},[983],{"id":769,"depth":172,"text":772},{"id":838,"depth":163,"text":841},{"id":919,"depth":163,"text":922},"markdown","content:1.docs:5.self-hosting:1.index.md","content","1.docs\u002F5.self-hosting\u002F1.index.md","1.docs\u002F5.self-hosting\u002F1.index","md",[993,995],{"_path":62,"title":61,"description":994},"Build scalable TypeScript workflows against the Datafuse v1 integration routes.",{"_path":75,"title":74,"description":996},"Learn why engineering teams choose Datafuse for their AI agent integrations over Composio.",1780069615257]